diff --git a/.github/workflows/storage-layout.yaml b/.github/workflows/storage-layout.yaml new file mode 100644 index 000000000..c126598c7 --- /dev/null +++ b/.github/workflows/storage-layout.yaml @@ -0,0 +1,59 @@ +name: Storage Layout Validation + +permissions: + contents: read + +on: + pull_request: + paths: + - 'synd-contracts/src/**/*.sol' + - 'synd-contracts/foundry.toml' + - 'synd-contracts/remappings.txt' + push: + branches: [main] + paths: + - 'synd-contracts/src/**/*.sol' + - 'synd-contracts/foundry.toml' + - 'synd-contracts/remappings.txt' + +env: + FOUNDRY_PROFILE: default + FOUNDRY_DISABLE_NIGHTLY_WARNING: true + +jobs: + storage-layout-validation: + permissions: + contents: read + pull-requests: write + runs-on: ubuntu-latest + defaults: + run: + working-directory: synd-contracts + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + submodules: recursive + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly + + - name: Install Foundry dependencies + run: forge install + + - name: Validate UUPS storage layouts + run: | + echo "🔍 Validating UUPS upgradeable contracts use namespaced storage..." + echo "" + + # Build contracts + forge build + + # Run storage validation script + chmod +x scripts/check-uups-storage.sh + ./scripts/check-uups-storage.sh + diff --git a/.gitignore b/.gitignore index b9fae79a3..4d961f6d5 100644 --- a/.gitignore +++ b/.gitignore @@ -78,6 +78,7 @@ synd-contracts/.claude/settings.local.json # contract bindings generated artifact synd-contracts/soljson-latest.js + ./bin *.db diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 910c2c6ee..9c0dcd910 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -65,3 +65,11 @@ repos: language: system types: [cargo] pass_filenames: false + - id: storage-layout-update + name: Update storage layout baseline + entry: synd-contracts/scripts/storage-checks/update-baseline.sh + language: script + files: 'synd-contracts/src/.*\.sol$' + pass_filenames: false + always_run: false + stages: [pre-commit] diff --git a/create-chain/Makefile b/create-chain/Makefile index 82f2684b0..823248483 100644 --- a/create-chain/Makefile +++ b/create-chain/Makefile @@ -28,15 +28,7 @@ generate-contract-abis: @echo "Generating RequireAndModule..." @cd ../synd-contracts && \ echo "export const requireAndModuleABI = $$(forge inspect src/requirement-modules/RequireAndModule.sol:RequireAndModule abi --json) as const" > ../create-chain/src/abi/synd/RequireAndModule.ts - - @echo "Generating RequireAndModuleFactory..." - @cd ../synd-contracts && \ - echo "export const requireAndModuleFactoryABI = $$(forge inspect src/factory/PermissionModuleFactories.sol:RequireAndModuleFactory abi --json) as const" > ../create-chain/src/abi/synd/RequireAndModuleFactory.ts - - @echo "Generating SyndicateFactory..." - @cd ../synd-contracts && \ - echo "export const syndicateFactoryABI = $$(forge inspect src/factory/SyndicateFactory.sol:SyndicateFactory abi --json) as const" > ../create-chain/src/abi/synd/SyndicateFactory.ts - + @echo "Generating SyndicateSequencingChain..." @cd ../synd-contracts && \ echo "export const syndicateSequencingChainABI = $$(forge inspect src/SyndicateSequencingChain.sol:SyndicateSequencingChain abi --json) as const" > ../create-chain/src/abi/synd/SyndicateSequencingChain.ts diff --git a/create-chain/src/abi/synd/ArbChainConfig.ts b/create-chain/src/abi/synd/ArbChainConfig.ts index 1c4a32289..038b4002e 100644 --- a/create-chain/src/abi/synd/ArbChainConfig.ts +++ b/create-chain/src/abi/synd/ArbChainConfig.ts @@ -267,6 +267,32 @@ export const arbChainConfigABI = [ "outputs": [], "stateMutability": "nonpayable" }, + { + "type": "function", + "name": "updateVersion", + "inputs": [ + { + "name": "newVersion", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "version", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, { "type": "event", "name": "AppchainBlockExplorerUrlUpdated", diff --git a/create-chain/src/abi/synd/RequireAndModuleFactory.ts b/create-chain/src/abi/synd/RequireAndModuleFactory.ts deleted file mode 100644 index 807a753af..000000000 --- a/create-chain/src/abi/synd/RequireAndModuleFactory.ts +++ /dev/null @@ -1,412 +0,0 @@ -export const requireAndModuleFactoryABI = [ - { - "type": "constructor", - "inputs": [ - { - "name": "admin", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MANAGER_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "computeModuleAddress", - "inputs": [ - { - "name": "admin", - "type": "address", - "internalType": "address" - }, - { - "name": "salt", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "createRequireAndModule", - "inputs": [ - { - "name": "admin", - "type": "address", - "internalType": "address" - }, - { - "name": "salt", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "module", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getRoleAdmin", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "grantRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "hasRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "pause", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "paused", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "callerConfirmation", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { - "name": "interfaceId", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "unpause", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "Paused", - "inputs": [ - { - "name": "account", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RequireAndModuleCreated", - "inputs": [ - { - "name": "module", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "admin", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "newAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Unpaused", - "inputs": [ - { - "name": "account", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "AccessControlBadConfirmation", - "inputs": [] - }, - { - "type": "error", - "name": "AccessControlUnauthorizedAccount", - "inputs": [ - { - "name": "account", - "type": "address", - "internalType": "address" - }, - { - "name": "neededRole", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "error", - "name": "Create2EmptyBytecode", - "inputs": [] - }, - { - "type": "error", - "name": "EnforcedPause", - "inputs": [] - }, - { - "type": "error", - "name": "ExpectedPause", - "inputs": [] - }, - { - "type": "error", - "name": "FailedDeployment", - "inputs": [] - }, - { - "type": "error", - "name": "InsufficientBalance", - "inputs": [ - { - "name": "balance", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "needed", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ZeroAddress", - "inputs": [] - } -] as const diff --git a/create-chain/src/abi/synd/SyndicateFactory.ts b/create-chain/src/abi/synd/SyndicateFactory.ts deleted file mode 100644 index c67d30972..000000000 --- a/create-chain/src/abi/synd/SyndicateFactory.ts +++ /dev/null @@ -1,672 +0,0 @@ -export const syndicateFactoryABI = [ - { - "type": "constructor", - "inputs": [ - { - "name": "admin", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MANAGER_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "appchainContracts", - "inputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "chainIDs", - "inputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "computeSequencingChainAddress", - "inputs": [ - { - "name": "salt", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "chainId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "createSyndicateSequencingChain", - "inputs": [ - { - "name": "appchainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "admin", - "type": "address", - "internalType": "address" - }, - { - "name": "permissionModule", - "type": "address", - "internalType": "contract IRequirementModule" - }, - { - "name": "salt", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "sequencingChain", - "type": "address", - "internalType": "address" - }, - { - "name": "actualChainId", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "getAppchainsAndContracts", - "inputs": [], - "outputs": [ - { - "name": "_chainIDs", - "type": "uint256[]", - "internalType": "uint256[]" - }, - { - "name": "_contracts", - "type": "address[]", - "internalType": "address[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getBytecode", - "inputs": [ - { - "name": "chainId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes", - "internalType": "bytes" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "getContractsForAppchains", - "inputs": [ - { - "name": "_chainIDs", - "type": "uint256[]", - "internalType": "uint256[]" - } - ], - "outputs": [ - { - "name": "_contracts", - "type": "address[]", - "internalType": "address[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getNextChainId", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRoleAdmin", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getTotalAppchains", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "grantRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "hasRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isChainIdUsed", - "inputs": [ - { - "name": "chainId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "namespacePrefix", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "nextAutoChainId", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "pause", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "paused", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "callerConfirmation", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { - "name": "interfaceId", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "unpause", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "updateNamespaceConfig", - "inputs": [ - { - "name": "newPrefix", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "usedNamespaces", - "inputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint8", - "internalType": "enum NamespaceState" - } - ], - "stateMutability": "view" - }, - { - "type": "event", - "name": "ChainIdManuallyMarked", - "inputs": [ - { - "name": "chainId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "NamespaceConfigUpdated", - "inputs": [ - { - "name": "oldNamespacePrefix", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "newNamespacePrefix", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Paused", - "inputs": [ - { - "name": "account", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "newAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SyndicateSequencingChainCreated", - "inputs": [ - { - "name": "appchainId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "sequencingChainAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "permissionModuleAddress", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Unpaused", - "inputs": [ - { - "name": "account", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "AccessControlBadConfirmation", - "inputs": [] - }, - { - "type": "error", - "name": "AccessControlUnauthorizedAccount", - "inputs": [ - { - "name": "account", - "type": "address", - "internalType": "address" - }, - { - "name": "neededRole", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "error", - "name": "ChainIdAlreadyExists", - "inputs": [] - }, - { - "type": "error", - "name": "Create2EmptyBytecode", - "inputs": [] - }, - { - "type": "error", - "name": "EnforcedPause", - "inputs": [] - }, - { - "type": "error", - "name": "ExpectedPause", - "inputs": [] - }, - { - "type": "error", - "name": "FailedDeployment", - "inputs": [] - }, - { - "type": "error", - "name": "InsufficientBalance", - "inputs": [ - { - "name": "balance", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "needed", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "StringsInvalidChar", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroAddress", - "inputs": [] - } -] as const diff --git a/create-chain/src/abi/synd/SyndicateSequencingChain.ts b/create-chain/src/abi/synd/SyndicateSequencingChain.ts index bf8ff54f9..1a42b48b4 100644 --- a/create-chain/src/abi/synd/SyndicateSequencingChain.ts +++ b/create-chain/src/abi/synd/SyndicateSequencingChain.ts @@ -3,114 +3,104 @@ export const syndicateSequencingChainABI = [ "type": "constructor", "inputs": [ { - "name": "_appchainId", - "type": "uint256", - "internalType": "uint256" + "name": "_gasMeter", + "type": "address", + "internalType": "address" } ], "stateMutability": "nonpayable" }, { "type": "function", - "name": "EPOCH_DURATION", + "name": "SEQUENCING_MODULE_STORAGE_LOCATION", "inputs": [], "outputs": [ { "name": "", - "type": "uint256", - "internalType": "uint256" + "type": "bytes32", + "internalType": "bytes32" } ], "stateMutability": "view" }, { "type": "function", - "name": "START_TIMESTAMP", + "name": "SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION", "inputs": [], "outputs": [ { "name": "", - "type": "uint256", - "internalType": "uint256" + "type": "bytes32", + "internalType": "bytes32" } ], "stateMutability": "view" }, { "type": "function", - "name": "appchainId", + "name": "UPGRADE_INTERFACE_VERSION", "inputs": [], "outputs": [ { "name": "", - "type": "uint256", - "internalType": "uint256" + "type": "string", + "internalType": "string" } ], "stateMutability": "view" }, { "type": "function", - "name": "disableGasTracking", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "emissionsReceiver", + "name": "VERSION", "inputs": [], "outputs": [ { "name": "", - "type": "address", - "internalType": "address" + "type": "uint256", + "internalType": "uint256" } ], "stateMutability": "view" }, { "type": "function", - "name": "enableGasTracking", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "encodeTransaction", + "name": "_processTransaction", "inputs": [ { - "name": "data", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ + "name": "sequencer", + "type": "address", + "internalType": "address" + }, { - "name": "", + "name": "data", "type": "bytes", "internalType": "bytes" } ], - "stateMutability": "pure" + "outputs": [], + "stateMutability": "nonpayable" }, { "type": "function", - "name": "gasTrackingDisabled", - "inputs": [], - "outputs": [ + "name": "_processTransactionsBulk", + "inputs": [ { - "name": "", - "type": "bool", - "internalType": "bool" + "name": "sequencer", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes[]", + "internalType": "bytes[]" } ], - "stateMutability": "view" + "outputs": [], + "stateMutability": "nonpayable" }, { "type": "function", - "name": "getCurrentEpoch", + "name": "appchainId", "inputs": [], "outputs": [ { @@ -123,73 +113,71 @@ export const syndicateSequencingChainABI = [ }, { "type": "function", - "name": "getEmissionsReceiver", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getEpochEnd", + "name": "encodeTransaction", "inputs": [ { - "name": "epochIndex", - "type": "uint256", - "internalType": "uint256" + "name": "data", + "type": "bytes", + "internalType": "bytes" } ], "outputs": [ { "name": "", - "type": "uint256", - "internalType": "uint256" + "type": "bytes", + "internalType": "bytes" } ], "stateMutability": "pure" }, { "type": "function", - "name": "getEpochStart", - "inputs": [ + "name": "gasMeter", + "inputs": [], + "outputs": [ { - "name": "epochIndex", - "type": "uint256", - "internalType": "uint256" + "name": "", + "type": "address", + "internalType": "address" } ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getInitializedVersion", + "inputs": [], "outputs": [ { "name": "", - "type": "uint256", - "internalType": "uint256" + "type": "uint64", + "internalType": "uint64" } ], - "stateMutability": "pure" + "stateMutability": "view" }, { "type": "function", - "name": "getTokensForEpoch", + "name": "initialize", "inputs": [ { - "name": "epochIndex", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ + "name": "admin", + "type": "address", + "internalType": "address" + }, { - "name": "", + "name": "_permissionRequirementModule", + "type": "address", + "internalType": "address" + }, + { + "name": "_appchainId", "type": "uint256", "internalType": "uint256" } ], - "stateMutability": "view" + "outputs": [], + "stateMutability": "nonpayable" }, { "type": "function", @@ -287,42 +275,23 @@ export const syndicateSequencingChainABI = [ }, { "type": "function", - "name": "renounceOwnership", + "name": "proxiableUUID", "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setEmissionsReceiver", - "inputs": [ + "outputs": [ { - "name": "_emissionsReceiver", - "type": "address", - "internalType": "address" + "name": "", + "type": "bytes32", + "internalType": "bytes32" } ], - "outputs": [], - "stateMutability": "nonpayable" + "stateMutability": "view" }, { "type": "function", - "name": "tokensUsedPerEpoch", - "inputs": [ - { - "name": "epochIndex", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "tokensUsed", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" }, { "type": "function", @@ -351,20 +320,32 @@ export const syndicateSequencingChainABI = [ "stateMutability": "nonpayable" }, { - "type": "event", - "name": "EmissionsReceiverUpdated", + "type": "function", + "name": "upgradeToAndCall", "inputs": [ { - "name": "oldReceiver", + "name": "newImplementation", "type": "address", - "indexed": true, "internalType": "address" }, { - "name": "newReceiver", - "type": "address", - "indexed": true, - "internalType": "address" + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" } ], "anonymous": false @@ -420,6 +401,30 @@ export const syndicateSequencingChainABI = [ ], "anonymous": false }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, { "type": "error", "name": "DataTooLarge", @@ -438,12 +443,28 @@ export const syndicateSequencingChainABI = [ }, { "type": "error", - "name": "GasTrackingAlreadyDisabled", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedCall", "inputs": [] }, { "type": "error", - "name": "GasTrackingAlreadyEnabled", + "name": "InvalidInitialization", "inputs": [] }, { @@ -451,6 +472,16 @@ export const syndicateSequencingChainABI = [ "name": "NoTxData", "inputs": [] }, + { + "type": "error", + "name": "NotGasMeterContract", + "inputs": [] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, { "type": "error", "name": "OwnableInvalidOwner", @@ -480,7 +511,23 @@ export const syndicateSequencingChainABI = [ }, { "type": "error", - "name": "ZeroEpochIndex", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { + "name": "slot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "ZeroAddress", "inputs": [] } ] as const diff --git a/create-chain/src/foundation/deploySyndSequencingChain.ts b/create-chain/src/foundation/deploySyndSequencingChain.ts index 6556d312b..e13885bbe 100644 --- a/create-chain/src/foundation/deploySyndSequencingChain.ts +++ b/create-chain/src/foundation/deploySyndSequencingChain.ts @@ -1,14 +1,11 @@ -import { type Account, type Hex, parseEventLogs, toBytes, toHex } from "viem" +import { type Account, type Hex, zeroAddress } from "viem" import { allowlistSequencingModuleABI, allowlistSequencingModuleBytecode } from "@/src/abi/synd/AllowlistSequencingModule" import { requireAndModuleABI } from "@/src/abi/synd/RequireAndModule" -import { requireAndModuleFactoryABI } from "@/src/abi/synd/RequireAndModuleFactory" -import { syndicateFactoryABI } from "@/src/abi/synd/SyndicateFactory" import { syndicateSequencingChainABI } from "@/src/abi/synd/SyndicateSequencingChain" -import { supportedSequencingChains } from "@/src/utils/constants" import { getFoundationConfig } from "../utils/config" import { getChainExplorerUrl } from "../utils/helpers" import { print } from "../utils/print" @@ -47,94 +44,102 @@ export async function deploySyndSequencingChain(sequencerAccount: Account) { } async function createRequireAndModule() { - const { chainId, sequencingPublicClient, deployerSequencingWalletClient } = - await getFoundationConfig() + // const { chainId, sequencingPublicClient, deployerSequencingWalletClient } = + // await getFoundationConfig() - const requireAndFactoryAddress = - supportedSequencingChains[sequencingPublicClient.chain.id] - .requireAndFactoryAddress + // const requireAndFactoryAddress = + // supportedSequencingChains[sequencingPublicClient.chain.id] + // .requireAndFactoryAddress - const { request: requireAndModuleRequest } = - await sequencingPublicClient.simulateContract({ - account: deployerSequencingWalletClient.account, - address: requireAndFactoryAddress, - abi: requireAndModuleFactoryABI, - functionName: "createRequireAndModule", - args: [ - deployerSequencingWalletClient.account.address, - toHex(toBytes(chainId, { size: 32 })) - ] - }) - const requireAndModuleHash = - await deployerSequencingWalletClient.writeContract(requireAndModuleRequest) - const requireAndModuleTx = - await sequencingPublicClient.waitForTransactionReceipt({ - hash: requireAndModuleHash - }) - const requireAndFactoryLogs = parseEventLogs({ - abi: requireAndModuleFactoryABI, - logs: requireAndModuleTx.logs - }) - const requireAndModuleAddress = requireAndFactoryLogs.find( - (l) => l.eventName === "RequireAndModuleCreated" - )?.args.module - if (!requireAndModuleAddress) { - throw new Error("RequireAndModule deployment failed") - } - print( - `🔍 RequireAndModule deployed to ${requireAndModuleAddress}\n${getChainExplorerUrl( - sequencingPublicClient.chain - )}/tx/${requireAndModuleHash}` - ) - return requireAndModuleAddress + // const { request: requireAndModuleRequest } = + // await sequencingPublicClient.simulateContract({ + // account: deployerSequencingWalletClient.account, + // address: requireAndFactoryAddress, + // abi: requireAndModuleFactoryABI, + // functionName: "createRequireAndModule", + // args: [ + // deployerSequencingWalletClient.account.address, + // toHex(toBytes(chainId, { size: 32 })) + // ] + // }) + // const requireAndModuleHash = + // await deployerSequencingWalletClient.writeContract(requireAndModuleRequest) + // const requireAndModuleTx = + // await sequencingPublicClient.waitForTransactionReceipt({ + // hash: requireAndModuleHash + // }) + // const requireAndFactoryLogs = parseEventLogs({ + // abi: requireAndModuleFactoryABI, + // logs: requireAndModuleTx.logs + // }) + // const requireAndModuleAddress = requireAndFactoryLogs.find( + // (l) => l.eventName === "RequireAndModuleCreated" + // )?.args.module + // if (!requireAndModuleAddress) { + // throw new Error("RequireAndModule deployment failed") + // } + // print( + // `🔍 RequireAndModule deployed to ${requireAndModuleAddress}\n${getChainExplorerUrl( + // sequencingPublicClient.chain + // )}/tx/${requireAndModuleHash}` + // ) + // return requireAndModuleAddress + + // TODO (ENG-2215) + return zeroAddress } async function createSyndicateSequencingChain(requireAndModuleAddress: Hex) { - const { chainId, sequencingPublicClient, deployerSequencingWalletClient } = - await getFoundationConfig() + // const { chainId, sequencingPublicClient, deployerSequencingWalletClient } = + // await getFoundationConfig() - const syndicateFactoryAddress = - supportedSequencingChains[sequencingPublicClient.chain.id] - .syndicateFactoryAddress - const { request: syndicateSequencingChainRequest } = - await sequencingPublicClient.simulateContract({ - account: deployerSequencingWalletClient.account, - address: syndicateFactoryAddress, - abi: syndicateFactoryABI, - functionName: "createSyndicateSequencingChain", - args: [ - BigInt(chainId), - deployerSequencingWalletClient.account.address, - requireAndModuleAddress, - toHex(toBytes(chainId, { size: 32 })) - ] - }) - const syndicateSequencingChainHash = - await deployerSequencingWalletClient.writeContract( - syndicateSequencingChainRequest - ) - const syndicateSequencingChainTx = - await sequencingPublicClient.waitForTransactionReceipt({ - hash: syndicateSequencingChainHash - }) - const syndicateFactoryLogs = parseEventLogs({ - abi: syndicateFactoryABI, - logs: syndicateSequencingChainTx.logs - }) - const syndicateSequencingChainAddress = syndicateFactoryLogs.find( - (l) => l.eventName === "SyndicateSequencingChainCreated" - )?.args.sequencingChainAddress - if (!syndicateSequencingChainAddress) { - throw new Error("SyndicateSequencingChain deployment failed") - } - print( - `🔍 SyndicateSequencingChain deployed to ${syndicateSequencingChainAddress}\n${getChainExplorerUrl( - sequencingPublicClient.chain - )}/tx/${syndicateSequencingChainHash}` - ) + // const syndicateFactoryAddress = + // supportedSequencingChains[sequencingPublicClient.chain.id] + // .syndicateFactoryAddress + // const { request: syndicateSequencingChainRequest } = + // await sequencingPublicClient.simulateContract({ + // account: deployerSequencingWalletClient.account, + // address: syndicateFactoryAddress, + // abi: syndicateFactoryABI, + // functionName: "createSyndicateSequencingChainWithCustomId", + // args: [ + // BigInt(chainId), + // deployerSequencingWalletClient.account.address, + // requireAndModuleAddress + // ] + // }) + // const syndicateSequencingChainHash = + // await deployerSequencingWalletClient.writeContract( + // syndicateSequencingChainRequest + // ) + // const syndicateSequencingChainTx = + // await sequencingPublicClient.waitForTransactionReceipt({ + // hash: syndicateSequencingChainHash + // }) + // const syndicateFactoryLogs = parseEventLogs({ + // abi: syndicateFactoryABI, + // logs: syndicateSequencingChainTx.logs + // }) + // const syndicateSequencingChainAddress = syndicateFactoryLogs.find( + // (l) => l.eventName === "SyndicateSequencingChainCreated" + // )?.args.sequencingChainAddress + // if (!syndicateSequencingChainAddress) { + // throw new Error("SyndicateSequencingChain deployment failed") + // } + // print( + // `🔍 SyndicateSequencingChain deployed to ${syndicateSequencingChainAddress}\n${getChainExplorerUrl( + // sequencingPublicClient.chain + // )}/tx/${syndicateSequencingChainHash}` + // ) + // return { + // syndicateSequencingChainAddress, + // deployedAtBlock: syndicateSequencingChainTx.blockNumber + // } + + // TODO (ENG-2215) return { - syndicateSequencingChainAddress, - deployedAtBlock: syndicateSequencingChainTx.blockNumber + syndicateSequencingChainAddress: zeroAddress, + deployedAtBlock: BigInt(0) } } diff --git a/shared/Makefile b/shared/Makefile index af53932f5..71e848f2d 100644 --- a/shared/Makefile +++ b/shared/Makefile @@ -13,7 +13,8 @@ create-contract-bindings-rust: --select 'TeeKeyManager|TeeModule|AttestationDocVerifier' \ --select 'IBridge|IOutbox|IRollupCore|IRollup|IUpgradeExecutor' \ --select 'ArbSys|NodeInterface|ArbGasInfo|ArbOwnerPublic' \ - --select 'IInboxBase|ISequencerInbox|IDelayedMessageProvider|ArbChainConfig' + --select 'IInboxBase|ISequencerInbox|IDelayedMessageProvider|ArbChainConfig' \ + --select 'ERC1967Proxy|GasMeter|AlwaysAllowedModule' cp -r ../synd-contracts/out/bindings/* contract-bindings/src/synd .PHONY: create-withdrawal-contract-bindings-go diff --git a/shared/contract-bindings/src/synd/always_allowed_module.rs b/shared/contract-bindings/src/synd/always_allowed_module.rs new file mode 100644 index 000000000..eed56a492 --- /dev/null +++ b/shared/contract-bindings/src/synd/always_allowed_module.rs @@ -0,0 +1,553 @@ +/** + +Generated by the following Solidity interface... +```solidity +interface AlwaysAllowedModule { + function isAllowed(address, address, bytes memory) external pure returns (bool); +} +``` + +...which was generated by the following JSON ABI: +```json +[ + { + "type": "function", + "name": "isAllowed", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "pure" + } +] +```*/ +#[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style, + clippy::empty_structs_with_brackets +)] +pub mod AlwaysAllowedModule { + use super::*; + use alloy::sol_types as alloy_sol_types; + /// The creation / init bytecode of the contract. + /// + /// ```text + ///0x6080806040523460145760e790816100198239f35b5f80fdfe60808060405260043610156011575f80fd5b5f3560e01c637a3979dc146023575f80fd5b34609f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112609f57605660a3565b50605d60c5565b5060443567ffffffffffffffff8111609f5736602382011215609f57806004013567ffffffffffffffff8111609f5736910160240111609f5780600160209252f35b5f80fd5b6004359073ffffffffffffffffffffffffffffffffffffffff82168203609f57565b6024359073ffffffffffffffffffffffffffffffffffffffff82168203609f5756 + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"`\x80\x80`@R4`\x14W`\xE7\x90\x81a\0\x19\x829\xF3[_\x80\xFD\xFE`\x80\x80`@R`\x046\x10\x15`\x11W_\x80\xFD[_5`\xE0\x1Ccz9y\xDC\x14`#W_\x80\xFD[4`\x9FW``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12`\x9FW`V`\xA3V[P`]`\xC5V[P`D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11`\x9FW6`#\x82\x01\x12\x15`\x9FW\x80`\x04\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11`\x9FW6\x91\x01`$\x01\x11`\x9FW\x80`\x01` \x92R\xF3[_\x80\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03`\x9FWV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03`\x9FWV", + ); + /// The runtime bytecode of the contract, as deployed on the network. + /// + /// ```text + ///0x60808060405260043610156011575f80fd5b5f3560e01c637a3979dc146023575f80fd5b34609f5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112609f57605660a3565b50605d60c5565b5060443567ffffffffffffffff8111609f5736602382011215609f57806004013567ffffffffffffffff8111609f5736910160240111609f5780600160209252f35b5f80fd5b6004359073ffffffffffffffffffffffffffffffffffffffff82168203609f57565b6024359073ffffffffffffffffffffffffffffffffffffffff82168203609f5756 + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"`\x80\x80`@R`\x046\x10\x15`\x11W_\x80\xFD[_5`\xE0\x1Ccz9y\xDC\x14`#W_\x80\xFD[4`\x9FW``\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12`\x9FW`V`\xA3V[P`]`\xC5V[P`D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11`\x9FW6`#\x82\x01\x12\x15`\x9FW\x80`\x04\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11`\x9FW6\x91\x01`$\x01\x11`\x9FW\x80`\x01` \x92R\xF3[_\x80\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03`\x9FWV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03`\x9FWV", + ); + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `isAllowed(address,address,bytes)` and selector `0x7a3979dc`. +```solidity +function isAllowed(address, address, bytes memory) external pure returns (bool); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct isAllowedCall { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _1: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _2: alloy::sol_types::private::Bytes, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`isAllowed(address,address,bytes)`](isAllowedCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct isAllowedReturn { + #[allow(missing_docs)] + pub _0: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Address, + alloy::sol_types::private::Bytes, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: isAllowedCall) -> Self { + (value._0, value._1, value._2) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for isAllowedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + _0: tuple.0, + _1: tuple.1, + _2: tuple.2, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: isAllowedReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for isAllowedReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for isAllowedCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = bool; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "isAllowed(address,address,bytes)"; + const SELECTOR: [u8; 4] = [122u8, 57u8, 121u8, 220u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self._0, + ), + ::tokenize( + &self._1, + ), + ::tokenize( + &self._2, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: isAllowedReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: isAllowedReturn = r.into(); + r._0 + }) + } + } + }; + ///Container for all the [`AlwaysAllowedModule`](self) function calls. + #[derive(serde::Serialize, serde::Deserialize)] + #[derive()] + pub enum AlwaysAllowedModuleCalls { + #[allow(missing_docs)] + isAllowed(isAllowedCall), + } + #[automatically_derived] + impl AlwaysAllowedModuleCalls { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 4usize]] = &[[122u8, 57u8, 121u8, 220u8]]; + } + #[automatically_derived] + impl alloy_sol_types::SolInterface for AlwaysAllowedModuleCalls { + const NAME: &'static str = "AlwaysAllowedModuleCalls"; + const MIN_DATA_LENGTH: usize = 128usize; + const COUNT: usize = 1usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::isAllowed(_) => { + ::SELECTOR + } + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn isAllowed( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(AlwaysAllowedModuleCalls::isAllowed) + } + isAllowed + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_SHIMS[idx](data) + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw_validate( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_VALIDATE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn isAllowed( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(AlwaysAllowedModuleCalls::isAllowed) + } + isAllowed + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_VALIDATE_SHIMS[idx](data) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::isAllowed(inner) => { + ::abi_encoded_size(inner) + } + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::isAllowed(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + } + } + } + use alloy::contract as alloy_contract; + /**Creates a new wrapper around an on-chain [`AlwaysAllowedModule`](self) contract instance. + +See the [wrapper's documentation](`AlwaysAllowedModuleInstance`) for more details.*/ + #[inline] + pub const fn new< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + address: alloy_sol_types::private::Address, + provider: P, + ) -> AlwaysAllowedModuleInstance { + AlwaysAllowedModuleInstance::::new(address, provider) + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub fn deploy< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + provider: P, + ) -> impl ::core::future::Future< + Output = alloy_contract::Result>, + > { + AlwaysAllowedModuleInstance::::deploy(provider) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >(provider: P) -> alloy_contract::RawCallBuilder { + AlwaysAllowedModuleInstance::::deploy_builder(provider) + } + /**A [`AlwaysAllowedModule`](self) instance. + +Contains type-safe methods for interacting with an on-chain instance of the +[`AlwaysAllowedModule`](self) contract located at a given `address`, using a given +provider `P`. + +If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!) +documentation on how to provide it), the `deploy` and `deploy_builder` methods can +be used to deploy a new instance of the contract. + +See the [module-level documentation](self) for all the available methods.*/ + #[derive(Clone)] + pub struct AlwaysAllowedModuleInstance { + address: alloy_sol_types::private::Address, + provider: P, + _network: ::core::marker::PhantomData, + } + #[automatically_derived] + impl ::core::fmt::Debug for AlwaysAllowedModuleInstance { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple("AlwaysAllowedModuleInstance").field(&self.address).finish() + } + } + /// Instantiation and getters/setters. + #[automatically_derived] + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > AlwaysAllowedModuleInstance { + /**Creates a new wrapper around an on-chain [`AlwaysAllowedModule`](self) contract instance. + +See the [wrapper's documentation](`AlwaysAllowedModuleInstance`) for more details.*/ + #[inline] + pub const fn new( + address: alloy_sol_types::private::Address, + provider: P, + ) -> Self { + Self { + address, + provider, + _network: ::core::marker::PhantomData, + } + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub async fn deploy( + provider: P, + ) -> alloy_contract::Result> { + let call_builder = Self::deploy_builder(provider); + let contract_address = call_builder.deploy().await?; + Ok(Self::new(contract_address, call_builder.provider)) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder(provider: P) -> alloy_contract::RawCallBuilder { + alloy_contract::RawCallBuilder::new_raw_deploy( + provider, + ::core::clone::Clone::clone(&BYTECODE), + ) + } + /// Returns a reference to the address. + #[inline] + pub const fn address(&self) -> &alloy_sol_types::private::Address { + &self.address + } + /// Sets the address. + #[inline] + pub fn set_address(&mut self, address: alloy_sol_types::private::Address) { + self.address = address; + } + /// Sets the address and returns `self`. + pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self { + self.set_address(address); + self + } + /// Returns a reference to the provider. + #[inline] + pub const fn provider(&self) -> &P { + &self.provider + } + } + impl AlwaysAllowedModuleInstance<&P, N> { + /// Clones the provider and returns a new instance with the cloned provider. + #[inline] + pub fn with_cloned_provider(self) -> AlwaysAllowedModuleInstance { + AlwaysAllowedModuleInstance { + address: self.address, + provider: ::core::clone::Clone::clone(&self.provider), + _network: ::core::marker::PhantomData, + } + } + } + /// Function calls. + #[automatically_derived] + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > AlwaysAllowedModuleInstance { + /// Creates a new call builder using this contract instance's provider and address. + /// + /// Note that the call can be any function call, not just those defined in this + /// contract. Prefer using the other methods for building type-safe contract calls. + pub fn call_builder( + &self, + call: &C, + ) -> alloy_contract::SolCallBuilder<&P, C, N> { + alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) + } + ///Creates a new call builder for the [`isAllowed`] function. + pub fn isAllowed( + &self, + _0: alloy::sol_types::private::Address, + _1: alloy::sol_types::private::Address, + _2: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, isAllowedCall, N> { + self.call_builder(&isAllowedCall { _0, _1, _2 }) + } + } + /// Event filters. + #[automatically_derived] + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > AlwaysAllowedModuleInstance { + /// Creates a new event filter using this contract instance's provider and address. + /// + /// Note that the type can be any event, not just those defined in this contract. + /// Prefer using the other methods for building type-safe event filters. + pub fn event_filter( + &self, + ) -> alloy_contract::Event<&P, E, N> { + alloy_contract::Event::new_sol(&self.provider, &self.address) + } + } +} diff --git a/shared/contract-bindings/src/synd/arb_chain_config.rs b/shared/contract-bindings/src/synd/arb_chain_config.rs index 3f61ab792..707b17c4e 100644 --- a/shared/contract-bindings/src/synd/arb_chain_config.rs +++ b/shared/contract-bindings/src/synd/arb_chain_config.rs @@ -29,6 +29,8 @@ interface ArbChainConfig { function transferOwnership(address newOwner) external; function updateAppchainBlockExplorerUrl(string memory newUrl) external; function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) external; + function updateVersion(string memory newVersion) external; + function version() external view returns (string memory); } ``` @@ -303,6 +305,32 @@ interface ArbChainConfig { "outputs": [], "stateMutability": "nonpayable" }, + { + "type": "function", + "name": "updateVersion", + "inputs": [ + { + "name": "newVersion", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "version", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, { "type": "event", "name": "AppchainBlockExplorerUrlUpdated", @@ -386,22 +414,22 @@ pub mod ArbChainConfig { /// The creation / init bytecode of the contract. /// /// ```text - ///0x6080806040523460aa575f5160206114415f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b60405161139290816100af8239f35b6001600160401b0319166001600160401b039081175f5160206114415f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630743bf6e14610f6e57806318b5ce8114610f3b5780632908035614610def5780634b8be3f714610c9157806357d1ba2514610c745780636edd6c0914610c4157806385e1f4d014610c245780638da5cb5b14610bf2578063a3c6e1e714610bd5578063aa6a43d814610ba2578063bf6db6f814610b6f578063bf79fd1c14610265578063c7a760951461016d578063d1f4737c14610150578063f2fde38b146100ea5763f8a144be146100c9575f80fd5b346100e6575f6003193601126100e6576020600654604051908152f35b5f80fd5b346100e65760206003193601126100e65761014e610106611102565b61012873ffffffffffffffffffffffffffffffffffffffff5f5416331461117b565b61014973ffffffffffffffffffffffffffffffffffffffff821615156112a7565b61130c565b005b346100e6575f6003193601126100e6576020600854604051908152f35b346100e6575f6003193601126100e6576040515f600a5461018d81611013565b808452906001811690811561022357506001146101c5575b6101c1836101b581850382611064565b60405191829182611087565b0390f35b600a5f9081527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8939250905b808210610209575090915081016020016101b56101a5565b9192600181602092548385880101520191019092916101f1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506101b590506101a5565b346100e6576101806003193601126100e65761027f611102565b602435604435916064359273ffffffffffffffffffffffffffffffffffffffff84168094036100e65760843573ffffffffffffffffffffffffffffffffffffffff81168091036100e65760e43573ffffffffffffffffffffffffffffffffffffffff81168091036100e657610124359173ffffffffffffffffffffffffffffffffffffffff83168093036100e6576101443567ffffffffffffffff81116100e65761032e903690600401611125565b966101643567ffffffffffffffff81116100e657610350903690600401611125565b947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549760ff8960401c16159867ffffffffffffffff811680159081610b67575b6001149081610b5d575b159081610b54575b50610b2c578960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610ad7575b5073ffffffffffffffffffffffffffffffffffffffff881615610a79578015610a1b57811561099757821561091357831561088f57841561080b578515610787576005556006557fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035560a43560075560c4356008557fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455610104356009557fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155835167ffffffffffffffff81116106d95761051981610514600a54611013565b6111e0565b602094601f82116001146107065761054a9293949582915f92610647575b50505f198260011b9260031b1c19161790565b600a555b80519067ffffffffffffffff82116106d9576105748261056f600b54611013565b611230565b602090601f83116001146106525791806105a6926105ae95945f926106475750505f198260011b9260031b1c19161790565b600b5561130c565b6105b457005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b015190508680610537565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b8181106106c157509160019391856105ae979694106106a9575b505050811b01600b5561130c565b01515f1960f88460031b161c1916905585808061069b565b92936020600181928786015181550195019301610681565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19821695600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8915f5b88811061076f57508360019596979810610757575b505050811b01600a5561054e565b01515f1960f88460031b161c19169055858080610749565b91926020600181928685015181550194019201610734565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f496e697469616c20617070636861696e206f776e65722063616e6e6f7420626560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f53657175656e63696e6720636f6e747261637420616464726573732063616e6e60448201527f6f74206265207a65726f000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f417262697472756d20696e626f7820616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f417262697472756d2062726964676520616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53657175656e63696e6720636861696e2049442063616e6e6f74206265207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f776e65722063616e6e6f74206265207a65726f2061646472657373000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558a6103f6565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158c6103a3565b303b15915061039b565b8b9150610391565b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b346100e6575f6003193601126100e6576020600954604051908152f35b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100e6575f6003193601126100e6576020600554604051908152f35b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346100e6575f6003193601126100e6576020600754604051908152f35b346100e657610c9f366110b1565b610cc173ffffffffffffffffffffffffffffffffffffffff5f5416331461117b565b67ffffffffffffffff81116106d957610cdf8161056f600b54611013565b5f91601f8211600114610d4f57610d2c82807f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7955f91610d44575b505f198260011b9260031b1c19161790565b600b555b610d3f60405192839283611280565b0390a1005b905083013586610d1a565b601f198216600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b818110610dd7575093837f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a79510610dbe575b5050600182811b01600b55610d30565b5f1960f88560031b161c19908301351690558380610dae565b83860135835560209586019560019093019201610d7c565b346100e657610dfd366110b1565b610e1f73ffffffffffffffffffffffffffffffffffffffff5f5416331461117b565b67ffffffffffffffff81116106d957610e3d81610514600a54611013565b5f91601f8211600114610e9b57610e8982807f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c955f91610d4457505f198260011b9260031b1c19161790565b600a55610d3f60405192839283611280565b601f198216600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8905f5b818110610f23575093837f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c9510610f0a575b5050600182811b01600a55610d30565b5f1960f88560031b161c19908301351690558380610efa565b83860135835560209586019560019093019201610ec8565b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346100e6575f6003193601126100e6576040515f600b54610f8e81611013565b80845290600181169081156102235750600114610fb5576101c1836101b581850382611064565b600b5f9081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b808210610ff9575090915081016020016101b56101a5565b919260018160209254838588010152019101909291610fe1565b90600182811c9216801561105a575b602083101461102d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691611022565b90601f601f19910116810190811067ffffffffffffffff8211176106d957604052565b601f19601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b9060206003198301126100e65760043567ffffffffffffffff81116100e657826023820112156100e65780600401359267ffffffffffffffff84116100e657602484830101116100e6576024019190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100e657565b81601f820112156100e65780359067ffffffffffffffff82116106d9576040519261115a6020601f19601f8601160185611064565b828452602083830101116100e657815f926020809301838601378301015290565b1561118257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b601f81116111ec575050565b600a5f5260205f20906020601f840160051c83019310611226575b601f0160051c01905b81811061121b575050565b5f8155600101611210565b9091508190611207565b601f811161123c575050565b600b5f5260205f20906020601f840160051c83019310611276575b601f0160051c01905b81811061126b575050565b5f8155600101611260565b9091508190611257565b90601f83604094601f199360208652816020870152868601375f8582860101520116010190565b156112ae57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b73ffffffffffffffffffffffffffffffffffffffff1661132d8115156112a7565b73ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00 + ///0x6080806040523460aa575f5160206116be5f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b60405161160f90816100af8239f35b6001600160401b0319166001600160401b039081175f5160206116be5f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630743bf6e1461120357806318b5ce81146111d057806329080356146110845780634b8be3f714610f2657806354fd4d5014610e8157806357d1ba2514610e645780636edd6c0914610e315780637240f9af14610cd157806385e1f4d014610cb45780638da5cb5b14610c82578063a3c6e1e714610c65578063aa6a43d814610c32578063bf6db6f814610bff578063bf79fd1c1461027b578063c7a7609514610183578063d1f4737c14610166578063f2fde38b146101005763f8a144be146100df575f80fd5b346100fc575f6003193601126100fc576020600654604051908152f35b5f80fd5b346100fc5760206003193601126100fc5761016461011c611397565b61013e73ffffffffffffffffffffffffffffffffffffffff5f54163314611410565b61015f73ffffffffffffffffffffffffffffffffffffffff82161515611524565b611589565b005b346100fc575f6003193601126100fc576020600854604051908152f35b346100fc575f6003193601126100fc576040515f600a546101a3816112a8565b808452906001811690811561023957506001146101db575b6101d7836101cb818503826112f9565b6040519182918261131c565b0390f35b600a5f9081527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8939250905b80821061021f575090915081016020016101cb6101bb565b919260018160209254838588010152019101909291610207565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506101cb90506101bb565b346100fc576101806003193601126100fc57610295611397565b602435604435916064359273ffffffffffffffffffffffffffffffffffffffff84168094036100fc5760843573ffffffffffffffffffffffffffffffffffffffff81168091036100fc5760e43573ffffffffffffffffffffffffffffffffffffffff81168091036100fc57610124359173ffffffffffffffffffffffffffffffffffffffff83168093036100fc576101443567ffffffffffffffff81116100fc576103449036906004016113ba565b966101643567ffffffffffffffff81116100fc576103669036906004016113ba565b947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549760ff8960401c16159867ffffffffffffffff811680159081610bf7575b6001149081610bed575b159081610be4575b50610bbc578960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610b67575b5073ffffffffffffffffffffffffffffffffffffffff881615610b09578015610aab578115610a275782156109a357831561091f57841561089b578515610817576005556006557fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035560a43560075560c4356008557fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455610104356009556104ec600c546112a8565b601f81116107d9575b50600a7f312e302e3000000000000000000000000000000000000000000000000000000001600c557fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155835167ffffffffffffffff811161072b5761056b81610566600a546112a8565b61148b565b602094601f82116001146107585761059c9293949582915f92610699575b50505f198260011b9260031b1c19161790565b600a555b80519067ffffffffffffffff821161072b576105c6826105c1600b546112a8565b6114c5565b602090601f83116001146106a45791806105f89261060095945f926106995750505f198260011b9260031b1c19161790565b600b55611589565b61060657005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b015190508680610589565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b8181106107135750916001939185610600979694106106fb575b505050811b01600b55611589565b01515f1960f88460031b161c191690558580806106ed565b929360206001819287860151815501950193016106d3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19821695600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8915f5b8881106107c1575083600195969798106107a9575b505050811b01600a556105a0565b01515f1960f88460031b161c1916905585808061079b565b91926020600181928685015181550194019201610786565b600c5f5261081190601f0160051c7fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c790810190611475565b856104f5565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f496e697469616c20617070636861696e206f776e65722063616e6e6f7420626560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f53657175656e63696e6720636f6e747261637420616464726573732063616e6e60448201527f6f74206265207a65726f000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f417262697472756d20696e626f7820616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f417262697472756d2062726964676520616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53657175656e63696e6720636861696e2049442063616e6e6f74206265207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f776e65722063616e6e6f74206265207a65726f2061646472657373000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558a61040c565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158c6103b9565b303b1591506103b1565b8b91506103a7565b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b346100fc575f6003193601126100fc576020600954604051908152f35b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100fc575f6003193601126100fc576020600554604051908152f35b346100fc57610cdf36611346565b610d0173ffffffffffffffffffffffffffffffffffffffff5f54163314611410565b67ffffffffffffffff811161072b57610d1b600c546112a8565b601f8111610dd8575b505f601f8211600114610d60578190610d50935f92610d555750505f198260011b9260031b1c19161790565b600c55005b013590508380610589565b601f198216927fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915f5b858110610dc057508360019510610da7575b505050811b01600c55005b5f1960f88560031b161c19910135169055828080610d9c565b90926020600181928686013581550194019101610d8a565b600c5f52610e21907fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7601f840160051c81019160208510610e27575b601f0160051c0190611475565b82610d24565b9091508190610e14565b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346100fc575f6003193601126100fc576020600754604051908152f35b346100fc575f6003193601126100fc576040515f600c54610ea1816112a8565b80845290600181169081156102395750600114610ec8576101d7836101cb818503826112f9565b600c5f9081527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7939250905b808210610f0c575090915081016020016101cb6101bb565b919260018160209254838588010152019101909291610ef4565b346100fc57610f3436611346565b610f5673ffffffffffffffffffffffffffffffffffffffff5f54163314611410565b67ffffffffffffffff811161072b57610f74816105c1600b546112a8565b5f91601f8211600114610fe457610fc182807f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7955f91610fd9575b505f198260011b9260031b1c19161790565b600b555b610fd4604051928392836114fd565b0390a1005b905083013586610faf565b601f198216600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b81811061106c575093837f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a79510611053575b5050600182811b01600b55610fc5565b5f1960f88560031b161c19908301351690558380611043565b83860135835560209586019560019093019201611011565b346100fc5761109236611346565b6110b473ffffffffffffffffffffffffffffffffffffffff5f54163314611410565b67ffffffffffffffff811161072b576110d281610566600a546112a8565b5f91601f82116001146111305761111e82807f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c955f91610fd957505f198260011b9260031b1c19161790565b600a55610fd4604051928392836114fd565b601f198216600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8905f5b8181106111b8575093837f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c951061119f575b5050600182811b01600a55610fc5565b5f1960f88560031b161c1990830135169055838061118f565b8386013583556020958601956001909301920161115d565b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346100fc575f6003193601126100fc576040515f600b54611223816112a8565b8084529060018116908115610239575060011461124a576101d7836101cb818503826112f9565b600b5f9081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b80821061128e575090915081016020016101cb6101bb565b919260018160209254838588010152019101909291611276565b90600182811c921680156112ef575b60208310146112c257565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916112b7565b90601f601f19910116810190811067ffffffffffffffff82111761072b57604052565b601f19601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b9060206003198301126100fc5760043567ffffffffffffffff81116100fc57826023820112156100fc5780600401359267ffffffffffffffff84116100fc57602484830101116100fc576024019190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100fc57565b81601f820112156100fc5780359067ffffffffffffffff821161072b57604051926113ef6020601f19601f86011601856112f9565b828452602083830101116100fc57815f926020809301838601378301015290565b1561141757565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b818110611480575050565b5f8155600101611475565b90601f8211611498575050565b6114c391600a5f5260205f20906020601f840160051c83019310610e2757601f0160051c0190611475565b565b90601f82116114d2575050565b6114c391600b5f5260205f20906020601f840160051c83019310610e2757601f0160051c0190611475565b90601f83604094601f199360208652816020870152868601375f8582860101520116010190565b1561152b57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166115aa811515611524565b73ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80\x80`@R4`\xAAW_Q` a\x14A_9_Q\x90_RT`\xFF\x81`@\x1C\x16`\x9BW`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01`IW[`@Qa\x13\x92\x90\x81a\0\xAF\x829\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x14A_9_Q\x90_RU\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_\x80`:V[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x07C\xBFn\x14a\x0FnW\x80c\x18\xB5\xCE\x81\x14a\x0F;W\x80c)\x08\x03V\x14a\r\xEFW\x80cK\x8B\xE3\xF7\x14a\x0C\x91W\x80cW\xD1\xBA%\x14a\x0CtW\x80cn\xDDl\t\x14a\x0CAW\x80c\x85\xE1\xF4\xD0\x14a\x0C$W\x80c\x8D\xA5\xCB[\x14a\x0B\xF2W\x80c\xA3\xC6\xE1\xE7\x14a\x0B\xD5W\x80c\xAAjC\xD8\x14a\x0B\xA2W\x80c\xBFm\xB6\xF8\x14a\x0BoW\x80c\xBFy\xFD\x1C\x14a\x02eW\x80c\xC7\xA7`\x95\x14a\x01mW\x80c\xD1\xF4s|\x14a\x01PW\x80c\xF2\xFD\xE3\x8B\x14a\0\xEAWc\xF8\xA1D\xBE\x14a\0\xC9W_\x80\xFD[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\x06T`@Q\x90\x81R\xF3[_\x80\xFD[4a\0\xE6W` `\x03\x196\x01\x12a\0\xE6Wa\x01Na\x01\x06a\x11\x02V[a\x01(s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x11{V[a\x01Is\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x12\xA7V[a\x13\x0CV[\0[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\x08T`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W`@Q_`\nTa\x01\x8D\x81a\x10\x13V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02#WP`\x01\x14a\x01\xC5W[a\x01\xC1\x83a\x01\xB5\x81\x85\x03\x82a\x10dV[`@Q\x91\x82\x91\x82a\x10\x87V[\x03\x90\xF3[`\n_\x90\x81R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x93\x92P\x90[\x80\x82\x10a\x02\tWP\x90\x91P\x81\x01` \x01a\x01\xB5a\x01\xA5V[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x01\xF1V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16` \x80\x86\x01\x91\x90\x91R\x91\x15\x15`\x05\x1B\x84\x01\x90\x91\x01\x91Pa\x01\xB5\x90Pa\x01\xA5V[4a\0\xE6Wa\x01\x80`\x03\x196\x01\x12a\0\xE6Wa\x02\x7Fa\x11\x02V[`$5`D5\x91`d5\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\0\xE6W`\x845s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\0\xE6W`\xE45s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\0\xE6Wa\x01$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\0\xE6Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE6Wa\x03.\x906\x90`\x04\x01a\x11%V[\x96a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE6Wa\x03P\x906\x90`\x04\x01a\x11%V[\x94\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x97`\xFF\x89`@\x1C\x16\x15\x98g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x0BgW[`\x01\x14\x90\x81a\x0B]W[\x15\x90\x81a\x0BTW[Pa\x0B,W\x89`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\n\xD7W[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x15a\nyW\x80\x15a\n\x1BW\x81\x15a\t\x97W\x82\x15a\t\x13W\x83\x15a\x08\x8FW\x84\x15a\x08\x0BW\x85\x15a\x07\x87W`\x05U`\x06U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x02T\x16\x17`\x02U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x03T\x16\x17`\x03U`\xA45`\x07U`\xC45`\x08U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04T\x16\x17`\x04Ua\x01\x045`\tU\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x83Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06\xD9Wa\x05\x19\x81a\x05\x14`\nTa\x10\x13V[a\x11\xE0V[` \x94`\x1F\x82\x11`\x01\x14a\x07\x06Wa\x05J\x92\x93\x94\x95\x82\x91_\x92a\x06GW[PP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nU[\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x06\xD9Wa\x05t\x82a\x05o`\x0BTa\x10\x13V[a\x120V[` \x90`\x1F\x83\x11`\x01\x14a\x06RW\x91\x80a\x05\xA6\x92a\x05\xAE\x95\x94_\x92a\x06GWPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BUa\x13\x0CV[a\x05\xB4W\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x01Q\x90P\x86\x80a\x057V[\x90`\x1F\x19\x83\x16\x91`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x92_[\x81\x81\x10a\x06\xC1WP\x91`\x01\x93\x91\x85a\x05\xAE\x97\x96\x94\x10a\x06\xA9W[PPP\x81\x1B\x01`\x0BUa\x13\x0CV[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x06\x9BV[\x92\x93` `\x01\x81\x92\x87\x86\x01Q\x81U\x01\x95\x01\x93\x01a\x06\x81V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x1F\x19\x82\x16\x95`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x91_[\x88\x81\x10a\x07oWP\x83`\x01\x95\x96\x97\x98\x10a\x07WW[PPP\x81\x1B\x01`\nUa\x05NV[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x07IV[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x074V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FInitial appchain owner cannot be`D\x82\x01R\x7F zero address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSequencing contract address cann`D\x82\x01R\x7Fot be zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FArbitrum inbox address cannot be`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FArbitrum bridge address cannot b`D\x82\x01R\x7Fe zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FSequencing chain ID cannot be ze`D\x82\x01R\x7Fro\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FOwner cannot be zero address\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x8Aa\x03\xF6V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x8Ca\x03\xA3V[0;\x15\x91Pa\x03\x9BV[\x8B\x91Pa\x03\x91V[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\tT`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\x05T`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x02T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\x07T`@Q\x90\x81R\xF3[4a\0\xE6Wa\x0C\x9F6a\x10\xB1V[a\x0C\xC1s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x11{V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06\xD9Wa\x0C\xDF\x81a\x05o`\x0BTa\x10\x13V[_\x91`\x1F\x82\x11`\x01\x14a\rOWa\r,\x82\x80\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95_\x91a\rDW[P_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BU[a\r?`@Q\x92\x83\x92\x83a\x12\x80V[\x03\x90\xA1\0[\x90P\x83\x015\x86a\r\x1AV[`\x1F\x19\x82\x16`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x90_[\x81\x81\x10a\r\xD7WP\x93\x83\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95\x10a\r\xBEW[PP`\x01\x82\x81\x1B\x01`\x0BUa\r0V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\r\xAEV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\r|V[4a\0\xE6Wa\r\xFD6a\x10\xB1V[a\x0E\x1Fs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x11{V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06\xD9Wa\x0E=\x81a\x05\x14`\nTa\x10\x13V[_\x91`\x1F\x82\x11`\x01\x14a\x0E\x9BWa\x0E\x89\x82\x80\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95_\x91a\rDWP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nUa\r?`@Q\x92\x83\x92\x83a\x12\x80V[`\x1F\x19\x82\x16`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x90_[\x81\x81\x10a\x0F#WP\x93\x83\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95\x10a\x0F\nW[PP`\x01\x82\x81\x1B\x01`\nUa\r0V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x0E\xFAV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x0E\xC8V[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W`@Q_`\x0BTa\x0F\x8E\x81a\x10\x13V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02#WP`\x01\x14a\x0F\xB5Wa\x01\xC1\x83a\x01\xB5\x81\x85\x03\x82a\x10dV[`\x0B_\x90\x81R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x93\x92P\x90[\x80\x82\x10a\x0F\xF9WP\x90\x91P\x81\x01` \x01a\x01\xB5a\x01\xA5V[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x0F\xE1V[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x10ZW[` \x83\x10\x14a\x10-WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x10\"V[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06\xD9W`@RV[`\x1F\x19`\x1F` `@\x94\x81\x85R\x80Q\x91\x82\x91\x82\x82\x88\x01R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x90` `\x03\x19\x83\x01\x12a\0\xE6W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE6W\x82`#\x82\x01\x12\x15a\0\xE6W\x80`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\0\xE6W`$\x84\x83\x01\x01\x11a\0\xE6W`$\x01\x91\x90V[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\0\xE6WV[\x81`\x1F\x82\x01\x12\x15a\0\xE6W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x06\xD9W`@Q\x92a\x11Z` `\x1F\x19`\x1F\x86\x01\x16\x01\x85a\x10dV[\x82\x84R` \x83\x83\x01\x01\x11a\0\xE6W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\x11\x82WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCaller is not the owner\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`\x1F\x81\x11a\x11\xECWPPV[`\n_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x12&W[`\x1F\x01`\x05\x1C\x01\x90[\x81\x81\x10a\x12\x1BWPPV[_\x81U`\x01\x01a\x12\x10V[\x90\x91P\x81\x90a\x12\x07V[`\x1F\x81\x11a\x12#\xA9f.\xFC\x9C\"\x9Cj\0", + b"`\x80\x80`@R4`\xAAW_Q` a\x16\xBE_9_Q\x90_RT`\xFF\x81`@\x1C\x16`\x9BW`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01`IW[`@Qa\x16\x0F\x90\x81a\0\xAF\x829\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x16\xBE_9_Q\x90_RU\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_\x80`:V[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x07C\xBFn\x14a\x12\x03W\x80c\x18\xB5\xCE\x81\x14a\x11\xD0W\x80c)\x08\x03V\x14a\x10\x84W\x80cK\x8B\xE3\xF7\x14a\x0F&W\x80cT\xFDMP\x14a\x0E\x81W\x80cW\xD1\xBA%\x14a\x0EdW\x80cn\xDDl\t\x14a\x0E1W\x80cr@\xF9\xAF\x14a\x0C\xD1W\x80c\x85\xE1\xF4\xD0\x14a\x0C\xB4W\x80c\x8D\xA5\xCB[\x14a\x0C\x82W\x80c\xA3\xC6\xE1\xE7\x14a\x0CeW\x80c\xAAjC\xD8\x14a\x0C2W\x80c\xBFm\xB6\xF8\x14a\x0B\xFFW\x80c\xBFy\xFD\x1C\x14a\x02{W\x80c\xC7\xA7`\x95\x14a\x01\x83W\x80c\xD1\xF4s|\x14a\x01fW\x80c\xF2\xFD\xE3\x8B\x14a\x01\0Wc\xF8\xA1D\xBE\x14a\0\xDFW_\x80\xFD[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\x06T`@Q\x90\x81R\xF3[_\x80\xFD[4a\0\xFCW` `\x03\x196\x01\x12a\0\xFCWa\x01da\x01\x1Ca\x13\x97V[a\x01>s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x14\x10V[a\x01_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x15$V[a\x15\x89V[\0[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\x08T`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW`@Q_`\nTa\x01\xA3\x81a\x12\xA8V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x029WP`\x01\x14a\x01\xDBW[a\x01\xD7\x83a\x01\xCB\x81\x85\x03\x82a\x12\xF9V[`@Q\x91\x82\x91\x82a\x13\x1CV[\x03\x90\xF3[`\n_\x90\x81R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x93\x92P\x90[\x80\x82\x10a\x02\x1FWP\x90\x91P\x81\x01` \x01a\x01\xCBa\x01\xBBV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x02\x07V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16` \x80\x86\x01\x91\x90\x91R\x91\x15\x15`\x05\x1B\x84\x01\x90\x91\x01\x91Pa\x01\xCB\x90Pa\x01\xBBV[4a\0\xFCWa\x01\x80`\x03\x196\x01\x12a\0\xFCWa\x02\x95a\x13\x97V[`$5`D5\x91`d5\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\0\xFCW`\x845s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\0\xFCW`\xE45s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\0\xFCWa\x01$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\0\xFCWa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xFCWa\x03D\x906\x90`\x04\x01a\x13\xBAV[\x96a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xFCWa\x03f\x906\x90`\x04\x01a\x13\xBAV[\x94\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x97`\xFF\x89`@\x1C\x16\x15\x98g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x0B\xF7W[`\x01\x14\x90\x81a\x0B\xEDW[\x15\x90\x81a\x0B\xE4W[Pa\x0B\xBCW\x89`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x0BgW[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x15a\x0B\tW\x80\x15a\n\xABW\x81\x15a\n'W\x82\x15a\t\xA3W\x83\x15a\t\x1FW\x84\x15a\x08\x9BW\x85\x15a\x08\x17W`\x05U`\x06U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x02T\x16\x17`\x02U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x03T\x16\x17`\x03U`\xA45`\x07U`\xC45`\x08U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04T\x16\x17`\x04Ua\x01\x045`\tUa\x04\xEC`\x0CTa\x12\xA8V[`\x1F\x81\x11a\x07\xD9W[P`\n\x7F1.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01`\x0CU\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x83Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07+Wa\x05k\x81a\x05f`\nTa\x12\xA8V[a\x14\x8BV[` \x94`\x1F\x82\x11`\x01\x14a\x07XWa\x05\x9C\x92\x93\x94\x95\x82\x91_\x92a\x06\x99W[PP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nU[\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07+Wa\x05\xC6\x82a\x05\xC1`\x0BTa\x12\xA8V[a\x14\xC5V[` \x90`\x1F\x83\x11`\x01\x14a\x06\xA4W\x91\x80a\x05\xF8\x92a\x06\0\x95\x94_\x92a\x06\x99WPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BUa\x15\x89V[a\x06\x06W\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x01Q\x90P\x86\x80a\x05\x89V[\x90`\x1F\x19\x83\x16\x91`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x92_[\x81\x81\x10a\x07\x13WP\x91`\x01\x93\x91\x85a\x06\0\x97\x96\x94\x10a\x06\xFBW[PPP\x81\x1B\x01`\x0BUa\x15\x89V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x06\xEDV[\x92\x93` `\x01\x81\x92\x87\x86\x01Q\x81U\x01\x95\x01\x93\x01a\x06\xD3V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x1F\x19\x82\x16\x95`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x91_[\x88\x81\x10a\x07\xC1WP\x83`\x01\x95\x96\x97\x98\x10a\x07\xA9W[PPP\x81\x1B\x01`\nUa\x05\xA0V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x07\x9BV[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x07\x86V[`\x0C_Ra\x08\x11\x90`\x1F\x01`\x05\x1C\x7F\xDFif\xC9q\x05\x1C=T\xECY\x16&\x06S\x14\x93\xA5\x14\x04\xA0\x02\x84/V\0\x9D~\\\xF4\xA8\xC7\x90\x81\x01\x90a\x14uV[\x85a\x04\xF5V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FInitial appchain owner cannot be`D\x82\x01R\x7F zero address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSequencing contract address cann`D\x82\x01R\x7Fot be zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FArbitrum inbox address cannot be`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FArbitrum bridge address cannot b`D\x82\x01R\x7Fe zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FSequencing chain ID cannot be ze`D\x82\x01R\x7Fro\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FOwner cannot be zero address\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x8Aa\x04\x0CV[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x8Ca\x03\xB9V[0;\x15\x91Pa\x03\xB1V[\x8B\x91Pa\x03\xA7V[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\tT`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\x05T`@Q\x90\x81R\xF3[4a\0\xFCWa\x0C\xDF6a\x13FV[a\r\x01s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x14\x10V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07+Wa\r\x1B`\x0CTa\x12\xA8V[`\x1F\x81\x11a\r\xD8W[P_`\x1F\x82\x11`\x01\x14a\r`W\x81\x90a\rP\x93_\x92a\rUWPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0CU\0[\x015\x90P\x83\x80a\x05\x89V[`\x1F\x19\x82\x16\x92\x7F\xDFif\xC9q\x05\x1C=T\xECY\x16&\x06S\x14\x93\xA5\x14\x04\xA0\x02\x84/V\0\x9D~\\\xF4\xA8\xC7\x91_[\x85\x81\x10a\r\xC0WP\x83`\x01\x95\x10a\r\xA7W[PPP\x81\x1B\x01`\x0CU\0[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U\x82\x80\x80a\r\x9CV[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01a\r\x8AV[`\x0C_Ra\x0E!\x90\x7F\xDFif\xC9q\x05\x1C=T\xECY\x16&\x06S\x14\x93\xA5\x14\x04\xA0\x02\x84/V\0\x9D~\\\xF4\xA8\xC7`\x1F\x84\x01`\x05\x1C\x81\x01\x91` \x85\x10a\x0E'W[`\x1F\x01`\x05\x1C\x01\x90a\x14uV[\x82a\r$V[\x90\x91P\x81\x90a\x0E\x14V[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x02T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\x07T`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW`@Q_`\x0CTa\x0E\xA1\x81a\x12\xA8V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x029WP`\x01\x14a\x0E\xC8Wa\x01\xD7\x83a\x01\xCB\x81\x85\x03\x82a\x12\xF9V[`\x0C_\x90\x81R\x7F\xDFif\xC9q\x05\x1C=T\xECY\x16&\x06S\x14\x93\xA5\x14\x04\xA0\x02\x84/V\0\x9D~\\\xF4\xA8\xC7\x93\x92P\x90[\x80\x82\x10a\x0F\x0CWP\x90\x91P\x81\x01` \x01a\x01\xCBa\x01\xBBV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x0E\xF4V[4a\0\xFCWa\x0F46a\x13FV[a\x0FVs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x14\x10V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07+Wa\x0Ft\x81a\x05\xC1`\x0BTa\x12\xA8V[_\x91`\x1F\x82\x11`\x01\x14a\x0F\xE4Wa\x0F\xC1\x82\x80\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95_\x91a\x0F\xD9W[P_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BU[a\x0F\xD4`@Q\x92\x83\x92\x83a\x14\xFDV[\x03\x90\xA1\0[\x90P\x83\x015\x86a\x0F\xAFV[`\x1F\x19\x82\x16`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x90_[\x81\x81\x10a\x10lWP\x93\x83\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95\x10a\x10SW[PP`\x01\x82\x81\x1B\x01`\x0BUa\x0F\xC5V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x10CV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x10\x11V[4a\0\xFCWa\x10\x926a\x13FV[a\x10\xB4s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x14\x10V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07+Wa\x10\xD2\x81a\x05f`\nTa\x12\xA8V[_\x91`\x1F\x82\x11`\x01\x14a\x110Wa\x11\x1E\x82\x80\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95_\x91a\x0F\xD9WP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nUa\x0F\xD4`@Q\x92\x83\x92\x83a\x14\xFDV[`\x1F\x19\x82\x16`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x90_[\x81\x81\x10a\x11\xB8WP\x93\x83\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95\x10a\x11\x9FW[PP`\x01\x82\x81\x1B\x01`\nUa\x0F\xC5V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x11\x8FV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x11]V[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW`@Q_`\x0BTa\x12#\x81a\x12\xA8V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x029WP`\x01\x14a\x12JWa\x01\xD7\x83a\x01\xCB\x81\x85\x03\x82a\x12\xF9V[`\x0B_\x90\x81R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x93\x92P\x90[\x80\x82\x10a\x12\x8EWP\x90\x91P\x81\x01` \x01a\x01\xCBa\x01\xBBV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x12vV[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x12\xEFW[` \x83\x10\x14a\x12\xC2WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x12\xB7V[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07+W`@RV[`\x1F\x19`\x1F` `@\x94\x81\x85R\x80Q\x91\x82\x91\x82\x82\x88\x01R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x90` `\x03\x19\x83\x01\x12a\0\xFCW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xFCW\x82`#\x82\x01\x12\x15a\0\xFCW\x80`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\0\xFCW`$\x84\x83\x01\x01\x11a\0\xFCW`$\x01\x91\x90V[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\0\xFCWV[\x81`\x1F\x82\x01\x12\x15a\0\xFCW\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07+W`@Q\x92a\x13\xEF` `\x1F\x19`\x1F\x86\x01\x16\x01\x85a\x12\xF9V[\x82\x84R` \x83\x83\x01\x01\x11a\0\xFCW\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\x14\x17WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCaller is not the owner\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x81\x81\x10a\x14\x80WPPV[_\x81U`\x01\x01a\x14uV[\x90`\x1F\x82\x11a\x14\x98WPPV[a\x14\xC3\x91`\n_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E'W`\x1F\x01`\x05\x1C\x01\x90a\x14uV[V[\x90`\x1F\x82\x11a\x14\xD2WPPV[a\x14\xC3\x91`\x0B_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E'W`\x1F\x01`\x05\x1C\x01\x90a\x14uV[\x90`\x1F\x83`@\x94`\x1F\x19\x93` \x86R\x81` \x87\x01R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x15a\x15+WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R` `$\x82\x01R\x7FNew owner cannot be zero address`D\x82\x01R\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x15\xAA\x81\x15\x15a\x15$V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0", ); /// The runtime bytecode of the contract, as deployed on the network. /// /// ```text - ///0x60806040526004361015610011575f80fd5b5f3560e01c80630743bf6e14610f6e57806318b5ce8114610f3b5780632908035614610def5780634b8be3f714610c9157806357d1ba2514610c745780636edd6c0914610c4157806385e1f4d014610c245780638da5cb5b14610bf2578063a3c6e1e714610bd5578063aa6a43d814610ba2578063bf6db6f814610b6f578063bf79fd1c14610265578063c7a760951461016d578063d1f4737c14610150578063f2fde38b146100ea5763f8a144be146100c9575f80fd5b346100e6575f6003193601126100e6576020600654604051908152f35b5f80fd5b346100e65760206003193601126100e65761014e610106611102565b61012873ffffffffffffffffffffffffffffffffffffffff5f5416331461117b565b61014973ffffffffffffffffffffffffffffffffffffffff821615156112a7565b61130c565b005b346100e6575f6003193601126100e6576020600854604051908152f35b346100e6575f6003193601126100e6576040515f600a5461018d81611013565b808452906001811690811561022357506001146101c5575b6101c1836101b581850382611064565b60405191829182611087565b0390f35b600a5f9081527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8939250905b808210610209575090915081016020016101b56101a5565b9192600181602092548385880101520191019092916101f1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506101b590506101a5565b346100e6576101806003193601126100e65761027f611102565b602435604435916064359273ffffffffffffffffffffffffffffffffffffffff84168094036100e65760843573ffffffffffffffffffffffffffffffffffffffff81168091036100e65760e43573ffffffffffffffffffffffffffffffffffffffff81168091036100e657610124359173ffffffffffffffffffffffffffffffffffffffff83168093036100e6576101443567ffffffffffffffff81116100e65761032e903690600401611125565b966101643567ffffffffffffffff81116100e657610350903690600401611125565b947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549760ff8960401c16159867ffffffffffffffff811680159081610b67575b6001149081610b5d575b159081610b54575b50610b2c578960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610ad7575b5073ffffffffffffffffffffffffffffffffffffffff881615610a79578015610a1b57811561099757821561091357831561088f57841561080b578515610787576005556006557fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035560a43560075560c4356008557fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455610104356009557fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155835167ffffffffffffffff81116106d95761051981610514600a54611013565b6111e0565b602094601f82116001146107065761054a9293949582915f92610647575b50505f198260011b9260031b1c19161790565b600a555b80519067ffffffffffffffff82116106d9576105748261056f600b54611013565b611230565b602090601f83116001146106525791806105a6926105ae95945f926106475750505f198260011b9260031b1c19161790565b600b5561130c565b6105b457005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b015190508680610537565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b8181106106c157509160019391856105ae979694106106a9575b505050811b01600b5561130c565b01515f1960f88460031b161c1916905585808061069b565b92936020600181928786015181550195019301610681565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19821695600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8915f5b88811061076f57508360019596979810610757575b505050811b01600a5561054e565b01515f1960f88460031b161c19169055858080610749565b91926020600181928685015181550194019201610734565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f496e697469616c20617070636861696e206f776e65722063616e6e6f7420626560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f53657175656e63696e6720636f6e747261637420616464726573732063616e6e60448201527f6f74206265207a65726f000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f417262697472756d20696e626f7820616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f417262697472756d2062726964676520616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53657175656e63696e6720636861696e2049442063616e6e6f74206265207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f776e65722063616e6e6f74206265207a65726f2061646472657373000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558a6103f6565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158c6103a3565b303b15915061039b565b8b9150610391565b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b346100e6575f6003193601126100e6576020600954604051908152f35b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100e6575f6003193601126100e6576020600554604051908152f35b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346100e6575f6003193601126100e6576020600754604051908152f35b346100e657610c9f366110b1565b610cc173ffffffffffffffffffffffffffffffffffffffff5f5416331461117b565b67ffffffffffffffff81116106d957610cdf8161056f600b54611013565b5f91601f8211600114610d4f57610d2c82807f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7955f91610d44575b505f198260011b9260031b1c19161790565b600b555b610d3f60405192839283611280565b0390a1005b905083013586610d1a565b601f198216600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b818110610dd7575093837f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a79510610dbe575b5050600182811b01600b55610d30565b5f1960f88560031b161c19908301351690558380610dae565b83860135835560209586019560019093019201610d7c565b346100e657610dfd366110b1565b610e1f73ffffffffffffffffffffffffffffffffffffffff5f5416331461117b565b67ffffffffffffffff81116106d957610e3d81610514600a54611013565b5f91601f8211600114610e9b57610e8982807f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c955f91610d4457505f198260011b9260031b1c19161790565b600a55610d3f60405192839283611280565b601f198216600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8905f5b818110610f23575093837f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c9510610f0a575b5050600182811b01600a55610d30565b5f1960f88560031b161c19908301351690558380610efa565b83860135835560209586019560019093019201610ec8565b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346100e6575f6003193601126100e6576040515f600b54610f8e81611013565b80845290600181169081156102235750600114610fb5576101c1836101b581850382611064565b600b5f9081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b808210610ff9575090915081016020016101b56101a5565b919260018160209254838588010152019101909291610fe1565b90600182811c9216801561105a575b602083101461102d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691611022565b90601f601f19910116810190811067ffffffffffffffff8211176106d957604052565b601f19601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b9060206003198301126100e65760043567ffffffffffffffff81116100e657826023820112156100e65780600401359267ffffffffffffffff84116100e657602484830101116100e6576024019190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100e657565b81601f820112156100e65780359067ffffffffffffffff82116106d9576040519261115a6020601f19601f8601160185611064565b828452602083830101116100e657815f926020809301838601378301015290565b1561118257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b601f81116111ec575050565b600a5f5260205f20906020601f840160051c83019310611226575b601f0160051c01905b81811061121b575050565b5f8155600101611210565b9091508190611207565b601f811161123c575050565b600b5f5260205f20906020601f840160051c83019310611276575b601f0160051c01905b81811061126b575050565b5f8155600101611260565b9091508190611257565b90601f83604094601f199360208652816020870152868601375f8582860101520116010190565b156112ae57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b73ffffffffffffffffffffffffffffffffffffffff1661132d8115156112a7565b73ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356 + ///0x60806040526004361015610011575f80fd5b5f3560e01c80630743bf6e1461120357806318b5ce81146111d057806329080356146110845780634b8be3f714610f2657806354fd4d5014610e8157806357d1ba2514610e645780636edd6c0914610e315780637240f9af14610cd157806385e1f4d014610cb45780638da5cb5b14610c82578063a3c6e1e714610c65578063aa6a43d814610c32578063bf6db6f814610bff578063bf79fd1c1461027b578063c7a7609514610183578063d1f4737c14610166578063f2fde38b146101005763f8a144be146100df575f80fd5b346100fc575f6003193601126100fc576020600654604051908152f35b5f80fd5b346100fc5760206003193601126100fc5761016461011c611397565b61013e73ffffffffffffffffffffffffffffffffffffffff5f54163314611410565b61015f73ffffffffffffffffffffffffffffffffffffffff82161515611524565b611589565b005b346100fc575f6003193601126100fc576020600854604051908152f35b346100fc575f6003193601126100fc576040515f600a546101a3816112a8565b808452906001811690811561023957506001146101db575b6101d7836101cb818503826112f9565b6040519182918261131c565b0390f35b600a5f9081527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8939250905b80821061021f575090915081016020016101cb6101bb565b919260018160209254838588010152019101909291610207565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506101cb90506101bb565b346100fc576101806003193601126100fc57610295611397565b602435604435916064359273ffffffffffffffffffffffffffffffffffffffff84168094036100fc5760843573ffffffffffffffffffffffffffffffffffffffff81168091036100fc5760e43573ffffffffffffffffffffffffffffffffffffffff81168091036100fc57610124359173ffffffffffffffffffffffffffffffffffffffff83168093036100fc576101443567ffffffffffffffff81116100fc576103449036906004016113ba565b966101643567ffffffffffffffff81116100fc576103669036906004016113ba565b947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549760ff8960401c16159867ffffffffffffffff811680159081610bf7575b6001149081610bed575b159081610be4575b50610bbc578960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610b67575b5073ffffffffffffffffffffffffffffffffffffffff881615610b09578015610aab578115610a275782156109a357831561091f57841561089b578515610817576005556006557fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035560a43560075560c4356008557fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455610104356009556104ec600c546112a8565b601f81116107d9575b50600a7f312e302e3000000000000000000000000000000000000000000000000000000001600c557fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155835167ffffffffffffffff811161072b5761056b81610566600a546112a8565b61148b565b602094601f82116001146107585761059c9293949582915f92610699575b50505f198260011b9260031b1c19161790565b600a555b80519067ffffffffffffffff821161072b576105c6826105c1600b546112a8565b6114c5565b602090601f83116001146106a45791806105f89261060095945f926106995750505f198260011b9260031b1c19161790565b600b55611589565b61060657005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b015190508680610589565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b8181106107135750916001939185610600979694106106fb575b505050811b01600b55611589565b01515f1960f88460031b161c191690558580806106ed565b929360206001819287860151815501950193016106d3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19821695600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8915f5b8881106107c1575083600195969798106107a9575b505050811b01600a556105a0565b01515f1960f88460031b161c1916905585808061079b565b91926020600181928685015181550194019201610786565b600c5f5261081190601f0160051c7fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c790810190611475565b856104f5565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f496e697469616c20617070636861696e206f776e65722063616e6e6f7420626560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f53657175656e63696e6720636f6e747261637420616464726573732063616e6e60448201527f6f74206265207a65726f000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f417262697472756d20696e626f7820616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f417262697472756d2062726964676520616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53657175656e63696e6720636861696e2049442063616e6e6f74206265207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f776e65722063616e6e6f74206265207a65726f2061646472657373000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558a61040c565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158c6103b9565b303b1591506103b1565b8b91506103a7565b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b346100fc575f6003193601126100fc576020600954604051908152f35b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100fc575f6003193601126100fc576020600554604051908152f35b346100fc57610cdf36611346565b610d0173ffffffffffffffffffffffffffffffffffffffff5f54163314611410565b67ffffffffffffffff811161072b57610d1b600c546112a8565b601f8111610dd8575b505f601f8211600114610d60578190610d50935f92610d555750505f198260011b9260031b1c19161790565b600c55005b013590508380610589565b601f198216927fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915f5b858110610dc057508360019510610da7575b505050811b01600c55005b5f1960f88560031b161c19910135169055828080610d9c565b90926020600181928686013581550194019101610d8a565b600c5f52610e21907fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7601f840160051c81019160208510610e27575b601f0160051c0190611475565b82610d24565b9091508190610e14565b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346100fc575f6003193601126100fc576020600754604051908152f35b346100fc575f6003193601126100fc576040515f600c54610ea1816112a8565b80845290600181169081156102395750600114610ec8576101d7836101cb818503826112f9565b600c5f9081527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7939250905b808210610f0c575090915081016020016101cb6101bb565b919260018160209254838588010152019101909291610ef4565b346100fc57610f3436611346565b610f5673ffffffffffffffffffffffffffffffffffffffff5f54163314611410565b67ffffffffffffffff811161072b57610f74816105c1600b546112a8565b5f91601f8211600114610fe457610fc182807f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7955f91610fd9575b505f198260011b9260031b1c19161790565b600b555b610fd4604051928392836114fd565b0390a1005b905083013586610faf565b601f198216600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b81811061106c575093837f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a79510611053575b5050600182811b01600b55610fc5565b5f1960f88560031b161c19908301351690558380611043565b83860135835560209586019560019093019201611011565b346100fc5761109236611346565b6110b473ffffffffffffffffffffffffffffffffffffffff5f54163314611410565b67ffffffffffffffff811161072b576110d281610566600a546112a8565b5f91601f82116001146111305761111e82807f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c955f91610fd957505f198260011b9260031b1c19161790565b600a55610fd4604051928392836114fd565b601f198216600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8905f5b8181106111b8575093837f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c951061119f575b5050600182811b01600a55610fc5565b5f1960f88560031b161c1990830135169055838061118f565b8386013583556020958601956001909301920161115d565b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346100fc575f6003193601126100fc576040515f600b54611223816112a8565b8084529060018116908115610239575060011461124a576101d7836101cb818503826112f9565b600b5f9081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b80821061128e575090915081016020016101cb6101bb565b919260018160209254838588010152019101909291611276565b90600182811c921680156112ef575b60208310146112c257565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916112b7565b90601f601f19910116810190811067ffffffffffffffff82111761072b57604052565b601f19601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b9060206003198301126100fc5760043567ffffffffffffffff81116100fc57826023820112156100fc5780600401359267ffffffffffffffff84116100fc57602484830101116100fc576024019190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100fc57565b81601f820112156100fc5780359067ffffffffffffffff821161072b57604051926113ef6020601f19601f86011601856112f9565b828452602083830101116100fc57815f926020809301838601378301015290565b1561141757565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b818110611480575050565b5f8155600101611475565b90601f8211611498575050565b6114c391600a5f5260205f20906020601f840160051c83019310610e2757601f0160051c0190611475565b565b90601f82116114d2575050565b6114c391600b5f5260205f20906020601f840160051c83019310610e2757601f0160051c0190611475565b90601f83604094601f199360208652816020870152868601375f8582860101520116010190565b1561152b57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166115aa811515611524565b73ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x07C\xBFn\x14a\x0FnW\x80c\x18\xB5\xCE\x81\x14a\x0F;W\x80c)\x08\x03V\x14a\r\xEFW\x80cK\x8B\xE3\xF7\x14a\x0C\x91W\x80cW\xD1\xBA%\x14a\x0CtW\x80cn\xDDl\t\x14a\x0CAW\x80c\x85\xE1\xF4\xD0\x14a\x0C$W\x80c\x8D\xA5\xCB[\x14a\x0B\xF2W\x80c\xA3\xC6\xE1\xE7\x14a\x0B\xD5W\x80c\xAAjC\xD8\x14a\x0B\xA2W\x80c\xBFm\xB6\xF8\x14a\x0BoW\x80c\xBFy\xFD\x1C\x14a\x02eW\x80c\xC7\xA7`\x95\x14a\x01mW\x80c\xD1\xF4s|\x14a\x01PW\x80c\xF2\xFD\xE3\x8B\x14a\0\xEAWc\xF8\xA1D\xBE\x14a\0\xC9W_\x80\xFD[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\x06T`@Q\x90\x81R\xF3[_\x80\xFD[4a\0\xE6W` `\x03\x196\x01\x12a\0\xE6Wa\x01Na\x01\x06a\x11\x02V[a\x01(s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x11{V[a\x01Is\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x12\xA7V[a\x13\x0CV[\0[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\x08T`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W`@Q_`\nTa\x01\x8D\x81a\x10\x13V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02#WP`\x01\x14a\x01\xC5W[a\x01\xC1\x83a\x01\xB5\x81\x85\x03\x82a\x10dV[`@Q\x91\x82\x91\x82a\x10\x87V[\x03\x90\xF3[`\n_\x90\x81R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x93\x92P\x90[\x80\x82\x10a\x02\tWP\x90\x91P\x81\x01` \x01a\x01\xB5a\x01\xA5V[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x01\xF1V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16` \x80\x86\x01\x91\x90\x91R\x91\x15\x15`\x05\x1B\x84\x01\x90\x91\x01\x91Pa\x01\xB5\x90Pa\x01\xA5V[4a\0\xE6Wa\x01\x80`\x03\x196\x01\x12a\0\xE6Wa\x02\x7Fa\x11\x02V[`$5`D5\x91`d5\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\0\xE6W`\x845s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\0\xE6W`\xE45s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\0\xE6Wa\x01$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\0\xE6Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE6Wa\x03.\x906\x90`\x04\x01a\x11%V[\x96a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE6Wa\x03P\x906\x90`\x04\x01a\x11%V[\x94\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x97`\xFF\x89`@\x1C\x16\x15\x98g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x0BgW[`\x01\x14\x90\x81a\x0B]W[\x15\x90\x81a\x0BTW[Pa\x0B,W\x89`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\n\xD7W[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x15a\nyW\x80\x15a\n\x1BW\x81\x15a\t\x97W\x82\x15a\t\x13W\x83\x15a\x08\x8FW\x84\x15a\x08\x0BW\x85\x15a\x07\x87W`\x05U`\x06U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x02T\x16\x17`\x02U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x03T\x16\x17`\x03U`\xA45`\x07U`\xC45`\x08U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04T\x16\x17`\x04Ua\x01\x045`\tU\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x83Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06\xD9Wa\x05\x19\x81a\x05\x14`\nTa\x10\x13V[a\x11\xE0V[` \x94`\x1F\x82\x11`\x01\x14a\x07\x06Wa\x05J\x92\x93\x94\x95\x82\x91_\x92a\x06GW[PP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nU[\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x06\xD9Wa\x05t\x82a\x05o`\x0BTa\x10\x13V[a\x120V[` \x90`\x1F\x83\x11`\x01\x14a\x06RW\x91\x80a\x05\xA6\x92a\x05\xAE\x95\x94_\x92a\x06GWPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BUa\x13\x0CV[a\x05\xB4W\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x01Q\x90P\x86\x80a\x057V[\x90`\x1F\x19\x83\x16\x91`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x92_[\x81\x81\x10a\x06\xC1WP\x91`\x01\x93\x91\x85a\x05\xAE\x97\x96\x94\x10a\x06\xA9W[PPP\x81\x1B\x01`\x0BUa\x13\x0CV[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x06\x9BV[\x92\x93` `\x01\x81\x92\x87\x86\x01Q\x81U\x01\x95\x01\x93\x01a\x06\x81V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x1F\x19\x82\x16\x95`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x91_[\x88\x81\x10a\x07oWP\x83`\x01\x95\x96\x97\x98\x10a\x07WW[PPP\x81\x1B\x01`\nUa\x05NV[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x07IV[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x074V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FInitial appchain owner cannot be`D\x82\x01R\x7F zero address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSequencing contract address cann`D\x82\x01R\x7Fot be zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FArbitrum inbox address cannot be`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FArbitrum bridge address cannot b`D\x82\x01R\x7Fe zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FSequencing chain ID cannot be ze`D\x82\x01R\x7Fro\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FOwner cannot be zero address\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x8Aa\x03\xF6V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x8Ca\x03\xA3V[0;\x15\x91Pa\x03\x9BV[\x8B\x91Pa\x03\x91V[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\tT`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\x05T`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x02T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\x07T`@Q\x90\x81R\xF3[4a\0\xE6Wa\x0C\x9F6a\x10\xB1V[a\x0C\xC1s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x11{V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06\xD9Wa\x0C\xDF\x81a\x05o`\x0BTa\x10\x13V[_\x91`\x1F\x82\x11`\x01\x14a\rOWa\r,\x82\x80\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95_\x91a\rDW[P_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BU[a\r?`@Q\x92\x83\x92\x83a\x12\x80V[\x03\x90\xA1\0[\x90P\x83\x015\x86a\r\x1AV[`\x1F\x19\x82\x16`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x90_[\x81\x81\x10a\r\xD7WP\x93\x83\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95\x10a\r\xBEW[PP`\x01\x82\x81\x1B\x01`\x0BUa\r0V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\r\xAEV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\r|V[4a\0\xE6Wa\r\xFD6a\x10\xB1V[a\x0E\x1Fs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x11{V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06\xD9Wa\x0E=\x81a\x05\x14`\nTa\x10\x13V[_\x91`\x1F\x82\x11`\x01\x14a\x0E\x9BWa\x0E\x89\x82\x80\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95_\x91a\rDWP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nUa\r?`@Q\x92\x83\x92\x83a\x12\x80V[`\x1F\x19\x82\x16`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x90_[\x81\x81\x10a\x0F#WP\x93\x83\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95\x10a\x0F\nW[PP`\x01\x82\x81\x1B\x01`\nUa\r0V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x0E\xFAV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x0E\xC8V[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W`@Q_`\x0BTa\x0F\x8E\x81a\x10\x13V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02#WP`\x01\x14a\x0F\xB5Wa\x01\xC1\x83a\x01\xB5\x81\x85\x03\x82a\x10dV[`\x0B_\x90\x81R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x93\x92P\x90[\x80\x82\x10a\x0F\xF9WP\x90\x91P\x81\x01` \x01a\x01\xB5a\x01\xA5V[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x0F\xE1V[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x10ZW[` \x83\x10\x14a\x10-WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x10\"V[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06\xD9W`@RV[`\x1F\x19`\x1F` `@\x94\x81\x85R\x80Q\x91\x82\x91\x82\x82\x88\x01R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x90` `\x03\x19\x83\x01\x12a\0\xE6W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE6W\x82`#\x82\x01\x12\x15a\0\xE6W\x80`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\0\xE6W`$\x84\x83\x01\x01\x11a\0\xE6W`$\x01\x91\x90V[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\0\xE6WV[\x81`\x1F\x82\x01\x12\x15a\0\xE6W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x06\xD9W`@Q\x92a\x11Z` `\x1F\x19`\x1F\x86\x01\x16\x01\x85a\x10dV[\x82\x84R` \x83\x83\x01\x01\x11a\0\xE6W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\x11\x82WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCaller is not the owner\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`\x1F\x81\x11a\x11\xECWPPV[`\n_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x12&W[`\x1F\x01`\x05\x1C\x01\x90[\x81\x81\x10a\x12\x1BWPPV[_\x81U`\x01\x01a\x12\x10V[\x90\x91P\x81\x90a\x12\x07V[`\x1F\x81\x11a\x12s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x14\x10V[a\x01_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x15$V[a\x15\x89V[\0[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\x08T`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW`@Q_`\nTa\x01\xA3\x81a\x12\xA8V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x029WP`\x01\x14a\x01\xDBW[a\x01\xD7\x83a\x01\xCB\x81\x85\x03\x82a\x12\xF9V[`@Q\x91\x82\x91\x82a\x13\x1CV[\x03\x90\xF3[`\n_\x90\x81R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x93\x92P\x90[\x80\x82\x10a\x02\x1FWP\x90\x91P\x81\x01` \x01a\x01\xCBa\x01\xBBV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x02\x07V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16` \x80\x86\x01\x91\x90\x91R\x91\x15\x15`\x05\x1B\x84\x01\x90\x91\x01\x91Pa\x01\xCB\x90Pa\x01\xBBV[4a\0\xFCWa\x01\x80`\x03\x196\x01\x12a\0\xFCWa\x02\x95a\x13\x97V[`$5`D5\x91`d5\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\0\xFCW`\x845s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\0\xFCW`\xE45s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\0\xFCWa\x01$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\0\xFCWa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xFCWa\x03D\x906\x90`\x04\x01a\x13\xBAV[\x96a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xFCWa\x03f\x906\x90`\x04\x01a\x13\xBAV[\x94\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x97`\xFF\x89`@\x1C\x16\x15\x98g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x0B\xF7W[`\x01\x14\x90\x81a\x0B\xEDW[\x15\x90\x81a\x0B\xE4W[Pa\x0B\xBCW\x89`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x0BgW[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x15a\x0B\tW\x80\x15a\n\xABW\x81\x15a\n'W\x82\x15a\t\xA3W\x83\x15a\t\x1FW\x84\x15a\x08\x9BW\x85\x15a\x08\x17W`\x05U`\x06U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x02T\x16\x17`\x02U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x03T\x16\x17`\x03U`\xA45`\x07U`\xC45`\x08U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04T\x16\x17`\x04Ua\x01\x045`\tUa\x04\xEC`\x0CTa\x12\xA8V[`\x1F\x81\x11a\x07\xD9W[P`\n\x7F1.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01`\x0CU\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x83Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07+Wa\x05k\x81a\x05f`\nTa\x12\xA8V[a\x14\x8BV[` \x94`\x1F\x82\x11`\x01\x14a\x07XWa\x05\x9C\x92\x93\x94\x95\x82\x91_\x92a\x06\x99W[PP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nU[\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07+Wa\x05\xC6\x82a\x05\xC1`\x0BTa\x12\xA8V[a\x14\xC5V[` \x90`\x1F\x83\x11`\x01\x14a\x06\xA4W\x91\x80a\x05\xF8\x92a\x06\0\x95\x94_\x92a\x06\x99WPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BUa\x15\x89V[a\x06\x06W\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x01Q\x90P\x86\x80a\x05\x89V[\x90`\x1F\x19\x83\x16\x91`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x92_[\x81\x81\x10a\x07\x13WP\x91`\x01\x93\x91\x85a\x06\0\x97\x96\x94\x10a\x06\xFBW[PPP\x81\x1B\x01`\x0BUa\x15\x89V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x06\xEDV[\x92\x93` `\x01\x81\x92\x87\x86\x01Q\x81U\x01\x95\x01\x93\x01a\x06\xD3V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x1F\x19\x82\x16\x95`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x91_[\x88\x81\x10a\x07\xC1WP\x83`\x01\x95\x96\x97\x98\x10a\x07\xA9W[PPP\x81\x1B\x01`\nUa\x05\xA0V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x07\x9BV[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x07\x86V[`\x0C_Ra\x08\x11\x90`\x1F\x01`\x05\x1C\x7F\xDFif\xC9q\x05\x1C=T\xECY\x16&\x06S\x14\x93\xA5\x14\x04\xA0\x02\x84/V\0\x9D~\\\xF4\xA8\xC7\x90\x81\x01\x90a\x14uV[\x85a\x04\xF5V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FInitial appchain owner cannot be`D\x82\x01R\x7F zero address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSequencing contract address cann`D\x82\x01R\x7Fot be zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FArbitrum inbox address cannot be`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FArbitrum bridge address cannot b`D\x82\x01R\x7Fe zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FSequencing chain ID cannot be ze`D\x82\x01R\x7Fro\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FOwner cannot be zero address\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x8Aa\x04\x0CV[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x8Ca\x03\xB9V[0;\x15\x91Pa\x03\xB1V[\x8B\x91Pa\x03\xA7V[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\tT`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\x05T`@Q\x90\x81R\xF3[4a\0\xFCWa\x0C\xDF6a\x13FV[a\r\x01s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x14\x10V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07+Wa\r\x1B`\x0CTa\x12\xA8V[`\x1F\x81\x11a\r\xD8W[P_`\x1F\x82\x11`\x01\x14a\r`W\x81\x90a\rP\x93_\x92a\rUWPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0CU\0[\x015\x90P\x83\x80a\x05\x89V[`\x1F\x19\x82\x16\x92\x7F\xDFif\xC9q\x05\x1C=T\xECY\x16&\x06S\x14\x93\xA5\x14\x04\xA0\x02\x84/V\0\x9D~\\\xF4\xA8\xC7\x91_[\x85\x81\x10a\r\xC0WP\x83`\x01\x95\x10a\r\xA7W[PPP\x81\x1B\x01`\x0CU\0[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U\x82\x80\x80a\r\x9CV[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01a\r\x8AV[`\x0C_Ra\x0E!\x90\x7F\xDFif\xC9q\x05\x1C=T\xECY\x16&\x06S\x14\x93\xA5\x14\x04\xA0\x02\x84/V\0\x9D~\\\xF4\xA8\xC7`\x1F\x84\x01`\x05\x1C\x81\x01\x91` \x85\x10a\x0E'W[`\x1F\x01`\x05\x1C\x01\x90a\x14uV[\x82a\r$V[\x90\x91P\x81\x90a\x0E\x14V[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x02T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\x07T`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW`@Q_`\x0CTa\x0E\xA1\x81a\x12\xA8V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x029WP`\x01\x14a\x0E\xC8Wa\x01\xD7\x83a\x01\xCB\x81\x85\x03\x82a\x12\xF9V[`\x0C_\x90\x81R\x7F\xDFif\xC9q\x05\x1C=T\xECY\x16&\x06S\x14\x93\xA5\x14\x04\xA0\x02\x84/V\0\x9D~\\\xF4\xA8\xC7\x93\x92P\x90[\x80\x82\x10a\x0F\x0CWP\x90\x91P\x81\x01` \x01a\x01\xCBa\x01\xBBV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x0E\xF4V[4a\0\xFCWa\x0F46a\x13FV[a\x0FVs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x14\x10V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07+Wa\x0Ft\x81a\x05\xC1`\x0BTa\x12\xA8V[_\x91`\x1F\x82\x11`\x01\x14a\x0F\xE4Wa\x0F\xC1\x82\x80\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95_\x91a\x0F\xD9W[P_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BU[a\x0F\xD4`@Q\x92\x83\x92\x83a\x14\xFDV[\x03\x90\xA1\0[\x90P\x83\x015\x86a\x0F\xAFV[`\x1F\x19\x82\x16`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x90_[\x81\x81\x10a\x10lWP\x93\x83\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95\x10a\x10SW[PP`\x01\x82\x81\x1B\x01`\x0BUa\x0F\xC5V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x10CV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x10\x11V[4a\0\xFCWa\x10\x926a\x13FV[a\x10\xB4s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x14\x10V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07+Wa\x10\xD2\x81a\x05f`\nTa\x12\xA8V[_\x91`\x1F\x82\x11`\x01\x14a\x110Wa\x11\x1E\x82\x80\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95_\x91a\x0F\xD9WP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nUa\x0F\xD4`@Q\x92\x83\x92\x83a\x14\xFDV[`\x1F\x19\x82\x16`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x90_[\x81\x81\x10a\x11\xB8WP\x93\x83\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95\x10a\x11\x9FW[PP`\x01\x82\x81\x1B\x01`\nUa\x0F\xC5V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x11\x8FV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x11]V[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW`@Q_`\x0BTa\x12#\x81a\x12\xA8V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x029WP`\x01\x14a\x12JWa\x01\xD7\x83a\x01\xCB\x81\x85\x03\x82a\x12\xF9V[`\x0B_\x90\x81R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x93\x92P\x90[\x80\x82\x10a\x12\x8EWP\x90\x91P\x81\x01` \x01a\x01\xCBa\x01\xBBV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x12vV[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x12\xEFW[` \x83\x10\x14a\x12\xC2WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x12\xB7V[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07+W`@RV[`\x1F\x19`\x1F` `@\x94\x81\x85R\x80Q\x91\x82\x91\x82\x82\x88\x01R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x90` `\x03\x19\x83\x01\x12a\0\xFCW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xFCW\x82`#\x82\x01\x12\x15a\0\xFCW\x80`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\0\xFCW`$\x84\x83\x01\x01\x11a\0\xFCW`$\x01\x91\x90V[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\0\xFCWV[\x81`\x1F\x82\x01\x12\x15a\0\xFCW\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07+W`@Q\x92a\x13\xEF` `\x1F\x19`\x1F\x86\x01\x16\x01\x85a\x12\xF9V[\x82\x84R` \x83\x83\x01\x01\x11a\0\xFCW\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\x14\x17WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCaller is not the owner\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x81\x81\x10a\x14\x80WPPV[_\x81U`\x01\x01a\x14uV[\x90`\x1F\x82\x11a\x14\x98WPPV[a\x14\xC3\x91`\n_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E'W`\x1F\x01`\x05\x1C\x01\x90a\x14uV[V[\x90`\x1F\x82\x11a\x14\xD2WPPV[a\x14\xC3\x91`\x0B_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E'W`\x1F\x01`\x05\x1C\x01\x90a\x14uV[\x90`\x1F\x83`@\x94`\x1F\x19\x93` \x86R\x81` \x87\x01R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x15a\x15+WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R` `$\x82\x01R\x7FNew owner cannot be zero address`D\x82\x01R\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x15\xAA\x81\x15\x15a\x15$V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V", ); #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] @@ -3519,6 +3547,291 @@ function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) externa } } }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `updateVersion(string)` and selector `0x7240f9af`. +```solidity +function updateVersion(string memory newVersion) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct updateVersionCall { + #[allow(missing_docs)] + pub newVersion: alloy::sol_types::private::String, + } + ///Container type for the return parameters of the [`updateVersion(string)`](updateVersionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct updateVersionReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: updateVersionCall) -> Self { + (value.newVersion,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for updateVersionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { newVersion: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: updateVersionReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for updateVersionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl updateVersionReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for updateVersionCall { + type Parameters<'a> = (alloy::sol_types::sol_data::String,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = updateVersionReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "updateVersion(string)"; + const SELECTOR: [u8; 4] = [114u8, 64u8, 249u8, 175u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.newVersion, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + updateVersionReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `version()` and selector `0x54fd4d50`. +```solidity +function version() external view returns (string memory); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct versionCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`version()`](versionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct versionReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::String, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: versionCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for versionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: versionReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for versionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for versionCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::String; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "version()"; + const SELECTOR: [u8; 4] = [84u8, 253u8, 77u8, 80u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: versionReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: versionReturn = r.into(); + r._0 + }) + } + } + }; ///Container for all the [`ArbChainConfig`](self) function calls. #[derive(serde::Serialize, serde::Deserialize)] #[derive()] @@ -3555,6 +3868,10 @@ function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) externa updateAppchainBlockExplorerUrl(updateAppchainBlockExplorerUrlCall), #[allow(missing_docs)] updateDefaultSequencingChainWsRpcUrl(updateDefaultSequencingChainWsRpcUrlCall), + #[allow(missing_docs)] + updateVersion(updateVersionCall), + #[allow(missing_docs)] + version(versionCall), } #[automatically_derived] impl ArbChainConfigCalls { @@ -3569,8 +3886,10 @@ function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) externa [24u8, 181u8, 206u8, 129u8], [41u8, 8u8, 3u8, 86u8], [75u8, 139u8, 227u8, 247u8], + [84u8, 253u8, 77u8, 80u8], [87u8, 209u8, 186u8, 37u8], [110u8, 221u8, 108u8, 9u8], + [114u8, 64u8, 249u8, 175u8], [133u8, 225u8, 244u8, 208u8], [141u8, 165u8, 203u8, 91u8], [163u8, 198u8, 225u8, 231u8], @@ -3587,7 +3906,7 @@ function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) externa impl alloy_sol_types::SolInterface for ArbChainConfigCalls { const NAME: &'static str = "ArbChainConfigCalls"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 16usize; + const COUNT: usize = 18usize; #[inline] fn selector(&self) -> [u8; 4] { match self { @@ -3635,6 +3954,10 @@ function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) externa Self::updateDefaultSequencingChainWsRpcUrl(_) => { ::SELECTOR } + Self::updateVersion(_) => { + ::SELECTOR + } + Self::version(_) => ::SELECTOR, } } #[inline] @@ -3700,6 +4023,15 @@ function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) externa } updateAppchainBlockExplorerUrl }, + { + fn version( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(ArbChainConfigCalls::version) + } + version + }, { fn SETTLEMENT_DELAY( data: &[u8], @@ -3722,6 +4054,17 @@ function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) externa } ARBITRUM_BRIDGE_ADDRESS }, + { + fn updateVersion( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(ArbChainConfigCalls::updateVersion) + } + updateVersion + }, { fn CHAIN_ID( data: &[u8], @@ -3896,6 +4239,17 @@ function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) externa } updateAppchainBlockExplorerUrl }, + { + fn version( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(ArbChainConfigCalls::version) + } + version + }, { fn SETTLEMENT_DELAY( data: &[u8], @@ -3918,6 +4272,17 @@ function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) externa } ARBITRUM_BRIDGE_ADDRESS }, + { + fn updateVersion( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(ArbChainConfigCalls::updateVersion) + } + updateVersion + }, { fn CHAIN_ID( data: &[u8], @@ -4118,6 +4483,14 @@ function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) externa inner, ) } + Self::updateVersion(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::version(inner) => { + ::abi_encoded_size(inner) + } } } #[inline] @@ -4216,6 +4589,15 @@ function updateDefaultSequencingChainWsRpcUrl(string memory newWsRpcUrl) externa out, ) } + Self::updateVersion(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::version(inner) => { + ::abi_encode_raw(inner, out) + } } } } @@ -4815,6 +5197,17 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ }, ) } + ///Creates a new call builder for the [`updateVersion`] function. + pub fn updateVersion( + &self, + newVersion: alloy::sol_types::private::String, + ) -> alloy_contract::SolCallBuilder<&P, updateVersionCall, N> { + self.call_builder(&updateVersionCall { newVersion }) + } + ///Creates a new call builder for the [`version`] function. + pub fn version(&self) -> alloy_contract::SolCallBuilder<&P, versionCall, N> { + self.call_builder(&versionCall) + } } /// Event filters. #[automatically_derived] diff --git a/shared/contract-bindings/src/synd/arb_config_manager.rs b/shared/contract-bindings/src/synd/arb_config_manager.rs index 65ec02ab1..95f683781 100644 --- a/shared/contract-bindings/src/synd/arb_config_manager.rs +++ b/shared/contract-bindings/src/synd/arb_config_manager.rs @@ -296,12 +296,12 @@ pub mod ArbConfigManager { /// The creation / init bytecode of the contract. /// /// ```text - ///0x60a03461016b57601f612c1a38819003918201601f19168301916001600160401b038311848410176101445780849260209460405283398101031261016b57516001600160a01b0381169081900361016b578015610158575f80546001600160a01b031981168317825560405192916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36114618181016001600160401b038111838210176101445782916112b4833903905ff0801561013957604051906105058083016001600160401b0381118482101761014457604092849261271584396001600160a01b031681523060208201520301905ff080156101395760805260405161114490816101708239608051818181610215015281816105c2015281816108610152610a980152f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c80630b04ebfd1461088557806359659e90146108355780636f04245514610457578063715018a6146103d957806383f94db7146101b75780638da5cb5b14610184578063a33a8b60146101445763f2fde38b14610072575f80fd5b346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6100a06108c1565b6100a8610c20565b1680156101155773ffffffffffffffffffffffffffffffffffffffff8254827fffffffffffffffffffffffff00000000000000000000000000000000000000008216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6024827f1e4fbdf700000000000000000000000000000000000000000000000000000000815280600452fd5b80fd5b50346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6040602092600435815260018452205416604051908152f35b503461014157806003193601126101415773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b5034610141576020600319360112610141576101d16108c1565b6101d9610c20565b73ffffffffffffffffffffffffffffffffffffffff8116908115610355573b156102d1578173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b156102c2578180916024604051809481937f3659cfe60000000000000000000000000000000000000000000000000000000083528860048401525af180156102c6576102ad575b507f51ea6ffdc9909d5ca341259f7221902e0676585d833e2bb21fa923c85e862886602083604051908152a180f35b816102b7916108e4565b6102c257815f61027e565b5080fd5b6040513d84823e3d90fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f496d706c656d656e746174696f6e206d757374206265206120636f6e7472616360448201527f74000000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4e657720696d706c656d656e746174696f6e2063616e6e6f74206265207a657260448201527f6f206164647265737300000000000000000000000000000000000000000000006064820152fd5b50346101415780600319360112610141576103f2610c20565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b3461078057610180600319360112610780576104716108c1565b602435906064359173ffffffffffffffffffffffffffffffffffffffff8316809303610780576084359173ffffffffffffffffffffffffffffffffffffffff83168093036107805760e4359073ffffffffffffffffffffffffffffffffffffffff821680920361078057610124359073ffffffffffffffffffffffffffffffffffffffff8216809203610780576101443567ffffffffffffffff81116107805761051f903690600401610925565b926101643567ffffffffffffffff811161078057610541903690600401610925565b610549610c20565b610554861515610999565b855f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f2054166107b1576040516020810190878252602081526105956040826108e4565b5190206040516104d78082019082821067ffffffffffffffff83111761078457829161060d91610c6d84397f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526040602082018190525f9082015260600190565b03905ff580156107755773ffffffffffffffffffffffffffffffffffffffff1696865f52600160205260405f20887fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055873b15610780575f9573ffffffffffffffffffffffffffffffffffffffff9561071e9461070b936040519c8d998a997fbf79fd1c000000000000000000000000000000000000000000000000000000008b521660048a01528b60248a015260443560448a01526064890152608488015260a43560a488015260c43560c488015260e487015261010435610104870152610124860152610180610144860152610184850190610bdd565b9060031984830301610164850152610bdd565b038183865af192831561077557602093610765575b507feaf2b9d4fd6eba5a60870499f6335c6ab4826e029aff65ba0619329dbd421ec383604051848152a2604051908152f35b5f61076f916108e4565b5f610733565b6040513d5f823e3d90fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f436f6e66696720616c72656164792065786973747320666f722074686973206360448201527f6861696e204944000000000000000000000000000000000000000000000000006064820152fd5b34610780575f60031936011261078057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107805760206003193601126107805760206108a36004356109fe565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361078057565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761078457604052565b81601f820112156107805780359067ffffffffffffffff8211610784576040519261097860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601856108e4565b8284526020838301011161078057815f926020809301838601378301015290565b156109a057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b805f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f205416610bb85780610a4673ffffffffffffffffffffffffffffffffffffffff921515610999565b6040516020810191825260208152610a5f6040826108e4565b5190206040516104d7610a7560208201836108e4565b8082526020820190610c6d8239610b60604051916020808401610b1185610ae58a7f0000000000000000000000000000000000000000000000000000000000000000168473ffffffffffffffffffffffffffffffffffffffff606092168152604060208201525f60408201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866108e4565b60405194859383850197518091895e840190838201905f8252519283915e01015f8152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826108e4565b5190206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b60218401526035830152605582015260558152610bb16075826108e4565b5190201690565b5f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f20541690565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff5f54163303610c4057565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffdfe60a0806040526104d780380380916100178285610292565b833981016040828203126101eb5761002e826102c9565b602083015190926001600160401b0382116101eb57019080601f830112156101eb57815161005b816102dd565b926100696040519485610292565b8184526020840192602083830101116101eb57815f926020809301855e84010152823b15610274577fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b038516908117909155604051635c60da1b60e01b8152909190602081600481865afa9081156101f7575f9161023a575b50803b1561021a5750817f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e5f80a282511561020257602060049260405193848092635c60da1b60e01b82525afa9182156101f7575f926101ae575b505f809161018a945190845af43d156101a6573d9161016e836102dd565b9261017c6040519485610292565b83523d5f602085013e6102f8565b505b608052604051610180908161035782396080518160460152f35b6060916102f8565b9291506020833d6020116101ef575b816101ca60209383610292565b810103126101eb575f80916101e161018a956102c9565b9394509150610150565b5f80fd5b3d91506101bd565b6040513d5f823e3d90fd5b505050341561018c5763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b90506020813d60201161026c575b8161025560209383610292565b810103126101eb57610266906102c9565b5f6100f5565b3d9150610248565b631933b43b60e21b5f9081526001600160a01b038416600452602490fd5b601f909101601f19168101906001600160401b038211908210176102b557604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101eb57565b6001600160401b0381116102b557601f01601f191660200190565b9061031c575080511561030d57805190602001fd5b63d6bda27560e01b5f5260045ffd5b8151158061034d575b61032d575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561032556fe60806040527f5c60da1b000000000000000000000000000000000000000000000000000000006080526020608060048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610107575f9015610163575060203d602011610100575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116608001906080821067ffffffffffffffff8311176100d3576100ce91604052608001610112565b610163565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b503d610081565b6040513d5f823e3d90fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80602091011261015f5760805173ffffffffffffffffffffffffffffffffffffffff8116810361015f5790565b5f80fd5b5f8091368280378136915af43d5f803e1561017c573d5ff35b3d5ffd6080806040523460aa575f5160206114415f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b60405161139290816100af8239f35b6001600160401b0319166001600160401b039081175f5160206114415f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630743bf6e14610f6e57806318b5ce8114610f3b5780632908035614610def5780634b8be3f714610c9157806357d1ba2514610c745780636edd6c0914610c4157806385e1f4d014610c245780638da5cb5b14610bf2578063a3c6e1e714610bd5578063aa6a43d814610ba2578063bf6db6f814610b6f578063bf79fd1c14610265578063c7a760951461016d578063d1f4737c14610150578063f2fde38b146100ea5763f8a144be146100c9575f80fd5b346100e6575f6003193601126100e6576020600654604051908152f35b5f80fd5b346100e65760206003193601126100e65761014e610106611102565b61012873ffffffffffffffffffffffffffffffffffffffff5f5416331461117b565b61014973ffffffffffffffffffffffffffffffffffffffff821615156112a7565b61130c565b005b346100e6575f6003193601126100e6576020600854604051908152f35b346100e6575f6003193601126100e6576040515f600a5461018d81611013565b808452906001811690811561022357506001146101c5575b6101c1836101b581850382611064565b60405191829182611087565b0390f35b600a5f9081527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8939250905b808210610209575090915081016020016101b56101a5565b9192600181602092548385880101520191019092916101f1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506101b590506101a5565b346100e6576101806003193601126100e65761027f611102565b602435604435916064359273ffffffffffffffffffffffffffffffffffffffff84168094036100e65760843573ffffffffffffffffffffffffffffffffffffffff81168091036100e65760e43573ffffffffffffffffffffffffffffffffffffffff81168091036100e657610124359173ffffffffffffffffffffffffffffffffffffffff83168093036100e6576101443567ffffffffffffffff81116100e65761032e903690600401611125565b966101643567ffffffffffffffff81116100e657610350903690600401611125565b947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549760ff8960401c16159867ffffffffffffffff811680159081610b67575b6001149081610b5d575b159081610b54575b50610b2c578960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610ad7575b5073ffffffffffffffffffffffffffffffffffffffff881615610a79578015610a1b57811561099757821561091357831561088f57841561080b578515610787576005556006557fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035560a43560075560c4356008557fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455610104356009557fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155835167ffffffffffffffff81116106d95761051981610514600a54611013565b6111e0565b602094601f82116001146107065761054a9293949582915f92610647575b50505f198260011b9260031b1c19161790565b600a555b80519067ffffffffffffffff82116106d9576105748261056f600b54611013565b611230565b602090601f83116001146106525791806105a6926105ae95945f926106475750505f198260011b9260031b1c19161790565b600b5561130c565b6105b457005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b015190508680610537565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b8181106106c157509160019391856105ae979694106106a9575b505050811b01600b5561130c565b01515f1960f88460031b161c1916905585808061069b565b92936020600181928786015181550195019301610681565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19821695600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8915f5b88811061076f57508360019596979810610757575b505050811b01600a5561054e565b01515f1960f88460031b161c19169055858080610749565b91926020600181928685015181550194019201610734565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f496e697469616c20617070636861696e206f776e65722063616e6e6f7420626560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f53657175656e63696e6720636f6e747261637420616464726573732063616e6e60448201527f6f74206265207a65726f000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f417262697472756d20696e626f7820616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f417262697472756d2062726964676520616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53657175656e63696e6720636861696e2049442063616e6e6f74206265207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f776e65722063616e6e6f74206265207a65726f2061646472657373000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558a6103f6565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158c6103a3565b303b15915061039b565b8b9150610391565b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b346100e6575f6003193601126100e6576020600954604051908152f35b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100e6575f6003193601126100e6576020600554604051908152f35b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346100e6575f6003193601126100e6576020600754604051908152f35b346100e657610c9f366110b1565b610cc173ffffffffffffffffffffffffffffffffffffffff5f5416331461117b565b67ffffffffffffffff81116106d957610cdf8161056f600b54611013565b5f91601f8211600114610d4f57610d2c82807f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7955f91610d44575b505f198260011b9260031b1c19161790565b600b555b610d3f60405192839283611280565b0390a1005b905083013586610d1a565b601f198216600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b818110610dd7575093837f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a79510610dbe575b5050600182811b01600b55610d30565b5f1960f88560031b161c19908301351690558380610dae565b83860135835560209586019560019093019201610d7c565b346100e657610dfd366110b1565b610e1f73ffffffffffffffffffffffffffffffffffffffff5f5416331461117b565b67ffffffffffffffff81116106d957610e3d81610514600a54611013565b5f91601f8211600114610e9b57610e8982807f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c955f91610d4457505f198260011b9260031b1c19161790565b600a55610d3f60405192839283611280565b601f198216600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8905f5b818110610f23575093837f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c9510610f0a575b5050600182811b01600a55610d30565b5f1960f88560031b161c19908301351690558380610efa565b83860135835560209586019560019093019201610ec8565b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346100e6575f6003193601126100e6576040515f600b54610f8e81611013565b80845290600181169081156102235750600114610fb5576101c1836101b581850382611064565b600b5f9081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b808210610ff9575090915081016020016101b56101a5565b919260018160209254838588010152019101909291610fe1565b90600182811c9216801561105a575b602083101461102d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691611022565b90601f601f19910116810190811067ffffffffffffffff8211176106d957604052565b601f19601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b9060206003198301126100e65760043567ffffffffffffffff81116100e657826023820112156100e65780600401359267ffffffffffffffff84116100e657602484830101116100e6576024019190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100e657565b81601f820112156100e65780359067ffffffffffffffff82116106d9576040519261115a6020601f19601f8601160185611064565b828452602083830101116100e657815f926020809301838601378301015290565b1561118257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b601f81116111ec575050565b600a5f5260205f20906020601f840160051c83019310611226575b601f0160051c01905b81811061121b575050565b5f8155600101611210565b9091508190611207565b601f811161123c575050565b600b5f5260205f20906020601f840160051c83019310611276575b601f0160051c01905b81811061126b575050565b5f8155600101611260565b9091508190611257565b90601f83604094601f199360208652816020870152868601375f8582860101520116010190565b156112ae57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b73ffffffffffffffffffffffffffffffffffffffff1661132d8115156112a7565b73ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060803461013457601f61050538819003918201601f19168301916001600160401b03831184841017610138578084926040948552833981010312610134576100468161014c565b906001600160a01b039061005c9060200161014c565b16908115610121575f80546001600160a01b031981168417825560405193916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3803b1561010157600180546001600160a01b0319166001600160a01b039290921691821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a26103a490816101618239f35b63211eb15960e21b5f9081526001600160a01b0391909116600452602490fd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101345756fe60806040526004361015610011575f80fd5b5f3560e01c80633659cfe61461027e5780635c60da1b1461022d578063715018a6146101935780638da5cb5b146101435763f2fde38b14610050575f80fd5b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff811680910361013f576100a8610358565b80156101135773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b5f80fd5b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576101c9610358565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff81169081810361013f576102d7610358565b3b1561032d57807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2005b7f847ac564000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff5f5416330361037857565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd + ///0x60a03461016b57601f612e9738819003918201601f19168301916001600160401b038311848410176101445780849260209460405283398101031261016b57516001600160a01b0381169081900361016b578015610158575f80546001600160a01b031981168317825560405192916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36116de8181016001600160401b038111838210176101445782916112b4833903905ff0801561013957604051906105058083016001600160401b0381118482101761014457604092849261299284396001600160a01b031681523060208201520301905ff080156101395760805260405161114490816101708239608051818181610215015281816105c2015281816108610152610a980152f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c80630b04ebfd1461088557806359659e90146108355780636f04245514610457578063715018a6146103d957806383f94db7146101b75780638da5cb5b14610184578063a33a8b60146101445763f2fde38b14610072575f80fd5b346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6100a06108c1565b6100a8610c20565b1680156101155773ffffffffffffffffffffffffffffffffffffffff8254827fffffffffffffffffffffffff00000000000000000000000000000000000000008216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6024827f1e4fbdf700000000000000000000000000000000000000000000000000000000815280600452fd5b80fd5b50346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6040602092600435815260018452205416604051908152f35b503461014157806003193601126101415773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b5034610141576020600319360112610141576101d16108c1565b6101d9610c20565b73ffffffffffffffffffffffffffffffffffffffff8116908115610355573b156102d1578173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b156102c2578180916024604051809481937f3659cfe60000000000000000000000000000000000000000000000000000000083528860048401525af180156102c6576102ad575b507f51ea6ffdc9909d5ca341259f7221902e0676585d833e2bb21fa923c85e862886602083604051908152a180f35b816102b7916108e4565b6102c257815f61027e565b5080fd5b6040513d84823e3d90fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f496d706c656d656e746174696f6e206d757374206265206120636f6e7472616360448201527f74000000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4e657720696d706c656d656e746174696f6e2063616e6e6f74206265207a657260448201527f6f206164647265737300000000000000000000000000000000000000000000006064820152fd5b50346101415780600319360112610141576103f2610c20565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b3461078057610180600319360112610780576104716108c1565b602435906064359173ffffffffffffffffffffffffffffffffffffffff8316809303610780576084359173ffffffffffffffffffffffffffffffffffffffff83168093036107805760e4359073ffffffffffffffffffffffffffffffffffffffff821680920361078057610124359073ffffffffffffffffffffffffffffffffffffffff8216809203610780576101443567ffffffffffffffff81116107805761051f903690600401610925565b926101643567ffffffffffffffff811161078057610541903690600401610925565b610549610c20565b610554861515610999565b855f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f2054166107b1576040516020810190878252602081526105956040826108e4565b5190206040516104d78082019082821067ffffffffffffffff83111761078457829161060d91610c6d84397f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526040602082018190525f9082015260600190565b03905ff580156107755773ffffffffffffffffffffffffffffffffffffffff1696865f52600160205260405f20887fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055873b15610780575f9573ffffffffffffffffffffffffffffffffffffffff9561071e9461070b936040519c8d998a997fbf79fd1c000000000000000000000000000000000000000000000000000000008b521660048a01528b60248a015260443560448a01526064890152608488015260a43560a488015260c43560c488015260e487015261010435610104870152610124860152610180610144860152610184850190610bdd565b9060031984830301610164850152610bdd565b038183865af192831561077557602093610765575b507feaf2b9d4fd6eba5a60870499f6335c6ab4826e029aff65ba0619329dbd421ec383604051848152a2604051908152f35b5f61076f916108e4565b5f610733565b6040513d5f823e3d90fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f436f6e66696720616c72656164792065786973747320666f722074686973206360448201527f6861696e204944000000000000000000000000000000000000000000000000006064820152fd5b34610780575f60031936011261078057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107805760206003193601126107805760206108a36004356109fe565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361078057565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761078457604052565b81601f820112156107805780359067ffffffffffffffff8211610784576040519261097860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601856108e4565b8284526020838301011161078057815f926020809301838601378301015290565b156109a057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b805f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f205416610bb85780610a4673ffffffffffffffffffffffffffffffffffffffff921515610999565b6040516020810191825260208152610a5f6040826108e4565b5190206040516104d7610a7560208201836108e4565b8082526020820190610c6d8239610b60604051916020808401610b1185610ae58a7f0000000000000000000000000000000000000000000000000000000000000000168473ffffffffffffffffffffffffffffffffffffffff606092168152604060208201525f60408201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866108e4565b60405194859383850197518091895e840190838201905f8252519283915e01015f8152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826108e4565b5190206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b60218401526035830152605582015260558152610bb16075826108e4565b5190201690565b5f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f20541690565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff5f54163303610c4057565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffdfe60a0806040526104d780380380916100178285610292565b833981016040828203126101eb5761002e826102c9565b602083015190926001600160401b0382116101eb57019080601f830112156101eb57815161005b816102dd565b926100696040519485610292565b8184526020840192602083830101116101eb57815f926020809301855e84010152823b15610274577fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b038516908117909155604051635c60da1b60e01b8152909190602081600481865afa9081156101f7575f9161023a575b50803b1561021a5750817f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e5f80a282511561020257602060049260405193848092635c60da1b60e01b82525afa9182156101f7575f926101ae575b505f809161018a945190845af43d156101a6573d9161016e836102dd565b9261017c6040519485610292565b83523d5f602085013e6102f8565b505b608052604051610180908161035782396080518160460152f35b6060916102f8565b9291506020833d6020116101ef575b816101ca60209383610292565b810103126101eb575f80916101e161018a956102c9565b9394509150610150565b5f80fd5b3d91506101bd565b6040513d5f823e3d90fd5b505050341561018c5763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b90506020813d60201161026c575b8161025560209383610292565b810103126101eb57610266906102c9565b5f6100f5565b3d9150610248565b631933b43b60e21b5f9081526001600160a01b038416600452602490fd5b601f909101601f19168101906001600160401b038211908210176102b557604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101eb57565b6001600160401b0381116102b557601f01601f191660200190565b9061031c575080511561030d57805190602001fd5b63d6bda27560e01b5f5260045ffd5b8151158061034d575b61032d575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561032556fe60806040527f5c60da1b000000000000000000000000000000000000000000000000000000006080526020608060048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610107575f9015610163575060203d602011610100575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116608001906080821067ffffffffffffffff8311176100d3576100ce91604052608001610112565b610163565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b503d610081565b6040513d5f823e3d90fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80602091011261015f5760805173ffffffffffffffffffffffffffffffffffffffff8116810361015f5790565b5f80fd5b5f8091368280378136915af43d5f803e1561017c573d5ff35b3d5ffd6080806040523460aa575f5160206116be5f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b60405161160f90816100af8239f35b6001600160401b0319166001600160401b039081175f5160206116be5f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630743bf6e1461120357806318b5ce81146111d057806329080356146110845780634b8be3f714610f2657806354fd4d5014610e8157806357d1ba2514610e645780636edd6c0914610e315780637240f9af14610cd157806385e1f4d014610cb45780638da5cb5b14610c82578063a3c6e1e714610c65578063aa6a43d814610c32578063bf6db6f814610bff578063bf79fd1c1461027b578063c7a7609514610183578063d1f4737c14610166578063f2fde38b146101005763f8a144be146100df575f80fd5b346100fc575f6003193601126100fc576020600654604051908152f35b5f80fd5b346100fc5760206003193601126100fc5761016461011c611397565b61013e73ffffffffffffffffffffffffffffffffffffffff5f54163314611410565b61015f73ffffffffffffffffffffffffffffffffffffffff82161515611524565b611589565b005b346100fc575f6003193601126100fc576020600854604051908152f35b346100fc575f6003193601126100fc576040515f600a546101a3816112a8565b808452906001811690811561023957506001146101db575b6101d7836101cb818503826112f9565b6040519182918261131c565b0390f35b600a5f9081527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8939250905b80821061021f575090915081016020016101cb6101bb565b919260018160209254838588010152019101909291610207565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506101cb90506101bb565b346100fc576101806003193601126100fc57610295611397565b602435604435916064359273ffffffffffffffffffffffffffffffffffffffff84168094036100fc5760843573ffffffffffffffffffffffffffffffffffffffff81168091036100fc5760e43573ffffffffffffffffffffffffffffffffffffffff81168091036100fc57610124359173ffffffffffffffffffffffffffffffffffffffff83168093036100fc576101443567ffffffffffffffff81116100fc576103449036906004016113ba565b966101643567ffffffffffffffff81116100fc576103669036906004016113ba565b947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549760ff8960401c16159867ffffffffffffffff811680159081610bf7575b6001149081610bed575b159081610be4575b50610bbc578960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610b67575b5073ffffffffffffffffffffffffffffffffffffffff881615610b09578015610aab578115610a275782156109a357831561091f57841561089b578515610817576005556006557fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035560a43560075560c4356008557fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455610104356009556104ec600c546112a8565b601f81116107d9575b50600a7f312e302e3000000000000000000000000000000000000000000000000000000001600c557fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155835167ffffffffffffffff811161072b5761056b81610566600a546112a8565b61148b565b602094601f82116001146107585761059c9293949582915f92610699575b50505f198260011b9260031b1c19161790565b600a555b80519067ffffffffffffffff821161072b576105c6826105c1600b546112a8565b6114c5565b602090601f83116001146106a45791806105f89261060095945f926106995750505f198260011b9260031b1c19161790565b600b55611589565b61060657005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b015190508680610589565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b8181106107135750916001939185610600979694106106fb575b505050811b01600b55611589565b01515f1960f88460031b161c191690558580806106ed565b929360206001819287860151815501950193016106d3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19821695600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8915f5b8881106107c1575083600195969798106107a9575b505050811b01600a556105a0565b01515f1960f88460031b161c1916905585808061079b565b91926020600181928685015181550194019201610786565b600c5f5261081190601f0160051c7fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c790810190611475565b856104f5565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f496e697469616c20617070636861696e206f776e65722063616e6e6f7420626560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f53657175656e63696e6720636f6e747261637420616464726573732063616e6e60448201527f6f74206265207a65726f000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f417262697472756d20696e626f7820616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f417262697472756d2062726964676520616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53657175656e63696e6720636861696e2049442063616e6e6f74206265207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f776e65722063616e6e6f74206265207a65726f2061646472657373000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558a61040c565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158c6103b9565b303b1591506103b1565b8b91506103a7565b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b346100fc575f6003193601126100fc576020600954604051908152f35b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100fc575f6003193601126100fc576020600554604051908152f35b346100fc57610cdf36611346565b610d0173ffffffffffffffffffffffffffffffffffffffff5f54163314611410565b67ffffffffffffffff811161072b57610d1b600c546112a8565b601f8111610dd8575b505f601f8211600114610d60578190610d50935f92610d555750505f198260011b9260031b1c19161790565b600c55005b013590508380610589565b601f198216927fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915f5b858110610dc057508360019510610da7575b505050811b01600c55005b5f1960f88560031b161c19910135169055828080610d9c565b90926020600181928686013581550194019101610d8a565b600c5f52610e21907fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7601f840160051c81019160208510610e27575b601f0160051c0190611475565b82610d24565b9091508190610e14565b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346100fc575f6003193601126100fc576020600754604051908152f35b346100fc575f6003193601126100fc576040515f600c54610ea1816112a8565b80845290600181169081156102395750600114610ec8576101d7836101cb818503826112f9565b600c5f9081527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7939250905b808210610f0c575090915081016020016101cb6101bb565b919260018160209254838588010152019101909291610ef4565b346100fc57610f3436611346565b610f5673ffffffffffffffffffffffffffffffffffffffff5f54163314611410565b67ffffffffffffffff811161072b57610f74816105c1600b546112a8565b5f91601f8211600114610fe457610fc182807f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7955f91610fd9575b505f198260011b9260031b1c19161790565b600b555b610fd4604051928392836114fd565b0390a1005b905083013586610faf565b601f198216600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b81811061106c575093837f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a79510611053575b5050600182811b01600b55610fc5565b5f1960f88560031b161c19908301351690558380611043565b83860135835560209586019560019093019201611011565b346100fc5761109236611346565b6110b473ffffffffffffffffffffffffffffffffffffffff5f54163314611410565b67ffffffffffffffff811161072b576110d281610566600a546112a8565b5f91601f82116001146111305761111e82807f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c955f91610fd957505f198260011b9260031b1c19161790565b600a55610fd4604051928392836114fd565b601f198216600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8905f5b8181106111b8575093837f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c951061119f575b5050600182811b01600a55610fc5565b5f1960f88560031b161c1990830135169055838061118f565b8386013583556020958601956001909301920161115d565b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346100fc575f6003193601126100fc576040515f600b54611223816112a8565b8084529060018116908115610239575060011461124a576101d7836101cb818503826112f9565b600b5f9081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b80821061128e575090915081016020016101cb6101bb565b919260018160209254838588010152019101909291611276565b90600182811c921680156112ef575b60208310146112c257565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916112b7565b90601f601f19910116810190811067ffffffffffffffff82111761072b57604052565b601f19601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b9060206003198301126100fc5760043567ffffffffffffffff81116100fc57826023820112156100fc5780600401359267ffffffffffffffff84116100fc57602484830101116100fc576024019190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100fc57565b81601f820112156100fc5780359067ffffffffffffffff821161072b57604051926113ef6020601f19601f86011601856112f9565b828452602083830101116100fc57815f926020809301838601378301015290565b1561141757565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b818110611480575050565b5f8155600101611475565b90601f8211611498575050565b6114c391600a5f5260205f20906020601f840160051c83019310610e2757601f0160051c0190611475565b565b90601f82116114d2575050565b6114c391600b5f5260205f20906020601f840160051c83019310610e2757601f0160051c0190611475565b90601f83604094601f199360208652816020870152868601375f8582860101520116010190565b1561152b57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166115aa811515611524565b73ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060803461013457601f61050538819003918201601f19168301916001600160401b03831184841017610138578084926040948552833981010312610134576100468161014c565b906001600160a01b039061005c9060200161014c565b16908115610121575f80546001600160a01b031981168417825560405193916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3803b1561010157600180546001600160a01b0319166001600160a01b039290921691821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a26103a490816101618239f35b63211eb15960e21b5f9081526001600160a01b0391909116600452602490fd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101345756fe60806040526004361015610011575f80fd5b5f3560e01c80633659cfe61461027e5780635c60da1b1461022d578063715018a6146101935780638da5cb5b146101435763f2fde38b14610050575f80fd5b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff811680910361013f576100a8610358565b80156101135773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b5f80fd5b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576101c9610358565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff81169081810361013f576102d7610358565b3b1561032d57807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2005b7f847ac564000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff5f5416330361037857565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\xA04a\x01kW`\x1Fa,\x1A8\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01DW\x80\x84\x92` \x94`@R\x839\x81\x01\x03\x12a\x01kWQ`\x01`\x01`\xA0\x1B\x03\x81\x16\x90\x81\x90\x03a\x01kW\x80\x15a\x01XW_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x83\x17\x82U`@Q\x92\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3a\x14a\x81\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x83\x82\x10\x17a\x01DW\x82\x91a\x12\xB4\x839\x03\x90_\xF0\x80\x15a\x019W`@Q\x90a\x05\x05\x80\x83\x01`\x01`\x01`@\x1B\x03\x81\x11\x84\x82\x10\x17a\x01DW`@\x92\x84\x92a'\x15\x849`\x01`\x01`\xA0\x1B\x03\x16\x81R0` \x82\x01R\x03\x01\x90_\xF0\x80\x15a\x019W`\x80R`@Qa\x11D\x90\x81a\x01p\x829`\x80Q\x81\x81\x81a\x02\x15\x01R\x81\x81a\x05\xC2\x01R\x81\x81a\x08a\x01Ra\n\x98\x01R\xF3[`@Q=_\x82>=\x90\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[__5`\xE0\x1C\x80c\x0B\x04\xEB\xFD\x14a\x08\x85W\x80cYe\x9E\x90\x14a\x085W\x80co\x04$U\x14a\x04WW\x80cqP\x18\xA6\x14a\x03\xD9W\x80c\x83\xF9M\xB7\x14a\x01\xB7W\x80c\x8D\xA5\xCB[\x14a\x01\x84W\x80c\xA3:\x8B`\x14a\x01DWc\xF2\xFD\xE3\x8B\x14a\0rW_\x80\xFD[4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\0\xA0a\x08\xC1V[a\0\xA8a\x0C V[\x16\x80\x15a\x01\x15Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x84U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x83\x80\xA3\x80\xF3[`$\x82\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\x80`\x04R\xFD[\x80\xFD[P4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@` \x92`\x045\x81R`\x01\x84R T\x16`@Q\x90\x81R\xF3[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF` \x91T\x16`@Q\x90\x81R\xF3[P4a\x01AW` `\x03\x196\x01\x12a\x01AWa\x01\xD1a\x08\xC1V[a\x01\xD9a\x0C V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x15a\x03UW;\x15a\x02\xD1W\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x80;\x15a\x02\xC2W\x81\x80\x91`$`@Q\x80\x94\x81\x93\x7F6Y\xCF\xE6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x88`\x04\x84\x01RZ\xF1\x80\x15a\x02\xC6Wa\x02\xADW[P\x7FQ\xEAo\xFD\xC9\x90\x9D\\\xA3A%\x9Fr!\x90.\x06vX]\x83>+\xB2\x1F\xA9#\xC8^\x86(\x86` \x83`@Q\x90\x81R\xA1\x80\xF3[\x81a\x02\xB7\x91a\x08\xE4V[a\x02\xC2W\x81_a\x02~V[P\x80\xFD[`@Q=\x84\x82>=\x90\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`!`$\x82\x01R\x7FImplementation must be a contrac`D\x82\x01R\x7Ft\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`)`$\x82\x01R\x7FNew implementation cannot be zer`D\x82\x01R\x7Fo address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWa\x03\xF2a\x0C V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[4a\x07\x80Wa\x01\x80`\x03\x196\x01\x12a\x07\x80Wa\x04qa\x08\xC1V[`$5\x90`d5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\x845\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\xE45\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05\x1F\x906\x90`\x04\x01a\t%V[\x92a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05A\x906\x90`\x04\x01a\t%V[a\x05Ia\x0C V[a\x05T\x86\x15\x15a\t\x99V[\x85_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x07\xB1W`@Q` \x81\x01\x90\x87\x82R` \x81Ra\x05\x95`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7\x80\x82\x01\x90\x82\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\x07\x84W\x82\x91a\x06\r\x91a\x0Cm\x849\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R`@` \x82\x01\x81\x90R_\x90\x82\x01R``\x01\x90V[\x03\x90_\xF5\x80\x15a\x07uWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x96\x86_R`\x01` R`@_ \x88\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90U\x87;\x15a\x07\x80W_\x95s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95a\x07\x1E\x94a\x07\x0B\x93`@Q\x9C\x8D\x99\x8A\x99\x7F\xBFy\xFD\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8BR\x16`\x04\x8A\x01R\x8B`$\x8A\x01R`D5`D\x8A\x01R`d\x89\x01R`\x84\x88\x01R`\xA45`\xA4\x88\x01R`\xC45`\xC4\x88\x01R`\xE4\x87\x01Ra\x01\x045a\x01\x04\x87\x01Ra\x01$\x86\x01Ra\x01\x80a\x01D\x86\x01Ra\x01\x84\x85\x01\x90a\x0B\xDDV[\x90`\x03\x19\x84\x83\x03\x01a\x01d\x85\x01Ra\x0B\xDDV[\x03\x81\x83\x86Z\xF1\x92\x83\x15a\x07uW` \x93a\x07eW[P\x7F\xEA\xF2\xB9\xD4\xFDn\xBAZ`\x87\x04\x99\xF63\\j\xB4\x82n\x02\x9A\xFFe\xBA\x06\x192\x9D\xBDB\x1E\xC3\x83`@Q\x84\x81R\xA2`@Q\x90\x81R\xF3[_a\x07o\x91a\x08\xE4V[_a\x073V[`@Q=_\x82>=\x90\xFD[_\x80\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FConfig already exists for this c`D\x82\x01R\x7Fhain ID\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[4a\x07\x80W_`\x03\x196\x01\x12a\x07\x80W` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x07\x80W` `\x03\x196\x01\x12a\x07\x80W` a\x08\xA3`\x045a\t\xFEV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x07\x80WV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\x84W`@RV[\x81`\x1F\x82\x01\x12\x15a\x07\x80W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x84W`@Q\x92a\tx` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x86\x01\x16\x01\x85a\x08\xE4V[\x82\x84R` \x83\x83\x01\x01\x11a\x07\x80W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\t\xA0WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x80_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x0B\xB8W\x80a\nFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x15\x15a\t\x99V[`@Q` \x81\x01\x91\x82R` \x81Ra\n_`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7a\nu` \x82\x01\x83a\x08\xE4V[\x80\x82R` \x82\x01\x90a\x0Cm\x829a\x0B``@Q\x91` \x80\x84\x01a\x0B\x11\x85a\n\xE5\x8A\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF``\x92\x16\x81R`@` \x82\x01R_`@\x82\x01R\x01\x90V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x87R\x86a\x08\xE4V[`@Q\x94\x85\x93\x83\x85\x01\x97Q\x80\x91\x89^\x84\x01\x90\x83\x82\x01\x90_\x82RQ\x92\x83\x91^\x01\x01_\x81R\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x08\xE4V[Q\x90 `@Q\x90` \x82\x01\x92\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R0``\x1B`!\x84\x01R`5\x83\x01R`U\x82\x01R`U\x81Ra\x0B\xB1`u\x82a\x08\xE4V[Q\x90 \x16\x90V[_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16\x90V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x0C@WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD\xFE`\xA0\x80`@Ra\x04\xD7\x808\x03\x80\x91a\0\x17\x82\x85a\x02\x92V[\x839\x81\x01`@\x82\x82\x03\x12a\x01\xEBWa\0.\x82a\x02\xC9V[` \x83\x01Q\x90\x92`\x01`\x01`@\x1B\x03\x82\x11a\x01\xEBW\x01\x90\x80`\x1F\x83\x01\x12\x15a\x01\xEBW\x81Qa\0[\x81a\x02\xDDV[\x92a\0i`@Q\x94\x85a\x02\x92V[\x81\x84R` \x84\x01\x92` \x83\x83\x01\x01\x11a\x01\xEBW\x81_\x92` \x80\x93\x01\x85^\x84\x01\x01R\x82;\x15a\x02tW\x7F\xA3\xF0\xADt\xE5B:\xEB\xFD\x80\xD3\xEFCFW\x835\xA9\xA7*\xEA\xEEY\xFFl\xB3X+5\x13=P\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x85\x16\x90\x81\x17\x90\x91U`@Qc\\`\xDA\x1B`\xE0\x1B\x81R\x90\x91\x90` \x81`\x04\x81\x86Z\xFA\x90\x81\x15a\x01\xF7W_\x91a\x02:W[P\x80;\x15a\x02\x1AWP\x81\x7F\x1C\xF3\xB0:l\xF1\x9F\xA2\xBA\xBAM\xF1H\xE9\xDC\xAB\xED\xEA\x7F\x8A\\\x07\x84\x0E ~\\\x08\x9B\xE9]>_\x80\xA2\x82Q\x15a\x02\x02W` `\x04\x92`@Q\x93\x84\x80\x92c\\`\xDA\x1B`\xE0\x1B\x82RZ\xFA\x91\x82\x15a\x01\xF7W_\x92a\x01\xAEW[P_\x80\x91a\x01\x8A\x94Q\x90\x84Z\xF4=\x15a\x01\xA6W=\x91a\x01n\x83a\x02\xDDV[\x92a\x01|`@Q\x94\x85a\x02\x92V[\x83R=_` \x85\x01>a\x02\xF8V[P[`\x80R`@Qa\x01\x80\x90\x81a\x03W\x829`\x80Q\x81`F\x01R\xF3[``\x91a\x02\xF8V[\x92\x91P` \x83=` \x11a\x01\xEFW[\x81a\x01\xCA` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBW_\x80\x91a\x01\xE1a\x01\x8A\x95a\x02\xC9V[\x93\x94P\x91Pa\x01PV[_\x80\xFD[=\x91Pa\x01\xBDV[`@Q=_\x82>=\x90\xFD[PPP4\x15a\x01\x8CWc\xB3\x98\x97\x9F`\xE0\x1B_R`\x04_\xFD[cL\x9C\x8C\xE3`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[\x90P` \x81=` \x11a\x02lW[\x81a\x02U` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBWa\x02f\x90a\x02\xC9V[_a\0\xF5V[=\x91Pa\x02HV[c\x193\xB4;`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04R`$\x90\xFD[`\x1F\x90\x91\x01`\x1F\x19\x16\x81\x01\x90`\x01`\x01`@\x1B\x03\x82\x11\x90\x82\x10\x17a\x02\xB5W`@RV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x01\xEBWV[`\x01`\x01`@\x1B\x03\x81\x11a\x02\xB5W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x90a\x03\x1CWP\x80Q\x15a\x03\rW\x80Q\x90` \x01\xFD[c\xD6\xBD\xA2u`\xE0\x1B_R`\x04_\xFD[\x81Q\x15\x80a\x03MW[a\x03-WP\x90V[c\x99\x96\xB3\x15`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[P\x80;\x15a\x03%V\xFE`\x80`@R\x7F\\`\xDA\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x80R` `\x80`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16Z\xFA\x80\x15a\x01\x07W_\x90\x15a\x01cWP` =` \x11a\x01\0W[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x82\x01\x16`\x80\x01\x90`\x80\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\0\xD3Wa\0\xCE\x91`@R`\x80\x01a\x01\x12V[a\x01cV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[P=a\0\x81V[`@Q=_\x82>=\x90\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80` \x91\x01\x12a\x01_W`\x80Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x01_W\x90V[_\x80\xFD[_\x80\x916\x82\x807\x816\x91Z\xF4=_\x80>\x15a\x01|W=_\xF3[=_\xFD`\x80\x80`@R4`\xAAW_Q` a\x14A_9_Q\x90_RT`\xFF\x81`@\x1C\x16`\x9BW`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01`IW[`@Qa\x13\x92\x90\x81a\0\xAF\x829\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x14A_9_Q\x90_RU\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_\x80`:V[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x07C\xBFn\x14a\x0FnW\x80c\x18\xB5\xCE\x81\x14a\x0F;W\x80c)\x08\x03V\x14a\r\xEFW\x80cK\x8B\xE3\xF7\x14a\x0C\x91W\x80cW\xD1\xBA%\x14a\x0CtW\x80cn\xDDl\t\x14a\x0CAW\x80c\x85\xE1\xF4\xD0\x14a\x0C$W\x80c\x8D\xA5\xCB[\x14a\x0B\xF2W\x80c\xA3\xC6\xE1\xE7\x14a\x0B\xD5W\x80c\xAAjC\xD8\x14a\x0B\xA2W\x80c\xBFm\xB6\xF8\x14a\x0BoW\x80c\xBFy\xFD\x1C\x14a\x02eW\x80c\xC7\xA7`\x95\x14a\x01mW\x80c\xD1\xF4s|\x14a\x01PW\x80c\xF2\xFD\xE3\x8B\x14a\0\xEAWc\xF8\xA1D\xBE\x14a\0\xC9W_\x80\xFD[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\x06T`@Q\x90\x81R\xF3[_\x80\xFD[4a\0\xE6W` `\x03\x196\x01\x12a\0\xE6Wa\x01Na\x01\x06a\x11\x02V[a\x01(s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x11{V[a\x01Is\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x12\xA7V[a\x13\x0CV[\0[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\x08T`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W`@Q_`\nTa\x01\x8D\x81a\x10\x13V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02#WP`\x01\x14a\x01\xC5W[a\x01\xC1\x83a\x01\xB5\x81\x85\x03\x82a\x10dV[`@Q\x91\x82\x91\x82a\x10\x87V[\x03\x90\xF3[`\n_\x90\x81R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x93\x92P\x90[\x80\x82\x10a\x02\tWP\x90\x91P\x81\x01` \x01a\x01\xB5a\x01\xA5V[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x01\xF1V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16` \x80\x86\x01\x91\x90\x91R\x91\x15\x15`\x05\x1B\x84\x01\x90\x91\x01\x91Pa\x01\xB5\x90Pa\x01\xA5V[4a\0\xE6Wa\x01\x80`\x03\x196\x01\x12a\0\xE6Wa\x02\x7Fa\x11\x02V[`$5`D5\x91`d5\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\0\xE6W`\x845s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\0\xE6W`\xE45s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\0\xE6Wa\x01$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\0\xE6Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE6Wa\x03.\x906\x90`\x04\x01a\x11%V[\x96a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE6Wa\x03P\x906\x90`\x04\x01a\x11%V[\x94\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x97`\xFF\x89`@\x1C\x16\x15\x98g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x0BgW[`\x01\x14\x90\x81a\x0B]W[\x15\x90\x81a\x0BTW[Pa\x0B,W\x89`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\n\xD7W[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x15a\nyW\x80\x15a\n\x1BW\x81\x15a\t\x97W\x82\x15a\t\x13W\x83\x15a\x08\x8FW\x84\x15a\x08\x0BW\x85\x15a\x07\x87W`\x05U`\x06U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x02T\x16\x17`\x02U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x03T\x16\x17`\x03U`\xA45`\x07U`\xC45`\x08U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04T\x16\x17`\x04Ua\x01\x045`\tU\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x83Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06\xD9Wa\x05\x19\x81a\x05\x14`\nTa\x10\x13V[a\x11\xE0V[` \x94`\x1F\x82\x11`\x01\x14a\x07\x06Wa\x05J\x92\x93\x94\x95\x82\x91_\x92a\x06GW[PP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nU[\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x06\xD9Wa\x05t\x82a\x05o`\x0BTa\x10\x13V[a\x120V[` \x90`\x1F\x83\x11`\x01\x14a\x06RW\x91\x80a\x05\xA6\x92a\x05\xAE\x95\x94_\x92a\x06GWPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BUa\x13\x0CV[a\x05\xB4W\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x01Q\x90P\x86\x80a\x057V[\x90`\x1F\x19\x83\x16\x91`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x92_[\x81\x81\x10a\x06\xC1WP\x91`\x01\x93\x91\x85a\x05\xAE\x97\x96\x94\x10a\x06\xA9W[PPP\x81\x1B\x01`\x0BUa\x13\x0CV[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x06\x9BV[\x92\x93` `\x01\x81\x92\x87\x86\x01Q\x81U\x01\x95\x01\x93\x01a\x06\x81V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x1F\x19\x82\x16\x95`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x91_[\x88\x81\x10a\x07oWP\x83`\x01\x95\x96\x97\x98\x10a\x07WW[PPP\x81\x1B\x01`\nUa\x05NV[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x07IV[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x074V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FInitial appchain owner cannot be`D\x82\x01R\x7F zero address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSequencing contract address cann`D\x82\x01R\x7Fot be zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FArbitrum inbox address cannot be`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FArbitrum bridge address cannot b`D\x82\x01R\x7Fe zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FSequencing chain ID cannot be ze`D\x82\x01R\x7Fro\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FOwner cannot be zero address\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x8Aa\x03\xF6V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x8Ca\x03\xA3V[0;\x15\x91Pa\x03\x9BV[\x8B\x91Pa\x03\x91V[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\tT`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\x05T`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x02T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\x07T`@Q\x90\x81R\xF3[4a\0\xE6Wa\x0C\x9F6a\x10\xB1V[a\x0C\xC1s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x11{V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06\xD9Wa\x0C\xDF\x81a\x05o`\x0BTa\x10\x13V[_\x91`\x1F\x82\x11`\x01\x14a\rOWa\r,\x82\x80\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95_\x91a\rDW[P_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BU[a\r?`@Q\x92\x83\x92\x83a\x12\x80V[\x03\x90\xA1\0[\x90P\x83\x015\x86a\r\x1AV[`\x1F\x19\x82\x16`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x90_[\x81\x81\x10a\r\xD7WP\x93\x83\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95\x10a\r\xBEW[PP`\x01\x82\x81\x1B\x01`\x0BUa\r0V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\r\xAEV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\r|V[4a\0\xE6Wa\r\xFD6a\x10\xB1V[a\x0E\x1Fs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x11{V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06\xD9Wa\x0E=\x81a\x05\x14`\nTa\x10\x13V[_\x91`\x1F\x82\x11`\x01\x14a\x0E\x9BWa\x0E\x89\x82\x80\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95_\x91a\rDWP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nUa\r?`@Q\x92\x83\x92\x83a\x12\x80V[`\x1F\x19\x82\x16`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x90_[\x81\x81\x10a\x0F#WP\x93\x83\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95\x10a\x0F\nW[PP`\x01\x82\x81\x1B\x01`\nUa\r0V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x0E\xFAV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x0E\xC8V[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W`@Q_`\x0BTa\x0F\x8E\x81a\x10\x13V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02#WP`\x01\x14a\x0F\xB5Wa\x01\xC1\x83a\x01\xB5\x81\x85\x03\x82a\x10dV[`\x0B_\x90\x81R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x93\x92P\x90[\x80\x82\x10a\x0F\xF9WP\x90\x91P\x81\x01` \x01a\x01\xB5a\x01\xA5V[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x0F\xE1V[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x10ZW[` \x83\x10\x14a\x10-WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x10\"V[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06\xD9W`@RV[`\x1F\x19`\x1F` `@\x94\x81\x85R\x80Q\x91\x82\x91\x82\x82\x88\x01R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x90` `\x03\x19\x83\x01\x12a\0\xE6W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE6W\x82`#\x82\x01\x12\x15a\0\xE6W\x80`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\0\xE6W`$\x84\x83\x01\x01\x11a\0\xE6W`$\x01\x91\x90V[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\0\xE6WV[\x81`\x1F\x82\x01\x12\x15a\0\xE6W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x06\xD9W`@Q\x92a\x11Z` `\x1F\x19`\x1F\x86\x01\x16\x01\x85a\x10dV[\x82\x84R` \x83\x83\x01\x01\x11a\0\xE6W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\x11\x82WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCaller is not the owner\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`\x1F\x81\x11a\x11\xECWPPV[`\n_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x12&W[`\x1F\x01`\x05\x1C\x01\x90[\x81\x81\x10a\x12\x1BWPPV[_\x81U`\x01\x01a\x12\x10V[\x90\x91P\x81\x90a\x12\x07V[`\x1F\x81\x11a\x12#\xA9f.\xFC\x9C\"\x9Cj\0`\x804a\x014W`\x1Fa\x05\x058\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x018W\x80\x84\x92`@\x94\x85R\x839\x81\x01\x03\x12a\x014Wa\0F\x81a\x01LV[\x90`\x01`\x01`\xA0\x1B\x03\x90a\0\\\x90` \x01a\x01LV[\x16\x90\x81\x15a\x01!W_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x84\x17\x82U`@Q\x93\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3\x80;\x15a\x01\x01W`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x82\x17\x90U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2a\x03\xA4\x90\x81a\x01a\x829\xF3[c!\x1E\xB1Y`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x014WV\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c6Y\xCF\xE6\x14a\x02~W\x80c\\`\xDA\x1B\x14a\x02-W\x80cqP\x18\xA6\x14a\x01\x93W\x80c\x8D\xA5\xCB[\x14a\x01CWc\xF2\xFD\xE3\x8B\x14a\0PW_\x80\xFD[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01?Wa\0\xA8a\x03XV[\x80\x15a\x01\x13Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[_\x80\xFD[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?Wa\x01\xC9a\x03XV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x81\x03a\x01?Wa\x02\xD7a\x03XV[;\x15a\x03-W\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\0[\x7F\x84z\xC5d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x03xWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD", + b"`\xA04a\x01kW`\x1Fa.\x978\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01DW\x80\x84\x92` \x94`@R\x839\x81\x01\x03\x12a\x01kWQ`\x01`\x01`\xA0\x1B\x03\x81\x16\x90\x81\x90\x03a\x01kW\x80\x15a\x01XW_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x83\x17\x82U`@Q\x92\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3a\x16\xDE\x81\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x83\x82\x10\x17a\x01DW\x82\x91a\x12\xB4\x839\x03\x90_\xF0\x80\x15a\x019W`@Q\x90a\x05\x05\x80\x83\x01`\x01`\x01`@\x1B\x03\x81\x11\x84\x82\x10\x17a\x01DW`@\x92\x84\x92a)\x92\x849`\x01`\x01`\xA0\x1B\x03\x16\x81R0` \x82\x01R\x03\x01\x90_\xF0\x80\x15a\x019W`\x80R`@Qa\x11D\x90\x81a\x01p\x829`\x80Q\x81\x81\x81a\x02\x15\x01R\x81\x81a\x05\xC2\x01R\x81\x81a\x08a\x01Ra\n\x98\x01R\xF3[`@Q=_\x82>=\x90\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[__5`\xE0\x1C\x80c\x0B\x04\xEB\xFD\x14a\x08\x85W\x80cYe\x9E\x90\x14a\x085W\x80co\x04$U\x14a\x04WW\x80cqP\x18\xA6\x14a\x03\xD9W\x80c\x83\xF9M\xB7\x14a\x01\xB7W\x80c\x8D\xA5\xCB[\x14a\x01\x84W\x80c\xA3:\x8B`\x14a\x01DWc\xF2\xFD\xE3\x8B\x14a\0rW_\x80\xFD[4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\0\xA0a\x08\xC1V[a\0\xA8a\x0C V[\x16\x80\x15a\x01\x15Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x84U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x83\x80\xA3\x80\xF3[`$\x82\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\x80`\x04R\xFD[\x80\xFD[P4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@` \x92`\x045\x81R`\x01\x84R T\x16`@Q\x90\x81R\xF3[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF` \x91T\x16`@Q\x90\x81R\xF3[P4a\x01AW` `\x03\x196\x01\x12a\x01AWa\x01\xD1a\x08\xC1V[a\x01\xD9a\x0C V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x15a\x03UW;\x15a\x02\xD1W\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x80;\x15a\x02\xC2W\x81\x80\x91`$`@Q\x80\x94\x81\x93\x7F6Y\xCF\xE6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x88`\x04\x84\x01RZ\xF1\x80\x15a\x02\xC6Wa\x02\xADW[P\x7FQ\xEAo\xFD\xC9\x90\x9D\\\xA3A%\x9Fr!\x90.\x06vX]\x83>+\xB2\x1F\xA9#\xC8^\x86(\x86` \x83`@Q\x90\x81R\xA1\x80\xF3[\x81a\x02\xB7\x91a\x08\xE4V[a\x02\xC2W\x81_a\x02~V[P\x80\xFD[`@Q=\x84\x82>=\x90\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`!`$\x82\x01R\x7FImplementation must be a contrac`D\x82\x01R\x7Ft\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`)`$\x82\x01R\x7FNew implementation cannot be zer`D\x82\x01R\x7Fo address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWa\x03\xF2a\x0C V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[4a\x07\x80Wa\x01\x80`\x03\x196\x01\x12a\x07\x80Wa\x04qa\x08\xC1V[`$5\x90`d5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\x845\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\xE45\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05\x1F\x906\x90`\x04\x01a\t%V[\x92a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05A\x906\x90`\x04\x01a\t%V[a\x05Ia\x0C V[a\x05T\x86\x15\x15a\t\x99V[\x85_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x07\xB1W`@Q` \x81\x01\x90\x87\x82R` \x81Ra\x05\x95`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7\x80\x82\x01\x90\x82\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\x07\x84W\x82\x91a\x06\r\x91a\x0Cm\x849\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R`@` \x82\x01\x81\x90R_\x90\x82\x01R``\x01\x90V[\x03\x90_\xF5\x80\x15a\x07uWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x96\x86_R`\x01` R`@_ \x88\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90U\x87;\x15a\x07\x80W_\x95s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95a\x07\x1E\x94a\x07\x0B\x93`@Q\x9C\x8D\x99\x8A\x99\x7F\xBFy\xFD\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8BR\x16`\x04\x8A\x01R\x8B`$\x8A\x01R`D5`D\x8A\x01R`d\x89\x01R`\x84\x88\x01R`\xA45`\xA4\x88\x01R`\xC45`\xC4\x88\x01R`\xE4\x87\x01Ra\x01\x045a\x01\x04\x87\x01Ra\x01$\x86\x01Ra\x01\x80a\x01D\x86\x01Ra\x01\x84\x85\x01\x90a\x0B\xDDV[\x90`\x03\x19\x84\x83\x03\x01a\x01d\x85\x01Ra\x0B\xDDV[\x03\x81\x83\x86Z\xF1\x92\x83\x15a\x07uW` \x93a\x07eW[P\x7F\xEA\xF2\xB9\xD4\xFDn\xBAZ`\x87\x04\x99\xF63\\j\xB4\x82n\x02\x9A\xFFe\xBA\x06\x192\x9D\xBDB\x1E\xC3\x83`@Q\x84\x81R\xA2`@Q\x90\x81R\xF3[_a\x07o\x91a\x08\xE4V[_a\x073V[`@Q=_\x82>=\x90\xFD[_\x80\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FConfig already exists for this c`D\x82\x01R\x7Fhain ID\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[4a\x07\x80W_`\x03\x196\x01\x12a\x07\x80W` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x07\x80W` `\x03\x196\x01\x12a\x07\x80W` a\x08\xA3`\x045a\t\xFEV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x07\x80WV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\x84W`@RV[\x81`\x1F\x82\x01\x12\x15a\x07\x80W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x84W`@Q\x92a\tx` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x86\x01\x16\x01\x85a\x08\xE4V[\x82\x84R` \x83\x83\x01\x01\x11a\x07\x80W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\t\xA0WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x80_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x0B\xB8W\x80a\nFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x15\x15a\t\x99V[`@Q` \x81\x01\x91\x82R` \x81Ra\n_`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7a\nu` \x82\x01\x83a\x08\xE4V[\x80\x82R` \x82\x01\x90a\x0Cm\x829a\x0B``@Q\x91` \x80\x84\x01a\x0B\x11\x85a\n\xE5\x8A\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF``\x92\x16\x81R`@` \x82\x01R_`@\x82\x01R\x01\x90V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x87R\x86a\x08\xE4V[`@Q\x94\x85\x93\x83\x85\x01\x97Q\x80\x91\x89^\x84\x01\x90\x83\x82\x01\x90_\x82RQ\x92\x83\x91^\x01\x01_\x81R\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x08\xE4V[Q\x90 `@Q\x90` \x82\x01\x92\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R0``\x1B`!\x84\x01R`5\x83\x01R`U\x82\x01R`U\x81Ra\x0B\xB1`u\x82a\x08\xE4V[Q\x90 \x16\x90V[_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16\x90V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x0C@WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD\xFE`\xA0\x80`@Ra\x04\xD7\x808\x03\x80\x91a\0\x17\x82\x85a\x02\x92V[\x839\x81\x01`@\x82\x82\x03\x12a\x01\xEBWa\0.\x82a\x02\xC9V[` \x83\x01Q\x90\x92`\x01`\x01`@\x1B\x03\x82\x11a\x01\xEBW\x01\x90\x80`\x1F\x83\x01\x12\x15a\x01\xEBW\x81Qa\0[\x81a\x02\xDDV[\x92a\0i`@Q\x94\x85a\x02\x92V[\x81\x84R` \x84\x01\x92` \x83\x83\x01\x01\x11a\x01\xEBW\x81_\x92` \x80\x93\x01\x85^\x84\x01\x01R\x82;\x15a\x02tW\x7F\xA3\xF0\xADt\xE5B:\xEB\xFD\x80\xD3\xEFCFW\x835\xA9\xA7*\xEA\xEEY\xFFl\xB3X+5\x13=P\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x85\x16\x90\x81\x17\x90\x91U`@Qc\\`\xDA\x1B`\xE0\x1B\x81R\x90\x91\x90` \x81`\x04\x81\x86Z\xFA\x90\x81\x15a\x01\xF7W_\x91a\x02:W[P\x80;\x15a\x02\x1AWP\x81\x7F\x1C\xF3\xB0:l\xF1\x9F\xA2\xBA\xBAM\xF1H\xE9\xDC\xAB\xED\xEA\x7F\x8A\\\x07\x84\x0E ~\\\x08\x9B\xE9]>_\x80\xA2\x82Q\x15a\x02\x02W` `\x04\x92`@Q\x93\x84\x80\x92c\\`\xDA\x1B`\xE0\x1B\x82RZ\xFA\x91\x82\x15a\x01\xF7W_\x92a\x01\xAEW[P_\x80\x91a\x01\x8A\x94Q\x90\x84Z\xF4=\x15a\x01\xA6W=\x91a\x01n\x83a\x02\xDDV[\x92a\x01|`@Q\x94\x85a\x02\x92V[\x83R=_` \x85\x01>a\x02\xF8V[P[`\x80R`@Qa\x01\x80\x90\x81a\x03W\x829`\x80Q\x81`F\x01R\xF3[``\x91a\x02\xF8V[\x92\x91P` \x83=` \x11a\x01\xEFW[\x81a\x01\xCA` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBW_\x80\x91a\x01\xE1a\x01\x8A\x95a\x02\xC9V[\x93\x94P\x91Pa\x01PV[_\x80\xFD[=\x91Pa\x01\xBDV[`@Q=_\x82>=\x90\xFD[PPP4\x15a\x01\x8CWc\xB3\x98\x97\x9F`\xE0\x1B_R`\x04_\xFD[cL\x9C\x8C\xE3`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[\x90P` \x81=` \x11a\x02lW[\x81a\x02U` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBWa\x02f\x90a\x02\xC9V[_a\0\xF5V[=\x91Pa\x02HV[c\x193\xB4;`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04R`$\x90\xFD[`\x1F\x90\x91\x01`\x1F\x19\x16\x81\x01\x90`\x01`\x01`@\x1B\x03\x82\x11\x90\x82\x10\x17a\x02\xB5W`@RV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x01\xEBWV[`\x01`\x01`@\x1B\x03\x81\x11a\x02\xB5W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x90a\x03\x1CWP\x80Q\x15a\x03\rW\x80Q\x90` \x01\xFD[c\xD6\xBD\xA2u`\xE0\x1B_R`\x04_\xFD[\x81Q\x15\x80a\x03MW[a\x03-WP\x90V[c\x99\x96\xB3\x15`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[P\x80;\x15a\x03%V\xFE`\x80`@R\x7F\\`\xDA\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x80R` `\x80`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16Z\xFA\x80\x15a\x01\x07W_\x90\x15a\x01cWP` =` \x11a\x01\0W[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x82\x01\x16`\x80\x01\x90`\x80\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\0\xD3Wa\0\xCE\x91`@R`\x80\x01a\x01\x12V[a\x01cV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[P=a\0\x81V[`@Q=_\x82>=\x90\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80` \x91\x01\x12a\x01_W`\x80Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x01_W\x90V[_\x80\xFD[_\x80\x916\x82\x807\x816\x91Z\xF4=_\x80>\x15a\x01|W=_\xF3[=_\xFD`\x80\x80`@R4`\xAAW_Q` a\x16\xBE_9_Q\x90_RT`\xFF\x81`@\x1C\x16`\x9BW`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01`IW[`@Qa\x16\x0F\x90\x81a\0\xAF\x829\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x16\xBE_9_Q\x90_RU\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_\x80`:V[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x07C\xBFn\x14a\x12\x03W\x80c\x18\xB5\xCE\x81\x14a\x11\xD0W\x80c)\x08\x03V\x14a\x10\x84W\x80cK\x8B\xE3\xF7\x14a\x0F&W\x80cT\xFDMP\x14a\x0E\x81W\x80cW\xD1\xBA%\x14a\x0EdW\x80cn\xDDl\t\x14a\x0E1W\x80cr@\xF9\xAF\x14a\x0C\xD1W\x80c\x85\xE1\xF4\xD0\x14a\x0C\xB4W\x80c\x8D\xA5\xCB[\x14a\x0C\x82W\x80c\xA3\xC6\xE1\xE7\x14a\x0CeW\x80c\xAAjC\xD8\x14a\x0C2W\x80c\xBFm\xB6\xF8\x14a\x0B\xFFW\x80c\xBFy\xFD\x1C\x14a\x02{W\x80c\xC7\xA7`\x95\x14a\x01\x83W\x80c\xD1\xF4s|\x14a\x01fW\x80c\xF2\xFD\xE3\x8B\x14a\x01\0Wc\xF8\xA1D\xBE\x14a\0\xDFW_\x80\xFD[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\x06T`@Q\x90\x81R\xF3[_\x80\xFD[4a\0\xFCW` `\x03\x196\x01\x12a\0\xFCWa\x01da\x01\x1Ca\x13\x97V[a\x01>s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x14\x10V[a\x01_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x15$V[a\x15\x89V[\0[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\x08T`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW`@Q_`\nTa\x01\xA3\x81a\x12\xA8V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x029WP`\x01\x14a\x01\xDBW[a\x01\xD7\x83a\x01\xCB\x81\x85\x03\x82a\x12\xF9V[`@Q\x91\x82\x91\x82a\x13\x1CV[\x03\x90\xF3[`\n_\x90\x81R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x93\x92P\x90[\x80\x82\x10a\x02\x1FWP\x90\x91P\x81\x01` \x01a\x01\xCBa\x01\xBBV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x02\x07V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16` \x80\x86\x01\x91\x90\x91R\x91\x15\x15`\x05\x1B\x84\x01\x90\x91\x01\x91Pa\x01\xCB\x90Pa\x01\xBBV[4a\0\xFCWa\x01\x80`\x03\x196\x01\x12a\0\xFCWa\x02\x95a\x13\x97V[`$5`D5\x91`d5\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\0\xFCW`\x845s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\0\xFCW`\xE45s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\0\xFCWa\x01$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\0\xFCWa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xFCWa\x03D\x906\x90`\x04\x01a\x13\xBAV[\x96a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xFCWa\x03f\x906\x90`\x04\x01a\x13\xBAV[\x94\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x97`\xFF\x89`@\x1C\x16\x15\x98g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x0B\xF7W[`\x01\x14\x90\x81a\x0B\xEDW[\x15\x90\x81a\x0B\xE4W[Pa\x0B\xBCW\x89`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x0BgW[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x15a\x0B\tW\x80\x15a\n\xABW\x81\x15a\n'W\x82\x15a\t\xA3W\x83\x15a\t\x1FW\x84\x15a\x08\x9BW\x85\x15a\x08\x17W`\x05U`\x06U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x02T\x16\x17`\x02U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x03T\x16\x17`\x03U`\xA45`\x07U`\xC45`\x08U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04T\x16\x17`\x04Ua\x01\x045`\tUa\x04\xEC`\x0CTa\x12\xA8V[`\x1F\x81\x11a\x07\xD9W[P`\n\x7F1.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01`\x0CU\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x83Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07+Wa\x05k\x81a\x05f`\nTa\x12\xA8V[a\x14\x8BV[` \x94`\x1F\x82\x11`\x01\x14a\x07XWa\x05\x9C\x92\x93\x94\x95\x82\x91_\x92a\x06\x99W[PP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nU[\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07+Wa\x05\xC6\x82a\x05\xC1`\x0BTa\x12\xA8V[a\x14\xC5V[` \x90`\x1F\x83\x11`\x01\x14a\x06\xA4W\x91\x80a\x05\xF8\x92a\x06\0\x95\x94_\x92a\x06\x99WPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BUa\x15\x89V[a\x06\x06W\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x01Q\x90P\x86\x80a\x05\x89V[\x90`\x1F\x19\x83\x16\x91`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x92_[\x81\x81\x10a\x07\x13WP\x91`\x01\x93\x91\x85a\x06\0\x97\x96\x94\x10a\x06\xFBW[PPP\x81\x1B\x01`\x0BUa\x15\x89V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x06\xEDV[\x92\x93` `\x01\x81\x92\x87\x86\x01Q\x81U\x01\x95\x01\x93\x01a\x06\xD3V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x1F\x19\x82\x16\x95`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x91_[\x88\x81\x10a\x07\xC1WP\x83`\x01\x95\x96\x97\x98\x10a\x07\xA9W[PPP\x81\x1B\x01`\nUa\x05\xA0V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x07\x9BV[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x07\x86V[`\x0C_Ra\x08\x11\x90`\x1F\x01`\x05\x1C\x7F\xDFif\xC9q\x05\x1C=T\xECY\x16&\x06S\x14\x93\xA5\x14\x04\xA0\x02\x84/V\0\x9D~\\\xF4\xA8\xC7\x90\x81\x01\x90a\x14uV[\x85a\x04\xF5V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FInitial appchain owner cannot be`D\x82\x01R\x7F zero address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSequencing contract address cann`D\x82\x01R\x7Fot be zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FArbitrum inbox address cannot be`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FArbitrum bridge address cannot b`D\x82\x01R\x7Fe zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FSequencing chain ID cannot be ze`D\x82\x01R\x7Fro\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FOwner cannot be zero address\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x8Aa\x04\x0CV[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x8Ca\x03\xB9V[0;\x15\x91Pa\x03\xB1V[\x8B\x91Pa\x03\xA7V[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\tT`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\x05T`@Q\x90\x81R\xF3[4a\0\xFCWa\x0C\xDF6a\x13FV[a\r\x01s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x14\x10V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07+Wa\r\x1B`\x0CTa\x12\xA8V[`\x1F\x81\x11a\r\xD8W[P_`\x1F\x82\x11`\x01\x14a\r`W\x81\x90a\rP\x93_\x92a\rUWPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0CU\0[\x015\x90P\x83\x80a\x05\x89V[`\x1F\x19\x82\x16\x92\x7F\xDFif\xC9q\x05\x1C=T\xECY\x16&\x06S\x14\x93\xA5\x14\x04\xA0\x02\x84/V\0\x9D~\\\xF4\xA8\xC7\x91_[\x85\x81\x10a\r\xC0WP\x83`\x01\x95\x10a\r\xA7W[PPP\x81\x1B\x01`\x0CU\0[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U\x82\x80\x80a\r\x9CV[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01a\r\x8AV[`\x0C_Ra\x0E!\x90\x7F\xDFif\xC9q\x05\x1C=T\xECY\x16&\x06S\x14\x93\xA5\x14\x04\xA0\x02\x84/V\0\x9D~\\\xF4\xA8\xC7`\x1F\x84\x01`\x05\x1C\x81\x01\x91` \x85\x10a\x0E'W[`\x1F\x01`\x05\x1C\x01\x90a\x14uV[\x82a\r$V[\x90\x91P\x81\x90a\x0E\x14V[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x02T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\x07T`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW`@Q_`\x0CTa\x0E\xA1\x81a\x12\xA8V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x029WP`\x01\x14a\x0E\xC8Wa\x01\xD7\x83a\x01\xCB\x81\x85\x03\x82a\x12\xF9V[`\x0C_\x90\x81R\x7F\xDFif\xC9q\x05\x1C=T\xECY\x16&\x06S\x14\x93\xA5\x14\x04\xA0\x02\x84/V\0\x9D~\\\xF4\xA8\xC7\x93\x92P\x90[\x80\x82\x10a\x0F\x0CWP\x90\x91P\x81\x01` \x01a\x01\xCBa\x01\xBBV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x0E\xF4V[4a\0\xFCWa\x0F46a\x13FV[a\x0FVs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x14\x10V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07+Wa\x0Ft\x81a\x05\xC1`\x0BTa\x12\xA8V[_\x91`\x1F\x82\x11`\x01\x14a\x0F\xE4Wa\x0F\xC1\x82\x80\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95_\x91a\x0F\xD9W[P_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BU[a\x0F\xD4`@Q\x92\x83\x92\x83a\x14\xFDV[\x03\x90\xA1\0[\x90P\x83\x015\x86a\x0F\xAFV[`\x1F\x19\x82\x16`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x90_[\x81\x81\x10a\x10lWP\x93\x83\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95\x10a\x10SW[PP`\x01\x82\x81\x1B\x01`\x0BUa\x0F\xC5V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x10CV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x10\x11V[4a\0\xFCWa\x10\x926a\x13FV[a\x10\xB4s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x14\x10V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07+Wa\x10\xD2\x81a\x05f`\nTa\x12\xA8V[_\x91`\x1F\x82\x11`\x01\x14a\x110Wa\x11\x1E\x82\x80\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95_\x91a\x0F\xD9WP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nUa\x0F\xD4`@Q\x92\x83\x92\x83a\x14\xFDV[`\x1F\x19\x82\x16`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x90_[\x81\x81\x10a\x11\xB8WP\x93\x83\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95\x10a\x11\x9FW[PP`\x01\x82\x81\x1B\x01`\nUa\x0F\xC5V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x11\x8FV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x11]V[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW`@Q_`\x0BTa\x12#\x81a\x12\xA8V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x029WP`\x01\x14a\x12JWa\x01\xD7\x83a\x01\xCB\x81\x85\x03\x82a\x12\xF9V[`\x0B_\x90\x81R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x93\x92P\x90[\x80\x82\x10a\x12\x8EWP\x90\x91P\x81\x01` \x01a\x01\xCBa\x01\xBBV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x12vV[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x12\xEFW[` \x83\x10\x14a\x12\xC2WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x12\xB7V[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07+W`@RV[`\x1F\x19`\x1F` `@\x94\x81\x85R\x80Q\x91\x82\x91\x82\x82\x88\x01R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x90` `\x03\x19\x83\x01\x12a\0\xFCW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xFCW\x82`#\x82\x01\x12\x15a\0\xFCW\x80`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\0\xFCW`$\x84\x83\x01\x01\x11a\0\xFCW`$\x01\x91\x90V[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\0\xFCWV[\x81`\x1F\x82\x01\x12\x15a\0\xFCW\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07+W`@Q\x92a\x13\xEF` `\x1F\x19`\x1F\x86\x01\x16\x01\x85a\x12\xF9V[\x82\x84R` \x83\x83\x01\x01\x11a\0\xFCW\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\x14\x17WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCaller is not the owner\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x81\x81\x10a\x14\x80WPPV[_\x81U`\x01\x01a\x14uV[\x90`\x1F\x82\x11a\x14\x98WPPV[a\x14\xC3\x91`\n_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E'W`\x1F\x01`\x05\x1C\x01\x90a\x14uV[V[\x90`\x1F\x82\x11a\x14\xD2WPPV[a\x14\xC3\x91`\x0B_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E'W`\x1F\x01`\x05\x1C\x01\x90a\x14uV[\x90`\x1F\x83`@\x94`\x1F\x19\x93` \x86R\x81` \x87\x01R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x15a\x15+WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R` `$\x82\x01R\x7FNew owner cannot be zero address`D\x82\x01R\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x15\xAA\x81\x15\x15a\x15$V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0`\x804a\x014W`\x1Fa\x05\x058\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x018W\x80\x84\x92`@\x94\x85R\x839\x81\x01\x03\x12a\x014Wa\0F\x81a\x01LV[\x90`\x01`\x01`\xA0\x1B\x03\x90a\0\\\x90` \x01a\x01LV[\x16\x90\x81\x15a\x01!W_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x84\x17\x82U`@Q\x93\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3\x80;\x15a\x01\x01W`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x82\x17\x90U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2a\x03\xA4\x90\x81a\x01a\x829\xF3[c!\x1E\xB1Y`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x014WV\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c6Y\xCF\xE6\x14a\x02~W\x80c\\`\xDA\x1B\x14a\x02-W\x80cqP\x18\xA6\x14a\x01\x93W\x80c\x8D\xA5\xCB[\x14a\x01CWc\xF2\xFD\xE3\x8B\x14a\0PW_\x80\xFD[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01?Wa\0\xA8a\x03XV[\x80\x15a\x01\x13Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[_\x80\xFD[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?Wa\x01\xC9a\x03XV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x81\x03a\x01?Wa\x02\xD7a\x03XV[;\x15a\x03-W\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\0[\x7F\x84z\xC5d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x03xWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD", ); /// The runtime bytecode of the contract, as deployed on the network. /// diff --git a/shared/contract-bindings/src/synd/arb_config_manager_factory.rs b/shared/contract-bindings/src/synd/arb_config_manager_factory.rs index 1250647b8..0d7120ed9 100644 --- a/shared/contract-bindings/src/synd/arb_config_manager_factory.rs +++ b/shared/contract-bindings/src/synd/arb_config_manager_factory.rs @@ -140,22 +140,22 @@ pub mod ArbConfigManagerFactory { /// The creation / init bytecode of the contract. /// /// ```text - ///0x6080806040523460155761315f908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630c6008af1461005457806336f591f21461004f57806348aac3921461004a5763b9168f4714610045575f80fd5b6103b7565b6102cb565b610108565b346100e15760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e157602060406100976100926100e5565b610434565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f835194859381855280519182918282880152018686015e5f85828601015201168101030190f35b5f80fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100e157565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15761013f6100e5565b60243561014b82610434565b9061015681836104d1565b916020815191015ff59081156100e15773ffffffffffffffffffffffffffffffffffffffff808316911681036101fa5760407fa8ff04590db5783e31f347bbd828911dabf9c79150b8af59be60044d8c679f529173ffffffffffffffffffffffffffffffffffffffff6101f6958351928352166020820152a160405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f41646472657373206d69736d61746368000000000000000000000000000000006044820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102c657604052565b610258565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15760043567ffffffffffffffff81116100e157366023820112156100e15780600401359067ffffffffffffffff82116102c65760405161036160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160182610285565b82815236602484840101116100e1575f6020846101f695602461039096018386013783010152602435906104d1565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15760206104046103f36100e5565b6103ff60243591610434565b6104d1565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b805191908290602001825e015f815290565b6104ce61049c916104a2612c1a91604051926104536020820185610285565b808452610545602085013973ffffffffffffffffffffffffffffffffffffffff604051911660208201526020815261048c604082610285565b6040519485936020850190610422565b90610422565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610285565b90565b9073ffffffffffffffffffffffffffffffffffffffff91602081519101206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b6021840152603583015260558201526055815261053d607582610285565b519020169056fe60a03461016b57601f612c1a38819003918201601f19168301916001600160401b038311848410176101445780849260209460405283398101031261016b57516001600160a01b0381169081900361016b578015610158575f80546001600160a01b031981168317825560405192916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36114618181016001600160401b038111838210176101445782916112b4833903905ff0801561013957604051906105058083016001600160401b0381118482101761014457604092849261271584396001600160a01b031681523060208201520301905ff080156101395760805260405161114490816101708239608051818181610215015281816105c2015281816108610152610a980152f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c80630b04ebfd1461088557806359659e90146108355780636f04245514610457578063715018a6146103d957806383f94db7146101b75780638da5cb5b14610184578063a33a8b60146101445763f2fde38b14610072575f80fd5b346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6100a06108c1565b6100a8610c20565b1680156101155773ffffffffffffffffffffffffffffffffffffffff8254827fffffffffffffffffffffffff00000000000000000000000000000000000000008216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6024827f1e4fbdf700000000000000000000000000000000000000000000000000000000815280600452fd5b80fd5b50346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6040602092600435815260018452205416604051908152f35b503461014157806003193601126101415773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b5034610141576020600319360112610141576101d16108c1565b6101d9610c20565b73ffffffffffffffffffffffffffffffffffffffff8116908115610355573b156102d1578173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b156102c2578180916024604051809481937f3659cfe60000000000000000000000000000000000000000000000000000000083528860048401525af180156102c6576102ad575b507f51ea6ffdc9909d5ca341259f7221902e0676585d833e2bb21fa923c85e862886602083604051908152a180f35b816102b7916108e4565b6102c257815f61027e565b5080fd5b6040513d84823e3d90fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f496d706c656d656e746174696f6e206d757374206265206120636f6e7472616360448201527f74000000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4e657720696d706c656d656e746174696f6e2063616e6e6f74206265207a657260448201527f6f206164647265737300000000000000000000000000000000000000000000006064820152fd5b50346101415780600319360112610141576103f2610c20565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b3461078057610180600319360112610780576104716108c1565b602435906064359173ffffffffffffffffffffffffffffffffffffffff8316809303610780576084359173ffffffffffffffffffffffffffffffffffffffff83168093036107805760e4359073ffffffffffffffffffffffffffffffffffffffff821680920361078057610124359073ffffffffffffffffffffffffffffffffffffffff8216809203610780576101443567ffffffffffffffff81116107805761051f903690600401610925565b926101643567ffffffffffffffff811161078057610541903690600401610925565b610549610c20565b610554861515610999565b855f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f2054166107b1576040516020810190878252602081526105956040826108e4565b5190206040516104d78082019082821067ffffffffffffffff83111761078457829161060d91610c6d84397f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526040602082018190525f9082015260600190565b03905ff580156107755773ffffffffffffffffffffffffffffffffffffffff1696865f52600160205260405f20887fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055873b15610780575f9573ffffffffffffffffffffffffffffffffffffffff9561071e9461070b936040519c8d998a997fbf79fd1c000000000000000000000000000000000000000000000000000000008b521660048a01528b60248a015260443560448a01526064890152608488015260a43560a488015260c43560c488015260e487015261010435610104870152610124860152610180610144860152610184850190610bdd565b9060031984830301610164850152610bdd565b038183865af192831561077557602093610765575b507feaf2b9d4fd6eba5a60870499f6335c6ab4826e029aff65ba0619329dbd421ec383604051848152a2604051908152f35b5f61076f916108e4565b5f610733565b6040513d5f823e3d90fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f436f6e66696720616c72656164792065786973747320666f722074686973206360448201527f6861696e204944000000000000000000000000000000000000000000000000006064820152fd5b34610780575f60031936011261078057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107805760206003193601126107805760206108a36004356109fe565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361078057565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761078457604052565b81601f820112156107805780359067ffffffffffffffff8211610784576040519261097860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601856108e4565b8284526020838301011161078057815f926020809301838601378301015290565b156109a057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b805f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f205416610bb85780610a4673ffffffffffffffffffffffffffffffffffffffff921515610999565b6040516020810191825260208152610a5f6040826108e4565b5190206040516104d7610a7560208201836108e4565b8082526020820190610c6d8239610b60604051916020808401610b1185610ae58a7f0000000000000000000000000000000000000000000000000000000000000000168473ffffffffffffffffffffffffffffffffffffffff606092168152604060208201525f60408201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866108e4565b60405194859383850197518091895e840190838201905f8252519283915e01015f8152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826108e4565b5190206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b60218401526035830152605582015260558152610bb16075826108e4565b5190201690565b5f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f20541690565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff5f54163303610c4057565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffdfe60a0806040526104d780380380916100178285610292565b833981016040828203126101eb5761002e826102c9565b602083015190926001600160401b0382116101eb57019080601f830112156101eb57815161005b816102dd565b926100696040519485610292565b8184526020840192602083830101116101eb57815f926020809301855e84010152823b15610274577fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b038516908117909155604051635c60da1b60e01b8152909190602081600481865afa9081156101f7575f9161023a575b50803b1561021a5750817f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e5f80a282511561020257602060049260405193848092635c60da1b60e01b82525afa9182156101f7575f926101ae575b505f809161018a945190845af43d156101a6573d9161016e836102dd565b9261017c6040519485610292565b83523d5f602085013e6102f8565b505b608052604051610180908161035782396080518160460152f35b6060916102f8565b9291506020833d6020116101ef575b816101ca60209383610292565b810103126101eb575f80916101e161018a956102c9565b9394509150610150565b5f80fd5b3d91506101bd565b6040513d5f823e3d90fd5b505050341561018c5763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b90506020813d60201161026c575b8161025560209383610292565b810103126101eb57610266906102c9565b5f6100f5565b3d9150610248565b631933b43b60e21b5f9081526001600160a01b038416600452602490fd5b601f909101601f19168101906001600160401b038211908210176102b557604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101eb57565b6001600160401b0381116102b557601f01601f191660200190565b9061031c575080511561030d57805190602001fd5b63d6bda27560e01b5f5260045ffd5b8151158061034d575b61032d575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561032556fe60806040527f5c60da1b000000000000000000000000000000000000000000000000000000006080526020608060048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610107575f9015610163575060203d602011610100575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116608001906080821067ffffffffffffffff8311176100d3576100ce91604052608001610112565b610163565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b503d610081565b6040513d5f823e3d90fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80602091011261015f5760805173ffffffffffffffffffffffffffffffffffffffff8116810361015f5790565b5f80fd5b5f8091368280378136915af43d5f803e1561017c573d5ff35b3d5ffd6080806040523460aa575f5160206114415f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b60405161139290816100af8239f35b6001600160401b0319166001600160401b039081175f5160206114415f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630743bf6e14610f6e57806318b5ce8114610f3b5780632908035614610def5780634b8be3f714610c9157806357d1ba2514610c745780636edd6c0914610c4157806385e1f4d014610c245780638da5cb5b14610bf2578063a3c6e1e714610bd5578063aa6a43d814610ba2578063bf6db6f814610b6f578063bf79fd1c14610265578063c7a760951461016d578063d1f4737c14610150578063f2fde38b146100ea5763f8a144be146100c9575f80fd5b346100e6575f6003193601126100e6576020600654604051908152f35b5f80fd5b346100e65760206003193601126100e65761014e610106611102565b61012873ffffffffffffffffffffffffffffffffffffffff5f5416331461117b565b61014973ffffffffffffffffffffffffffffffffffffffff821615156112a7565b61130c565b005b346100e6575f6003193601126100e6576020600854604051908152f35b346100e6575f6003193601126100e6576040515f600a5461018d81611013565b808452906001811690811561022357506001146101c5575b6101c1836101b581850382611064565b60405191829182611087565b0390f35b600a5f9081527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8939250905b808210610209575090915081016020016101b56101a5565b9192600181602092548385880101520191019092916101f1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506101b590506101a5565b346100e6576101806003193601126100e65761027f611102565b602435604435916064359273ffffffffffffffffffffffffffffffffffffffff84168094036100e65760843573ffffffffffffffffffffffffffffffffffffffff81168091036100e65760e43573ffffffffffffffffffffffffffffffffffffffff81168091036100e657610124359173ffffffffffffffffffffffffffffffffffffffff83168093036100e6576101443567ffffffffffffffff81116100e65761032e903690600401611125565b966101643567ffffffffffffffff81116100e657610350903690600401611125565b947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549760ff8960401c16159867ffffffffffffffff811680159081610b67575b6001149081610b5d575b159081610b54575b50610b2c578960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610ad7575b5073ffffffffffffffffffffffffffffffffffffffff881615610a79578015610a1b57811561099757821561091357831561088f57841561080b578515610787576005556006557fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035560a43560075560c4356008557fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455610104356009557fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155835167ffffffffffffffff81116106d95761051981610514600a54611013565b6111e0565b602094601f82116001146107065761054a9293949582915f92610647575b50505f198260011b9260031b1c19161790565b600a555b80519067ffffffffffffffff82116106d9576105748261056f600b54611013565b611230565b602090601f83116001146106525791806105a6926105ae95945f926106475750505f198260011b9260031b1c19161790565b600b5561130c565b6105b457005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b015190508680610537565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b8181106106c157509160019391856105ae979694106106a9575b505050811b01600b5561130c565b01515f1960f88460031b161c1916905585808061069b565b92936020600181928786015181550195019301610681565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19821695600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8915f5b88811061076f57508360019596979810610757575b505050811b01600a5561054e565b01515f1960f88460031b161c19169055858080610749565b91926020600181928685015181550194019201610734565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f496e697469616c20617070636861696e206f776e65722063616e6e6f7420626560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f53657175656e63696e6720636f6e747261637420616464726573732063616e6e60448201527f6f74206265207a65726f000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f417262697472756d20696e626f7820616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f417262697472756d2062726964676520616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53657175656e63696e6720636861696e2049442063616e6e6f74206265207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f776e65722063616e6e6f74206265207a65726f2061646472657373000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558a6103f6565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158c6103a3565b303b15915061039b565b8b9150610391565b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b346100e6575f6003193601126100e6576020600954604051908152f35b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100e6575f6003193601126100e6576020600554604051908152f35b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346100e6575f6003193601126100e6576020600754604051908152f35b346100e657610c9f366110b1565b610cc173ffffffffffffffffffffffffffffffffffffffff5f5416331461117b565b67ffffffffffffffff81116106d957610cdf8161056f600b54611013565b5f91601f8211600114610d4f57610d2c82807f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7955f91610d44575b505f198260011b9260031b1c19161790565b600b555b610d3f60405192839283611280565b0390a1005b905083013586610d1a565b601f198216600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b818110610dd7575093837f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a79510610dbe575b5050600182811b01600b55610d30565b5f1960f88560031b161c19908301351690558380610dae565b83860135835560209586019560019093019201610d7c565b346100e657610dfd366110b1565b610e1f73ffffffffffffffffffffffffffffffffffffffff5f5416331461117b565b67ffffffffffffffff81116106d957610e3d81610514600a54611013565b5f91601f8211600114610e9b57610e8982807f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c955f91610d4457505f198260011b9260031b1c19161790565b600a55610d3f60405192839283611280565b601f198216600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8905f5b818110610f23575093837f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c9510610f0a575b5050600182811b01600a55610d30565b5f1960f88560031b161c19908301351690558380610efa565b83860135835560209586019560019093019201610ec8565b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346100e6575f6003193601126100e6576040515f600b54610f8e81611013565b80845290600181169081156102235750600114610fb5576101c1836101b581850382611064565b600b5f9081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b808210610ff9575090915081016020016101b56101a5565b919260018160209254838588010152019101909291610fe1565b90600182811c9216801561105a575b602083101461102d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691611022565b90601f601f19910116810190811067ffffffffffffffff8211176106d957604052565b601f19601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b9060206003198301126100e65760043567ffffffffffffffff81116100e657826023820112156100e65780600401359267ffffffffffffffff84116100e657602484830101116100e6576024019190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100e657565b81601f820112156100e65780359067ffffffffffffffff82116106d9576040519261115a6020601f19601f8601160185611064565b828452602083830101116100e657815f926020809301838601378301015290565b1561118257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b601f81116111ec575050565b600a5f5260205f20906020601f840160051c83019310611226575b601f0160051c01905b81811061121b575050565b5f8155600101611210565b9091508190611207565b601f811161123c575050565b600b5f5260205f20906020601f840160051c83019310611276575b601f0160051c01905b81811061126b575050565b5f8155600101611260565b9091508190611257565b90601f83604094601f199360208652816020870152868601375f8582860101520116010190565b156112ae57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b73ffffffffffffffffffffffffffffffffffffffff1661132d8115156112a7565b73ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060803461013457601f61050538819003918201601f19168301916001600160401b03831184841017610138578084926040948552833981010312610134576100468161014c565b906001600160a01b039061005c9060200161014c565b16908115610121575f80546001600160a01b031981168417825560405193916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3803b1561010157600180546001600160a01b0319166001600160a01b039290921691821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a26103a490816101618239f35b63211eb15960e21b5f9081526001600160a01b0391909116600452602490fd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101345756fe60806040526004361015610011575f80fd5b5f3560e01c80633659cfe61461027e5780635c60da1b1461022d578063715018a6146101935780638da5cb5b146101435763f2fde38b14610050575f80fd5b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff811680910361013f576100a8610358565b80156101135773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b5f80fd5b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576101c9610358565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff81169081810361013f576102d7610358565b3b1561032d57807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2005b7f847ac564000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff5f5416330361037857565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd + ///0x608080604052346015576133dc908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630c6008af1461005457806336f591f21461004f57806348aac3921461004a5763b9168f4714610045575f80fd5b6103b7565b6102cb565b610108565b346100e15760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e157602060406100976100926100e5565b610434565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f835194859381855280519182918282880152018686015e5f85828601015201168101030190f35b5f80fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100e157565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15761013f6100e5565b60243561014b82610434565b9061015681836104d1565b916020815191015ff59081156100e15773ffffffffffffffffffffffffffffffffffffffff808316911681036101fa5760407fa8ff04590db5783e31f347bbd828911dabf9c79150b8af59be60044d8c679f529173ffffffffffffffffffffffffffffffffffffffff6101f6958351928352166020820152a160405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f41646472657373206d69736d61746368000000000000000000000000000000006044820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102c657604052565b610258565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15760043567ffffffffffffffff81116100e157366023820112156100e15780600401359067ffffffffffffffff82116102c65760405161036160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160182610285565b82815236602484840101116100e1575f6020846101f695602461039096018386013783010152602435906104d1565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15760206104046103f36100e5565b6103ff60243591610434565b6104d1565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b805191908290602001825e015f815290565b6104ce61049c916104a2612e9791604051926104536020820185610285565b808452610545602085013973ffffffffffffffffffffffffffffffffffffffff604051911660208201526020815261048c604082610285565b6040519485936020850190610422565b90610422565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610285565b90565b9073ffffffffffffffffffffffffffffffffffffffff91602081519101206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b6021840152603583015260558201526055815261053d607582610285565b519020169056fe60a03461016b57601f612e9738819003918201601f19168301916001600160401b038311848410176101445780849260209460405283398101031261016b57516001600160a01b0381169081900361016b578015610158575f80546001600160a01b031981168317825560405192916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36116de8181016001600160401b038111838210176101445782916112b4833903905ff0801561013957604051906105058083016001600160401b0381118482101761014457604092849261299284396001600160a01b031681523060208201520301905ff080156101395760805260405161114490816101708239608051818181610215015281816105c2015281816108610152610a980152f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c80630b04ebfd1461088557806359659e90146108355780636f04245514610457578063715018a6146103d957806383f94db7146101b75780638da5cb5b14610184578063a33a8b60146101445763f2fde38b14610072575f80fd5b346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6100a06108c1565b6100a8610c20565b1680156101155773ffffffffffffffffffffffffffffffffffffffff8254827fffffffffffffffffffffffff00000000000000000000000000000000000000008216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6024827f1e4fbdf700000000000000000000000000000000000000000000000000000000815280600452fd5b80fd5b50346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6040602092600435815260018452205416604051908152f35b503461014157806003193601126101415773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b5034610141576020600319360112610141576101d16108c1565b6101d9610c20565b73ffffffffffffffffffffffffffffffffffffffff8116908115610355573b156102d1578173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b156102c2578180916024604051809481937f3659cfe60000000000000000000000000000000000000000000000000000000083528860048401525af180156102c6576102ad575b507f51ea6ffdc9909d5ca341259f7221902e0676585d833e2bb21fa923c85e862886602083604051908152a180f35b816102b7916108e4565b6102c257815f61027e565b5080fd5b6040513d84823e3d90fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f496d706c656d656e746174696f6e206d757374206265206120636f6e7472616360448201527f74000000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4e657720696d706c656d656e746174696f6e2063616e6e6f74206265207a657260448201527f6f206164647265737300000000000000000000000000000000000000000000006064820152fd5b50346101415780600319360112610141576103f2610c20565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b3461078057610180600319360112610780576104716108c1565b602435906064359173ffffffffffffffffffffffffffffffffffffffff8316809303610780576084359173ffffffffffffffffffffffffffffffffffffffff83168093036107805760e4359073ffffffffffffffffffffffffffffffffffffffff821680920361078057610124359073ffffffffffffffffffffffffffffffffffffffff8216809203610780576101443567ffffffffffffffff81116107805761051f903690600401610925565b926101643567ffffffffffffffff811161078057610541903690600401610925565b610549610c20565b610554861515610999565b855f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f2054166107b1576040516020810190878252602081526105956040826108e4565b5190206040516104d78082019082821067ffffffffffffffff83111761078457829161060d91610c6d84397f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526040602082018190525f9082015260600190565b03905ff580156107755773ffffffffffffffffffffffffffffffffffffffff1696865f52600160205260405f20887fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055873b15610780575f9573ffffffffffffffffffffffffffffffffffffffff9561071e9461070b936040519c8d998a997fbf79fd1c000000000000000000000000000000000000000000000000000000008b521660048a01528b60248a015260443560448a01526064890152608488015260a43560a488015260c43560c488015260e487015261010435610104870152610124860152610180610144860152610184850190610bdd565b9060031984830301610164850152610bdd565b038183865af192831561077557602093610765575b507feaf2b9d4fd6eba5a60870499f6335c6ab4826e029aff65ba0619329dbd421ec383604051848152a2604051908152f35b5f61076f916108e4565b5f610733565b6040513d5f823e3d90fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f436f6e66696720616c72656164792065786973747320666f722074686973206360448201527f6861696e204944000000000000000000000000000000000000000000000000006064820152fd5b34610780575f60031936011261078057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107805760206003193601126107805760206108a36004356109fe565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361078057565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761078457604052565b81601f820112156107805780359067ffffffffffffffff8211610784576040519261097860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601856108e4565b8284526020838301011161078057815f926020809301838601378301015290565b156109a057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b805f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f205416610bb85780610a4673ffffffffffffffffffffffffffffffffffffffff921515610999565b6040516020810191825260208152610a5f6040826108e4565b5190206040516104d7610a7560208201836108e4565b8082526020820190610c6d8239610b60604051916020808401610b1185610ae58a7f0000000000000000000000000000000000000000000000000000000000000000168473ffffffffffffffffffffffffffffffffffffffff606092168152604060208201525f60408201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866108e4565b60405194859383850197518091895e840190838201905f8252519283915e01015f8152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826108e4565b5190206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b60218401526035830152605582015260558152610bb16075826108e4565b5190201690565b5f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f20541690565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff5f54163303610c4057565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffdfe60a0806040526104d780380380916100178285610292565b833981016040828203126101eb5761002e826102c9565b602083015190926001600160401b0382116101eb57019080601f830112156101eb57815161005b816102dd565b926100696040519485610292565b8184526020840192602083830101116101eb57815f926020809301855e84010152823b15610274577fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b038516908117909155604051635c60da1b60e01b8152909190602081600481865afa9081156101f7575f9161023a575b50803b1561021a5750817f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e5f80a282511561020257602060049260405193848092635c60da1b60e01b82525afa9182156101f7575f926101ae575b505f809161018a945190845af43d156101a6573d9161016e836102dd565b9261017c6040519485610292565b83523d5f602085013e6102f8565b505b608052604051610180908161035782396080518160460152f35b6060916102f8565b9291506020833d6020116101ef575b816101ca60209383610292565b810103126101eb575f80916101e161018a956102c9565b9394509150610150565b5f80fd5b3d91506101bd565b6040513d5f823e3d90fd5b505050341561018c5763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b90506020813d60201161026c575b8161025560209383610292565b810103126101eb57610266906102c9565b5f6100f5565b3d9150610248565b631933b43b60e21b5f9081526001600160a01b038416600452602490fd5b601f909101601f19168101906001600160401b038211908210176102b557604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101eb57565b6001600160401b0381116102b557601f01601f191660200190565b9061031c575080511561030d57805190602001fd5b63d6bda27560e01b5f5260045ffd5b8151158061034d575b61032d575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561032556fe60806040527f5c60da1b000000000000000000000000000000000000000000000000000000006080526020608060048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610107575f9015610163575060203d602011610100575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116608001906080821067ffffffffffffffff8311176100d3576100ce91604052608001610112565b610163565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b503d610081565b6040513d5f823e3d90fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80602091011261015f5760805173ffffffffffffffffffffffffffffffffffffffff8116810361015f5790565b5f80fd5b5f8091368280378136915af43d5f803e1561017c573d5ff35b3d5ffd6080806040523460aa575f5160206116be5f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b60405161160f90816100af8239f35b6001600160401b0319166001600160401b039081175f5160206116be5f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630743bf6e1461120357806318b5ce81146111d057806329080356146110845780634b8be3f714610f2657806354fd4d5014610e8157806357d1ba2514610e645780636edd6c0914610e315780637240f9af14610cd157806385e1f4d014610cb45780638da5cb5b14610c82578063a3c6e1e714610c65578063aa6a43d814610c32578063bf6db6f814610bff578063bf79fd1c1461027b578063c7a7609514610183578063d1f4737c14610166578063f2fde38b146101005763f8a144be146100df575f80fd5b346100fc575f6003193601126100fc576020600654604051908152f35b5f80fd5b346100fc5760206003193601126100fc5761016461011c611397565b61013e73ffffffffffffffffffffffffffffffffffffffff5f54163314611410565b61015f73ffffffffffffffffffffffffffffffffffffffff82161515611524565b611589565b005b346100fc575f6003193601126100fc576020600854604051908152f35b346100fc575f6003193601126100fc576040515f600a546101a3816112a8565b808452906001811690811561023957506001146101db575b6101d7836101cb818503826112f9565b6040519182918261131c565b0390f35b600a5f9081527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8939250905b80821061021f575090915081016020016101cb6101bb565b919260018160209254838588010152019101909291610207565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506101cb90506101bb565b346100fc576101806003193601126100fc57610295611397565b602435604435916064359273ffffffffffffffffffffffffffffffffffffffff84168094036100fc5760843573ffffffffffffffffffffffffffffffffffffffff81168091036100fc5760e43573ffffffffffffffffffffffffffffffffffffffff81168091036100fc57610124359173ffffffffffffffffffffffffffffffffffffffff83168093036100fc576101443567ffffffffffffffff81116100fc576103449036906004016113ba565b966101643567ffffffffffffffff81116100fc576103669036906004016113ba565b947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549760ff8960401c16159867ffffffffffffffff811680159081610bf7575b6001149081610bed575b159081610be4575b50610bbc578960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610b67575b5073ffffffffffffffffffffffffffffffffffffffff881615610b09578015610aab578115610a275782156109a357831561091f57841561089b578515610817576005556006557fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035560a43560075560c4356008557fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455610104356009556104ec600c546112a8565b601f81116107d9575b50600a7f312e302e3000000000000000000000000000000000000000000000000000000001600c557fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155835167ffffffffffffffff811161072b5761056b81610566600a546112a8565b61148b565b602094601f82116001146107585761059c9293949582915f92610699575b50505f198260011b9260031b1c19161790565b600a555b80519067ffffffffffffffff821161072b576105c6826105c1600b546112a8565b6114c5565b602090601f83116001146106a45791806105f89261060095945f926106995750505f198260011b9260031b1c19161790565b600b55611589565b61060657005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b015190508680610589565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b8181106107135750916001939185610600979694106106fb575b505050811b01600b55611589565b01515f1960f88460031b161c191690558580806106ed565b929360206001819287860151815501950193016106d3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19821695600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8915f5b8881106107c1575083600195969798106107a9575b505050811b01600a556105a0565b01515f1960f88460031b161c1916905585808061079b565b91926020600181928685015181550194019201610786565b600c5f5261081190601f0160051c7fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c790810190611475565b856104f5565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f496e697469616c20617070636861696e206f776e65722063616e6e6f7420626560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f53657175656e63696e6720636f6e747261637420616464726573732063616e6e60448201527f6f74206265207a65726f000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f417262697472756d20696e626f7820616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f417262697472756d2062726964676520616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53657175656e63696e6720636861696e2049442063616e6e6f74206265207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f776e65722063616e6e6f74206265207a65726f2061646472657373000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558a61040c565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158c6103b9565b303b1591506103b1565b8b91506103a7565b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b346100fc575f6003193601126100fc576020600954604051908152f35b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100fc575f6003193601126100fc576020600554604051908152f35b346100fc57610cdf36611346565b610d0173ffffffffffffffffffffffffffffffffffffffff5f54163314611410565b67ffffffffffffffff811161072b57610d1b600c546112a8565b601f8111610dd8575b505f601f8211600114610d60578190610d50935f92610d555750505f198260011b9260031b1c19161790565b600c55005b013590508380610589565b601f198216927fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915f5b858110610dc057508360019510610da7575b505050811b01600c55005b5f1960f88560031b161c19910135169055828080610d9c565b90926020600181928686013581550194019101610d8a565b600c5f52610e21907fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7601f840160051c81019160208510610e27575b601f0160051c0190611475565b82610d24565b9091508190610e14565b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346100fc575f6003193601126100fc576020600754604051908152f35b346100fc575f6003193601126100fc576040515f600c54610ea1816112a8565b80845290600181169081156102395750600114610ec8576101d7836101cb818503826112f9565b600c5f9081527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7939250905b808210610f0c575090915081016020016101cb6101bb565b919260018160209254838588010152019101909291610ef4565b346100fc57610f3436611346565b610f5673ffffffffffffffffffffffffffffffffffffffff5f54163314611410565b67ffffffffffffffff811161072b57610f74816105c1600b546112a8565b5f91601f8211600114610fe457610fc182807f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7955f91610fd9575b505f198260011b9260031b1c19161790565b600b555b610fd4604051928392836114fd565b0390a1005b905083013586610faf565b601f198216600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b81811061106c575093837f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a79510611053575b5050600182811b01600b55610fc5565b5f1960f88560031b161c19908301351690558380611043565b83860135835560209586019560019093019201611011565b346100fc5761109236611346565b6110b473ffffffffffffffffffffffffffffffffffffffff5f54163314611410565b67ffffffffffffffff811161072b576110d281610566600a546112a8565b5f91601f82116001146111305761111e82807f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c955f91610fd957505f198260011b9260031b1c19161790565b600a55610fd4604051928392836114fd565b601f198216600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8905f5b8181106111b8575093837f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c951061119f575b5050600182811b01600a55610fc5565b5f1960f88560031b161c1990830135169055838061118f565b8386013583556020958601956001909301920161115d565b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346100fc575f6003193601126100fc576040515f600b54611223816112a8565b8084529060018116908115610239575060011461124a576101d7836101cb818503826112f9565b600b5f9081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b80821061128e575090915081016020016101cb6101bb565b919260018160209254838588010152019101909291611276565b90600182811c921680156112ef575b60208310146112c257565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916112b7565b90601f601f19910116810190811067ffffffffffffffff82111761072b57604052565b601f19601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b9060206003198301126100fc5760043567ffffffffffffffff81116100fc57826023820112156100fc5780600401359267ffffffffffffffff84116100fc57602484830101116100fc576024019190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100fc57565b81601f820112156100fc5780359067ffffffffffffffff821161072b57604051926113ef6020601f19601f86011601856112f9565b828452602083830101116100fc57815f926020809301838601378301015290565b1561141757565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b818110611480575050565b5f8155600101611475565b90601f8211611498575050565b6114c391600a5f5260205f20906020601f840160051c83019310610e2757601f0160051c0190611475565b565b90601f82116114d2575050565b6114c391600b5f5260205f20906020601f840160051c83019310610e2757601f0160051c0190611475565b90601f83604094601f199360208652816020870152868601375f8582860101520116010190565b1561152b57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166115aa811515611524565b73ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060803461013457601f61050538819003918201601f19168301916001600160401b03831184841017610138578084926040948552833981010312610134576100468161014c565b906001600160a01b039061005c9060200161014c565b16908115610121575f80546001600160a01b031981168417825560405193916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3803b1561010157600180546001600160a01b0319166001600160a01b039290921691821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a26103a490816101618239f35b63211eb15960e21b5f9081526001600160a01b0391909116600452602490fd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101345756fe60806040526004361015610011575f80fd5b5f3560e01c80633659cfe61461027e5780635c60da1b1461022d578063715018a6146101935780638da5cb5b146101435763f2fde38b14610050575f80fd5b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff811680910361013f576100a8610358565b80156101135773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b5f80fd5b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576101c9610358565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff81169081810361013f576102d7610358565b3b1561032d57807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2005b7f847ac564000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff5f5416330361037857565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80\x80`@R4`\x15Wa1_\x90\x81a\0\x1A\x829\xF3[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x0C`\x08\xAF\x14a\0TW\x80c6\xF5\x91\xF2\x14a\0OW\x80cH\xAA\xC3\x92\x14a\0JWc\xB9\x16\x8FG\x14a\0EW_\x80\xFD[a\x03\xB7V[a\x02\xCBV[a\x01\x08V[4a\0\xE1W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W` `@a\0\x97a\0\x92a\0\xE5V[a\x044V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x83Q\x94\x85\x93\x81\x85R\x80Q\x91\x82\x91\x82\x82\x88\x01R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x81\x01\x03\x01\x90\xF3[_\x80\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\0\xE1WV[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1Wa\x01?a\0\xE5V[`$5a\x01K\x82a\x044V[\x90a\x01V\x81\x83a\x04\xD1V[\x91` \x81Q\x91\x01_\xF5\x90\x81\x15a\0\xE1Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x83\x16\x91\x16\x81\x03a\x01\xFAW`@\x7F\xA8\xFF\x04Y\r\xB5x>1\xF3G\xBB\xD8(\x91\x1D\xAB\xF9\xC7\x91P\xB8\xAFY\xBE`\x04M\x8Cg\x9FR\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xF6\x95\x83Q\x92\x83R\x16` \x82\x01R\xA1`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R\x90\x81\x90` \x82\x01\x90V[\x03\x90\xF3[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x10`$\x82\x01R\x7FAddress mismatch\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x02\xC6W`@RV[a\x02XV[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE1W6`#\x82\x01\x12\x15a\0\xE1W\x80`\x04\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x02\xC6W`@Qa\x03a` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x86\x01\x16\x01\x82a\x02\x85V[\x82\x81R6`$\x84\x84\x01\x01\x11a\0\xE1W_` \x84a\x01\xF6\x95`$a\x03\x90\x96\x01\x83\x86\x017\x83\x01\x01R`$5\x90a\x04\xD1V[`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R\x90\x81\x90` \x82\x01\x90V[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W` a\x04\x04a\x03\xF3a\0\xE5V[a\x03\xFF`$5\x91a\x044V[a\x04\xD1V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[\x80Q\x91\x90\x82\x90` \x01\x82^\x01_\x81R\x90V[a\x04\xCEa\x04\x9C\x91a\x04\xA2a,\x1A\x91`@Q\x92a\x04S` \x82\x01\x85a\x02\x85V[\x80\x84Ra\x05E` \x85\x019s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16` \x82\x01R` \x81Ra\x04\x8C`@\x82a\x02\x85V[`@Q\x94\x85\x93` \x85\x01\x90a\x04\"V[\x90a\x04\"V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x02\x85V[\x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91` \x81Q\x91\x01 `@Q\x90` \x82\x01\x92\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R0``\x1B`!\x84\x01R`5\x83\x01R`U\x82\x01R`U\x81Ra\x05=`u\x82a\x02\x85V[Q\x90 \x16\x90V\xFE`\xA04a\x01kW`\x1Fa,\x1A8\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01DW\x80\x84\x92` \x94`@R\x839\x81\x01\x03\x12a\x01kWQ`\x01`\x01`\xA0\x1B\x03\x81\x16\x90\x81\x90\x03a\x01kW\x80\x15a\x01XW_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x83\x17\x82U`@Q\x92\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3a\x14a\x81\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x83\x82\x10\x17a\x01DW\x82\x91a\x12\xB4\x839\x03\x90_\xF0\x80\x15a\x019W`@Q\x90a\x05\x05\x80\x83\x01`\x01`\x01`@\x1B\x03\x81\x11\x84\x82\x10\x17a\x01DW`@\x92\x84\x92a'\x15\x849`\x01`\x01`\xA0\x1B\x03\x16\x81R0` \x82\x01R\x03\x01\x90_\xF0\x80\x15a\x019W`\x80R`@Qa\x11D\x90\x81a\x01p\x829`\x80Q\x81\x81\x81a\x02\x15\x01R\x81\x81a\x05\xC2\x01R\x81\x81a\x08a\x01Ra\n\x98\x01R\xF3[`@Q=_\x82>=\x90\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[__5`\xE0\x1C\x80c\x0B\x04\xEB\xFD\x14a\x08\x85W\x80cYe\x9E\x90\x14a\x085W\x80co\x04$U\x14a\x04WW\x80cqP\x18\xA6\x14a\x03\xD9W\x80c\x83\xF9M\xB7\x14a\x01\xB7W\x80c\x8D\xA5\xCB[\x14a\x01\x84W\x80c\xA3:\x8B`\x14a\x01DWc\xF2\xFD\xE3\x8B\x14a\0rW_\x80\xFD[4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\0\xA0a\x08\xC1V[a\0\xA8a\x0C V[\x16\x80\x15a\x01\x15Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x84U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x83\x80\xA3\x80\xF3[`$\x82\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\x80`\x04R\xFD[\x80\xFD[P4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@` \x92`\x045\x81R`\x01\x84R T\x16`@Q\x90\x81R\xF3[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF` \x91T\x16`@Q\x90\x81R\xF3[P4a\x01AW` `\x03\x196\x01\x12a\x01AWa\x01\xD1a\x08\xC1V[a\x01\xD9a\x0C V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x15a\x03UW;\x15a\x02\xD1W\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x80;\x15a\x02\xC2W\x81\x80\x91`$`@Q\x80\x94\x81\x93\x7F6Y\xCF\xE6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x88`\x04\x84\x01RZ\xF1\x80\x15a\x02\xC6Wa\x02\xADW[P\x7FQ\xEAo\xFD\xC9\x90\x9D\\\xA3A%\x9Fr!\x90.\x06vX]\x83>+\xB2\x1F\xA9#\xC8^\x86(\x86` \x83`@Q\x90\x81R\xA1\x80\xF3[\x81a\x02\xB7\x91a\x08\xE4V[a\x02\xC2W\x81_a\x02~V[P\x80\xFD[`@Q=\x84\x82>=\x90\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`!`$\x82\x01R\x7FImplementation must be a contrac`D\x82\x01R\x7Ft\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`)`$\x82\x01R\x7FNew implementation cannot be zer`D\x82\x01R\x7Fo address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWa\x03\xF2a\x0C V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[4a\x07\x80Wa\x01\x80`\x03\x196\x01\x12a\x07\x80Wa\x04qa\x08\xC1V[`$5\x90`d5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\x845\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\xE45\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05\x1F\x906\x90`\x04\x01a\t%V[\x92a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05A\x906\x90`\x04\x01a\t%V[a\x05Ia\x0C V[a\x05T\x86\x15\x15a\t\x99V[\x85_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x07\xB1W`@Q` \x81\x01\x90\x87\x82R` \x81Ra\x05\x95`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7\x80\x82\x01\x90\x82\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\x07\x84W\x82\x91a\x06\r\x91a\x0Cm\x849\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R`@` \x82\x01\x81\x90R_\x90\x82\x01R``\x01\x90V[\x03\x90_\xF5\x80\x15a\x07uWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x96\x86_R`\x01` R`@_ \x88\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90U\x87;\x15a\x07\x80W_\x95s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95a\x07\x1E\x94a\x07\x0B\x93`@Q\x9C\x8D\x99\x8A\x99\x7F\xBFy\xFD\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8BR\x16`\x04\x8A\x01R\x8B`$\x8A\x01R`D5`D\x8A\x01R`d\x89\x01R`\x84\x88\x01R`\xA45`\xA4\x88\x01R`\xC45`\xC4\x88\x01R`\xE4\x87\x01Ra\x01\x045a\x01\x04\x87\x01Ra\x01$\x86\x01Ra\x01\x80a\x01D\x86\x01Ra\x01\x84\x85\x01\x90a\x0B\xDDV[\x90`\x03\x19\x84\x83\x03\x01a\x01d\x85\x01Ra\x0B\xDDV[\x03\x81\x83\x86Z\xF1\x92\x83\x15a\x07uW` \x93a\x07eW[P\x7F\xEA\xF2\xB9\xD4\xFDn\xBAZ`\x87\x04\x99\xF63\\j\xB4\x82n\x02\x9A\xFFe\xBA\x06\x192\x9D\xBDB\x1E\xC3\x83`@Q\x84\x81R\xA2`@Q\x90\x81R\xF3[_a\x07o\x91a\x08\xE4V[_a\x073V[`@Q=_\x82>=\x90\xFD[_\x80\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FConfig already exists for this c`D\x82\x01R\x7Fhain ID\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[4a\x07\x80W_`\x03\x196\x01\x12a\x07\x80W` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x07\x80W` `\x03\x196\x01\x12a\x07\x80W` a\x08\xA3`\x045a\t\xFEV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x07\x80WV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\x84W`@RV[\x81`\x1F\x82\x01\x12\x15a\x07\x80W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x84W`@Q\x92a\tx` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x86\x01\x16\x01\x85a\x08\xE4V[\x82\x84R` \x83\x83\x01\x01\x11a\x07\x80W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\t\xA0WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x80_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x0B\xB8W\x80a\nFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x15\x15a\t\x99V[`@Q` \x81\x01\x91\x82R` \x81Ra\n_`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7a\nu` \x82\x01\x83a\x08\xE4V[\x80\x82R` \x82\x01\x90a\x0Cm\x829a\x0B``@Q\x91` \x80\x84\x01a\x0B\x11\x85a\n\xE5\x8A\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF``\x92\x16\x81R`@` \x82\x01R_`@\x82\x01R\x01\x90V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x87R\x86a\x08\xE4V[`@Q\x94\x85\x93\x83\x85\x01\x97Q\x80\x91\x89^\x84\x01\x90\x83\x82\x01\x90_\x82RQ\x92\x83\x91^\x01\x01_\x81R\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x08\xE4V[Q\x90 `@Q\x90` \x82\x01\x92\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R0``\x1B`!\x84\x01R`5\x83\x01R`U\x82\x01R`U\x81Ra\x0B\xB1`u\x82a\x08\xE4V[Q\x90 \x16\x90V[_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16\x90V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x0C@WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD\xFE`\xA0\x80`@Ra\x04\xD7\x808\x03\x80\x91a\0\x17\x82\x85a\x02\x92V[\x839\x81\x01`@\x82\x82\x03\x12a\x01\xEBWa\0.\x82a\x02\xC9V[` \x83\x01Q\x90\x92`\x01`\x01`@\x1B\x03\x82\x11a\x01\xEBW\x01\x90\x80`\x1F\x83\x01\x12\x15a\x01\xEBW\x81Qa\0[\x81a\x02\xDDV[\x92a\0i`@Q\x94\x85a\x02\x92V[\x81\x84R` \x84\x01\x92` \x83\x83\x01\x01\x11a\x01\xEBW\x81_\x92` \x80\x93\x01\x85^\x84\x01\x01R\x82;\x15a\x02tW\x7F\xA3\xF0\xADt\xE5B:\xEB\xFD\x80\xD3\xEFCFW\x835\xA9\xA7*\xEA\xEEY\xFFl\xB3X+5\x13=P\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x85\x16\x90\x81\x17\x90\x91U`@Qc\\`\xDA\x1B`\xE0\x1B\x81R\x90\x91\x90` \x81`\x04\x81\x86Z\xFA\x90\x81\x15a\x01\xF7W_\x91a\x02:W[P\x80;\x15a\x02\x1AWP\x81\x7F\x1C\xF3\xB0:l\xF1\x9F\xA2\xBA\xBAM\xF1H\xE9\xDC\xAB\xED\xEA\x7F\x8A\\\x07\x84\x0E ~\\\x08\x9B\xE9]>_\x80\xA2\x82Q\x15a\x02\x02W` `\x04\x92`@Q\x93\x84\x80\x92c\\`\xDA\x1B`\xE0\x1B\x82RZ\xFA\x91\x82\x15a\x01\xF7W_\x92a\x01\xAEW[P_\x80\x91a\x01\x8A\x94Q\x90\x84Z\xF4=\x15a\x01\xA6W=\x91a\x01n\x83a\x02\xDDV[\x92a\x01|`@Q\x94\x85a\x02\x92V[\x83R=_` \x85\x01>a\x02\xF8V[P[`\x80R`@Qa\x01\x80\x90\x81a\x03W\x829`\x80Q\x81`F\x01R\xF3[``\x91a\x02\xF8V[\x92\x91P` \x83=` \x11a\x01\xEFW[\x81a\x01\xCA` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBW_\x80\x91a\x01\xE1a\x01\x8A\x95a\x02\xC9V[\x93\x94P\x91Pa\x01PV[_\x80\xFD[=\x91Pa\x01\xBDV[`@Q=_\x82>=\x90\xFD[PPP4\x15a\x01\x8CWc\xB3\x98\x97\x9F`\xE0\x1B_R`\x04_\xFD[cL\x9C\x8C\xE3`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[\x90P` \x81=` \x11a\x02lW[\x81a\x02U` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBWa\x02f\x90a\x02\xC9V[_a\0\xF5V[=\x91Pa\x02HV[c\x193\xB4;`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04R`$\x90\xFD[`\x1F\x90\x91\x01`\x1F\x19\x16\x81\x01\x90`\x01`\x01`@\x1B\x03\x82\x11\x90\x82\x10\x17a\x02\xB5W`@RV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x01\xEBWV[`\x01`\x01`@\x1B\x03\x81\x11a\x02\xB5W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x90a\x03\x1CWP\x80Q\x15a\x03\rW\x80Q\x90` \x01\xFD[c\xD6\xBD\xA2u`\xE0\x1B_R`\x04_\xFD[\x81Q\x15\x80a\x03MW[a\x03-WP\x90V[c\x99\x96\xB3\x15`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[P\x80;\x15a\x03%V\xFE`\x80`@R\x7F\\`\xDA\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x80R` `\x80`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16Z\xFA\x80\x15a\x01\x07W_\x90\x15a\x01cWP` =` \x11a\x01\0W[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x82\x01\x16`\x80\x01\x90`\x80\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\0\xD3Wa\0\xCE\x91`@R`\x80\x01a\x01\x12V[a\x01cV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[P=a\0\x81V[`@Q=_\x82>=\x90\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80` \x91\x01\x12a\x01_W`\x80Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x01_W\x90V[_\x80\xFD[_\x80\x916\x82\x807\x816\x91Z\xF4=_\x80>\x15a\x01|W=_\xF3[=_\xFD`\x80\x80`@R4`\xAAW_Q` a\x14A_9_Q\x90_RT`\xFF\x81`@\x1C\x16`\x9BW`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01`IW[`@Qa\x13\x92\x90\x81a\0\xAF\x829\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x14A_9_Q\x90_RU\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_\x80`:V[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x07C\xBFn\x14a\x0FnW\x80c\x18\xB5\xCE\x81\x14a\x0F;W\x80c)\x08\x03V\x14a\r\xEFW\x80cK\x8B\xE3\xF7\x14a\x0C\x91W\x80cW\xD1\xBA%\x14a\x0CtW\x80cn\xDDl\t\x14a\x0CAW\x80c\x85\xE1\xF4\xD0\x14a\x0C$W\x80c\x8D\xA5\xCB[\x14a\x0B\xF2W\x80c\xA3\xC6\xE1\xE7\x14a\x0B\xD5W\x80c\xAAjC\xD8\x14a\x0B\xA2W\x80c\xBFm\xB6\xF8\x14a\x0BoW\x80c\xBFy\xFD\x1C\x14a\x02eW\x80c\xC7\xA7`\x95\x14a\x01mW\x80c\xD1\xF4s|\x14a\x01PW\x80c\xF2\xFD\xE3\x8B\x14a\0\xEAWc\xF8\xA1D\xBE\x14a\0\xC9W_\x80\xFD[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\x06T`@Q\x90\x81R\xF3[_\x80\xFD[4a\0\xE6W` `\x03\x196\x01\x12a\0\xE6Wa\x01Na\x01\x06a\x11\x02V[a\x01(s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x11{V[a\x01Is\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x12\xA7V[a\x13\x0CV[\0[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\x08T`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W`@Q_`\nTa\x01\x8D\x81a\x10\x13V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02#WP`\x01\x14a\x01\xC5W[a\x01\xC1\x83a\x01\xB5\x81\x85\x03\x82a\x10dV[`@Q\x91\x82\x91\x82a\x10\x87V[\x03\x90\xF3[`\n_\x90\x81R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x93\x92P\x90[\x80\x82\x10a\x02\tWP\x90\x91P\x81\x01` \x01a\x01\xB5a\x01\xA5V[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x01\xF1V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16` \x80\x86\x01\x91\x90\x91R\x91\x15\x15`\x05\x1B\x84\x01\x90\x91\x01\x91Pa\x01\xB5\x90Pa\x01\xA5V[4a\0\xE6Wa\x01\x80`\x03\x196\x01\x12a\0\xE6Wa\x02\x7Fa\x11\x02V[`$5`D5\x91`d5\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\0\xE6W`\x845s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\0\xE6W`\xE45s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\0\xE6Wa\x01$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\0\xE6Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE6Wa\x03.\x906\x90`\x04\x01a\x11%V[\x96a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE6Wa\x03P\x906\x90`\x04\x01a\x11%V[\x94\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x97`\xFF\x89`@\x1C\x16\x15\x98g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x0BgW[`\x01\x14\x90\x81a\x0B]W[\x15\x90\x81a\x0BTW[Pa\x0B,W\x89`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\n\xD7W[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x15a\nyW\x80\x15a\n\x1BW\x81\x15a\t\x97W\x82\x15a\t\x13W\x83\x15a\x08\x8FW\x84\x15a\x08\x0BW\x85\x15a\x07\x87W`\x05U`\x06U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x02T\x16\x17`\x02U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x03T\x16\x17`\x03U`\xA45`\x07U`\xC45`\x08U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04T\x16\x17`\x04Ua\x01\x045`\tU\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x83Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06\xD9Wa\x05\x19\x81a\x05\x14`\nTa\x10\x13V[a\x11\xE0V[` \x94`\x1F\x82\x11`\x01\x14a\x07\x06Wa\x05J\x92\x93\x94\x95\x82\x91_\x92a\x06GW[PP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nU[\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x06\xD9Wa\x05t\x82a\x05o`\x0BTa\x10\x13V[a\x120V[` \x90`\x1F\x83\x11`\x01\x14a\x06RW\x91\x80a\x05\xA6\x92a\x05\xAE\x95\x94_\x92a\x06GWPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BUa\x13\x0CV[a\x05\xB4W\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x01Q\x90P\x86\x80a\x057V[\x90`\x1F\x19\x83\x16\x91`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x92_[\x81\x81\x10a\x06\xC1WP\x91`\x01\x93\x91\x85a\x05\xAE\x97\x96\x94\x10a\x06\xA9W[PPP\x81\x1B\x01`\x0BUa\x13\x0CV[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x06\x9BV[\x92\x93` `\x01\x81\x92\x87\x86\x01Q\x81U\x01\x95\x01\x93\x01a\x06\x81V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x1F\x19\x82\x16\x95`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x91_[\x88\x81\x10a\x07oWP\x83`\x01\x95\x96\x97\x98\x10a\x07WW[PPP\x81\x1B\x01`\nUa\x05NV[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x07IV[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x074V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FInitial appchain owner cannot be`D\x82\x01R\x7F zero address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSequencing contract address cann`D\x82\x01R\x7Fot be zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FArbitrum inbox address cannot be`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FArbitrum bridge address cannot b`D\x82\x01R\x7Fe zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FSequencing chain ID cannot be ze`D\x82\x01R\x7Fro\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FOwner cannot be zero address\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x8Aa\x03\xF6V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x8Ca\x03\xA3V[0;\x15\x91Pa\x03\x9BV[\x8B\x91Pa\x03\x91V[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\tT`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\x05T`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x02T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\x07T`@Q\x90\x81R\xF3[4a\0\xE6Wa\x0C\x9F6a\x10\xB1V[a\x0C\xC1s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x11{V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06\xD9Wa\x0C\xDF\x81a\x05o`\x0BTa\x10\x13V[_\x91`\x1F\x82\x11`\x01\x14a\rOWa\r,\x82\x80\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95_\x91a\rDW[P_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BU[a\r?`@Q\x92\x83\x92\x83a\x12\x80V[\x03\x90\xA1\0[\x90P\x83\x015\x86a\r\x1AV[`\x1F\x19\x82\x16`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x90_[\x81\x81\x10a\r\xD7WP\x93\x83\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95\x10a\r\xBEW[PP`\x01\x82\x81\x1B\x01`\x0BUa\r0V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\r\xAEV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\r|V[4a\0\xE6Wa\r\xFD6a\x10\xB1V[a\x0E\x1Fs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x11{V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06\xD9Wa\x0E=\x81a\x05\x14`\nTa\x10\x13V[_\x91`\x1F\x82\x11`\x01\x14a\x0E\x9BWa\x0E\x89\x82\x80\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95_\x91a\rDWP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nUa\r?`@Q\x92\x83\x92\x83a\x12\x80V[`\x1F\x19\x82\x16`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x90_[\x81\x81\x10a\x0F#WP\x93\x83\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95\x10a\x0F\nW[PP`\x01\x82\x81\x1B\x01`\nUa\r0V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x0E\xFAV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x0E\xC8V[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W`@Q_`\x0BTa\x0F\x8E\x81a\x10\x13V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02#WP`\x01\x14a\x0F\xB5Wa\x01\xC1\x83a\x01\xB5\x81\x85\x03\x82a\x10dV[`\x0B_\x90\x81R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x93\x92P\x90[\x80\x82\x10a\x0F\xF9WP\x90\x91P\x81\x01` \x01a\x01\xB5a\x01\xA5V[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x0F\xE1V[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x10ZW[` \x83\x10\x14a\x10-WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x10\"V[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06\xD9W`@RV[`\x1F\x19`\x1F` `@\x94\x81\x85R\x80Q\x91\x82\x91\x82\x82\x88\x01R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x90` `\x03\x19\x83\x01\x12a\0\xE6W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE6W\x82`#\x82\x01\x12\x15a\0\xE6W\x80`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\0\xE6W`$\x84\x83\x01\x01\x11a\0\xE6W`$\x01\x91\x90V[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\0\xE6WV[\x81`\x1F\x82\x01\x12\x15a\0\xE6W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x06\xD9W`@Q\x92a\x11Z` `\x1F\x19`\x1F\x86\x01\x16\x01\x85a\x10dV[\x82\x84R` \x83\x83\x01\x01\x11a\0\xE6W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\x11\x82WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCaller is not the owner\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`\x1F\x81\x11a\x11\xECWPPV[`\n_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x12&W[`\x1F\x01`\x05\x1C\x01\x90[\x81\x81\x10a\x12\x1BWPPV[_\x81U`\x01\x01a\x12\x10V[\x90\x91P\x81\x90a\x12\x07V[`\x1F\x81\x11a\x12#\xA9f.\xFC\x9C\"\x9Cj\0`\x804a\x014W`\x1Fa\x05\x058\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x018W\x80\x84\x92`@\x94\x85R\x839\x81\x01\x03\x12a\x014Wa\0F\x81a\x01LV[\x90`\x01`\x01`\xA0\x1B\x03\x90a\0\\\x90` \x01a\x01LV[\x16\x90\x81\x15a\x01!W_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x84\x17\x82U`@Q\x93\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3\x80;\x15a\x01\x01W`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x82\x17\x90U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2a\x03\xA4\x90\x81a\x01a\x829\xF3[c!\x1E\xB1Y`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x014WV\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c6Y\xCF\xE6\x14a\x02~W\x80c\\`\xDA\x1B\x14a\x02-W\x80cqP\x18\xA6\x14a\x01\x93W\x80c\x8D\xA5\xCB[\x14a\x01CWc\xF2\xFD\xE3\x8B\x14a\0PW_\x80\xFD[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01?Wa\0\xA8a\x03XV[\x80\x15a\x01\x13Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[_\x80\xFD[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?Wa\x01\xC9a\x03XV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x81\x03a\x01?Wa\x02\xD7a\x03XV[;\x15a\x03-W\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\0[\x7F\x84z\xC5d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x03xWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD", + b"`\x80\x80`@R4`\x15Wa3\xDC\x90\x81a\0\x1A\x829\xF3[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x0C`\x08\xAF\x14a\0TW\x80c6\xF5\x91\xF2\x14a\0OW\x80cH\xAA\xC3\x92\x14a\0JWc\xB9\x16\x8FG\x14a\0EW_\x80\xFD[a\x03\xB7V[a\x02\xCBV[a\x01\x08V[4a\0\xE1W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W` `@a\0\x97a\0\x92a\0\xE5V[a\x044V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x83Q\x94\x85\x93\x81\x85R\x80Q\x91\x82\x91\x82\x82\x88\x01R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x81\x01\x03\x01\x90\xF3[_\x80\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\0\xE1WV[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1Wa\x01?a\0\xE5V[`$5a\x01K\x82a\x044V[\x90a\x01V\x81\x83a\x04\xD1V[\x91` \x81Q\x91\x01_\xF5\x90\x81\x15a\0\xE1Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x83\x16\x91\x16\x81\x03a\x01\xFAW`@\x7F\xA8\xFF\x04Y\r\xB5x>1\xF3G\xBB\xD8(\x91\x1D\xAB\xF9\xC7\x91P\xB8\xAFY\xBE`\x04M\x8Cg\x9FR\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xF6\x95\x83Q\x92\x83R\x16` \x82\x01R\xA1`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R\x90\x81\x90` \x82\x01\x90V[\x03\x90\xF3[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x10`$\x82\x01R\x7FAddress mismatch\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x02\xC6W`@RV[a\x02XV[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE1W6`#\x82\x01\x12\x15a\0\xE1W\x80`\x04\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x02\xC6W`@Qa\x03a` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x86\x01\x16\x01\x82a\x02\x85V[\x82\x81R6`$\x84\x84\x01\x01\x11a\0\xE1W_` \x84a\x01\xF6\x95`$a\x03\x90\x96\x01\x83\x86\x017\x83\x01\x01R`$5\x90a\x04\xD1V[`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R\x90\x81\x90` \x82\x01\x90V[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W` a\x04\x04a\x03\xF3a\0\xE5V[a\x03\xFF`$5\x91a\x044V[a\x04\xD1V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[\x80Q\x91\x90\x82\x90` \x01\x82^\x01_\x81R\x90V[a\x04\xCEa\x04\x9C\x91a\x04\xA2a.\x97\x91`@Q\x92a\x04S` \x82\x01\x85a\x02\x85V[\x80\x84Ra\x05E` \x85\x019s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16` \x82\x01R` \x81Ra\x04\x8C`@\x82a\x02\x85V[`@Q\x94\x85\x93` \x85\x01\x90a\x04\"V[\x90a\x04\"V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x02\x85V[\x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91` \x81Q\x91\x01 `@Q\x90` \x82\x01\x92\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R0``\x1B`!\x84\x01R`5\x83\x01R`U\x82\x01R`U\x81Ra\x05=`u\x82a\x02\x85V[Q\x90 \x16\x90V\xFE`\xA04a\x01kW`\x1Fa.\x978\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01DW\x80\x84\x92` \x94`@R\x839\x81\x01\x03\x12a\x01kWQ`\x01`\x01`\xA0\x1B\x03\x81\x16\x90\x81\x90\x03a\x01kW\x80\x15a\x01XW_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x83\x17\x82U`@Q\x92\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3a\x16\xDE\x81\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x83\x82\x10\x17a\x01DW\x82\x91a\x12\xB4\x839\x03\x90_\xF0\x80\x15a\x019W`@Q\x90a\x05\x05\x80\x83\x01`\x01`\x01`@\x1B\x03\x81\x11\x84\x82\x10\x17a\x01DW`@\x92\x84\x92a)\x92\x849`\x01`\x01`\xA0\x1B\x03\x16\x81R0` \x82\x01R\x03\x01\x90_\xF0\x80\x15a\x019W`\x80R`@Qa\x11D\x90\x81a\x01p\x829`\x80Q\x81\x81\x81a\x02\x15\x01R\x81\x81a\x05\xC2\x01R\x81\x81a\x08a\x01Ra\n\x98\x01R\xF3[`@Q=_\x82>=\x90\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[__5`\xE0\x1C\x80c\x0B\x04\xEB\xFD\x14a\x08\x85W\x80cYe\x9E\x90\x14a\x085W\x80co\x04$U\x14a\x04WW\x80cqP\x18\xA6\x14a\x03\xD9W\x80c\x83\xF9M\xB7\x14a\x01\xB7W\x80c\x8D\xA5\xCB[\x14a\x01\x84W\x80c\xA3:\x8B`\x14a\x01DWc\xF2\xFD\xE3\x8B\x14a\0rW_\x80\xFD[4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\0\xA0a\x08\xC1V[a\0\xA8a\x0C V[\x16\x80\x15a\x01\x15Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x84U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x83\x80\xA3\x80\xF3[`$\x82\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\x80`\x04R\xFD[\x80\xFD[P4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@` \x92`\x045\x81R`\x01\x84R T\x16`@Q\x90\x81R\xF3[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF` \x91T\x16`@Q\x90\x81R\xF3[P4a\x01AW` `\x03\x196\x01\x12a\x01AWa\x01\xD1a\x08\xC1V[a\x01\xD9a\x0C V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x15a\x03UW;\x15a\x02\xD1W\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x80;\x15a\x02\xC2W\x81\x80\x91`$`@Q\x80\x94\x81\x93\x7F6Y\xCF\xE6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x88`\x04\x84\x01RZ\xF1\x80\x15a\x02\xC6Wa\x02\xADW[P\x7FQ\xEAo\xFD\xC9\x90\x9D\\\xA3A%\x9Fr!\x90.\x06vX]\x83>+\xB2\x1F\xA9#\xC8^\x86(\x86` \x83`@Q\x90\x81R\xA1\x80\xF3[\x81a\x02\xB7\x91a\x08\xE4V[a\x02\xC2W\x81_a\x02~V[P\x80\xFD[`@Q=\x84\x82>=\x90\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`!`$\x82\x01R\x7FImplementation must be a contrac`D\x82\x01R\x7Ft\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`)`$\x82\x01R\x7FNew implementation cannot be zer`D\x82\x01R\x7Fo address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWa\x03\xF2a\x0C V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[4a\x07\x80Wa\x01\x80`\x03\x196\x01\x12a\x07\x80Wa\x04qa\x08\xC1V[`$5\x90`d5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\x845\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\xE45\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05\x1F\x906\x90`\x04\x01a\t%V[\x92a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05A\x906\x90`\x04\x01a\t%V[a\x05Ia\x0C V[a\x05T\x86\x15\x15a\t\x99V[\x85_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x07\xB1W`@Q` \x81\x01\x90\x87\x82R` \x81Ra\x05\x95`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7\x80\x82\x01\x90\x82\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\x07\x84W\x82\x91a\x06\r\x91a\x0Cm\x849\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R`@` \x82\x01\x81\x90R_\x90\x82\x01R``\x01\x90V[\x03\x90_\xF5\x80\x15a\x07uWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x96\x86_R`\x01` R`@_ \x88\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90U\x87;\x15a\x07\x80W_\x95s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95a\x07\x1E\x94a\x07\x0B\x93`@Q\x9C\x8D\x99\x8A\x99\x7F\xBFy\xFD\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8BR\x16`\x04\x8A\x01R\x8B`$\x8A\x01R`D5`D\x8A\x01R`d\x89\x01R`\x84\x88\x01R`\xA45`\xA4\x88\x01R`\xC45`\xC4\x88\x01R`\xE4\x87\x01Ra\x01\x045a\x01\x04\x87\x01Ra\x01$\x86\x01Ra\x01\x80a\x01D\x86\x01Ra\x01\x84\x85\x01\x90a\x0B\xDDV[\x90`\x03\x19\x84\x83\x03\x01a\x01d\x85\x01Ra\x0B\xDDV[\x03\x81\x83\x86Z\xF1\x92\x83\x15a\x07uW` \x93a\x07eW[P\x7F\xEA\xF2\xB9\xD4\xFDn\xBAZ`\x87\x04\x99\xF63\\j\xB4\x82n\x02\x9A\xFFe\xBA\x06\x192\x9D\xBDB\x1E\xC3\x83`@Q\x84\x81R\xA2`@Q\x90\x81R\xF3[_a\x07o\x91a\x08\xE4V[_a\x073V[`@Q=_\x82>=\x90\xFD[_\x80\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FConfig already exists for this c`D\x82\x01R\x7Fhain ID\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[4a\x07\x80W_`\x03\x196\x01\x12a\x07\x80W` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x07\x80W` `\x03\x196\x01\x12a\x07\x80W` a\x08\xA3`\x045a\t\xFEV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x07\x80WV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\x84W`@RV[\x81`\x1F\x82\x01\x12\x15a\x07\x80W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x84W`@Q\x92a\tx` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x86\x01\x16\x01\x85a\x08\xE4V[\x82\x84R` \x83\x83\x01\x01\x11a\x07\x80W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\t\xA0WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x80_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x0B\xB8W\x80a\nFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x15\x15a\t\x99V[`@Q` \x81\x01\x91\x82R` \x81Ra\n_`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7a\nu` \x82\x01\x83a\x08\xE4V[\x80\x82R` \x82\x01\x90a\x0Cm\x829a\x0B``@Q\x91` \x80\x84\x01a\x0B\x11\x85a\n\xE5\x8A\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF``\x92\x16\x81R`@` \x82\x01R_`@\x82\x01R\x01\x90V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x87R\x86a\x08\xE4V[`@Q\x94\x85\x93\x83\x85\x01\x97Q\x80\x91\x89^\x84\x01\x90\x83\x82\x01\x90_\x82RQ\x92\x83\x91^\x01\x01_\x81R\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x08\xE4V[Q\x90 `@Q\x90` \x82\x01\x92\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R0``\x1B`!\x84\x01R`5\x83\x01R`U\x82\x01R`U\x81Ra\x0B\xB1`u\x82a\x08\xE4V[Q\x90 \x16\x90V[_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16\x90V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x0C@WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD\xFE`\xA0\x80`@Ra\x04\xD7\x808\x03\x80\x91a\0\x17\x82\x85a\x02\x92V[\x839\x81\x01`@\x82\x82\x03\x12a\x01\xEBWa\0.\x82a\x02\xC9V[` \x83\x01Q\x90\x92`\x01`\x01`@\x1B\x03\x82\x11a\x01\xEBW\x01\x90\x80`\x1F\x83\x01\x12\x15a\x01\xEBW\x81Qa\0[\x81a\x02\xDDV[\x92a\0i`@Q\x94\x85a\x02\x92V[\x81\x84R` \x84\x01\x92` \x83\x83\x01\x01\x11a\x01\xEBW\x81_\x92` \x80\x93\x01\x85^\x84\x01\x01R\x82;\x15a\x02tW\x7F\xA3\xF0\xADt\xE5B:\xEB\xFD\x80\xD3\xEFCFW\x835\xA9\xA7*\xEA\xEEY\xFFl\xB3X+5\x13=P\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x85\x16\x90\x81\x17\x90\x91U`@Qc\\`\xDA\x1B`\xE0\x1B\x81R\x90\x91\x90` \x81`\x04\x81\x86Z\xFA\x90\x81\x15a\x01\xF7W_\x91a\x02:W[P\x80;\x15a\x02\x1AWP\x81\x7F\x1C\xF3\xB0:l\xF1\x9F\xA2\xBA\xBAM\xF1H\xE9\xDC\xAB\xED\xEA\x7F\x8A\\\x07\x84\x0E ~\\\x08\x9B\xE9]>_\x80\xA2\x82Q\x15a\x02\x02W` `\x04\x92`@Q\x93\x84\x80\x92c\\`\xDA\x1B`\xE0\x1B\x82RZ\xFA\x91\x82\x15a\x01\xF7W_\x92a\x01\xAEW[P_\x80\x91a\x01\x8A\x94Q\x90\x84Z\xF4=\x15a\x01\xA6W=\x91a\x01n\x83a\x02\xDDV[\x92a\x01|`@Q\x94\x85a\x02\x92V[\x83R=_` \x85\x01>a\x02\xF8V[P[`\x80R`@Qa\x01\x80\x90\x81a\x03W\x829`\x80Q\x81`F\x01R\xF3[``\x91a\x02\xF8V[\x92\x91P` \x83=` \x11a\x01\xEFW[\x81a\x01\xCA` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBW_\x80\x91a\x01\xE1a\x01\x8A\x95a\x02\xC9V[\x93\x94P\x91Pa\x01PV[_\x80\xFD[=\x91Pa\x01\xBDV[`@Q=_\x82>=\x90\xFD[PPP4\x15a\x01\x8CWc\xB3\x98\x97\x9F`\xE0\x1B_R`\x04_\xFD[cL\x9C\x8C\xE3`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[\x90P` \x81=` \x11a\x02lW[\x81a\x02U` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBWa\x02f\x90a\x02\xC9V[_a\0\xF5V[=\x91Pa\x02HV[c\x193\xB4;`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04R`$\x90\xFD[`\x1F\x90\x91\x01`\x1F\x19\x16\x81\x01\x90`\x01`\x01`@\x1B\x03\x82\x11\x90\x82\x10\x17a\x02\xB5W`@RV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x01\xEBWV[`\x01`\x01`@\x1B\x03\x81\x11a\x02\xB5W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x90a\x03\x1CWP\x80Q\x15a\x03\rW\x80Q\x90` \x01\xFD[c\xD6\xBD\xA2u`\xE0\x1B_R`\x04_\xFD[\x81Q\x15\x80a\x03MW[a\x03-WP\x90V[c\x99\x96\xB3\x15`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[P\x80;\x15a\x03%V\xFE`\x80`@R\x7F\\`\xDA\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x80R` `\x80`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16Z\xFA\x80\x15a\x01\x07W_\x90\x15a\x01cWP` =` \x11a\x01\0W[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x82\x01\x16`\x80\x01\x90`\x80\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\0\xD3Wa\0\xCE\x91`@R`\x80\x01a\x01\x12V[a\x01cV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[P=a\0\x81V[`@Q=_\x82>=\x90\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80` \x91\x01\x12a\x01_W`\x80Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x01_W\x90V[_\x80\xFD[_\x80\x916\x82\x807\x816\x91Z\xF4=_\x80>\x15a\x01|W=_\xF3[=_\xFD`\x80\x80`@R4`\xAAW_Q` a\x16\xBE_9_Q\x90_RT`\xFF\x81`@\x1C\x16`\x9BW`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01`IW[`@Qa\x16\x0F\x90\x81a\0\xAF\x829\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x16\xBE_9_Q\x90_RU\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_\x80`:V[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x07C\xBFn\x14a\x12\x03W\x80c\x18\xB5\xCE\x81\x14a\x11\xD0W\x80c)\x08\x03V\x14a\x10\x84W\x80cK\x8B\xE3\xF7\x14a\x0F&W\x80cT\xFDMP\x14a\x0E\x81W\x80cW\xD1\xBA%\x14a\x0EdW\x80cn\xDDl\t\x14a\x0E1W\x80cr@\xF9\xAF\x14a\x0C\xD1W\x80c\x85\xE1\xF4\xD0\x14a\x0C\xB4W\x80c\x8D\xA5\xCB[\x14a\x0C\x82W\x80c\xA3\xC6\xE1\xE7\x14a\x0CeW\x80c\xAAjC\xD8\x14a\x0C2W\x80c\xBFm\xB6\xF8\x14a\x0B\xFFW\x80c\xBFy\xFD\x1C\x14a\x02{W\x80c\xC7\xA7`\x95\x14a\x01\x83W\x80c\xD1\xF4s|\x14a\x01fW\x80c\xF2\xFD\xE3\x8B\x14a\x01\0Wc\xF8\xA1D\xBE\x14a\0\xDFW_\x80\xFD[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\x06T`@Q\x90\x81R\xF3[_\x80\xFD[4a\0\xFCW` `\x03\x196\x01\x12a\0\xFCWa\x01da\x01\x1Ca\x13\x97V[a\x01>s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x14\x10V[a\x01_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x15$V[a\x15\x89V[\0[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\x08T`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW`@Q_`\nTa\x01\xA3\x81a\x12\xA8V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x029WP`\x01\x14a\x01\xDBW[a\x01\xD7\x83a\x01\xCB\x81\x85\x03\x82a\x12\xF9V[`@Q\x91\x82\x91\x82a\x13\x1CV[\x03\x90\xF3[`\n_\x90\x81R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x93\x92P\x90[\x80\x82\x10a\x02\x1FWP\x90\x91P\x81\x01` \x01a\x01\xCBa\x01\xBBV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x02\x07V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16` \x80\x86\x01\x91\x90\x91R\x91\x15\x15`\x05\x1B\x84\x01\x90\x91\x01\x91Pa\x01\xCB\x90Pa\x01\xBBV[4a\0\xFCWa\x01\x80`\x03\x196\x01\x12a\0\xFCWa\x02\x95a\x13\x97V[`$5`D5\x91`d5\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\0\xFCW`\x845s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\0\xFCW`\xE45s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\0\xFCWa\x01$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\0\xFCWa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xFCWa\x03D\x906\x90`\x04\x01a\x13\xBAV[\x96a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xFCWa\x03f\x906\x90`\x04\x01a\x13\xBAV[\x94\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x97`\xFF\x89`@\x1C\x16\x15\x98g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x0B\xF7W[`\x01\x14\x90\x81a\x0B\xEDW[\x15\x90\x81a\x0B\xE4W[Pa\x0B\xBCW\x89`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x0BgW[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x15a\x0B\tW\x80\x15a\n\xABW\x81\x15a\n'W\x82\x15a\t\xA3W\x83\x15a\t\x1FW\x84\x15a\x08\x9BW\x85\x15a\x08\x17W`\x05U`\x06U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x02T\x16\x17`\x02U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x03T\x16\x17`\x03U`\xA45`\x07U`\xC45`\x08U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04T\x16\x17`\x04Ua\x01\x045`\tUa\x04\xEC`\x0CTa\x12\xA8V[`\x1F\x81\x11a\x07\xD9W[P`\n\x7F1.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01`\x0CU\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x83Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07+Wa\x05k\x81a\x05f`\nTa\x12\xA8V[a\x14\x8BV[` \x94`\x1F\x82\x11`\x01\x14a\x07XWa\x05\x9C\x92\x93\x94\x95\x82\x91_\x92a\x06\x99W[PP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nU[\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07+Wa\x05\xC6\x82a\x05\xC1`\x0BTa\x12\xA8V[a\x14\xC5V[` \x90`\x1F\x83\x11`\x01\x14a\x06\xA4W\x91\x80a\x05\xF8\x92a\x06\0\x95\x94_\x92a\x06\x99WPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BUa\x15\x89V[a\x06\x06W\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x01Q\x90P\x86\x80a\x05\x89V[\x90`\x1F\x19\x83\x16\x91`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x92_[\x81\x81\x10a\x07\x13WP\x91`\x01\x93\x91\x85a\x06\0\x97\x96\x94\x10a\x06\xFBW[PPP\x81\x1B\x01`\x0BUa\x15\x89V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x06\xEDV[\x92\x93` `\x01\x81\x92\x87\x86\x01Q\x81U\x01\x95\x01\x93\x01a\x06\xD3V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x1F\x19\x82\x16\x95`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x91_[\x88\x81\x10a\x07\xC1WP\x83`\x01\x95\x96\x97\x98\x10a\x07\xA9W[PPP\x81\x1B\x01`\nUa\x05\xA0V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x07\x9BV[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x07\x86V[`\x0C_Ra\x08\x11\x90`\x1F\x01`\x05\x1C\x7F\xDFif\xC9q\x05\x1C=T\xECY\x16&\x06S\x14\x93\xA5\x14\x04\xA0\x02\x84/V\0\x9D~\\\xF4\xA8\xC7\x90\x81\x01\x90a\x14uV[\x85a\x04\xF5V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FInitial appchain owner cannot be`D\x82\x01R\x7F zero address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSequencing contract address cann`D\x82\x01R\x7Fot be zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FArbitrum inbox address cannot be`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FArbitrum bridge address cannot b`D\x82\x01R\x7Fe zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FSequencing chain ID cannot be ze`D\x82\x01R\x7Fro\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FOwner cannot be zero address\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x8Aa\x04\x0CV[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x8Ca\x03\xB9V[0;\x15\x91Pa\x03\xB1V[\x8B\x91Pa\x03\xA7V[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\tT`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\x05T`@Q\x90\x81R\xF3[4a\0\xFCWa\x0C\xDF6a\x13FV[a\r\x01s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x14\x10V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07+Wa\r\x1B`\x0CTa\x12\xA8V[`\x1F\x81\x11a\r\xD8W[P_`\x1F\x82\x11`\x01\x14a\r`W\x81\x90a\rP\x93_\x92a\rUWPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0CU\0[\x015\x90P\x83\x80a\x05\x89V[`\x1F\x19\x82\x16\x92\x7F\xDFif\xC9q\x05\x1C=T\xECY\x16&\x06S\x14\x93\xA5\x14\x04\xA0\x02\x84/V\0\x9D~\\\xF4\xA8\xC7\x91_[\x85\x81\x10a\r\xC0WP\x83`\x01\x95\x10a\r\xA7W[PPP\x81\x1B\x01`\x0CU\0[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U\x82\x80\x80a\r\x9CV[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01a\r\x8AV[`\x0C_Ra\x0E!\x90\x7F\xDFif\xC9q\x05\x1C=T\xECY\x16&\x06S\x14\x93\xA5\x14\x04\xA0\x02\x84/V\0\x9D~\\\xF4\xA8\xC7`\x1F\x84\x01`\x05\x1C\x81\x01\x91` \x85\x10a\x0E'W[`\x1F\x01`\x05\x1C\x01\x90a\x14uV[\x82a\r$V[\x90\x91P\x81\x90a\x0E\x14V[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x02T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\x07T`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW`@Q_`\x0CTa\x0E\xA1\x81a\x12\xA8V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x029WP`\x01\x14a\x0E\xC8Wa\x01\xD7\x83a\x01\xCB\x81\x85\x03\x82a\x12\xF9V[`\x0C_\x90\x81R\x7F\xDFif\xC9q\x05\x1C=T\xECY\x16&\x06S\x14\x93\xA5\x14\x04\xA0\x02\x84/V\0\x9D~\\\xF4\xA8\xC7\x93\x92P\x90[\x80\x82\x10a\x0F\x0CWP\x90\x91P\x81\x01` \x01a\x01\xCBa\x01\xBBV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x0E\xF4V[4a\0\xFCWa\x0F46a\x13FV[a\x0FVs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x14\x10V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07+Wa\x0Ft\x81a\x05\xC1`\x0BTa\x12\xA8V[_\x91`\x1F\x82\x11`\x01\x14a\x0F\xE4Wa\x0F\xC1\x82\x80\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95_\x91a\x0F\xD9W[P_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BU[a\x0F\xD4`@Q\x92\x83\x92\x83a\x14\xFDV[\x03\x90\xA1\0[\x90P\x83\x015\x86a\x0F\xAFV[`\x1F\x19\x82\x16`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x90_[\x81\x81\x10a\x10lWP\x93\x83\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95\x10a\x10SW[PP`\x01\x82\x81\x1B\x01`\x0BUa\x0F\xC5V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x10CV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x10\x11V[4a\0\xFCWa\x10\x926a\x13FV[a\x10\xB4s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x14\x10V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07+Wa\x10\xD2\x81a\x05f`\nTa\x12\xA8V[_\x91`\x1F\x82\x11`\x01\x14a\x110Wa\x11\x1E\x82\x80\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95_\x91a\x0F\xD9WP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nUa\x0F\xD4`@Q\x92\x83\x92\x83a\x14\xFDV[`\x1F\x19\x82\x16`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x90_[\x81\x81\x10a\x11\xB8WP\x93\x83\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95\x10a\x11\x9FW[PP`\x01\x82\x81\x1B\x01`\nUa\x0F\xC5V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x11\x8FV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x11]V[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW`@Q_`\x0BTa\x12#\x81a\x12\xA8V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x029WP`\x01\x14a\x12JWa\x01\xD7\x83a\x01\xCB\x81\x85\x03\x82a\x12\xF9V[`\x0B_\x90\x81R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x93\x92P\x90[\x80\x82\x10a\x12\x8EWP\x90\x91P\x81\x01` \x01a\x01\xCBa\x01\xBBV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x12vV[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x12\xEFW[` \x83\x10\x14a\x12\xC2WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x12\xB7V[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07+W`@RV[`\x1F\x19`\x1F` `@\x94\x81\x85R\x80Q\x91\x82\x91\x82\x82\x88\x01R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x90` `\x03\x19\x83\x01\x12a\0\xFCW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xFCW\x82`#\x82\x01\x12\x15a\0\xFCW\x80`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\0\xFCW`$\x84\x83\x01\x01\x11a\0\xFCW`$\x01\x91\x90V[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\0\xFCWV[\x81`\x1F\x82\x01\x12\x15a\0\xFCW\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07+W`@Q\x92a\x13\xEF` `\x1F\x19`\x1F\x86\x01\x16\x01\x85a\x12\xF9V[\x82\x84R` \x83\x83\x01\x01\x11a\0\xFCW\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\x14\x17WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCaller is not the owner\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x81\x81\x10a\x14\x80WPPV[_\x81U`\x01\x01a\x14uV[\x90`\x1F\x82\x11a\x14\x98WPPV[a\x14\xC3\x91`\n_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E'W`\x1F\x01`\x05\x1C\x01\x90a\x14uV[V[\x90`\x1F\x82\x11a\x14\xD2WPPV[a\x14\xC3\x91`\x0B_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E'W`\x1F\x01`\x05\x1C\x01\x90a\x14uV[\x90`\x1F\x83`@\x94`\x1F\x19\x93` \x86R\x81` \x87\x01R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x15a\x15+WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R` `$\x82\x01R\x7FNew owner cannot be zero address`D\x82\x01R\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x15\xAA\x81\x15\x15a\x15$V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0`\x804a\x014W`\x1Fa\x05\x058\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x018W\x80\x84\x92`@\x94\x85R\x839\x81\x01\x03\x12a\x014Wa\0F\x81a\x01LV[\x90`\x01`\x01`\xA0\x1B\x03\x90a\0\\\x90` \x01a\x01LV[\x16\x90\x81\x15a\x01!W_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x84\x17\x82U`@Q\x93\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3\x80;\x15a\x01\x01W`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x82\x17\x90U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2a\x03\xA4\x90\x81a\x01a\x829\xF3[c!\x1E\xB1Y`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x014WV\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c6Y\xCF\xE6\x14a\x02~W\x80c\\`\xDA\x1B\x14a\x02-W\x80cqP\x18\xA6\x14a\x01\x93W\x80c\x8D\xA5\xCB[\x14a\x01CWc\xF2\xFD\xE3\x8B\x14a\0PW_\x80\xFD[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01?Wa\0\xA8a\x03XV[\x80\x15a\x01\x13Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[_\x80\xFD[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?Wa\x01\xC9a\x03XV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x81\x03a\x01?Wa\x02\xD7a\x03XV[;\x15a\x03-W\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\0[\x7F\x84z\xC5d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x03xWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD", ); /// The runtime bytecode of the contract, as deployed on the network. /// /// ```text - ///0x60806040526004361015610011575f80fd5b5f3560e01c80630c6008af1461005457806336f591f21461004f57806348aac3921461004a5763b9168f4714610045575f80fd5b6103b7565b6102cb565b610108565b346100e15760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e157602060406100976100926100e5565b610434565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f835194859381855280519182918282880152018686015e5f85828601015201168101030190f35b5f80fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100e157565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15761013f6100e5565b60243561014b82610434565b9061015681836104d1565b916020815191015ff59081156100e15773ffffffffffffffffffffffffffffffffffffffff808316911681036101fa5760407fa8ff04590db5783e31f347bbd828911dabf9c79150b8af59be60044d8c679f529173ffffffffffffffffffffffffffffffffffffffff6101f6958351928352166020820152a160405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f41646472657373206d69736d61746368000000000000000000000000000000006044820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102c657604052565b610258565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15760043567ffffffffffffffff81116100e157366023820112156100e15780600401359067ffffffffffffffff82116102c65760405161036160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160182610285565b82815236602484840101116100e1575f6020846101f695602461039096018386013783010152602435906104d1565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15760206104046103f36100e5565b6103ff60243591610434565b6104d1565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b805191908290602001825e015f815290565b6104ce61049c916104a2612c1a91604051926104536020820185610285565b808452610545602085013973ffffffffffffffffffffffffffffffffffffffff604051911660208201526020815261048c604082610285565b6040519485936020850190610422565b90610422565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610285565b90565b9073ffffffffffffffffffffffffffffffffffffffff91602081519101206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b6021840152603583015260558201526055815261053d607582610285565b519020169056fe60a03461016b57601f612c1a38819003918201601f19168301916001600160401b038311848410176101445780849260209460405283398101031261016b57516001600160a01b0381169081900361016b578015610158575f80546001600160a01b031981168317825560405192916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36114618181016001600160401b038111838210176101445782916112b4833903905ff0801561013957604051906105058083016001600160401b0381118482101761014457604092849261271584396001600160a01b031681523060208201520301905ff080156101395760805260405161114490816101708239608051818181610215015281816105c2015281816108610152610a980152f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c80630b04ebfd1461088557806359659e90146108355780636f04245514610457578063715018a6146103d957806383f94db7146101b75780638da5cb5b14610184578063a33a8b60146101445763f2fde38b14610072575f80fd5b346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6100a06108c1565b6100a8610c20565b1680156101155773ffffffffffffffffffffffffffffffffffffffff8254827fffffffffffffffffffffffff00000000000000000000000000000000000000008216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6024827f1e4fbdf700000000000000000000000000000000000000000000000000000000815280600452fd5b80fd5b50346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6040602092600435815260018452205416604051908152f35b503461014157806003193601126101415773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b5034610141576020600319360112610141576101d16108c1565b6101d9610c20565b73ffffffffffffffffffffffffffffffffffffffff8116908115610355573b156102d1578173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b156102c2578180916024604051809481937f3659cfe60000000000000000000000000000000000000000000000000000000083528860048401525af180156102c6576102ad575b507f51ea6ffdc9909d5ca341259f7221902e0676585d833e2bb21fa923c85e862886602083604051908152a180f35b816102b7916108e4565b6102c257815f61027e565b5080fd5b6040513d84823e3d90fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f496d706c656d656e746174696f6e206d757374206265206120636f6e7472616360448201527f74000000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4e657720696d706c656d656e746174696f6e2063616e6e6f74206265207a657260448201527f6f206164647265737300000000000000000000000000000000000000000000006064820152fd5b50346101415780600319360112610141576103f2610c20565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b3461078057610180600319360112610780576104716108c1565b602435906064359173ffffffffffffffffffffffffffffffffffffffff8316809303610780576084359173ffffffffffffffffffffffffffffffffffffffff83168093036107805760e4359073ffffffffffffffffffffffffffffffffffffffff821680920361078057610124359073ffffffffffffffffffffffffffffffffffffffff8216809203610780576101443567ffffffffffffffff81116107805761051f903690600401610925565b926101643567ffffffffffffffff811161078057610541903690600401610925565b610549610c20565b610554861515610999565b855f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f2054166107b1576040516020810190878252602081526105956040826108e4565b5190206040516104d78082019082821067ffffffffffffffff83111761078457829161060d91610c6d84397f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526040602082018190525f9082015260600190565b03905ff580156107755773ffffffffffffffffffffffffffffffffffffffff1696865f52600160205260405f20887fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055873b15610780575f9573ffffffffffffffffffffffffffffffffffffffff9561071e9461070b936040519c8d998a997fbf79fd1c000000000000000000000000000000000000000000000000000000008b521660048a01528b60248a015260443560448a01526064890152608488015260a43560a488015260c43560c488015260e487015261010435610104870152610124860152610180610144860152610184850190610bdd565b9060031984830301610164850152610bdd565b038183865af192831561077557602093610765575b507feaf2b9d4fd6eba5a60870499f6335c6ab4826e029aff65ba0619329dbd421ec383604051848152a2604051908152f35b5f61076f916108e4565b5f610733565b6040513d5f823e3d90fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f436f6e66696720616c72656164792065786973747320666f722074686973206360448201527f6861696e204944000000000000000000000000000000000000000000000000006064820152fd5b34610780575f60031936011261078057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107805760206003193601126107805760206108a36004356109fe565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361078057565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761078457604052565b81601f820112156107805780359067ffffffffffffffff8211610784576040519261097860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601856108e4565b8284526020838301011161078057815f926020809301838601378301015290565b156109a057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b805f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f205416610bb85780610a4673ffffffffffffffffffffffffffffffffffffffff921515610999565b6040516020810191825260208152610a5f6040826108e4565b5190206040516104d7610a7560208201836108e4565b8082526020820190610c6d8239610b60604051916020808401610b1185610ae58a7f0000000000000000000000000000000000000000000000000000000000000000168473ffffffffffffffffffffffffffffffffffffffff606092168152604060208201525f60408201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866108e4565b60405194859383850197518091895e840190838201905f8252519283915e01015f8152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826108e4565b5190206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b60218401526035830152605582015260558152610bb16075826108e4565b5190201690565b5f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f20541690565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff5f54163303610c4057565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffdfe60a0806040526104d780380380916100178285610292565b833981016040828203126101eb5761002e826102c9565b602083015190926001600160401b0382116101eb57019080601f830112156101eb57815161005b816102dd565b926100696040519485610292565b8184526020840192602083830101116101eb57815f926020809301855e84010152823b15610274577fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b038516908117909155604051635c60da1b60e01b8152909190602081600481865afa9081156101f7575f9161023a575b50803b1561021a5750817f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e5f80a282511561020257602060049260405193848092635c60da1b60e01b82525afa9182156101f7575f926101ae575b505f809161018a945190845af43d156101a6573d9161016e836102dd565b9261017c6040519485610292565b83523d5f602085013e6102f8565b505b608052604051610180908161035782396080518160460152f35b6060916102f8565b9291506020833d6020116101ef575b816101ca60209383610292565b810103126101eb575f80916101e161018a956102c9565b9394509150610150565b5f80fd5b3d91506101bd565b6040513d5f823e3d90fd5b505050341561018c5763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b90506020813d60201161026c575b8161025560209383610292565b810103126101eb57610266906102c9565b5f6100f5565b3d9150610248565b631933b43b60e21b5f9081526001600160a01b038416600452602490fd5b601f909101601f19168101906001600160401b038211908210176102b557604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101eb57565b6001600160401b0381116102b557601f01601f191660200190565b9061031c575080511561030d57805190602001fd5b63d6bda27560e01b5f5260045ffd5b8151158061034d575b61032d575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561032556fe60806040527f5c60da1b000000000000000000000000000000000000000000000000000000006080526020608060048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610107575f9015610163575060203d602011610100575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116608001906080821067ffffffffffffffff8311176100d3576100ce91604052608001610112565b610163565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b503d610081565b6040513d5f823e3d90fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80602091011261015f5760805173ffffffffffffffffffffffffffffffffffffffff8116810361015f5790565b5f80fd5b5f8091368280378136915af43d5f803e1561017c573d5ff35b3d5ffd6080806040523460aa575f5160206114415f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b60405161139290816100af8239f35b6001600160401b0319166001600160401b039081175f5160206114415f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630743bf6e14610f6e57806318b5ce8114610f3b5780632908035614610def5780634b8be3f714610c9157806357d1ba2514610c745780636edd6c0914610c4157806385e1f4d014610c245780638da5cb5b14610bf2578063a3c6e1e714610bd5578063aa6a43d814610ba2578063bf6db6f814610b6f578063bf79fd1c14610265578063c7a760951461016d578063d1f4737c14610150578063f2fde38b146100ea5763f8a144be146100c9575f80fd5b346100e6575f6003193601126100e6576020600654604051908152f35b5f80fd5b346100e65760206003193601126100e65761014e610106611102565b61012873ffffffffffffffffffffffffffffffffffffffff5f5416331461117b565b61014973ffffffffffffffffffffffffffffffffffffffff821615156112a7565b61130c565b005b346100e6575f6003193601126100e6576020600854604051908152f35b346100e6575f6003193601126100e6576040515f600a5461018d81611013565b808452906001811690811561022357506001146101c5575b6101c1836101b581850382611064565b60405191829182611087565b0390f35b600a5f9081527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8939250905b808210610209575090915081016020016101b56101a5565b9192600181602092548385880101520191019092916101f1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506101b590506101a5565b346100e6576101806003193601126100e65761027f611102565b602435604435916064359273ffffffffffffffffffffffffffffffffffffffff84168094036100e65760843573ffffffffffffffffffffffffffffffffffffffff81168091036100e65760e43573ffffffffffffffffffffffffffffffffffffffff81168091036100e657610124359173ffffffffffffffffffffffffffffffffffffffff83168093036100e6576101443567ffffffffffffffff81116100e65761032e903690600401611125565b966101643567ffffffffffffffff81116100e657610350903690600401611125565b947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549760ff8960401c16159867ffffffffffffffff811680159081610b67575b6001149081610b5d575b159081610b54575b50610b2c578960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610ad7575b5073ffffffffffffffffffffffffffffffffffffffff881615610a79578015610a1b57811561099757821561091357831561088f57841561080b578515610787576005556006557fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035560a43560075560c4356008557fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455610104356009557fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155835167ffffffffffffffff81116106d95761051981610514600a54611013565b6111e0565b602094601f82116001146107065761054a9293949582915f92610647575b50505f198260011b9260031b1c19161790565b600a555b80519067ffffffffffffffff82116106d9576105748261056f600b54611013565b611230565b602090601f83116001146106525791806105a6926105ae95945f926106475750505f198260011b9260031b1c19161790565b600b5561130c565b6105b457005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b015190508680610537565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b8181106106c157509160019391856105ae979694106106a9575b505050811b01600b5561130c565b01515f1960f88460031b161c1916905585808061069b565b92936020600181928786015181550195019301610681565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19821695600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8915f5b88811061076f57508360019596979810610757575b505050811b01600a5561054e565b01515f1960f88460031b161c19169055858080610749565b91926020600181928685015181550194019201610734565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f496e697469616c20617070636861696e206f776e65722063616e6e6f7420626560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f53657175656e63696e6720636f6e747261637420616464726573732063616e6e60448201527f6f74206265207a65726f000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f417262697472756d20696e626f7820616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f417262697472756d2062726964676520616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53657175656e63696e6720636861696e2049442063616e6e6f74206265207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f776e65722063616e6e6f74206265207a65726f2061646472657373000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558a6103f6565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158c6103a3565b303b15915061039b565b8b9150610391565b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b346100e6575f6003193601126100e6576020600954604051908152f35b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100e6575f6003193601126100e6576020600554604051908152f35b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346100e6575f6003193601126100e6576020600754604051908152f35b346100e657610c9f366110b1565b610cc173ffffffffffffffffffffffffffffffffffffffff5f5416331461117b565b67ffffffffffffffff81116106d957610cdf8161056f600b54611013565b5f91601f8211600114610d4f57610d2c82807f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7955f91610d44575b505f198260011b9260031b1c19161790565b600b555b610d3f60405192839283611280565b0390a1005b905083013586610d1a565b601f198216600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b818110610dd7575093837f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a79510610dbe575b5050600182811b01600b55610d30565b5f1960f88560031b161c19908301351690558380610dae565b83860135835560209586019560019093019201610d7c565b346100e657610dfd366110b1565b610e1f73ffffffffffffffffffffffffffffffffffffffff5f5416331461117b565b67ffffffffffffffff81116106d957610e3d81610514600a54611013565b5f91601f8211600114610e9b57610e8982807f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c955f91610d4457505f198260011b9260031b1c19161790565b600a55610d3f60405192839283611280565b601f198216600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8905f5b818110610f23575093837f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c9510610f0a575b5050600182811b01600a55610d30565b5f1960f88560031b161c19908301351690558380610efa565b83860135835560209586019560019093019201610ec8565b346100e6575f6003193601126100e657602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346100e6575f6003193601126100e6576040515f600b54610f8e81611013565b80845290600181169081156102235750600114610fb5576101c1836101b581850382611064565b600b5f9081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b808210610ff9575090915081016020016101b56101a5565b919260018160209254838588010152019101909291610fe1565b90600182811c9216801561105a575b602083101461102d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691611022565b90601f601f19910116810190811067ffffffffffffffff8211176106d957604052565b601f19601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b9060206003198301126100e65760043567ffffffffffffffff81116100e657826023820112156100e65780600401359267ffffffffffffffff84116100e657602484830101116100e6576024019190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100e657565b81601f820112156100e65780359067ffffffffffffffff82116106d9576040519261115a6020601f19601f8601160185611064565b828452602083830101116100e657815f926020809301838601378301015290565b1561118257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b601f81116111ec575050565b600a5f5260205f20906020601f840160051c83019310611226575b601f0160051c01905b81811061121b575050565b5f8155600101611210565b9091508190611207565b601f811161123c575050565b600b5f5260205f20906020601f840160051c83019310611276575b601f0160051c01905b81811061126b575050565b5f8155600101611260565b9091508190611257565b90601f83604094601f199360208652816020870152868601375f8582860101520116010190565b156112ae57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b73ffffffffffffffffffffffffffffffffffffffff1661132d8115156112a7565b73ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060803461013457601f61050538819003918201601f19168301916001600160401b03831184841017610138578084926040948552833981010312610134576100468161014c565b906001600160a01b039061005c9060200161014c565b16908115610121575f80546001600160a01b031981168417825560405193916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3803b1561010157600180546001600160a01b0319166001600160a01b039290921691821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a26103a490816101618239f35b63211eb15960e21b5f9081526001600160a01b0391909116600452602490fd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101345756fe60806040526004361015610011575f80fd5b5f3560e01c80633659cfe61461027e5780635c60da1b1461022d578063715018a6146101935780638da5cb5b146101435763f2fde38b14610050575f80fd5b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff811680910361013f576100a8610358565b80156101135773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b5f80fd5b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576101c9610358565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff81169081810361013f576102d7610358565b3b1561032d57807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2005b7f847ac564000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff5f5416330361037857565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd + ///0x60806040526004361015610011575f80fd5b5f3560e01c80630c6008af1461005457806336f591f21461004f57806348aac3921461004a5763b9168f4714610045575f80fd5b6103b7565b6102cb565b610108565b346100e15760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e157602060406100976100926100e5565b610434565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f835194859381855280519182918282880152018686015e5f85828601015201168101030190f35b5f80fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100e157565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15761013f6100e5565b60243561014b82610434565b9061015681836104d1565b916020815191015ff59081156100e15773ffffffffffffffffffffffffffffffffffffffff808316911681036101fa5760407fa8ff04590db5783e31f347bbd828911dabf9c79150b8af59be60044d8c679f529173ffffffffffffffffffffffffffffffffffffffff6101f6958351928352166020820152a160405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f41646472657373206d69736d61746368000000000000000000000000000000006044820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176102c657604052565b610258565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15760043567ffffffffffffffff81116100e157366023820112156100e15780600401359067ffffffffffffffff82116102c65760405161036160207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160182610285565b82815236602484840101116100e1575f6020846101f695602461039096018386013783010152602435906104d1565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b346100e15760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100e15760206104046103f36100e5565b6103ff60243591610434565b6104d1565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b805191908290602001825e015f815290565b6104ce61049c916104a2612e9791604051926104536020820185610285565b808452610545602085013973ffffffffffffffffffffffffffffffffffffffff604051911660208201526020815261048c604082610285565b6040519485936020850190610422565b90610422565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610285565b90565b9073ffffffffffffffffffffffffffffffffffffffff91602081519101206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b6021840152603583015260558201526055815261053d607582610285565b519020169056fe60a03461016b57601f612e9738819003918201601f19168301916001600160401b038311848410176101445780849260209460405283398101031261016b57516001600160a01b0381169081900361016b578015610158575f80546001600160a01b031981168317825560405192916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36116de8181016001600160401b038111838210176101445782916112b4833903905ff0801561013957604051906105058083016001600160401b0381118482101761014457604092849261299284396001600160a01b031681523060208201520301905ff080156101395760805260405161114490816101708239608051818181610215015281816105c2015281816108610152610a980152f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f5f3560e01c80630b04ebfd1461088557806359659e90146108355780636f04245514610457578063715018a6146103d957806383f94db7146101b75780638da5cb5b14610184578063a33a8b60146101445763f2fde38b14610072575f80fd5b346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6100a06108c1565b6100a8610c20565b1680156101155773ffffffffffffffffffffffffffffffffffffffff8254827fffffffffffffffffffffffff00000000000000000000000000000000000000008216178455167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b6024827f1e4fbdf700000000000000000000000000000000000000000000000000000000815280600452fd5b80fd5b50346101415760206003193601126101415773ffffffffffffffffffffffffffffffffffffffff6040602092600435815260018452205416604051908152f35b503461014157806003193601126101415773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b5034610141576020600319360112610141576101d16108c1565b6101d9610c20565b73ffffffffffffffffffffffffffffffffffffffff8116908115610355573b156102d1578173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b156102c2578180916024604051809481937f3659cfe60000000000000000000000000000000000000000000000000000000083528860048401525af180156102c6576102ad575b507f51ea6ffdc9909d5ca341259f7221902e0676585d833e2bb21fa923c85e862886602083604051908152a180f35b816102b7916108e4565b6102c257815f61027e565b5080fd5b6040513d84823e3d90fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f496d706c656d656e746174696f6e206d757374206265206120636f6e7472616360448201527f74000000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4e657720696d706c656d656e746174696f6e2063616e6e6f74206265207a657260448201527f6f206164647265737300000000000000000000000000000000000000000000006064820152fd5b50346101415780600319360112610141576103f2610c20565b8073ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b3461078057610180600319360112610780576104716108c1565b602435906064359173ffffffffffffffffffffffffffffffffffffffff8316809303610780576084359173ffffffffffffffffffffffffffffffffffffffff83168093036107805760e4359073ffffffffffffffffffffffffffffffffffffffff821680920361078057610124359073ffffffffffffffffffffffffffffffffffffffff8216809203610780576101443567ffffffffffffffff81116107805761051f903690600401610925565b926101643567ffffffffffffffff811161078057610541903690600401610925565b610549610c20565b610554861515610999565b855f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f2054166107b1576040516020810190878252602081526105956040826108e4565b5190206040516104d78082019082821067ffffffffffffffff83111761078457829161060d91610c6d84397f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526040602082018190525f9082015260600190565b03905ff580156107755773ffffffffffffffffffffffffffffffffffffffff1696865f52600160205260405f20887fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055873b15610780575f9573ffffffffffffffffffffffffffffffffffffffff9561071e9461070b936040519c8d998a997fbf79fd1c000000000000000000000000000000000000000000000000000000008b521660048a01528b60248a015260443560448a01526064890152608488015260a43560a488015260c43560c488015260e487015261010435610104870152610124860152610180610144860152610184850190610bdd565b9060031984830301610164850152610bdd565b038183865af192831561077557602093610765575b507feaf2b9d4fd6eba5a60870499f6335c6ab4826e029aff65ba0619329dbd421ec383604051848152a2604051908152f35b5f61076f916108e4565b5f610733565b6040513d5f823e3d90fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f436f6e66696720616c72656164792065786973747320666f722074686973206360448201527f6861696e204944000000000000000000000000000000000000000000000000006064820152fd5b34610780575f60031936011261078057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107805760206003193601126107805760206108a36004356109fe565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361078057565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761078457604052565b81601f820112156107805780359067ffffffffffffffff8211610784576040519261097860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011601856108e4565b8284526020838301011161078057815f926020809301838601378301015290565b156109a057565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b805f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f205416610bb85780610a4673ffffffffffffffffffffffffffffffffffffffff921515610999565b6040516020810191825260208152610a5f6040826108e4565b5190206040516104d7610a7560208201836108e4565b8082526020820190610c6d8239610b60604051916020808401610b1185610ae58a7f0000000000000000000000000000000000000000000000000000000000000000168473ffffffffffffffffffffffffffffffffffffffff606092168152604060208201525f60408201520190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866108e4565b60405194859383850197518091895e840190838201905f8252519283915e01015f8152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826108e4565b5190206040519060208201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b60218401526035830152605582015260558152610bb16075826108e4565b5190201690565b5f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f20541690565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff5f54163303610c4057565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffdfe60a0806040526104d780380380916100178285610292565b833981016040828203126101eb5761002e826102c9565b602083015190926001600160401b0382116101eb57019080601f830112156101eb57815161005b816102dd565b926100696040519485610292565b8184526020840192602083830101116101eb57815f926020809301855e84010152823b15610274577fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b038516908117909155604051635c60da1b60e01b8152909190602081600481865afa9081156101f7575f9161023a575b50803b1561021a5750817f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e5f80a282511561020257602060049260405193848092635c60da1b60e01b82525afa9182156101f7575f926101ae575b505f809161018a945190845af43d156101a6573d9161016e836102dd565b9261017c6040519485610292565b83523d5f602085013e6102f8565b505b608052604051610180908161035782396080518160460152f35b6060916102f8565b9291506020833d6020116101ef575b816101ca60209383610292565b810103126101eb575f80916101e161018a956102c9565b9394509150610150565b5f80fd5b3d91506101bd565b6040513d5f823e3d90fd5b505050341561018c5763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b90506020813d60201161026c575b8161025560209383610292565b810103126101eb57610266906102c9565b5f6100f5565b3d9150610248565b631933b43b60e21b5f9081526001600160a01b038416600452602490fd5b601f909101601f19168101906001600160401b038211908210176102b557604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101eb57565b6001600160401b0381116102b557601f01601f191660200190565b9061031c575080511561030d57805190602001fd5b63d6bda27560e01b5f5260045ffd5b8151158061034d575b61032d575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b1561032556fe60806040527f5c60da1b000000000000000000000000000000000000000000000000000000006080526020608060048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610107575f9015610163575060203d602011610100575b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820116608001906080821067ffffffffffffffff8311176100d3576100ce91604052608001610112565b610163565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b503d610081565b6040513d5f823e3d90fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80602091011261015f5760805173ffffffffffffffffffffffffffffffffffffffff8116810361015f5790565b5f80fd5b5f8091368280378136915af43d5f803e1561017c573d5ff35b3d5ffd6080806040523460aa575f5160206116be5f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b60405161160f90816100af8239f35b6001600160401b0319166001600160401b039081175f5160206116be5f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630743bf6e1461120357806318b5ce81146111d057806329080356146110845780634b8be3f714610f2657806354fd4d5014610e8157806357d1ba2514610e645780636edd6c0914610e315780637240f9af14610cd157806385e1f4d014610cb45780638da5cb5b14610c82578063a3c6e1e714610c65578063aa6a43d814610c32578063bf6db6f814610bff578063bf79fd1c1461027b578063c7a7609514610183578063d1f4737c14610166578063f2fde38b146101005763f8a144be146100df575f80fd5b346100fc575f6003193601126100fc576020600654604051908152f35b5f80fd5b346100fc5760206003193601126100fc5761016461011c611397565b61013e73ffffffffffffffffffffffffffffffffffffffff5f54163314611410565b61015f73ffffffffffffffffffffffffffffffffffffffff82161515611524565b611589565b005b346100fc575f6003193601126100fc576020600854604051908152f35b346100fc575f6003193601126100fc576040515f600a546101a3816112a8565b808452906001811690811561023957506001146101db575b6101d7836101cb818503826112f9565b6040519182918261131c565b0390f35b600a5f9081527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8939250905b80821061021f575090915081016020016101cb6101bb565b919260018160209254838588010152019101909291610207565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b840190910191506101cb90506101bb565b346100fc576101806003193601126100fc57610295611397565b602435604435916064359273ffffffffffffffffffffffffffffffffffffffff84168094036100fc5760843573ffffffffffffffffffffffffffffffffffffffff81168091036100fc5760e43573ffffffffffffffffffffffffffffffffffffffff81168091036100fc57610124359173ffffffffffffffffffffffffffffffffffffffff83168093036100fc576101443567ffffffffffffffff81116100fc576103449036906004016113ba565b966101643567ffffffffffffffff81116100fc576103669036906004016113ba565b947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549760ff8960401c16159867ffffffffffffffff811680159081610bf7575b6001149081610bed575b159081610be4575b50610bbc578960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610b67575b5073ffffffffffffffffffffffffffffffffffffffff881615610b09578015610aab578115610a275782156109a357831561091f57841561089b578515610817576005556006557fffffffffffffffffffffffff000000000000000000000000000000000000000060025416176002557fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035560a43560075560c4356008557fffffffffffffffffffffffff00000000000000000000000000000000000000006004541617600455610104356009556104ec600c546112a8565b601f81116107d9575b50600a7f312e302e3000000000000000000000000000000000000000000000000000000001600c557fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155835167ffffffffffffffff811161072b5761056b81610566600a546112a8565b61148b565b602094601f82116001146107585761059c9293949582915f92610699575b50505f198260011b9260031b1c19161790565b600a555b80519067ffffffffffffffff821161072b576105c6826105c1600b546112a8565b6114c5565b602090601f83116001146106a45791806105f89261060095945f926106995750505f198260011b9260031b1c19161790565b600b55611589565b61060657005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b015190508680610589565b90601f19831691600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9925f5b8181106107135750916001939185610600979694106106fb575b505050811b01600b55611589565b01515f1960f88460031b161c191690558580806106ed565b929360206001819287860151815501950193016106d3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19821695600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8915f5b8881106107c1575083600195969798106107a9575b505050811b01600a556105a0565b01515f1960f88460031b161c1916905585808061079b565b91926020600181928685015181550194019201610786565b600c5f5261081190601f0160051c7fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c790810190611475565b856104f5565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f496e697469616c20617070636861696e206f776e65722063616e6e6f7420626560448201527f207a65726f2061646472657373000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f53657175656e63696e6720636f6e747261637420616464726573732063616e6e60448201527f6f74206265207a65726f000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f417262697472756d20696e626f7820616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f417262697472756d2062726964676520616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f53657175656e63696e6720636861696e2049442063616e6e6f74206265207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f436861696e2049442063616e6e6f74206265207a65726f0000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4f776e65722063616e6e6f74206265207a65726f2061646472657373000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00558a61040c565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050158c6103b9565b303b1591506103b1565b8b91506103a7565b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b346100fc575f6003193601126100fc576020600954604051908152f35b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346100fc575f6003193601126100fc576020600554604051908152f35b346100fc57610cdf36611346565b610d0173ffffffffffffffffffffffffffffffffffffffff5f54163314611410565b67ffffffffffffffff811161072b57610d1b600c546112a8565b601f8111610dd8575b505f601f8211600114610d60578190610d50935f92610d555750505f198260011b9260031b1c19161790565b600c55005b013590508380610589565b601f198216927fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7915f5b858110610dc057508360019510610da7575b505050811b01600c55005b5f1960f88560031b161c19910135169055828080610d9c565b90926020600181928686013581550194019101610d8a565b600c5f52610e21907fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7601f840160051c81019160208510610e27575b601f0160051c0190611475565b82610d24565b9091508190610e14565b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346100fc575f6003193601126100fc576020600754604051908152f35b346100fc575f6003193601126100fc576040515f600c54610ea1816112a8565b80845290600181169081156102395750600114610ec8576101d7836101cb818503826112f9565b600c5f9081527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7939250905b808210610f0c575090915081016020016101cb6101bb565b919260018160209254838588010152019101909291610ef4565b346100fc57610f3436611346565b610f5673ffffffffffffffffffffffffffffffffffffffff5f54163314611410565b67ffffffffffffffff811161072b57610f74816105c1600b546112a8565b5f91601f8211600114610fe457610fc182807f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a7955f91610fd9575b505f198260011b9260031b1c19161790565b600b555b610fd4604051928392836114fd565b0390a1005b905083013586610faf565b601f198216600b5f527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9905f5b81811061106c575093837f02585ebce918f656604dabb23332a6df1dcde119741f7c1f8fb37b191392a2a79510611053575b5050600182811b01600b55610fc5565b5f1960f88560031b161c19908301351690558380611043565b83860135835560209586019560019093019201611011565b346100fc5761109236611346565b6110b473ffffffffffffffffffffffffffffffffffffffff5f54163314611410565b67ffffffffffffffff811161072b576110d281610566600a546112a8565b5f91601f82116001146111305761111e82807f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c955f91610fd957505f198260011b9260031b1c19161790565b600a55610fd4604051928392836114fd565b601f198216600a5f527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8905f5b8181106111b8575093837f67c57ae6ad924cd093fb2f06bc0b28fd5879481051a9c203a44d27c8904d437c951061119f575b5050600182811b01600a55610fc5565b5f1960f88560031b161c1990830135169055838061118f565b8386013583556020958601956001909301920161115d565b346100fc575f6003193601126100fc57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346100fc575f6003193601126100fc576040515f600b54611223816112a8565b8084529060018116908115610239575060011461124a576101d7836101cb818503826112f9565b600b5f9081527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9939250905b80821061128e575090915081016020016101cb6101bb565b919260018160209254838588010152019101909291611276565b90600182811c921680156112ef575b60208310146112c257565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916112b7565b90601f601f19910116810190811067ffffffffffffffff82111761072b57604052565b601f19601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b9060206003198301126100fc5760043567ffffffffffffffff81116100fc57826023820112156100fc5780600401359267ffffffffffffffff84116100fc57602484830101116100fc576024019190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100fc57565b81601f820112156100fc5780359067ffffffffffffffff821161072b57604051926113ef6020601f19601f86011601856112f9565b828452602083830101116100fc57815f926020809301838601378301015290565b1561141757565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b818110611480575050565b5f8155600101611475565b90601f8211611498575050565b6114c391600a5f5260205f20906020601f840160051c83019310610e2757601f0160051c0190611475565b565b90601f82116114d2575050565b6114c391600b5f5260205f20906020601f840160051c83019310610e2757601f0160051c0190611475565b90601f83604094601f199360208652816020870152868601375f8582860101520116010190565b1561152b57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166115aa811515611524565b73ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060803461013457601f61050538819003918201601f19168301916001600160401b03831184841017610138578084926040948552833981010312610134576100468161014c565b906001600160a01b039061005c9060200161014c565b16908115610121575f80546001600160a01b031981168417825560405193916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3803b1561010157600180546001600160a01b0319166001600160a01b039290921691821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a26103a490816101618239f35b63211eb15960e21b5f9081526001600160a01b0391909116600452602490fd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101345756fe60806040526004361015610011575f80fd5b5f3560e01c80633659cfe61461027e5780635c60da1b1461022d578063715018a6146101935780638da5cb5b146101435763f2fde38b14610050575f80fd5b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff811680910361013f576100a8610358565b80156101135773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b5f80fd5b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f576101c9610358565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461013f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b3461013f5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261013f5760043573ffffffffffffffffffffffffffffffffffffffff81169081810361013f576102d7610358565b3b1561032d57807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2005b7f847ac564000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff5f5416330361037857565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x0C`\x08\xAF\x14a\0TW\x80c6\xF5\x91\xF2\x14a\0OW\x80cH\xAA\xC3\x92\x14a\0JWc\xB9\x16\x8FG\x14a\0EW_\x80\xFD[a\x03\xB7V[a\x02\xCBV[a\x01\x08V[4a\0\xE1W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W` `@a\0\x97a\0\x92a\0\xE5V[a\x044V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x83Q\x94\x85\x93\x81\x85R\x80Q\x91\x82\x91\x82\x82\x88\x01R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x81\x01\x03\x01\x90\xF3[_\x80\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\0\xE1WV[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1Wa\x01?a\0\xE5V[`$5a\x01K\x82a\x044V[\x90a\x01V\x81\x83a\x04\xD1V[\x91` \x81Q\x91\x01_\xF5\x90\x81\x15a\0\xE1Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x83\x16\x91\x16\x81\x03a\x01\xFAW`@\x7F\xA8\xFF\x04Y\r\xB5x>1\xF3G\xBB\xD8(\x91\x1D\xAB\xF9\xC7\x91P\xB8\xAFY\xBE`\x04M\x8Cg\x9FR\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xF6\x95\x83Q\x92\x83R\x16` \x82\x01R\xA1`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R\x90\x81\x90` \x82\x01\x90V[\x03\x90\xF3[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x10`$\x82\x01R\x7FAddress mismatch\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x02\xC6W`@RV[a\x02XV[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE1W6`#\x82\x01\x12\x15a\0\xE1W\x80`\x04\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x02\xC6W`@Qa\x03a` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x86\x01\x16\x01\x82a\x02\x85V[\x82\x81R6`$\x84\x84\x01\x01\x11a\0\xE1W_` \x84a\x01\xF6\x95`$a\x03\x90\x96\x01\x83\x86\x017\x83\x01\x01R`$5\x90a\x04\xD1V[`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R\x90\x81\x90` \x82\x01\x90V[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W` a\x04\x04a\x03\xF3a\0\xE5V[a\x03\xFF`$5\x91a\x044V[a\x04\xD1V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[\x80Q\x91\x90\x82\x90` \x01\x82^\x01_\x81R\x90V[a\x04\xCEa\x04\x9C\x91a\x04\xA2a,\x1A\x91`@Q\x92a\x04S` \x82\x01\x85a\x02\x85V[\x80\x84Ra\x05E` \x85\x019s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16` \x82\x01R` \x81Ra\x04\x8C`@\x82a\x02\x85V[`@Q\x94\x85\x93` \x85\x01\x90a\x04\"V[\x90a\x04\"V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x02\x85V[\x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91` \x81Q\x91\x01 `@Q\x90` \x82\x01\x92\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R0``\x1B`!\x84\x01R`5\x83\x01R`U\x82\x01R`U\x81Ra\x05=`u\x82a\x02\x85V[Q\x90 \x16\x90V\xFE`\xA04a\x01kW`\x1Fa,\x1A8\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01DW\x80\x84\x92` \x94`@R\x839\x81\x01\x03\x12a\x01kWQ`\x01`\x01`\xA0\x1B\x03\x81\x16\x90\x81\x90\x03a\x01kW\x80\x15a\x01XW_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x83\x17\x82U`@Q\x92\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3a\x14a\x81\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x83\x82\x10\x17a\x01DW\x82\x91a\x12\xB4\x839\x03\x90_\xF0\x80\x15a\x019W`@Q\x90a\x05\x05\x80\x83\x01`\x01`\x01`@\x1B\x03\x81\x11\x84\x82\x10\x17a\x01DW`@\x92\x84\x92a'\x15\x849`\x01`\x01`\xA0\x1B\x03\x16\x81R0` \x82\x01R\x03\x01\x90_\xF0\x80\x15a\x019W`\x80R`@Qa\x11D\x90\x81a\x01p\x829`\x80Q\x81\x81\x81a\x02\x15\x01R\x81\x81a\x05\xC2\x01R\x81\x81a\x08a\x01Ra\n\x98\x01R\xF3[`@Q=_\x82>=\x90\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[__5`\xE0\x1C\x80c\x0B\x04\xEB\xFD\x14a\x08\x85W\x80cYe\x9E\x90\x14a\x085W\x80co\x04$U\x14a\x04WW\x80cqP\x18\xA6\x14a\x03\xD9W\x80c\x83\xF9M\xB7\x14a\x01\xB7W\x80c\x8D\xA5\xCB[\x14a\x01\x84W\x80c\xA3:\x8B`\x14a\x01DWc\xF2\xFD\xE3\x8B\x14a\0rW_\x80\xFD[4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\0\xA0a\x08\xC1V[a\0\xA8a\x0C V[\x16\x80\x15a\x01\x15Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x84U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x83\x80\xA3\x80\xF3[`$\x82\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\x80`\x04R\xFD[\x80\xFD[P4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@` \x92`\x045\x81R`\x01\x84R T\x16`@Q\x90\x81R\xF3[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF` \x91T\x16`@Q\x90\x81R\xF3[P4a\x01AW` `\x03\x196\x01\x12a\x01AWa\x01\xD1a\x08\xC1V[a\x01\xD9a\x0C V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x15a\x03UW;\x15a\x02\xD1W\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x80;\x15a\x02\xC2W\x81\x80\x91`$`@Q\x80\x94\x81\x93\x7F6Y\xCF\xE6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x88`\x04\x84\x01RZ\xF1\x80\x15a\x02\xC6Wa\x02\xADW[P\x7FQ\xEAo\xFD\xC9\x90\x9D\\\xA3A%\x9Fr!\x90.\x06vX]\x83>+\xB2\x1F\xA9#\xC8^\x86(\x86` \x83`@Q\x90\x81R\xA1\x80\xF3[\x81a\x02\xB7\x91a\x08\xE4V[a\x02\xC2W\x81_a\x02~V[P\x80\xFD[`@Q=\x84\x82>=\x90\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`!`$\x82\x01R\x7FImplementation must be a contrac`D\x82\x01R\x7Ft\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`)`$\x82\x01R\x7FNew implementation cannot be zer`D\x82\x01R\x7Fo address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWa\x03\xF2a\x0C V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[4a\x07\x80Wa\x01\x80`\x03\x196\x01\x12a\x07\x80Wa\x04qa\x08\xC1V[`$5\x90`d5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\x845\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\xE45\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05\x1F\x906\x90`\x04\x01a\t%V[\x92a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05A\x906\x90`\x04\x01a\t%V[a\x05Ia\x0C V[a\x05T\x86\x15\x15a\t\x99V[\x85_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x07\xB1W`@Q` \x81\x01\x90\x87\x82R` \x81Ra\x05\x95`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7\x80\x82\x01\x90\x82\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\x07\x84W\x82\x91a\x06\r\x91a\x0Cm\x849\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R`@` \x82\x01\x81\x90R_\x90\x82\x01R``\x01\x90V[\x03\x90_\xF5\x80\x15a\x07uWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x96\x86_R`\x01` R`@_ \x88\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90U\x87;\x15a\x07\x80W_\x95s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95a\x07\x1E\x94a\x07\x0B\x93`@Q\x9C\x8D\x99\x8A\x99\x7F\xBFy\xFD\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8BR\x16`\x04\x8A\x01R\x8B`$\x8A\x01R`D5`D\x8A\x01R`d\x89\x01R`\x84\x88\x01R`\xA45`\xA4\x88\x01R`\xC45`\xC4\x88\x01R`\xE4\x87\x01Ra\x01\x045a\x01\x04\x87\x01Ra\x01$\x86\x01Ra\x01\x80a\x01D\x86\x01Ra\x01\x84\x85\x01\x90a\x0B\xDDV[\x90`\x03\x19\x84\x83\x03\x01a\x01d\x85\x01Ra\x0B\xDDV[\x03\x81\x83\x86Z\xF1\x92\x83\x15a\x07uW` \x93a\x07eW[P\x7F\xEA\xF2\xB9\xD4\xFDn\xBAZ`\x87\x04\x99\xF63\\j\xB4\x82n\x02\x9A\xFFe\xBA\x06\x192\x9D\xBDB\x1E\xC3\x83`@Q\x84\x81R\xA2`@Q\x90\x81R\xF3[_a\x07o\x91a\x08\xE4V[_a\x073V[`@Q=_\x82>=\x90\xFD[_\x80\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FConfig already exists for this c`D\x82\x01R\x7Fhain ID\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[4a\x07\x80W_`\x03\x196\x01\x12a\x07\x80W` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x07\x80W` `\x03\x196\x01\x12a\x07\x80W` a\x08\xA3`\x045a\t\xFEV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x07\x80WV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\x84W`@RV[\x81`\x1F\x82\x01\x12\x15a\x07\x80W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x84W`@Q\x92a\tx` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x86\x01\x16\x01\x85a\x08\xE4V[\x82\x84R` \x83\x83\x01\x01\x11a\x07\x80W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\t\xA0WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x80_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x0B\xB8W\x80a\nFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x15\x15a\t\x99V[`@Q` \x81\x01\x91\x82R` \x81Ra\n_`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7a\nu` \x82\x01\x83a\x08\xE4V[\x80\x82R` \x82\x01\x90a\x0Cm\x829a\x0B``@Q\x91` \x80\x84\x01a\x0B\x11\x85a\n\xE5\x8A\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF``\x92\x16\x81R`@` \x82\x01R_`@\x82\x01R\x01\x90V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x87R\x86a\x08\xE4V[`@Q\x94\x85\x93\x83\x85\x01\x97Q\x80\x91\x89^\x84\x01\x90\x83\x82\x01\x90_\x82RQ\x92\x83\x91^\x01\x01_\x81R\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x08\xE4V[Q\x90 `@Q\x90` \x82\x01\x92\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R0``\x1B`!\x84\x01R`5\x83\x01R`U\x82\x01R`U\x81Ra\x0B\xB1`u\x82a\x08\xE4V[Q\x90 \x16\x90V[_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16\x90V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x0C@WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD\xFE`\xA0\x80`@Ra\x04\xD7\x808\x03\x80\x91a\0\x17\x82\x85a\x02\x92V[\x839\x81\x01`@\x82\x82\x03\x12a\x01\xEBWa\0.\x82a\x02\xC9V[` \x83\x01Q\x90\x92`\x01`\x01`@\x1B\x03\x82\x11a\x01\xEBW\x01\x90\x80`\x1F\x83\x01\x12\x15a\x01\xEBW\x81Qa\0[\x81a\x02\xDDV[\x92a\0i`@Q\x94\x85a\x02\x92V[\x81\x84R` \x84\x01\x92` \x83\x83\x01\x01\x11a\x01\xEBW\x81_\x92` \x80\x93\x01\x85^\x84\x01\x01R\x82;\x15a\x02tW\x7F\xA3\xF0\xADt\xE5B:\xEB\xFD\x80\xD3\xEFCFW\x835\xA9\xA7*\xEA\xEEY\xFFl\xB3X+5\x13=P\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x85\x16\x90\x81\x17\x90\x91U`@Qc\\`\xDA\x1B`\xE0\x1B\x81R\x90\x91\x90` \x81`\x04\x81\x86Z\xFA\x90\x81\x15a\x01\xF7W_\x91a\x02:W[P\x80;\x15a\x02\x1AWP\x81\x7F\x1C\xF3\xB0:l\xF1\x9F\xA2\xBA\xBAM\xF1H\xE9\xDC\xAB\xED\xEA\x7F\x8A\\\x07\x84\x0E ~\\\x08\x9B\xE9]>_\x80\xA2\x82Q\x15a\x02\x02W` `\x04\x92`@Q\x93\x84\x80\x92c\\`\xDA\x1B`\xE0\x1B\x82RZ\xFA\x91\x82\x15a\x01\xF7W_\x92a\x01\xAEW[P_\x80\x91a\x01\x8A\x94Q\x90\x84Z\xF4=\x15a\x01\xA6W=\x91a\x01n\x83a\x02\xDDV[\x92a\x01|`@Q\x94\x85a\x02\x92V[\x83R=_` \x85\x01>a\x02\xF8V[P[`\x80R`@Qa\x01\x80\x90\x81a\x03W\x829`\x80Q\x81`F\x01R\xF3[``\x91a\x02\xF8V[\x92\x91P` \x83=` \x11a\x01\xEFW[\x81a\x01\xCA` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBW_\x80\x91a\x01\xE1a\x01\x8A\x95a\x02\xC9V[\x93\x94P\x91Pa\x01PV[_\x80\xFD[=\x91Pa\x01\xBDV[`@Q=_\x82>=\x90\xFD[PPP4\x15a\x01\x8CWc\xB3\x98\x97\x9F`\xE0\x1B_R`\x04_\xFD[cL\x9C\x8C\xE3`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[\x90P` \x81=` \x11a\x02lW[\x81a\x02U` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBWa\x02f\x90a\x02\xC9V[_a\0\xF5V[=\x91Pa\x02HV[c\x193\xB4;`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04R`$\x90\xFD[`\x1F\x90\x91\x01`\x1F\x19\x16\x81\x01\x90`\x01`\x01`@\x1B\x03\x82\x11\x90\x82\x10\x17a\x02\xB5W`@RV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x01\xEBWV[`\x01`\x01`@\x1B\x03\x81\x11a\x02\xB5W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x90a\x03\x1CWP\x80Q\x15a\x03\rW\x80Q\x90` \x01\xFD[c\xD6\xBD\xA2u`\xE0\x1B_R`\x04_\xFD[\x81Q\x15\x80a\x03MW[a\x03-WP\x90V[c\x99\x96\xB3\x15`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[P\x80;\x15a\x03%V\xFE`\x80`@R\x7F\\`\xDA\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x80R` `\x80`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16Z\xFA\x80\x15a\x01\x07W_\x90\x15a\x01cWP` =` \x11a\x01\0W[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x82\x01\x16`\x80\x01\x90`\x80\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\0\xD3Wa\0\xCE\x91`@R`\x80\x01a\x01\x12V[a\x01cV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[P=a\0\x81V[`@Q=_\x82>=\x90\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80` \x91\x01\x12a\x01_W`\x80Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x01_W\x90V[_\x80\xFD[_\x80\x916\x82\x807\x816\x91Z\xF4=_\x80>\x15a\x01|W=_\xF3[=_\xFD`\x80\x80`@R4`\xAAW_Q` a\x14A_9_Q\x90_RT`\xFF\x81`@\x1C\x16`\x9BW`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01`IW[`@Qa\x13\x92\x90\x81a\0\xAF\x829\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x14A_9_Q\x90_RU\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_\x80`:V[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x07C\xBFn\x14a\x0FnW\x80c\x18\xB5\xCE\x81\x14a\x0F;W\x80c)\x08\x03V\x14a\r\xEFW\x80cK\x8B\xE3\xF7\x14a\x0C\x91W\x80cW\xD1\xBA%\x14a\x0CtW\x80cn\xDDl\t\x14a\x0CAW\x80c\x85\xE1\xF4\xD0\x14a\x0C$W\x80c\x8D\xA5\xCB[\x14a\x0B\xF2W\x80c\xA3\xC6\xE1\xE7\x14a\x0B\xD5W\x80c\xAAjC\xD8\x14a\x0B\xA2W\x80c\xBFm\xB6\xF8\x14a\x0BoW\x80c\xBFy\xFD\x1C\x14a\x02eW\x80c\xC7\xA7`\x95\x14a\x01mW\x80c\xD1\xF4s|\x14a\x01PW\x80c\xF2\xFD\xE3\x8B\x14a\0\xEAWc\xF8\xA1D\xBE\x14a\0\xC9W_\x80\xFD[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\x06T`@Q\x90\x81R\xF3[_\x80\xFD[4a\0\xE6W` `\x03\x196\x01\x12a\0\xE6Wa\x01Na\x01\x06a\x11\x02V[a\x01(s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x11{V[a\x01Is\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x12\xA7V[a\x13\x0CV[\0[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\x08T`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W`@Q_`\nTa\x01\x8D\x81a\x10\x13V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02#WP`\x01\x14a\x01\xC5W[a\x01\xC1\x83a\x01\xB5\x81\x85\x03\x82a\x10dV[`@Q\x91\x82\x91\x82a\x10\x87V[\x03\x90\xF3[`\n_\x90\x81R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x93\x92P\x90[\x80\x82\x10a\x02\tWP\x90\x91P\x81\x01` \x01a\x01\xB5a\x01\xA5V[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x01\xF1V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16` \x80\x86\x01\x91\x90\x91R\x91\x15\x15`\x05\x1B\x84\x01\x90\x91\x01\x91Pa\x01\xB5\x90Pa\x01\xA5V[4a\0\xE6Wa\x01\x80`\x03\x196\x01\x12a\0\xE6Wa\x02\x7Fa\x11\x02V[`$5`D5\x91`d5\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\0\xE6W`\x845s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\0\xE6W`\xE45s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\0\xE6Wa\x01$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\0\xE6Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE6Wa\x03.\x906\x90`\x04\x01a\x11%V[\x96a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE6Wa\x03P\x906\x90`\x04\x01a\x11%V[\x94\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x97`\xFF\x89`@\x1C\x16\x15\x98g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x0BgW[`\x01\x14\x90\x81a\x0B]W[\x15\x90\x81a\x0BTW[Pa\x0B,W\x89`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\n\xD7W[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x15a\nyW\x80\x15a\n\x1BW\x81\x15a\t\x97W\x82\x15a\t\x13W\x83\x15a\x08\x8FW\x84\x15a\x08\x0BW\x85\x15a\x07\x87W`\x05U`\x06U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x02T\x16\x17`\x02U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x03T\x16\x17`\x03U`\xA45`\x07U`\xC45`\x08U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04T\x16\x17`\x04Ua\x01\x045`\tU\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x83Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06\xD9Wa\x05\x19\x81a\x05\x14`\nTa\x10\x13V[a\x11\xE0V[` \x94`\x1F\x82\x11`\x01\x14a\x07\x06Wa\x05J\x92\x93\x94\x95\x82\x91_\x92a\x06GW[PP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nU[\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x06\xD9Wa\x05t\x82a\x05o`\x0BTa\x10\x13V[a\x120V[` \x90`\x1F\x83\x11`\x01\x14a\x06RW\x91\x80a\x05\xA6\x92a\x05\xAE\x95\x94_\x92a\x06GWPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BUa\x13\x0CV[a\x05\xB4W\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x01Q\x90P\x86\x80a\x057V[\x90`\x1F\x19\x83\x16\x91`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x92_[\x81\x81\x10a\x06\xC1WP\x91`\x01\x93\x91\x85a\x05\xAE\x97\x96\x94\x10a\x06\xA9W[PPP\x81\x1B\x01`\x0BUa\x13\x0CV[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x06\x9BV[\x92\x93` `\x01\x81\x92\x87\x86\x01Q\x81U\x01\x95\x01\x93\x01a\x06\x81V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x1F\x19\x82\x16\x95`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x91_[\x88\x81\x10a\x07oWP\x83`\x01\x95\x96\x97\x98\x10a\x07WW[PPP\x81\x1B\x01`\nUa\x05NV[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x07IV[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x074V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FInitial appchain owner cannot be`D\x82\x01R\x7F zero address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSequencing contract address cann`D\x82\x01R\x7Fot be zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FArbitrum inbox address cannot be`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FArbitrum bridge address cannot b`D\x82\x01R\x7Fe zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FSequencing chain ID cannot be ze`D\x82\x01R\x7Fro\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FOwner cannot be zero address\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x8Aa\x03\xF6V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x8Ca\x03\xA3V[0;\x15\x91Pa\x03\x9BV[\x8B\x91Pa\x03\x91V[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\tT`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\x05T`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x02T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` `\x07T`@Q\x90\x81R\xF3[4a\0\xE6Wa\x0C\x9F6a\x10\xB1V[a\x0C\xC1s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x11{V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06\xD9Wa\x0C\xDF\x81a\x05o`\x0BTa\x10\x13V[_\x91`\x1F\x82\x11`\x01\x14a\rOWa\r,\x82\x80\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95_\x91a\rDW[P_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BU[a\r?`@Q\x92\x83\x92\x83a\x12\x80V[\x03\x90\xA1\0[\x90P\x83\x015\x86a\r\x1AV[`\x1F\x19\x82\x16`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x90_[\x81\x81\x10a\r\xD7WP\x93\x83\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95\x10a\r\xBEW[PP`\x01\x82\x81\x1B\x01`\x0BUa\r0V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\r\xAEV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\r|V[4a\0\xE6Wa\r\xFD6a\x10\xB1V[a\x0E\x1Fs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x11{V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06\xD9Wa\x0E=\x81a\x05\x14`\nTa\x10\x13V[_\x91`\x1F\x82\x11`\x01\x14a\x0E\x9BWa\x0E\x89\x82\x80\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95_\x91a\rDWP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nUa\r?`@Q\x92\x83\x92\x83a\x12\x80V[`\x1F\x19\x82\x16`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x90_[\x81\x81\x10a\x0F#WP\x93\x83\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95\x10a\x0F\nW[PP`\x01\x82\x81\x1B\x01`\nUa\r0V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x0E\xFAV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x0E\xC8V[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\0\xE6W_`\x03\x196\x01\x12a\0\xE6W`@Q_`\x0BTa\x0F\x8E\x81a\x10\x13V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x02#WP`\x01\x14a\x0F\xB5Wa\x01\xC1\x83a\x01\xB5\x81\x85\x03\x82a\x10dV[`\x0B_\x90\x81R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x93\x92P\x90[\x80\x82\x10a\x0F\xF9WP\x90\x91P\x81\x01` \x01a\x01\xB5a\x01\xA5V[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x0F\xE1V[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x10ZW[` \x83\x10\x14a\x10-WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x10\"V[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06\xD9W`@RV[`\x1F\x19`\x1F` `@\x94\x81\x85R\x80Q\x91\x82\x91\x82\x82\x88\x01R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x90` `\x03\x19\x83\x01\x12a\0\xE6W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE6W\x82`#\x82\x01\x12\x15a\0\xE6W\x80`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\0\xE6W`$\x84\x83\x01\x01\x11a\0\xE6W`$\x01\x91\x90V[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\0\xE6WV[\x81`\x1F\x82\x01\x12\x15a\0\xE6W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x06\xD9W`@Q\x92a\x11Z` `\x1F\x19`\x1F\x86\x01\x16\x01\x85a\x10dV[\x82\x84R` \x83\x83\x01\x01\x11a\0\xE6W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\x11\x82WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCaller is not the owner\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`\x1F\x81\x11a\x11\xECWPPV[`\n_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x12&W[`\x1F\x01`\x05\x1C\x01\x90[\x81\x81\x10a\x12\x1BWPPV[_\x81U`\x01\x01a\x12\x10V[\x90\x91P\x81\x90a\x12\x07V[`\x1F\x81\x11a\x12#\xA9f.\xFC\x9C\"\x9Cj\0`\x804a\x014W`\x1Fa\x05\x058\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x018W\x80\x84\x92`@\x94\x85R\x839\x81\x01\x03\x12a\x014Wa\0F\x81a\x01LV[\x90`\x01`\x01`\xA0\x1B\x03\x90a\0\\\x90` \x01a\x01LV[\x16\x90\x81\x15a\x01!W_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x84\x17\x82U`@Q\x93\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3\x80;\x15a\x01\x01W`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x82\x17\x90U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2a\x03\xA4\x90\x81a\x01a\x829\xF3[c!\x1E\xB1Y`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x014WV\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c6Y\xCF\xE6\x14a\x02~W\x80c\\`\xDA\x1B\x14a\x02-W\x80cqP\x18\xA6\x14a\x01\x93W\x80c\x8D\xA5\xCB[\x14a\x01CWc\xF2\xFD\xE3\x8B\x14a\0PW_\x80\xFD[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01?Wa\0\xA8a\x03XV[\x80\x15a\x01\x13Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[_\x80\xFD[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?Wa\x01\xC9a\x03XV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x81\x03a\x01?Wa\x02\xD7a\x03XV[;\x15a\x03-W\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\0[\x7F\x84z\xC5d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x03xWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD", + b"`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x0C`\x08\xAF\x14a\0TW\x80c6\xF5\x91\xF2\x14a\0OW\x80cH\xAA\xC3\x92\x14a\0JWc\xB9\x16\x8FG\x14a\0EW_\x80\xFD[a\x03\xB7V[a\x02\xCBV[a\x01\x08V[4a\0\xE1W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W` `@a\0\x97a\0\x92a\0\xE5V[a\x044V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x83Q\x94\x85\x93\x81\x85R\x80Q\x91\x82\x91\x82\x82\x88\x01R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x81\x01\x03\x01\x90\xF3[_\x80\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\0\xE1WV[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1Wa\x01?a\0\xE5V[`$5a\x01K\x82a\x044V[\x90a\x01V\x81\x83a\x04\xD1V[\x91` \x81Q\x91\x01_\xF5\x90\x81\x15a\0\xE1Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x83\x16\x91\x16\x81\x03a\x01\xFAW`@\x7F\xA8\xFF\x04Y\r\xB5x>1\xF3G\xBB\xD8(\x91\x1D\xAB\xF9\xC7\x91P\xB8\xAFY\xBE`\x04M\x8Cg\x9FR\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01\xF6\x95\x83Q\x92\x83R\x16` \x82\x01R\xA1`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R\x90\x81\x90` \x82\x01\x90V[\x03\x90\xF3[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x10`$\x82\x01R\x7FAddress mismatch\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x02\xC6W`@RV[a\x02XV[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xE1W6`#\x82\x01\x12\x15a\0\xE1W\x80`\x04\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x02\xC6W`@Qa\x03a` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x86\x01\x16\x01\x82a\x02\x85V[\x82\x81R6`$\x84\x84\x01\x01\x11a\0\xE1W_` \x84a\x01\xF6\x95`$a\x03\x90\x96\x01\x83\x86\x017\x83\x01\x01R`$5\x90a\x04\xD1V[`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x91\x16\x81R\x90\x81\x90` \x82\x01\x90V[4a\0\xE1W`@\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\0\xE1W` a\x04\x04a\x03\xF3a\0\xE5V[a\x03\xFF`$5\x91a\x044V[a\x04\xD1V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[\x80Q\x91\x90\x82\x90` \x01\x82^\x01_\x81R\x90V[a\x04\xCEa\x04\x9C\x91a\x04\xA2a.\x97\x91`@Q\x92a\x04S` \x82\x01\x85a\x02\x85V[\x80\x84Ra\x05E` \x85\x019s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16` \x82\x01R` \x81Ra\x04\x8C`@\x82a\x02\x85V[`@Q\x94\x85\x93` \x85\x01\x90a\x04\"V[\x90a\x04\"V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x02\x85V[\x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x91` \x81Q\x91\x01 `@Q\x90` \x82\x01\x92\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R0``\x1B`!\x84\x01R`5\x83\x01R`U\x82\x01R`U\x81Ra\x05=`u\x82a\x02\x85V[Q\x90 \x16\x90V\xFE`\xA04a\x01kW`\x1Fa.\x978\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01DW\x80\x84\x92` \x94`@R\x839\x81\x01\x03\x12a\x01kWQ`\x01`\x01`\xA0\x1B\x03\x81\x16\x90\x81\x90\x03a\x01kW\x80\x15a\x01XW_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x83\x17\x82U`@Q\x92\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3a\x16\xDE\x81\x81\x01`\x01`\x01`@\x1B\x03\x81\x11\x83\x82\x10\x17a\x01DW\x82\x91a\x12\xB4\x839\x03\x90_\xF0\x80\x15a\x019W`@Q\x90a\x05\x05\x80\x83\x01`\x01`\x01`@\x1B\x03\x81\x11\x84\x82\x10\x17a\x01DW`@\x92\x84\x92a)\x92\x849`\x01`\x01`\xA0\x1B\x03\x16\x81R0` \x82\x01R\x03\x01\x90_\xF0\x80\x15a\x019W`\x80R`@Qa\x11D\x90\x81a\x01p\x829`\x80Q\x81\x81\x81a\x02\x15\x01R\x81\x81a\x05\xC2\x01R\x81\x81a\x08a\x01Ra\n\x98\x01R\xF3[`@Q=_\x82>=\x90\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[__5`\xE0\x1C\x80c\x0B\x04\xEB\xFD\x14a\x08\x85W\x80cYe\x9E\x90\x14a\x085W\x80co\x04$U\x14a\x04WW\x80cqP\x18\xA6\x14a\x03\xD9W\x80c\x83\xF9M\xB7\x14a\x01\xB7W\x80c\x8D\xA5\xCB[\x14a\x01\x84W\x80c\xA3:\x8B`\x14a\x01DWc\xF2\xFD\xE3\x8B\x14a\0rW_\x80\xFD[4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\0\xA0a\x08\xC1V[a\0\xA8a\x0C V[\x16\x80\x15a\x01\x15Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x84U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x83\x80\xA3\x80\xF3[`$\x82\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\x80`\x04R\xFD[\x80\xFD[P4a\x01AW` `\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@` \x92`\x045\x81R`\x01\x84R T\x16`@Q\x90\x81R\xF3[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF` \x91T\x16`@Q\x90\x81R\xF3[P4a\x01AW` `\x03\x196\x01\x12a\x01AWa\x01\xD1a\x08\xC1V[a\x01\xD9a\x0C V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x15a\x03UW;\x15a\x02\xD1W\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x80;\x15a\x02\xC2W\x81\x80\x91`$`@Q\x80\x94\x81\x93\x7F6Y\xCF\xE6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x88`\x04\x84\x01RZ\xF1\x80\x15a\x02\xC6Wa\x02\xADW[P\x7FQ\xEAo\xFD\xC9\x90\x9D\\\xA3A%\x9Fr!\x90.\x06vX]\x83>+\xB2\x1F\xA9#\xC8^\x86(\x86` \x83`@Q\x90\x81R\xA1\x80\xF3[\x81a\x02\xB7\x91a\x08\xE4V[a\x02\xC2W\x81_a\x02~V[P\x80\xFD[`@Q=\x84\x82>=\x90\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`!`$\x82\x01R\x7FImplementation must be a contrac`D\x82\x01R\x7Ft\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`)`$\x82\x01R\x7FNew implementation cannot be zer`D\x82\x01R\x7Fo address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[P4a\x01AW\x80`\x03\x196\x01\x12a\x01AWa\x03\xF2a\x0C V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[4a\x07\x80Wa\x01\x80`\x03\x196\x01\x12a\x07\x80Wa\x04qa\x08\xC1V[`$5\x90`d5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\x845\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\x07\x80W`\xE45\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x92\x03a\x07\x80Wa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05\x1F\x906\x90`\x04\x01a\t%V[\x92a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07\x80Wa\x05A\x906\x90`\x04\x01a\t%V[a\x05Ia\x0C V[a\x05T\x86\x15\x15a\t\x99V[\x85_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x07\xB1W`@Q` \x81\x01\x90\x87\x82R` \x81Ra\x05\x95`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7\x80\x82\x01\x90\x82\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\x07\x84W\x82\x91a\x06\r\x91a\x0Cm\x849\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R`@` \x82\x01\x81\x90R_\x90\x82\x01R``\x01\x90V[\x03\x90_\xF5\x80\x15a\x07uWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x96\x86_R`\x01` R`@_ \x88\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90U\x87;\x15a\x07\x80W_\x95s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x95a\x07\x1E\x94a\x07\x0B\x93`@Q\x9C\x8D\x99\x8A\x99\x7F\xBFy\xFD\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x8BR\x16`\x04\x8A\x01R\x8B`$\x8A\x01R`D5`D\x8A\x01R`d\x89\x01R`\x84\x88\x01R`\xA45`\xA4\x88\x01R`\xC45`\xC4\x88\x01R`\xE4\x87\x01Ra\x01\x045a\x01\x04\x87\x01Ra\x01$\x86\x01Ra\x01\x80a\x01D\x86\x01Ra\x01\x84\x85\x01\x90a\x0B\xDDV[\x90`\x03\x19\x84\x83\x03\x01a\x01d\x85\x01Ra\x0B\xDDV[\x03\x81\x83\x86Z\xF1\x92\x83\x15a\x07uW` \x93a\x07eW[P\x7F\xEA\xF2\xB9\xD4\xFDn\xBAZ`\x87\x04\x99\xF63\\j\xB4\x82n\x02\x9A\xFFe\xBA\x06\x192\x9D\xBDB\x1E\xC3\x83`@Q\x84\x81R\xA2`@Q\x90\x81R\xF3[_a\x07o\x91a\x08\xE4V[_a\x073V[`@Q=_\x82>=\x90\xFD[_\x80\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`'`$\x82\x01R\x7FConfig already exists for this c`D\x82\x01R\x7Fhain ID\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[4a\x07\x80W_`\x03\x196\x01\x12a\x07\x80W` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x07\x80W` `\x03\x196\x01\x12a\x07\x80W` a\x08\xA3`\x045a\t\xFEV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x07\x80WV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07\x84W`@RV[\x81`\x1F\x82\x01\x12\x15a\x07\x80W\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07\x84W`@Q\x92a\tx` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x86\x01\x16\x01\x85a\x08\xE4V[\x82\x84R` \x83\x83\x01\x01\x11a\x07\x80W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\t\xA0WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x80_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16a\x0B\xB8W\x80a\nFs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92\x15\x15a\t\x99V[`@Q` \x81\x01\x91\x82R` \x81Ra\n_`@\x82a\x08\xE4V[Q\x90 `@Qa\x04\xD7a\nu` \x82\x01\x83a\x08\xE4V[\x80\x82R` \x82\x01\x90a\x0Cm\x829a\x0B``@Q\x91` \x80\x84\x01a\x0B\x11\x85a\n\xE5\x8A\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x84s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF``\x92\x16\x81R`@` \x82\x01R_`@\x82\x01R\x01\x90V[\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x87R\x86a\x08\xE4V[`@Q\x94\x85\x93\x83\x85\x01\x97Q\x80\x91\x89^\x84\x01\x90\x83\x82\x01\x90_\x82RQ\x92\x83\x91^\x01\x01_\x81R\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x08\xE4V[Q\x90 `@Q\x90` \x82\x01\x92\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R0``\x1B`!\x84\x01R`5\x83\x01R`U\x82\x01R`U\x81Ra\x0B\xB1`u\x82a\x08\xE4V[Q\x90 \x16\x90V[_R`\x01` Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16\x90V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x0C@WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD\xFE`\xA0\x80`@Ra\x04\xD7\x808\x03\x80\x91a\0\x17\x82\x85a\x02\x92V[\x839\x81\x01`@\x82\x82\x03\x12a\x01\xEBWa\0.\x82a\x02\xC9V[` \x83\x01Q\x90\x92`\x01`\x01`@\x1B\x03\x82\x11a\x01\xEBW\x01\x90\x80`\x1F\x83\x01\x12\x15a\x01\xEBW\x81Qa\0[\x81a\x02\xDDV[\x92a\0i`@Q\x94\x85a\x02\x92V[\x81\x84R` \x84\x01\x92` \x83\x83\x01\x01\x11a\x01\xEBW\x81_\x92` \x80\x93\x01\x85^\x84\x01\x01R\x82;\x15a\x02tW\x7F\xA3\xF0\xADt\xE5B:\xEB\xFD\x80\xD3\xEFCFW\x835\xA9\xA7*\xEA\xEEY\xFFl\xB3X+5\x13=P\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x85\x16\x90\x81\x17\x90\x91U`@Qc\\`\xDA\x1B`\xE0\x1B\x81R\x90\x91\x90` \x81`\x04\x81\x86Z\xFA\x90\x81\x15a\x01\xF7W_\x91a\x02:W[P\x80;\x15a\x02\x1AWP\x81\x7F\x1C\xF3\xB0:l\xF1\x9F\xA2\xBA\xBAM\xF1H\xE9\xDC\xAB\xED\xEA\x7F\x8A\\\x07\x84\x0E ~\\\x08\x9B\xE9]>_\x80\xA2\x82Q\x15a\x02\x02W` `\x04\x92`@Q\x93\x84\x80\x92c\\`\xDA\x1B`\xE0\x1B\x82RZ\xFA\x91\x82\x15a\x01\xF7W_\x92a\x01\xAEW[P_\x80\x91a\x01\x8A\x94Q\x90\x84Z\xF4=\x15a\x01\xA6W=\x91a\x01n\x83a\x02\xDDV[\x92a\x01|`@Q\x94\x85a\x02\x92V[\x83R=_` \x85\x01>a\x02\xF8V[P[`\x80R`@Qa\x01\x80\x90\x81a\x03W\x829`\x80Q\x81`F\x01R\xF3[``\x91a\x02\xF8V[\x92\x91P` \x83=` \x11a\x01\xEFW[\x81a\x01\xCA` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBW_\x80\x91a\x01\xE1a\x01\x8A\x95a\x02\xC9V[\x93\x94P\x91Pa\x01PV[_\x80\xFD[=\x91Pa\x01\xBDV[`@Q=_\x82>=\x90\xFD[PPP4\x15a\x01\x8CWc\xB3\x98\x97\x9F`\xE0\x1B_R`\x04_\xFD[cL\x9C\x8C\xE3`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[\x90P` \x81=` \x11a\x02lW[\x81a\x02U` \x93\x83a\x02\x92V[\x81\x01\x03\x12a\x01\xEBWa\x02f\x90a\x02\xC9V[_a\0\xF5V[=\x91Pa\x02HV[c\x193\xB4;`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x84\x16`\x04R`$\x90\xFD[`\x1F\x90\x91\x01`\x1F\x19\x16\x81\x01\x90`\x01`\x01`@\x1B\x03\x82\x11\x90\x82\x10\x17a\x02\xB5W`@RV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x01\xEBWV[`\x01`\x01`@\x1B\x03\x81\x11a\x02\xB5W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x90a\x03\x1CWP\x80Q\x15a\x03\rW\x80Q\x90` \x01\xFD[c\xD6\xBD\xA2u`\xE0\x1B_R`\x04_\xFD[\x81Q\x15\x80a\x03MW[a\x03-WP\x90V[c\x99\x96\xB3\x15`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[P\x80;\x15a\x03%V\xFE`\x80`@R\x7F\\`\xDA\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x80R` `\x80`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16Z\xFA\x80\x15a\x01\x07W_\x90\x15a\x01cWP` =` \x11a\x01\0W[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x82\x01\x16`\x80\x01\x90`\x80\x82\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11\x17a\0\xD3Wa\0\xCE\x91`@R`\x80\x01a\x01\x12V[a\x01cV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[P=a\0\x81V[`@Q=_\x82>=\x90\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80` \x91\x01\x12a\x01_W`\x80Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x03a\x01_W\x90V[_\x80\xFD[_\x80\x916\x82\x807\x816\x91Z\xF4=_\x80>\x15a\x01|W=_\xF3[=_\xFD`\x80\x80`@R4`\xAAW_Q` a\x16\xBE_9_Q\x90_RT`\xFF\x81`@\x1C\x16`\x9BW`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01`IW[`@Qa\x16\x0F\x90\x81a\0\xAF\x829\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x16\xBE_9_Q\x90_RU\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_\x80`:V[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x07C\xBFn\x14a\x12\x03W\x80c\x18\xB5\xCE\x81\x14a\x11\xD0W\x80c)\x08\x03V\x14a\x10\x84W\x80cK\x8B\xE3\xF7\x14a\x0F&W\x80cT\xFDMP\x14a\x0E\x81W\x80cW\xD1\xBA%\x14a\x0EdW\x80cn\xDDl\t\x14a\x0E1W\x80cr@\xF9\xAF\x14a\x0C\xD1W\x80c\x85\xE1\xF4\xD0\x14a\x0C\xB4W\x80c\x8D\xA5\xCB[\x14a\x0C\x82W\x80c\xA3\xC6\xE1\xE7\x14a\x0CeW\x80c\xAAjC\xD8\x14a\x0C2W\x80c\xBFm\xB6\xF8\x14a\x0B\xFFW\x80c\xBFy\xFD\x1C\x14a\x02{W\x80c\xC7\xA7`\x95\x14a\x01\x83W\x80c\xD1\xF4s|\x14a\x01fW\x80c\xF2\xFD\xE3\x8B\x14a\x01\0Wc\xF8\xA1D\xBE\x14a\0\xDFW_\x80\xFD[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\x06T`@Q\x90\x81R\xF3[_\x80\xFD[4a\0\xFCW` `\x03\x196\x01\x12a\0\xFCWa\x01da\x01\x1Ca\x13\x97V[a\x01>s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x14\x10V[a\x01_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x15$V[a\x15\x89V[\0[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\x08T`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW`@Q_`\nTa\x01\xA3\x81a\x12\xA8V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x029WP`\x01\x14a\x01\xDBW[a\x01\xD7\x83a\x01\xCB\x81\x85\x03\x82a\x12\xF9V[`@Q\x91\x82\x91\x82a\x13\x1CV[\x03\x90\xF3[`\n_\x90\x81R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x93\x92P\x90[\x80\x82\x10a\x02\x1FWP\x90\x91P\x81\x01` \x01a\x01\xCBa\x01\xBBV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x02\x07V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x16` \x80\x86\x01\x91\x90\x91R\x91\x15\x15`\x05\x1B\x84\x01\x90\x91\x01\x91Pa\x01\xCB\x90Pa\x01\xBBV[4a\0\xFCWa\x01\x80`\x03\x196\x01\x12a\0\xFCWa\x02\x95a\x13\x97V[`$5`D5\x91`d5\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x80\x94\x03a\0\xFCW`\x845s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\0\xFCW`\xE45s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\0\xFCWa\x01$5\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x80\x93\x03a\0\xFCWa\x01D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xFCWa\x03D\x906\x90`\x04\x01a\x13\xBAV[\x96a\x01d5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xFCWa\x03f\x906\x90`\x04\x01a\x13\xBAV[\x94\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x97`\xFF\x89`@\x1C\x16\x15\x98g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x0B\xF7W[`\x01\x14\x90\x81a\x0B\xEDW[\x15\x90\x81a\x0B\xE4W[Pa\x0B\xBCW\x89`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x0BgW[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x15a\x0B\tW\x80\x15a\n\xABW\x81\x15a\n'W\x82\x15a\t\xA3W\x83\x15a\t\x1FW\x84\x15a\x08\x9BW\x85\x15a\x08\x17W`\x05U`\x06U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x02T\x16\x17`\x02U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x03T\x16\x17`\x03U`\xA45`\x07U`\xC45`\x08U\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04T\x16\x17`\x04Ua\x01\x045`\tUa\x04\xEC`\x0CTa\x12\xA8V[`\x1F\x81\x11a\x07\xD9W[P`\n\x7F1.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01`\x0CU\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x83Qg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07+Wa\x05k\x81a\x05f`\nTa\x12\xA8V[a\x14\x8BV[` \x94`\x1F\x82\x11`\x01\x14a\x07XWa\x05\x9C\x92\x93\x94\x95\x82\x91_\x92a\x06\x99W[PP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nU[\x80Q\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07+Wa\x05\xC6\x82a\x05\xC1`\x0BTa\x12\xA8V[a\x14\xC5V[` \x90`\x1F\x83\x11`\x01\x14a\x06\xA4W\x91\x80a\x05\xF8\x92a\x06\0\x95\x94_\x92a\x06\x99WPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BUa\x15\x89V[a\x06\x06W\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x01Q\x90P\x86\x80a\x05\x89V[\x90`\x1F\x19\x83\x16\x91`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x92_[\x81\x81\x10a\x07\x13WP\x91`\x01\x93\x91\x85a\x06\0\x97\x96\x94\x10a\x06\xFBW[PPP\x81\x1B\x01`\x0BUa\x15\x89V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x06\xEDV[\x92\x93` `\x01\x81\x92\x87\x86\x01Q\x81U\x01\x95\x01\x93\x01a\x06\xD3V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`\x1F\x19\x82\x16\x95`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x91_[\x88\x81\x10a\x07\xC1WP\x83`\x01\x95\x96\x97\x98\x10a\x07\xA9W[PPP\x81\x1B\x01`\nUa\x05\xA0V[\x01Q_\x19`\xF8\x84`\x03\x1B\x16\x1C\x19\x16\x90U\x85\x80\x80a\x07\x9BV[\x91\x92` `\x01\x81\x92\x86\x85\x01Q\x81U\x01\x94\x01\x92\x01a\x07\x86V[`\x0C_Ra\x08\x11\x90`\x1F\x01`\x05\x1C\x7F\xDFif\xC9q\x05\x1C=T\xECY\x16&\x06S\x14\x93\xA5\x14\x04\xA0\x02\x84/V\0\x9D~\\\xF4\xA8\xC7\x90\x81\x01\x90a\x14uV[\x85a\x04\xF5V[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`-`$\x82\x01R\x7FInitial appchain owner cannot be`D\x82\x01R\x7F zero address\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7FSequencing contract address cann`D\x82\x01R\x7Fot be zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FArbitrum inbox address cannot be`D\x82\x01R\x7F zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FArbitrum bridge address cannot b`D\x82\x01R\x7Fe zero\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FSequencing chain ID cannot be ze`D\x82\x01R\x7Fro\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FChain ID cannot be zero\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FOwner cannot be zero address\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x8Aa\x04\x0CV[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x8Ca\x03\xB9V[0;\x15\x91Pa\x03\xB1V[\x8B\x91Pa\x03\xA7V[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x04T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\tT`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\x05T`@Q\x90\x81R\xF3[4a\0\xFCWa\x0C\xDF6a\x13FV[a\r\x01s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x14\x10V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07+Wa\r\x1B`\x0CTa\x12\xA8V[`\x1F\x81\x11a\r\xD8W[P_`\x1F\x82\x11`\x01\x14a\r`W\x81\x90a\rP\x93_\x92a\rUWPP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0CU\0[\x015\x90P\x83\x80a\x05\x89V[`\x1F\x19\x82\x16\x92\x7F\xDFif\xC9q\x05\x1C=T\xECY\x16&\x06S\x14\x93\xA5\x14\x04\xA0\x02\x84/V\0\x9D~\\\xF4\xA8\xC7\x91_[\x85\x81\x10a\r\xC0WP\x83`\x01\x95\x10a\r\xA7W[PPP\x81\x1B\x01`\x0CU\0[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x91\x015\x16\x90U\x82\x80\x80a\r\x9CV[\x90\x92` `\x01\x81\x92\x86\x86\x015\x81U\x01\x94\x01\x91\x01a\r\x8AV[`\x0C_Ra\x0E!\x90\x7F\xDFif\xC9q\x05\x1C=T\xECY\x16&\x06S\x14\x93\xA5\x14\x04\xA0\x02\x84/V\0\x9D~\\\xF4\xA8\xC7`\x1F\x84\x01`\x05\x1C\x81\x01\x91` \x85\x10a\x0E'W[`\x1F\x01`\x05\x1C\x01\x90a\x14uV[\x82a\r$V[\x90\x91P\x81\x90a\x0E\x14V[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x02T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` `\x07T`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW`@Q_`\x0CTa\x0E\xA1\x81a\x12\xA8V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x029WP`\x01\x14a\x0E\xC8Wa\x01\xD7\x83a\x01\xCB\x81\x85\x03\x82a\x12\xF9V[`\x0C_\x90\x81R\x7F\xDFif\xC9q\x05\x1C=T\xECY\x16&\x06S\x14\x93\xA5\x14\x04\xA0\x02\x84/V\0\x9D~\\\xF4\xA8\xC7\x93\x92P\x90[\x80\x82\x10a\x0F\x0CWP\x90\x91P\x81\x01` \x01a\x01\xCBa\x01\xBBV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x0E\xF4V[4a\0\xFCWa\x0F46a\x13FV[a\x0FVs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x14\x10V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07+Wa\x0Ft\x81a\x05\xC1`\x0BTa\x12\xA8V[_\x91`\x1F\x82\x11`\x01\x14a\x0F\xE4Wa\x0F\xC1\x82\x80\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95_\x91a\x0F\xD9W[P_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\x0BU[a\x0F\xD4`@Q\x92\x83\x92\x83a\x14\xFDV[\x03\x90\xA1\0[\x90P\x83\x015\x86a\x0F\xAFV[`\x1F\x19\x82\x16`\x0B_R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x90_[\x81\x81\x10a\x10lWP\x93\x83\x7F\x02X^\xBC\xE9\x18\xF6V`M\xAB\xB232\xA6\xDF\x1D\xCD\xE1\x19t\x1F|\x1F\x8F\xB3{\x19\x13\x92\xA2\xA7\x95\x10a\x10SW[PP`\x01\x82\x81\x1B\x01`\x0BUa\x0F\xC5V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x10CV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x10\x11V[4a\0\xFCWa\x10\x926a\x13FV[a\x10\xB4s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x14a\x14\x10V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07+Wa\x10\xD2\x81a\x05f`\nTa\x12\xA8V[_\x91`\x1F\x82\x11`\x01\x14a\x110Wa\x11\x1E\x82\x80\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95_\x91a\x0F\xD9WP_\x19\x82`\x01\x1B\x92`\x03\x1B\x1C\x19\x16\x17\x90V[`\nUa\x0F\xD4`@Q\x92\x83\x92\x83a\x14\xFDV[`\x1F\x19\x82\x16`\n_R\x7F\xC6Z{\xB8\xD65\x1C\x1C\xF7\x0C\x95\xA3\x16\xCCj\x92\x83\x9C\x98f\x82\xD9\x8B\xC3_\x95\x8FH\x83\xF9\xD2\xA8\x90_[\x81\x81\x10a\x11\xB8WP\x93\x83\x7Fg\xC5z\xE6\xAD\x92L\xD0\x93\xFB/\x06\xBC\x0B(\xFDXyH\x10Q\xA9\xC2\x03\xA4M'\xC8\x90MC|\x95\x10a\x11\x9FW[PP`\x01\x82\x81\x1B\x01`\nUa\x0F\xC5V[_\x19`\xF8\x85`\x03\x1B\x16\x1C\x19\x90\x83\x015\x16\x90U\x83\x80a\x11\x8FV[\x83\x86\x015\x83U` \x95\x86\x01\x95`\x01\x90\x93\x01\x92\x01a\x11]V[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\0\xFCW_`\x03\x196\x01\x12a\0\xFCW`@Q_`\x0BTa\x12#\x81a\x12\xA8V[\x80\x84R\x90`\x01\x81\x16\x90\x81\x15a\x029WP`\x01\x14a\x12JWa\x01\xD7\x83a\x01\xCB\x81\x85\x03\x82a\x12\xF9V[`\x0B_\x90\x81R\x7F\x01u\xB7\xA68Bw\x03\xF0\xDB\xE7\xBB\x9B\xBF\x98z%Qq{4\xE7\x9F3\xB5\xB1\0\x8D\x1F\xA0\x1D\xB9\x93\x92P\x90[\x80\x82\x10a\x12\x8EWP\x90\x91P\x81\x01` \x01a\x01\xCBa\x01\xBBV[\x91\x92`\x01\x81` \x92T\x83\x85\x88\x01\x01R\x01\x91\x01\x90\x92\x91a\x12vV[\x90`\x01\x82\x81\x1C\x92\x16\x80\x15a\x12\xEFW[` \x83\x10\x14a\x12\xC2WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\"`\x04R`$_\xFD[\x91`\x7F\x16\x91a\x12\xB7V[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07+W`@RV[`\x1F\x19`\x1F` `@\x94\x81\x85R\x80Q\x91\x82\x91\x82\x82\x88\x01R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x90` `\x03\x19\x83\x01\x12a\0\xFCW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\0\xFCW\x82`#\x82\x01\x12\x15a\0\xFCW\x80`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\0\xFCW`$\x84\x83\x01\x01\x11a\0\xFCW`$\x01\x91\x90V[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\0\xFCWV[\x81`\x1F\x82\x01\x12\x15a\0\xFCW\x805\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x07+W`@Q\x92a\x13\xEF` `\x1F\x19`\x1F\x86\x01\x16\x01\x85a\x12\xF9V[\x82\x84R` \x83\x83\x01\x01\x11a\0\xFCW\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x15a\x14\x17WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7FCaller is not the owner\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x81\x81\x10a\x14\x80WPPV[_\x81U`\x01\x01a\x14uV[\x90`\x1F\x82\x11a\x14\x98WPPV[a\x14\xC3\x91`\n_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E'W`\x1F\x01`\x05\x1C\x01\x90a\x14uV[V[\x90`\x1F\x82\x11a\x14\xD2WPPV[a\x14\xC3\x91`\x0B_R` _ \x90` `\x1F\x84\x01`\x05\x1C\x83\x01\x93\x10a\x0E'W`\x1F\x01`\x05\x1C\x01\x90a\x14uV[\x90`\x1F\x83`@\x94`\x1F\x19\x93` \x86R\x81` \x87\x01R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x15a\x15+WV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R` `$\x82\x01R\x7FNew owner cannot be zero address`D\x82\x01R\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16a\x15\xAA\x81\x15\x15a\x15$V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0`\x804a\x014W`\x1Fa\x05\x058\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x018W\x80\x84\x92`@\x94\x85R\x839\x81\x01\x03\x12a\x014Wa\0F\x81a\x01LV[\x90`\x01`\x01`\xA0\x1B\x03\x90a\0\\\x90` \x01a\x01LV[\x16\x90\x81\x15a\x01!W_\x80T`\x01`\x01`\xA0\x1B\x03\x19\x81\x16\x84\x17\x82U`@Q\x93\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3\x80;\x15a\x01\x01W`\x01\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x92\x90\x92\x16\x91\x82\x17\x90U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2a\x03\xA4\x90\x81a\x01a\x829\xF3[c!\x1E\xB1Y`\xE2\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x014WV\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c6Y\xCF\xE6\x14a\x02~W\x80c\\`\xDA\x1B\x14a\x02-W\x80cqP\x18\xA6\x14a\x01\x93W\x80c\x8D\xA5\xCB[\x14a\x01CWc\xF2\xFD\xE3\x8B\x14a\0PW_\x80\xFD[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x01?Wa\0\xA8a\x03XV[\x80\x15a\x01\x13Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[_\x80\xFD[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?Wa\x01\xC9a\x03XV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01?W_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x01?W` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFC6\x01\x12a\x01?W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x90\x81\x81\x03a\x01?Wa\x02\xD7a\x03XV[;\x15a\x03-W\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\0[\x7F\x84z\xC5d\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x03xWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD", ); #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] diff --git a/shared/contract-bindings/src/synd/erc1967_proxy.rs b/shared/contract-bindings/src/synd/erc1967_proxy.rs new file mode 100644 index 000000000..acd589edd --- /dev/null +++ b/shared/contract-bindings/src/synd/erc1967_proxy.rs @@ -0,0 +1,1119 @@ +/** + +Generated by the following Solidity interface... +```solidity +interface ERC1967Proxy { + error AddressEmptyCode(address target); + error ERC1967InvalidImplementation(address implementation); + error ERC1967NonPayable(); + error FailedCall(); + + event Upgraded(address indexed implementation); + + constructor(address implementation, bytes _data) payable; + + fallback() external payable; +} +``` + +...which was generated by the following JSON ABI: +```json +[ + { + "type": "constructor", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + }, + { + "name": "_data", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "payable" + }, + { + "type": "fallback", + "stateMutability": "payable" + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedCall", + "inputs": [] + } +] +```*/ +#[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style, + clippy::empty_structs_with_brackets +)] +pub mod ERC1967Proxy { + use super::*; + use alloy::sol_types as alloy_sol_types; + /// The creation / init bytecode of the contract. + /// + /// ```text + ///0x60806040526102728038038061001481610168565b92833981016040828203126101645781516001600160a01b03811692909190838303610164576020810151906001600160401b03821161016457019281601f8501121561016457835161006e610069826101a1565b610168565b9481865260208601936020838301011161016457815f926020809301865e86010152823b15610152577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561013a575f8091610122945190845af43d15610132573d91610113610069846101a1565b9283523d5f602085013e6101bc565b505b6040516057908161021b8239f35b6060916101bc565b50505034156101245763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761018d57604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b03811161018d57601f01601f191660200190565b906101e057508051156101d157805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580610211575b6101f1575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156101e956fe60806040525f8073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416368280378136915af43d5f803e156053573d5ff35b3d5ffd + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"`\x80`@Ra\x02r\x808\x03\x80a\0\x14\x81a\x01hV[\x92\x839\x81\x01`@\x82\x82\x03\x12a\x01dW\x81Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x92\x90\x91\x90\x83\x83\x03a\x01dW` \x81\x01Q\x90`\x01`\x01`@\x1B\x03\x82\x11a\x01dW\x01\x92\x81`\x1F\x85\x01\x12\x15a\x01dW\x83Qa\0na\0i\x82a\x01\xA1V[a\x01hV[\x94\x81\x86R` \x86\x01\x93` \x83\x83\x01\x01\x11a\x01dW\x81_\x92` \x80\x93\x01\x86^\x86\x01\x01R\x82;\x15a\x01RW\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x80T`\x01`\x01`\xA0\x1B\x03\x19\x16\x82\x17\x90U\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\x82Q\x15a\x01:W_\x80\x91a\x01\"\x94Q\x90\x84Z\xF4=\x15a\x012W=\x91a\x01\x13a\0i\x84a\x01\xA1V[\x92\x83R=_` \x85\x01>a\x01\xBCV[P[`@Q`W\x90\x81a\x02\x1B\x829\xF3[``\x91a\x01\xBCV[PPP4\x15a\x01$Wc\xB3\x98\x97\x9F`\xE0\x1B_R`\x04_\xFD[cL\x9C\x8C\xE3`\xE0\x1B_R`\x04R`$_\xFD[_\x80\xFD[`@Q\x91\x90`\x1F\x01`\x1F\x19\x16\x82\x01`\x01`\x01`@\x1B\x03\x81\x11\x83\x82\x10\x17a\x01\x8DW`@RV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`\x01`\x01`@\x1B\x03\x81\x11a\x01\x8DW`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x90a\x01\xE0WP\x80Q\x15a\x01\xD1W\x80Q\x90` \x01\xFD[c\xD6\xBD\xA2u`\xE0\x1B_R`\x04_\xFD[\x81Q\x15\x80a\x02\x11W[a\x01\xF1WP\x90V[c\x99\x96\xB3\x15`\xE0\x1B_\x90\x81R`\x01`\x01`\xA0\x1B\x03\x91\x90\x91\x16`\x04R`$\x90\xFD[P\x80;\x15a\x01\xE9V\xFE`\x80`@R_\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x166\x82\x807\x816\x91Z\xF4=_\x80>\x15`SW=_\xF3[=_\xFD", + ); + /// The runtime bytecode of the contract, as deployed on the network. + /// + /// ```text + ///0x60806040525f8073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416368280378136915af43d5f803e156053573d5ff35b3d5ffd + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"`\x80`@R_\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x166\x82\x807\x816\x91Z\xF4=_\x80>\x15`SW=_\xF3[=_\xFD", + ); + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `AddressEmptyCode(address)` and selector `0x9996b315`. +```solidity +error AddressEmptyCode(address target); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct AddressEmptyCode { + #[allow(missing_docs)] + pub target: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: AddressEmptyCode) -> Self { + (value.target,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for AddressEmptyCode { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { target: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for AddressEmptyCode { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "AddressEmptyCode(address)"; + const SELECTOR: [u8; 4] = [153u8, 150u8, 179u8, 21u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.target, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ERC1967InvalidImplementation(address)` and selector `0x4c9c8ce3`. +```solidity +error ERC1967InvalidImplementation(address implementation); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ERC1967InvalidImplementation { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: ERC1967InvalidImplementation) -> Self { + (value.implementation,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for ERC1967InvalidImplementation { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { implementation: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ERC1967InvalidImplementation { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ERC1967InvalidImplementation(address)"; + const SELECTOR: [u8; 4] = [76u8, 156u8, 140u8, 227u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.implementation, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ERC1967NonPayable()` and selector `0xb398979f`. +```solidity +error ERC1967NonPayable(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ERC1967NonPayable; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ERC1967NonPayable) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ERC1967NonPayable { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ERC1967NonPayable { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ERC1967NonPayable()"; + const SELECTOR: [u8; 4] = [179u8, 152u8, 151u8, 159u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `FailedCall()` and selector `0xd6bda275`. +```solidity +error FailedCall(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct FailedCall; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: FailedCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for FailedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for FailedCall { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "FailedCall()"; + const SELECTOR: [u8; 4] = [214u8, 189u8, 162u8, 117u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `Upgraded(address)` and selector `0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b`. +```solidity +event Upgraded(address indexed implementation); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct Upgraded { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for Upgraded { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "Upgraded(address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8, + 179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8, + 12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { implementation: topics.1 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.implementation.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.implementation, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Upgraded { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Upgraded> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Upgraded) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + /**Constructor`. +```solidity +constructor(address implementation, bytes _data) payable; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct constructorCall { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _data: alloy::sol_types::private::Bytes, + } + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Bytes, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: constructorCall) -> Self { + (value.implementation, value._data) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for constructorCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + implementation: tuple.0, + _data: tuple.1, + } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolConstructor for constructorCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.implementation, + ), + ::tokenize( + &self._data, + ), + ) + } + } + }; + ///Container for all the [`ERC1967Proxy`](self) custom errors. + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Debug, PartialEq, Eq, Hash)] + pub enum ERC1967ProxyErrors { + #[allow(missing_docs)] + AddressEmptyCode(AddressEmptyCode), + #[allow(missing_docs)] + ERC1967InvalidImplementation(ERC1967InvalidImplementation), + #[allow(missing_docs)] + ERC1967NonPayable(ERC1967NonPayable), + #[allow(missing_docs)] + FailedCall(FailedCall), + } + #[automatically_derived] + impl ERC1967ProxyErrors { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 4usize]] = &[ + [76u8, 156u8, 140u8, 227u8], + [153u8, 150u8, 179u8, 21u8], + [179u8, 152u8, 151u8, 159u8], + [214u8, 189u8, 162u8, 117u8], + ]; + } + #[automatically_derived] + impl alloy_sol_types::SolInterface for ERC1967ProxyErrors { + const NAME: &'static str = "ERC1967ProxyErrors"; + const MIN_DATA_LENGTH: usize = 0usize; + const COUNT: usize = 4usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::AddressEmptyCode(_) => { + ::SELECTOR + } + Self::ERC1967InvalidImplementation(_) => { + ::SELECTOR + } + Self::ERC1967NonPayable(_) => { + ::SELECTOR + } + Self::FailedCall(_) => { + ::SELECTOR + } + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn ERC1967InvalidImplementation( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(ERC1967ProxyErrors::ERC1967InvalidImplementation) + } + ERC1967InvalidImplementation + }, + { + fn AddressEmptyCode( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(ERC1967ProxyErrors::AddressEmptyCode) + } + AddressEmptyCode + }, + { + fn ERC1967NonPayable( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(ERC1967ProxyErrors::ERC1967NonPayable) + } + ERC1967NonPayable + }, + { + fn FailedCall( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(ERC1967ProxyErrors::FailedCall) + } + FailedCall + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_SHIMS[idx](data) + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw_validate( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_VALIDATE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn ERC1967InvalidImplementation( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(ERC1967ProxyErrors::ERC1967InvalidImplementation) + } + ERC1967InvalidImplementation + }, + { + fn AddressEmptyCode( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(ERC1967ProxyErrors::AddressEmptyCode) + } + AddressEmptyCode + }, + { + fn ERC1967NonPayable( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(ERC1967ProxyErrors::ERC1967NonPayable) + } + ERC1967NonPayable + }, + { + fn FailedCall( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(ERC1967ProxyErrors::FailedCall) + } + FailedCall + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_VALIDATE_SHIMS[idx](data) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::AddressEmptyCode(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ERC1967InvalidImplementation(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ERC1967NonPayable(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::FailedCall(inner) => { + ::abi_encoded_size(inner) + } + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::AddressEmptyCode(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ERC1967InvalidImplementation(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ERC1967NonPayable(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::FailedCall(inner) => { + ::abi_encode_raw(inner, out) + } + } + } + } + ///Container for all the [`ERC1967Proxy`](self) events. + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Debug, PartialEq, Eq, Hash)] + pub enum ERC1967ProxyEvents { + #[allow(missing_docs)] + Upgraded(Upgraded), + } + #[automatically_derived] + impl ERC1967ProxyEvents { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 32usize]] = &[ + [ + 188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8, + 179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8, + 12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8, + ], + ]; + } + #[automatically_derived] + impl alloy_sol_types::SolEventInterface for ERC1967ProxyEvents { + const NAME: &'static str = "ERC1967ProxyEvents"; + const COUNT: usize = 1usize; + fn decode_raw_log( + topics: &[alloy_sol_types::Word], + data: &[u8], + ) -> alloy_sol_types::Result { + match topics.first().copied() { + Some(::SIGNATURE_HASH) => { + ::decode_raw_log(topics, data) + .map(Self::Upgraded) + } + _ => { + alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog { + name: ::NAME, + log: alloy_sol_types::private::Box::new( + alloy_sol_types::private::LogData::new_unchecked( + topics.to_vec(), + data.to_vec().into(), + ), + ), + }) + } + } + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for ERC1967ProxyEvents { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + match self { + Self::Upgraded(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + } + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + match self { + Self::Upgraded(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + } + } + } + use alloy::contract as alloy_contract; + /**Creates a new wrapper around an on-chain [`ERC1967Proxy`](self) contract instance. + +See the [wrapper's documentation](`ERC1967ProxyInstance`) for more details.*/ + #[inline] + pub const fn new< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + address: alloy_sol_types::private::Address, + provider: P, + ) -> ERC1967ProxyInstance { + ERC1967ProxyInstance::::new(address, provider) + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub fn deploy< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + provider: P, + implementation: alloy::sol_types::private::Address, + _data: alloy::sol_types::private::Bytes, + ) -> impl ::core::future::Future< + Output = alloy_contract::Result>, + > { + ERC1967ProxyInstance::::deploy(provider, implementation, _data) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + provider: P, + implementation: alloy::sol_types::private::Address, + _data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::RawCallBuilder { + ERC1967ProxyInstance::::deploy_builder(provider, implementation, _data) + } + /**A [`ERC1967Proxy`](self) instance. + +Contains type-safe methods for interacting with an on-chain instance of the +[`ERC1967Proxy`](self) contract located at a given `address`, using a given +provider `P`. + +If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!) +documentation on how to provide it), the `deploy` and `deploy_builder` methods can +be used to deploy a new instance of the contract. + +See the [module-level documentation](self) for all the available methods.*/ + #[derive(Clone)] + pub struct ERC1967ProxyInstance { + address: alloy_sol_types::private::Address, + provider: P, + _network: ::core::marker::PhantomData, + } + #[automatically_derived] + impl ::core::fmt::Debug for ERC1967ProxyInstance { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple("ERC1967ProxyInstance").field(&self.address).finish() + } + } + /// Instantiation and getters/setters. + #[automatically_derived] + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > ERC1967ProxyInstance { + /**Creates a new wrapper around an on-chain [`ERC1967Proxy`](self) contract instance. + +See the [wrapper's documentation](`ERC1967ProxyInstance`) for more details.*/ + #[inline] + pub const fn new( + address: alloy_sol_types::private::Address, + provider: P, + ) -> Self { + Self { + address, + provider, + _network: ::core::marker::PhantomData, + } + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub async fn deploy( + provider: P, + implementation: alloy::sol_types::private::Address, + _data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::Result> { + let call_builder = Self::deploy_builder(provider, implementation, _data); + let contract_address = call_builder.deploy().await?; + Ok(Self::new(contract_address, call_builder.provider)) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder( + provider: P, + implementation: alloy::sol_types::private::Address, + _data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::RawCallBuilder { + alloy_contract::RawCallBuilder::new_raw_deploy( + provider, + [ + &BYTECODE[..], + &alloy_sol_types::SolConstructor::abi_encode( + &constructorCall { + implementation, + _data, + }, + )[..], + ] + .concat() + .into(), + ) + } + /// Returns a reference to the address. + #[inline] + pub const fn address(&self) -> &alloy_sol_types::private::Address { + &self.address + } + /// Sets the address. + #[inline] + pub fn set_address(&mut self, address: alloy_sol_types::private::Address) { + self.address = address; + } + /// Sets the address and returns `self`. + pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self { + self.set_address(address); + self + } + /// Returns a reference to the provider. + #[inline] + pub const fn provider(&self) -> &P { + &self.provider + } + } + impl ERC1967ProxyInstance<&P, N> { + /// Clones the provider and returns a new instance with the cloned provider. + #[inline] + pub fn with_cloned_provider(self) -> ERC1967ProxyInstance { + ERC1967ProxyInstance { + address: self.address, + provider: ::core::clone::Clone::clone(&self.provider), + _network: ::core::marker::PhantomData, + } + } + } + /// Function calls. + #[automatically_derived] + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > ERC1967ProxyInstance { + /// Creates a new call builder using this contract instance's provider and address. + /// + /// Note that the call can be any function call, not just those defined in this + /// contract. Prefer using the other methods for building type-safe contract calls. + pub fn call_builder( + &self, + call: &C, + ) -> alloy_contract::SolCallBuilder<&P, C, N> { + alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) + } + } + /// Event filters. + #[automatically_derived] + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > ERC1967ProxyInstance { + /// Creates a new event filter using this contract instance's provider and address. + /// + /// Note that the type can be any event, not just those defined in this contract. + /// Prefer using the other methods for building type-safe event filters. + pub fn event_filter( + &self, + ) -> alloy_contract::Event<&P, E, N> { + alloy_contract::Event::new_sol(&self.provider, &self.address) + } + ///Creates a new event filter for the [`Upgraded`] event. + pub fn Upgraded_filter(&self) -> alloy_contract::Event<&P, Upgraded, N> { + self.event_filter::() + } + } +} diff --git a/shared/contract-bindings/src/synd/gas_aggregator.rs b/shared/contract-bindings/src/synd/gas_aggregator.rs index 718f2ba03..fbaf42da5 100644 --- a/shared/contract-bindings/src/synd/gas_aggregator.rs +++ b/shared/contract-bindings/src/synd/gas_aggregator.rs @@ -28,7 +28,7 @@ interface GasAggregator { event Unpaused(address account); event UpdateMaxAppchainsToQuery(uint256 indexed epoch, uint256 maxAppchainsToQuery); - constructor(uint256 _epoch, uint256 _addChainFee, uint256 _maxAppchainsToQuery); + constructor(address _gasMeterContract, uint256 _epoch, uint256 _addChainFee, uint256 _maxAppchainsToQuery); function EPOCH_DURATION() external view returns (uint256); function GAS_AGGREGATOR_STORAGE_LOCATION() external view returns (bytes32); @@ -36,19 +36,22 @@ interface GasAggregator { function VERSION() external view returns (uint256); function addChain(uint256 chainId) external payable; function addChainFee() external view returns (uint256); - function addLegacyChain(uint256 chainId, address chainContract) external; + function adminAddChain(uint256 chainId, address chainContract, bool isLegacy) external; function aggregateTokens(uint256[] memory prevChainIds, uint256[] memory prevTokens) external; function aggregatedEpochDataHash(uint256 epoch) external view returns (bytes32); function appchainContract(uint256 chainId) external view returns (address); function currentAggregateIndex() external view returns (uint256); function currentEpoch() external view returns (uint256); function factory() external view returns (address); + function gasMeterContract() external view returns (address); + function getAppchainGasUsed(uint256 epoch, uint256 chainId) external view returns (uint256); function getCurrentEpoch() external view returns (uint256); function getEpochEnd(uint256 epochIndex) external pure returns (uint256); function getEpochStart(uint256 epochIndex) external pure returns (uint256); function getTrackedChainCount() external view returns (uint256); function getTrackedChainId(uint256 index) external view returns (uint256); function getTrackedChainIds() external view returns (uint256[] memory chainIDs); + function isLegacyAppchainContract(uint256 chainId) external view returns (bool); function maxAppchainsToQuery() external view returns (uint256); function owner() external view returns (address); function pause() external; @@ -73,6 +76,11 @@ interface GasAggregator { { "type": "constructor", "inputs": [ + { + "name": "_gasMeterContract", + "type": "address", + "internalType": "address" + }, { "name": "_epoch", "type": "uint256", @@ -171,7 +179,7 @@ interface GasAggregator { }, { "type": "function", - "name": "addLegacyChain", + "name": "adminAddChain", "inputs": [ { "name": "chainId", @@ -182,6 +190,11 @@ interface GasAggregator { "name": "chainContract", "type": "address", "internalType": "address" + }, + { + "name": "isLegacy", + "type": "bool", + "internalType": "bool" } ], "outputs": [], @@ -282,6 +295,43 @@ interface GasAggregator { ], "stateMutability": "view" }, + { + "type": "function", + "name": "gasMeterContract", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getAppchainGasUsed", + "inputs": [ + { + "name": "epoch", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, { "type": "function", "name": "getCurrentEpoch", @@ -378,6 +428,25 @@ interface GasAggregator { ], "stateMutability": "view" }, + { + "type": "function", + "name": "isLegacyAppchainContract", + "inputs": [ + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, { "type": "function", "name": "maxAppchainsToQuery", @@ -899,22 +968,22 @@ pub mod GasAggregator { /// The creation / init bytecode of the contract. /// /// ```text - ///0x6080346100e457601f611dac38819003918201601f19168301916001600160401b038311848410176100fb578084926060946040528339810103126100e457805190604060208201519101519033156100e8575f8054604051949133906001600160a01b038316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36001600160a81b0319163360ff60a01b1916175f5580156100e45760075580600455156100d3575b80600355156100c9575b611c9c90816101108239f35b60646003556100bd565b674563918244f400006004556100b3565b5f80fd5b631e4fbdf760e01b5f525f60045260245ffd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c80630175e23b1461023457806310ffc6261461022f57806316aa7e931461022a578063177b0072146102255780632f9183ba1461022057806331211e791461021b5780633b43ddad146102165780633f4ba83a146102115780634a61aef21461020c5780635c975abb14610207578063715018a61461020257806376671808146101fd578063781cd99d146101f8578063822942c6146101f35780638456cb59146101ee5780638da5cb5b146101e957806395f65bb4146101e45780639b783e5f146101df578063a5522371146101da578063a70b9f0c146101d5578063ab47c700146101d0578063ad3b1b47146101cb578063b97dd9e2146101c6578063bc467a93146101c1578063bdd5b880146101bc578063c45a0155146101b7578063c9cfea88146101b2578063ce2fd1ff146101ad578063d5176d23146101a8578063d99faf00146101a3578063f2fde38b1461019e578063f3ae210814610199578063fd8c75d2146101945763ffa1ad741461018f575f80fd5b610fb0565b610e46565b610d33565b610c61565b610c04565b610bbd565b610b68565b610b4b565b610b18565b610ac0565b610a40565b610a0a565b610962565b610945565b610928565b6108ee565b6108d1565b61081c565b6107cc565b610743565b6106b0565b61065f565b610642565b6105c6565b6105a2565b610585565b61050b565b6104ee565b61049a565b61045a565b61043d565b61033c565b6102c2565b346102be5760206003193601126102be576004358015610296575f1981019081116102915762278d0081029080820462278d0014901517156102915763688d46f0018063688d46f0116102915760405190815280602081015b0390f35b610fcd565b7fd69368d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b346102be5760206003193601126102be576004355f527fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa0600602052602060405f2054604051908152f35b9181601f840112156102be5782359167ffffffffffffffff83116102be576020808501948460051b0101116102be57565b346102be5760206003193601126102be5760043567ffffffffffffffff81116102be5761036d90369060040161030b565b9061037661180b565b61037e611857565b5f5b82811061038957005b61039d610397828585611041565b35611ac3565b156103df576001906007546103b3828686611041565b35907f451acf480dc81605ee92fc829c4efa4817de96e1b5f0c00246a54e29f28d341a5f80a301610380565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f617070636861696e206973206e6f7420747261636b65640000000000000000006044820152fd5b346102be575f6003193601126102be576020600954604051908152f35b346102be5760206003193601126102be576004355f52600a602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b346102be5760206003193601126102be577f7bbf02cf0aebb3279d2b6bfd126efefa6a864dce57ef88326569b4b5ac3ebb0760406004356104d961180b565b600454908060045582519182526020820152a1005b346102be575f6003193601126102be576020600254604051908152f35b346102be575f6003193601126102be5761052361180b565b5f6009555f6008556105336119d1565b7fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff5f54165f557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b346102be575f6003193601126102be576020600354604051908152f35b346102be575f6003193601126102be57602060ff5f5460a01c166040519015158152f35b346102be575f6003193601126102be576105de61180b565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346102be575f6003193601126102be576020600754604051908152f35b346102be575f6003193601126102be57602060405163688d46f08152f35b90602080835192838152019201905f5b81811061069a5750505090565b825184526020938401939092019160010161068d565b346102be5760606003193601126102be5760043560243567ffffffffffffffff81116102be576106e490369060040161030b565b91906044359167ffffffffffffffff83116102be5761028d9361070e61071694369060040161030b565b9390926111c0565b610735604094929451948594855260606020860152606085019061067d565b90838203604085015261067d565b346102be575f6003193601126102be5761075b61180b565b610763611857565b740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff5f5416175f557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b346102be575f6003193601126102be57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b73ffffffffffffffffffffffffffffffffffffffff8116036102be57565b346102be5760406003193601126102be57600435610839816107fe565b6024359061084561180b565b73ffffffffffffffffffffffffffffffffffffffff6001549161086a828416156113f6565b169081156108a9577fffffffffffffffffffffffff00000000000000000000000000000000000000009061089f8415156110b7565b1617600155600255005b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102be575f6003193601126102be576020600554604051908152f35b346102be575f6003193601126102be5760206040517fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa06008152f35b346102be575f6003193601126102be57602060405162278d008152f35b346102be575f6003193601126102be576020600454604051908152f35b346102be5760406003193601126102be5760043561097f816107fe565b73ffffffffffffffffffffffffffffffffffffffff602435916109a061180b565b169081156108a95780610a04575047905b4782116109d3575f80806109d19481945af16109cb611425565b50611464565b005b5047907ff05eb608000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b906109b1565b346102be575f6003193601126102be576020610a246114c9565b604051908152f35b906020610a3d92818152019061067d565b90565b346102be575f6003193601126102be5760405180602060055491828152019060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0905f5b818110610aaa5761028d85610a9e81870382611113565b60405191829182610a2c565b8254845260209093019260019283019201610a87565b346102be5760206003193601126102be57600435610adc61180b565b610ae4611857565b806003557fd9c745b4039588378fde0c745b993bfb39a2569c80e1ed73d70d4e281000ddd1602060075492604051908152a2005b346102be575f6003193601126102be57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346102be575f6003193601126102be576020600854604051908152f35b346102be5760206003193601126102be57600435600554811015610bb85760055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00154604051908152602090f35b611014565b346102be5760206003193601126102be5760043562278d0081029080820462278d0014901517156102915763688d46f0018063688d46f01161029157602090604051908152f35b346102be5760406003193601126102be5760043567ffffffffffffffff81116102be57610c3590369060040161030b565b6024359167ffffffffffffffff83116102be57610c596109d193369060040161030b565b929091611590565b346102be5760206003193601126102be5773ffffffffffffffffffffffffffffffffffffffff600435610c93816107fe565b610c9b61180b565b168015610d075773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b346102be5760406003193601126102be57602435600435610d53826107fe565b610d5b61180b565b610d63611857565b610d8573ffffffffffffffffffffffffffffffffffffffff60015416156113f6565b610d90811515611708565b610da281610d9d81611c22565b611737565b610daf81833b151561176a565b805f52600a602052610dff8260405f209073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60075473ffffffffffffffffffffffffffffffffffffffff604051931683527fab0882685b685ee946cc6f48ef3f45a130522bf89a3d8943cd052e51c924336f60203394a4005b60206003193601126102be57600435610e5d611857565b610e97610e7e5f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b3314610fa057610ead60045434908034146117d4565b610eb8811515611708565b610ec581610d9d81611c22565b610ef1600254610eea60015473ffffffffffffffffffffffffffffffffffffffff1690565b9083611a08565b90610eff81833b151561176a565b610f5582610f15835f52600a60205260405f2090565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60075460405173ffffffffffffffffffffffffffffffffffffffff93909316835233927fab0882685b685ee946cc6f48ef3f45a130522bf89a3d8943cd052e51c924336f90602090a4005b610fab34341561179d565b610ead565b346102be575f6003193601126102be576020604051620f42408152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9190820391821161029157565b9190820180921161029157565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9190811015610bb85760051b0190565b1561105a575050565b7ff562b22b000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b1561108f57565b7fefcb5a01000000000000000000000000000000000000000000000000000000005f5260045ffd5b156110be57565b7fee3e17dc000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f601f19910116810190811067ffffffffffffffff82111761113657604052565b6110e6565b67ffffffffffffffff81116111365760051b60200190565b9061115d8261113b565b61116a6040519182611113565b828152601f1961117a829461113b565b0190602036910137565b8051821015610bb85760209160051b010190565b908160209103126102be575190565b6040513d5f823e3d90fd5b5f1981146102915760010190565b949192935f956111ce6114c9565b6111de6007549182808211611051565b6111ea82600554610ffa565b916111f6831515611088565b600354948386106113e1575b879461120f818a146110b7565b82156113d2575b908493929161122f61122a8998978c611007565b611153565b9a61123d61122a878d611007565b9a5f5b81811061138d5750505050505f5b8381106112745750505050808652808552116112675750565b6112729083856118e7565b565b90919293945061128c6112878284611007565b611b64565b6112c1610e7e610e7e6112a7845f52600a60205260405f2090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b90602060405180937f0c67236300000000000000000000000000000000000000000000000000000000825281806113008a600483019190602083019252565b03915afa918215611388575f92611358575b508a8261132b575b50505060010190859493929161124e565b91879161133e6001959961134f95611184565b52611349828c611184565b526111b2565b94905f8a61131a565b61137a91925060203d8111611381575b6113728183611113565b810190611198565b905f611312565b503d611368565b6111a7565b849596979899508d6113b0826113a9818660019798999a611041565b3592611184565b528c6113c1826113a9818989611041565b520190899897969594939291611240565b6113dc89156110b7565b611216565b98508492506113f08382611007565b98611202565b156113fd57565b7f154c51b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b3d1561145f573d9067ffffffffffffffff821161113657604051916114546020601f19601f8401160184611113565b82523d5f602084013e565b606090565b1561146b57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5472616e73666572206661696c656400000000000000000000000000000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff9772b91042014281116102915762278d009004600181018091116102915790565b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83116102be5760209260051b809284830137010190565b929061155d90610a3d9593604086526040860191611507565b926020818503910152611507565b9091611582610a3d9360408452604084019061067d565b91602081840391015261067d565b916115bc93916115b493600954155f146116d3576115ac611960565b6009546111c0565b929091600955565b6115ec60405160208101906115e4816115d687878661156b565b03601f198101835282611113565b519020600855565b6009548061168857506116809161167b916008546116336007545f527fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa060060205260405f2090565b5561163d5f600855565b7f6be7edcdfd5ab714759c91366ce1ec48cf00cffc17ef0f102b83cb66344d7f976007549283926116736040519283928361156b565b0390a26111b2565b600755565b61127261188d565b9150507f2a92a957e4cbebe0fa56130e3c3fcbcda51934049cc83f15d0de5aeddb23dc0a6116ce6116be60075493600554610ffa565b6040519081529081906020820190565b0390a2565b6116db6119d1565b61170360085460405160208101906116fa816115d68a8a8a8a88611544565b519020146110b7565b6115ac565b1561170f57565b7fc84885d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b1561173f5750565b7f83ad7459000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b156117725750565b7f4a7f43fa000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b156117a55750565b7ff05eb608000000000000000000000000000000000000000000000000000000005f525f60045260245260445ffd5b156117dd575050565b7ff05eb608000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b73ffffffffffffffffffffffffffffffffffffffff5f5416330361182b57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b60ff5f5460a01c1661186557565b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b6118956119d1565b7fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff5f54165f557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1565b8051825180911480611956575b156102be5790839160208085019160051b8501019060208460051b86010191858403915b83821161192757505050505252565b909192939450611938838383611b98565b908482101561194e57505b908694939291611918565b915090611943565b50808411156118f4565b611968611857565b740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff5f5416175f557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1565b60ff5f5460a01c16156119e057565b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b60559173ffffffffffffffffffffffffffffffffffffffff93600b92604051926040840152602083015281520160ff8153201690565b8054821015610bb8575f5260205f2001905f90565b91611a6c918354905f199060031b92831b921b19161790565b9055565b80548015611a96575f190190611a868282611a3e565b5f1982549160031b1b1916905555565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f81815260066020526040902054908115611b5e575f1982019082821161029157600554925f1984019384116102915783835f95611b1d9503611b23575b505050611b0e6005611a70565b6006905f5260205260405f2090565b55600190565b611b0e611b4f91611b45611b3b611b55956005611a3e565b90549060031b1c90565b9283916005611a3e565b90611a53565b555f8080611b01565b50505f90565b600554811015610bb85760055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0015490565b91601f1982840160061c60051b519301925b5f60015b15611bc3575b5060205f940193845190611bae565b818111611bb45790939291925f60015b15611bec575b50601f199290920180519092905f611bd3565b858110611bd95790949193929384861015611c1a579085528352838201805183850180519092529052611baa565b505050505090565b805f52600660205260405f2054155f14611c9757600554680100000000000000008110156111365760018101600555600554811015610bb8577f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0018190556005545f9182526006602052604090912055600190565b505f9056 + ///0x60a03461010d57601f611fb338819003918201601f19168301916001600160401b038311848410176101245780849260809460405283398101031261010d578051906001600160a01b038216820361010d5760208101519060606040820151910151913315610111575f8054604051959133906001600160a01b038316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36001600160a81b0319163360ff60a01b1916175f55811561010d5760805260075580600455156100fc575b80600355156100f2575b611e7a90816101398239608051818181610e7a01526112ae0152f35b60646003556100d6565b674563918244f400006004556100cc565b5f80fd5b631e4fbdf760e01b5f525f60045260245ffd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c80630175e23b1461026457806310ffc6261461025f57806316aa7e931461025a578063177b0072146102555780632f9183ba1461025057806331211e791461024b5780633aae7d24146102465780633b43ddad146102415780633d9e82211461023c5780633f4ba83a146102375780634a61aef2146102325780635c975abb1461022d578063715018a6146102285780637667180814610223578063781cd99d1461021e57806381f0ebde14610219578063822942c6146102145780638456cb591461020f5780638da5cb5b1461020a57806395f65bb4146102055780639b783e5f14610200578063a5522371146101fb578063a70b9f0c146101f6578063ab47c700146101f1578063ad3b1b47146101ec578063b97dd9e2146101e7578063bc467a93146101e2578063bdd5b880146101dd578063c45a0155146101d8578063c9cfea88146101d3578063ce2fd1ff146101ce578063d5176d23146101c9578063d99faf00146101c4578063e63d30d5146101bf578063f2fde38b146101ba578063fd8c75d2146101b55763ffa1ad74146101b0575f80fd5b6110da565b610f70565b610e9e565b610e4e565b610df1565b610daa565b610d55565b610d38565b610d05565b610cad565b610c2d565b610bff565b610b57565b610b3a565b610b1d565b610ae3565b610ac6565b6109da565b6109a8565b61091f565b61088c565b610723565b6106e7565b6106ca565b61064e565b61062a565b61060d565b610593565b610564565b610547565b61051e565b6104ca565b61048a565b61046d565b61036c565b6102f2565b346102ee5760206003193601126102ee5760043580156102c6575f1981019081116102c15762278d0081029080820462278d0014901517156102c15763688d46f0018063688d46f0116102c15760405190815280602081015b0390f35b6110f7565b7fd69368d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b346102ee5760206003193601126102ee576004355f527fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa0600602052602060405f2054604051908152f35b9181601f840112156102ee5782359167ffffffffffffffff83116102ee576020808501948460051b0101116102ee57565b346102ee5760206003193601126102ee5760043567ffffffffffffffff81116102ee5761039d90369060040161033b565b906103a66119e9565b6103ae611a35565b5f5b8281106103b957005b6103cd6103c782858561116b565b35611ca1565b1561040f576001906007546103e382868661116b565b35907f451acf480dc81605ee92fc829c4efa4817de96e1b5f0c00246a54e29f28d341a5f80a3016103b0565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f617070636861696e206973206e6f7420747261636b65640000000000000000006044820152fd5b346102ee575f6003193601126102ee576020600954604051908152f35b346102ee5760206003193601126102ee576004355f52600a602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b346102ee5760206003193601126102ee577f7bbf02cf0aebb3279d2b6bfd126efefa6a864dce57ef88326569b4b5ac3ebb0760406004356105096119e9565b600454908060045582519182526020820152a1005b346102ee5760406003193601126102ee57602061053f6024356004356111ea565b604051908152f35b346102ee575f6003193601126102ee576020600254604051908152f35b346102ee5760206003193601126102ee576004355f52600b602052602060ff60405f2054166040519015158152f35b346102ee575f6003193601126102ee576105ab6119e9565b5f6009555f6008556105bb611baf565b7fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff5f54165f557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b346102ee575f6003193601126102ee576020600354604051908152f35b346102ee575f6003193601126102ee57602060ff5f5460a01c166040519015158152f35b346102ee575f6003193601126102ee576106666119e9565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346102ee575f6003193601126102ee576020600754604051908152f35b346102ee575f6003193601126102ee57602060405163688d46f08152f35b73ffffffffffffffffffffffffffffffffffffffff8116036102ee57565b346102ee5760606003193601126102ee5760243560043561074382610705565b6044358015158091036102ee576107586119e9565b610760611a35565b61076b82151561137e565b61077882843b15156113ad565b61078a8261078581611d42565b6113e0565b815f52600a6020526107da8360405f209073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b815f52600b60205260405f209060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00835416911617905560075473ffffffffffffffffffffffffffffffffffffffff604051931683527fab0882685b685ee946cc6f48ef3f45a130522bf89a3d8943cd052e51c924336f60203394a4005b90602080835192838152019201905f5b8181106108765750505090565b8251845260209384019390920191600101610869565b346102ee5760606003193601126102ee5760043560243567ffffffffffffffff81116102ee576108c090369060040161033b565b91906044359167ffffffffffffffff83116102ee576102bd936108ea6108f294369060040161033b565b939092611513565b6109116040949294519485948552606060208601526060850190610859565b908382036040850152610859565b346102ee575f6003193601126102ee576109376119e9565b61093f611a35565b740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff5f5416175f557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b346102ee575f6003193601126102ee57602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346102ee5760406003193601126102ee576004356109f781610705565b60243590610a036119e9565b6001549073ffffffffffffffffffffffffffffffffffffffff8216610a9e5773ffffffffffffffffffffffffffffffffffffffff16908115610a76577fffffffffffffffffffffffff000000000000000000000000000000000000000090610a6c841515611479565b1617600155600255005b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f154c51b8000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102ee575f6003193601126102ee576020600554604051908152f35b346102ee575f6003193601126102ee5760206040517fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa06008152f35b346102ee575f6003193601126102ee57602060405162278d008152f35b346102ee575f6003193601126102ee576020600454604051908152f35b346102ee5760406003193601126102ee57600435610b7481610705565b73ffffffffffffffffffffffffffffffffffffffff60243591610b956119e9565b16908115610a765780610bf9575047905b478211610bc8575f8080610bc69481945af1610bc0611698565b506116d7565b005b5047907ff05eb608000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b90610ba6565b346102ee575f6003193601126102ee57602061053f61173c565b906020610c2a928181520190610859565b90565b346102ee575f6003193601126102ee5760405180602060055491828152019060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0905f5b818110610c97576102bd85610c8b818703826111a8565b60405191829182610c19565b8254845260209093019260019283019201610c74565b346102ee5760206003193601126102ee57600435610cc96119e9565b610cd1611a35565b806003557fd9c745b4039588378fde0c745b993bfb39a2569c80e1ed73d70d4e281000ddd1602060075492604051908152a2005b346102ee575f6003193601126102ee57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346102ee575f6003193601126102ee576020600854604051908152f35b346102ee5760206003193601126102ee57600435600554811015610da55760055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00154604051908152602090f35b61113e565b346102ee5760206003193601126102ee5760043562278d0081029080820462278d0014901517156102c15763688d46f0018063688d46f0116102c157602090604051908152f35b346102ee5760406003193601126102ee5760043567ffffffffffffffff81116102ee57610e2290369060040161033b565b6024359167ffffffffffffffff83116102ee57610e46610bc693369060040161033b565b929091611803565b346102ee575f6003193601126102ee57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102ee5760206003193601126102ee5773ffffffffffffffffffffffffffffffffffffffff600435610ed081610705565b610ed86119e9565b168015610f445773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b60206003193601126102ee57600435610f87611a35565b610fc1610fa85f5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b33146110ca57610fd760045434908034146119b2565b610fe281151561137e565b610fef8161078581611d42565b61101b60025461101460015473ffffffffffffffffffffffffffffffffffffffff1690565b9083611be6565b9061102981833b15156113ad565b61107f8261103f835f52600a60205260405f2090565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60075460405173ffffffffffffffffffffffffffffffffffffffff93909316835233927fab0882685b685ee946cc6f48ef3f45a130522bf89a3d8943cd052e51c924336f90602090a4005b6110d534341561197b565b610fd7565b346102ee575f6003193601126102ee576020604051620f46288152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b919082039182116102c157565b919082018092116102c157565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9190811015610da55760051b0190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f601f19910116810190811067ffffffffffffffff8211176111cb57604052565b61117b565b908160209103126102ee575190565b6040513d5f823e3d90fd5b90611207611200825f52600b60205260405f2090565b5460ff1690565b61130f57611295916112406112266020935f52600a60205260405f2090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b6040517fb2fe22d5000000000000000000000000000000000000000000000000000000008152600481019290925273ffffffffffffffffffffffffffffffffffffffff16602482015291829081906044820190565b038173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561130a575f916112e1575090565b610c2a915060203d602011611303575b6112fb81836111a8565b8101906111d0565b503d6112f1565b6111df565b61136991611330610fa8610fa86112266020955f52600a60205260405f2090565b60405180809581947f0c672363000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa90811561130a575f916112e1575090565b1561138557565b7fc84885d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b156113b55750565b7f4a7f43fa000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b156113e85750565b7f83ad7459000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b1561141c575050565b7ff562b22b000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b1561145157565b7fefcb5a01000000000000000000000000000000000000000000000000000000005f5260045ffd5b1561148057565b7fee3e17dc000000000000000000000000000000000000000000000000000000005f5260045ffd5b67ffffffffffffffff81116111cb5760051b60200190565b906114ca826114a8565b6114d760405191826111a8565b828152601f196114e782946114a8565b0190602036910137565b8051821015610da55760209160051b010190565b5f1981146102c15760010190565b949192935f9561152161173c565b6115316007549182808211611413565b61153d82600554611124565b9161154983151561144a565b60035494838610611683575b8794611562818a14611479565b8215611674575b908493929161158261157d8998978c611131565b6114c0565b9a61159061157d878d611131565b9a5f5b81811061162f5750505050505f5b8381106115c75750505050808652808552116115ba5750565b6115c5908385611ac5565b565b9091929394506115df6115da8284611131565b611dbc565b6115e981856111ea565b908a82611602575b5050506001019085949392916115a1565b91879161161560019599611626956114f1565b52611620828c6114f1565b52611505565b94905f8a6115f1565b849596979899508d6116528261164b818660019798999a61116b565b35926114f1565b528c6116638261164b81898961116b565b520190899897969594939291611593565b61167e8915611479565b611569565b98508492506116928382611131565b98611555565b3d156116d2573d9067ffffffffffffffff82116111cb57604051916116c76020601f19601f84011601846111a8565b82523d5f602084013e565b606090565b156116de57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5472616e73666572206661696c656400000000000000000000000000000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff9772b91042014281116102c15762278d009004600181018091116102c15790565b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83116102ee5760209260051b809284830137010190565b92906117d090610c2a959360408652604086019161177a565b92602081850391015261177a565b90916117f5610c2a93604084526040840190610859565b916020818403910152610859565b9161182f939161182793600954155f146119465761181f611b3e565b600954611513565b929091600955565b61185f6040516020810190611857816118498787866117de565b03601f1981018352826111a8565b519020600855565b600954806118fb57506118f3916118ee916008546118a66007545f527fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa060060205260405f2090565b556118b05f600855565b7f6be7edcdfd5ab714759c91366ce1ec48cf00cffc17ef0f102b83cb66344d7f976007549283926118e6604051928392836117de565b0390a2611505565b600755565b6115c5611a6b565b9150507f2a92a957e4cbebe0fa56130e3c3fcbcda51934049cc83f15d0de5aeddb23dc0a61194161193160075493600554611124565b6040519081529081906020820190565b0390a2565b61194e611baf565b611976600854604051602081019061196d816118498a8a8a8a886117b7565b51902014611479565b61181f565b156119835750565b7ff05eb608000000000000000000000000000000000000000000000000000000005f525f60045260245260445ffd5b156119bb575050565b7ff05eb608000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b73ffffffffffffffffffffffffffffffffffffffff5f54163303611a0957565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b60ff5f5460a01c16611a4357565b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b611a73611baf565b7fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff5f54165f557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1565b8051825180911480611b34575b156102ee5790839160208085019160051b8501019060208460051b86010191858403915b838211611b0557505050505252565b909192939450611b16838383611df0565b9084821015611b2c57505b908694939291611af6565b915090611b21565b5080841115611ad2565b611b46611a35565b740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff5f5416175f557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1565b60ff5f5460a01c1615611bbe57565b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b60559173ffffffffffffffffffffffffffffffffffffffff93600b92604051926040840152602083015281520160ff8153201690565b8054821015610da5575f5260205f2001905f90565b91611c4a918354905f199060031b92831b921b19161790565b9055565b80548015611c74575f190190611c648282611c1c565b5f1982549160031b1b1916905555565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f81815260066020526040902054908115611d3c575f198201908282116102c157600554925f1984019384116102c15783835f95611cfb9503611d01575b505050611cec6005611c4e565b6006905f5260205260405f2090565b55600190565b611cec611d2d91611d23611d19611d33956005611c1c565b90549060031b1c90565b9283916005611c1c565b90611c31565b555f8080611cdf565b50505f90565b805f52600660205260405f2054155f14611db757600554680100000000000000008110156111cb5760018101600555600554811015610da5577f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0018190556005545f9182526006602052604090912055600190565b505f90565b600554811015610da55760055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0015490565b91601f1982840160061c60051b519301925b5f60015b15611e1b575b5060205f940193845190611e06565b818111611e0c5790939291925f60015b15611e44575b50601f199290920180519092905f611e2b565b858110611e315790949193929384861015611e72579085528352838201805183850180519092529052611e02565b50505050509056 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x804a\0\xE4W`\x1Fa\x1D\xAC8\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\0\xFBW\x80\x84\x92``\x94`@R\x839\x81\x01\x03\x12a\0\xE4W\x80Q\x90`@` \x82\x01Q\x91\x01Q\x903\x15a\0\xE8W_\x80T`@Q\x94\x913\x90`\x01`\x01`\xA0\x1B\x03\x83\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3`\x01`\x01`\xA8\x1B\x03\x19\x163`\xFF`\xA0\x1B\x19\x16\x17_U\x80\x15a\0\xE4W`\x07U\x80`\x04U\x15a\0\xD3W[\x80`\x03U\x15a\0\xC9W[a\x1C\x9C\x90\x81a\x01\x10\x829\xF3[`d`\x03Ua\0\xBDV[gEc\x91\x82D\xF4\0\0`\x04Ua\0\xB3V[_\x80\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x01u\xE2;\x14a\x024W\x80c\x10\xFF\xC6&\x14a\x02/W\x80c\x16\xAA~\x93\x14a\x02*W\x80c\x17{\0r\x14a\x02%W\x80c/\x91\x83\xBA\x14a\x02 W\x80c1!\x1Ey\x14a\x02\x1BW\x80c;C\xDD\xAD\x14a\x02\x16W\x80c?K\xA8:\x14a\x02\x11W\x80cJa\xAE\xF2\x14a\x02\x0CW\x80c\\\x97Z\xBB\x14a\x02\x07W\x80cqP\x18\xA6\x14a\x02\x02W\x80cvg\x18\x08\x14a\x01\xFDW\x80cx\x1C\xD9\x9D\x14a\x01\xF8W\x80c\x82)B\xC6\x14a\x01\xF3W\x80c\x84V\xCBY\x14a\x01\xEEW\x80c\x8D\xA5\xCB[\x14a\x01\xE9W\x80c\x95\xF6[\xB4\x14a\x01\xE4W\x80c\x9Bx>_\x14a\x01\xDFW\x80c\xA5R#q\x14a\x01\xDAW\x80c\xA7\x0B\x9F\x0C\x14a\x01\xD5W\x80c\xABG\xC7\0\x14a\x01\xD0W\x80c\xAD;\x1BG\x14a\x01\xCBW\x80c\xB9}\xD9\xE2\x14a\x01\xC6W\x80c\xBCFz\x93\x14a\x01\xC1W\x80c\xBD\xD5\xB8\x80\x14a\x01\xBCW\x80c\xC4Z\x01U\x14a\x01\xB7W\x80c\xC9\xCF\xEA\x88\x14a\x01\xB2W\x80c\xCE/\xD1\xFF\x14a\x01\xADW\x80c\xD5\x17m#\x14a\x01\xA8W\x80c\xD9\x9F\xAF\0\x14a\x01\xA3W\x80c\xF2\xFD\xE3\x8B\x14a\x01\x9EW\x80c\xF3\xAE!\x08\x14a\x01\x99W\x80c\xFD\x8Cu\xD2\x14a\x01\x94Wc\xFF\xA1\xADt\x14a\x01\x8FW_\x80\xFD[a\x0F\xB0V[a\x0EFV[a\r3V[a\x0CaV[a\x0C\x04V[a\x0B\xBDV[a\x0BhV[a\x0BKV[a\x0B\x18V[a\n\xC0V[a\n@V[a\n\nV[a\tbV[a\tEV[a\t(V[a\x08\xEEV[a\x08\xD1V[a\x08\x1CV[a\x07\xCCV[a\x07CV[a\x06\xB0V[a\x06_V[a\x06BV[a\x05\xC6V[a\x05\xA2V[a\x05\x85V[a\x05\x0BV[a\x04\xEEV[a\x04\x9AV[a\x04ZV[a\x04=V[a\x03\xBB\x07`@`\x045a\x04\xD9a\x18\x0BV[`\x04T\x90\x80`\x04U\x82Q\x91\x82R` \x82\x01R\xA1\0[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x02T`@Q\x90\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEWa\x05#a\x18\x0BV[_`\tU_`\x08Ua\x053a\x19\xD1V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16_U\x7F]\xB9\xEE\nI[\xF2\xE6\xFF\x9C\x91\xA7\x83L\x1B\xA4\xFD\xD2D\xA5\xE8\xAANS{\xD3\x8A\xEA\xE4\xB0s\xAA` `@Q3\x81R\xA1\0[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x03T`@Q\x90\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\xFF_T`\xA0\x1C\x16`@Q\x90\x15\x15\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEWa\x05\xDEa\x18\x0BV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x07T`@Q\x90\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `@Qch\x8DF\xF0\x81R\xF3[\x90` \x80\x83Q\x92\x83\x81R\x01\x92\x01\x90_[\x81\x81\x10a\x06\x9AWPPP\x90V[\x82Q\x84R` \x93\x84\x01\x93\x90\x92\x01\x91`\x01\x01a\x06\x8DV[4a\x02\xBEW```\x03\x196\x01\x12a\x02\xBEW`\x045`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xBEWa\x06\xE4\x906\x90`\x04\x01a\x03\x0BV[\x91\x90`D5\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xBEWa\x02\x8D\x93a\x07\x0Ea\x07\x16\x946\x90`\x04\x01a\x03\x0BV[\x93\x90\x92a\x11\xC0V[a\x075`@\x94\x92\x94Q\x94\x85\x94\x85R``` \x86\x01R``\x85\x01\x90a\x06}V[\x90\x83\x82\x03`@\x85\x01Ra\x06}V[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEWa\x07[a\x18\x0BV[a\x07ca\x18WV[t\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16\x17_U\x7Fb\xE7\x8C\xEA\x01\xBE\xE3 \xCDNB\x02p\xB5\xEAt\0\r\x11\xB0\xC9\xF7GT\xEB\xDB\xFCTK\x05\xA2X` `@Q3\x81R\xA1\0[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x03a\x02\xBEWV[4a\x02\xBEW`@`\x03\x196\x01\x12a\x02\xBEW`\x045a\x089\x81a\x07\xFEV[`$5\x90a\x08Ea\x18\x0BV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x91a\x08j\x82\x84\x16\x15a\x13\xF6V[\x16\x90\x81\x15a\x08\xA9W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\x08\x9F\x84\x15\x15a\x10\xB7V[\x16\x17`\x01U`\x02U\0[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x05T`@Q\x90\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `@Q\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `@Qb'\x8D\0\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x04T`@Q\x90\x81R\xF3[4a\x02\xBEW`@`\x03\x196\x01\x12a\x02\xBEW`\x045a\t\x7F\x81a\x07\xFEV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$5\x91a\t\xA0a\x18\x0BV[\x16\x90\x81\x15a\x08\xA9W\x80a\n\x04WPG\x90[G\x82\x11a\t\xD3W_\x80\x80a\t\xD1\x94\x81\x94Z\xF1a\t\xCBa\x14%V[Pa\x14dV[\0[PG\x90\x7F\xF0^\xB6\x08\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x90a\t\xB1V[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` a\n$a\x14\xC9V[`@Q\x90\x81R\xF3[\x90` a\n=\x92\x81\x81R\x01\x90a\x06}V[\x90V[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW`@Q\x80` `\x05T\x91\x82\x81R\x01\x90`\x05_R\x7F\x03kc\x84\xB5\xEC\xA7\x91\xC6'a\x15-\x0Cy\xBB\x06\x04\xC1\x04\xA5\xFBoN\xB0p?1T\xBB=\xB0\x90_[\x81\x81\x10a\n\xAAWa\x02\x8D\x85a\n\x9E\x81\x87\x03\x82a\x11\x13V[`@Q\x91\x82\x91\x82a\n,V[\x82T\x84R` \x90\x93\x01\x92`\x01\x92\x83\x01\x92\x01a\n\x87V[4a\x02\xBEW` `\x03\x196\x01\x12a\x02\xBEW`\x045a\n\xDCa\x18\x0BV[a\n\xE4a\x18WV[\x80`\x03U\x7F\xD9\xC7E\xB4\x03\x95\x887\x8F\xDE\x0Ct[\x99;\xFB9\xA2V\x9C\x80\xE1\xEDs\xD7\rN(\x10\0\xDD\xD1` `\x07T\x92`@Q\x90\x81R\xA2\0[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x08T`@Q\x90\x81R\xF3[4a\x02\xBEW` `\x03\x196\x01\x12a\x02\xBEW`\x045`\x05T\x81\x10\x15a\x0B\xB8W`\x05_R\x7F\x03kc\x84\xB5\xEC\xA7\x91\xC6'a\x15-\x0Cy\xBB\x06\x04\xC1\x04\xA5\xFBoN\xB0p?1T\xBB=\xB0\x01T`@Q\x90\x81R` \x90\xF3[a\x10\x14V[4a\x02\xBEW` `\x03\x196\x01\x12a\x02\xBEW`\x045b'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x02\x91Wch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x02\x91W` \x90`@Q\x90\x81R\xF3[4a\x02\xBEW`@`\x03\x196\x01\x12a\x02\xBEW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xBEWa\x0C5\x906\x90`\x04\x01a\x03\x0BV[`$5\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xBEWa\x0CYa\t\xD1\x936\x90`\x04\x01a\x03\x0BV[\x92\x90\x91a\x15\x90V[4a\x02\xBEW` `\x03\x196\x01\x12a\x02\xBEWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045a\x0C\x93\x81a\x07\xFEV[a\x0C\x9Ba\x18\x0BV[\x16\x80\x15a\r\x07Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[4a\x02\xBEW`@`\x03\x196\x01\x12a\x02\xBEW`$5`\x045a\rS\x82a\x07\xFEV[a\r[a\x18\x0BV[a\rca\x18WV[a\r\x85s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16\x15a\x13\xF6V[a\r\x90\x81\x15\x15a\x17\x08V[a\r\xA2\x81a\r\x9D\x81a\x1C\"V[a\x177V[a\r\xAF\x81\x83;\x15\x15a\x17jV[\x80_R`\n` Ra\r\xFF\x82`@_ \x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[`\x07Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x93\x16\x83R\x7F\xAB\x08\x82h[h^\xE9F\xCCoH\xEF?E\xA10R+\xF8\x9A=\x89C\xCD\x05.Q\xC9$3o` 3\x94\xA4\0[` `\x03\x196\x01\x12a\x02\xBEW`\x045a\x0E]a\x18WV[a\x0E\x97a\x0E~_Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[3\x14a\x0F\xA0Wa\x0E\xAD`\x04T4\x90\x804\x14a\x17\xD4V[a\x0E\xB8\x81\x15\x15a\x17\x08V[a\x0E\xC5\x81a\r\x9D\x81a\x1C\"V[a\x0E\xF1`\x02Ta\x0E\xEA`\x01Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90\x83a\x1A\x08V[\x90a\x0E\xFF\x81\x83;\x15\x15a\x17jV[a\x0FU\x82a\x0F\x15\x83_R`\n` R`@_ \x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[`\x07T`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x93\x90\x93\x16\x83R3\x92\x7F\xAB\x08\x82h[h^\xE9F\xCCoH\xEF?E\xA10R+\xF8\x9A=\x89C\xCD\x05.Q\xC9$3o\x90` \x90\xA4\0[a\x0F\xAB44\x15a\x17\x9DV[a\x0E\xADV[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `@Qb\x0FB@\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[\x91\x90\x82\x03\x91\x82\x11a\x02\x91WV[\x91\x90\x82\x01\x80\x92\x11a\x02\x91WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[\x91\x90\x81\x10\x15a\x0B\xB8W`\x05\x1B\x01\x90V[\x15a\x10ZWPPV[\x7F\xF5b\xB2+\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x15a\x10\x8FWV[\x7F\xEF\xCBZ\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x10\xBEWV[\x7F\xEE>\x17\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x116W`@RV[a\x10\xE6V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x116W`\x05\x1B` \x01\x90V[\x90a\x11]\x82a\x11;V[a\x11j`@Q\x91\x82a\x11\x13V[\x82\x81R`\x1F\x19a\x11z\x82\x94a\x11;V[\x01\x90` 6\x91\x017V[\x80Q\x82\x10\x15a\x0B\xB8W` \x91`\x05\x1B\x01\x01\x90V[\x90\x81` \x91\x03\x12a\x02\xBEWQ\x90V[`@Q=_\x82>=\x90\xFD[_\x19\x81\x14a\x02\x91W`\x01\x01\x90V[\x94\x91\x92\x93_\x95a\x11\xCEa\x14\xC9V[a\x11\xDE`\x07T\x91\x82\x80\x82\x11a\x10QV[a\x11\xEA\x82`\x05Ta\x0F\xFAV[\x91a\x11\xF6\x83\x15\x15a\x10\x88V[`\x03T\x94\x83\x86\x10a\x13\xE1W[\x87\x94a\x12\x0F\x81\x8A\x14a\x10\xB7V[\x82\x15a\x13\xD2W[\x90\x84\x93\x92\x91a\x12/a\x12*\x89\x98\x97\x8Ca\x10\x07V[a\x11SV[\x9Aa\x12=a\x12*\x87\x8Da\x10\x07V[\x9A_[\x81\x81\x10a\x13\x8DWPPPPP_[\x83\x81\x10a\x12tWPPPP\x80\x86R\x80\x85R\x11a\x12gWPV[a\x12r\x90\x83\x85a\x18\xE7V[V[\x90\x91\x92\x93\x94Pa\x12\x8Ca\x12\x87\x82\x84a\x10\x07V[a\x1BdV[a\x12\xC1a\x0E~a\x0E~a\x12\xA7\x84_R`\n` R`@_ \x90V[Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90` `@Q\x80\x93\x7F\x0Cg#c\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R\x81\x80a\x13\0\x8A`\x04\x83\x01\x91\x90` \x83\x01\x92RV[\x03\x91Z\xFA\x91\x82\x15a\x13\x88W_\x92a\x13XW[P\x8A\x82a\x13+W[PPP`\x01\x01\x90\x85\x94\x93\x92\x91a\x12NV[\x91\x87\x91a\x13>`\x01\x95\x99a\x13O\x95a\x11\x84V[Ra\x13I\x82\x8Ca\x11\x84V[Ra\x11\xB2V[\x94\x90_\x8Aa\x13\x1AV[a\x13z\x91\x92P` =\x81\x11a\x13\x81W[a\x13r\x81\x83a\x11\x13V[\x81\x01\x90a\x11\x98V[\x90_a\x13\x12V[P=a\x13hV[a\x11\xA7V[\x84\x95\x96\x97\x98\x99P\x8Da\x13\xB0\x82a\x13\xA9\x81\x86`\x01\x97\x98\x99\x9Aa\x10AV[5\x92a\x11\x84V[R\x8Ca\x13\xC1\x82a\x13\xA9\x81\x89\x89a\x10AV[R\x01\x90\x89\x98\x97\x96\x95\x94\x93\x92\x91a\x12@V[a\x13\xDC\x89\x15a\x10\xB7V[a\x12\x16V[\x98P\x84\x92Pa\x13\xF0\x83\x82a\x10\x07V[\x98a\x12\x02V[\x15a\x13\xFDWV[\x7F\x15LQ\xB8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[=\x15a\x14_W=\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x116W`@Q\x91a\x14T` `\x1F\x19`\x1F\x84\x01\x16\x01\x84a\x11\x13V[\x82R=_` \x84\x01>V[``\x90V[\x15a\x14kWV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x0F`$\x82\x01R\x7FTransfer failed\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x97r\xB9\x10B\x01B\x81\x11a\x02\x91Wb'\x8D\0\x90\x04`\x01\x81\x01\x80\x91\x11a\x02\x91W\x90V[\x90\x91\x82\x81R\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xBEW` \x92`\x05\x1B\x80\x92\x84\x83\x017\x01\x01\x90V[\x92\x90a\x15]\x90a\n=\x95\x93`@\x86R`@\x86\x01\x91a\x15\x07V[\x92` \x81\x85\x03\x91\x01Ra\x15\x07V[\x90\x91a\x15\x82a\n=\x93`@\x84R`@\x84\x01\x90a\x06}V[\x91` \x81\x84\x03\x91\x01Ra\x06}V[\x91a\x15\xBC\x93\x91a\x15\xB4\x93`\tT\x15_\x14a\x16\xD3Wa\x15\xACa\x19`V[`\tTa\x11\xC0V[\x92\x90\x91`\tUV[a\x15\xEC`@Q` \x81\x01\x90a\x15\xE4\x81a\x15\xD6\x87\x87\x86a\x15kV[\x03`\x1F\x19\x81\x01\x83R\x82a\x11\x13V[Q\x90 `\x08UV[`\tT\x80a\x16\x88WPa\x16\x80\x91a\x16{\x91`\x08Ta\x163`\x07T_R\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0` R`@_ \x90V[Ua\x16=_`\x08UV[\x7Fk\xE7\xED\xCD\xFDZ\xB7\x14u\x9C\x916l\xE1\xECH\xCF\0\xCF\xFC\x17\xEF\x0F\x10+\x83\xCBf4M\x7F\x97`\x07T\x92\x83\x92a\x16s`@Q\x92\x83\x92\x83a\x15kV[\x03\x90\xA2a\x11\xB2V[`\x07UV[a\x12ra\x18\x8DV[\x91PP\x7F*\x92\xA9W\xE4\xCB\xEB\xE0\xFAV\x13\x0EV[_\x19\x82T\x91`\x03\x1B\x1B\x19\x16\x90UUV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`1`\x04R`$_\xFD[_\x81\x81R`\x06` R`@\x90 T\x90\x81\x15a\x1B^W_\x19\x82\x01\x90\x82\x82\x11a\x02\x91W`\x05T\x92_\x19\x84\x01\x93\x84\x11a\x02\x91W\x83\x83_\x95a\x1B\x1D\x95\x03a\x1B#W[PPPa\x1B\x0E`\x05a\x1ApV[`\x06\x90_R` R`@_ \x90V[U`\x01\x90V[a\x1B\x0Ea\x1BO\x91a\x1BEa\x1B;a\x1BU\x95`\x05a\x1A>V[\x90T\x90`\x03\x1B\x1C\x90V[\x92\x83\x91`\x05a\x1A>V[\x90a\x1ASV[U_\x80\x80a\x1B\x01V[PP_\x90V[`\x05T\x81\x10\x15a\x0B\xB8W`\x05_R\x7F\x03kc\x84\xB5\xEC\xA7\x91\xC6'a\x15-\x0Cy\xBB\x06\x04\xC1\x04\xA5\xFBoN\xB0p?1T\xBB=\xB0\x01T\x90V[\x91`\x1F\x19\x82\x84\x01`\x06\x1C`\x05\x1BQ\x93\x01\x92[_`\x01[\x15a\x1B\xC3W[P` _\x94\x01\x93\x84Q\x90a\x1B\xAEV[\x81\x81\x11a\x1B\xB4W\x90\x93\x92\x91\x92_`\x01[\x15a\x1B\xECW[P`\x1F\x19\x92\x90\x92\x01\x80Q\x90\x92\x90_a\x1B\xD3V[\x85\x81\x10a\x1B\xD9W\x90\x94\x91\x93\x92\x93\x84\x86\x10\x15a\x1C\x1AW\x90\x85R\x83R\x83\x82\x01\x80Q\x83\x85\x01\x80Q\x90\x92R\x90Ra\x1B\xAAV[PPPPP\x90V[\x80_R`\x06` R`@_ T\x15_\x14a\x1C\x97W`\x05Th\x01\0\0\0\0\0\0\0\0\x81\x10\x15a\x116W`\x01\x81\x01`\x05U`\x05T\x81\x10\x15a\x0B\xB8W\x7F\x03kc\x84\xB5\xEC\xA7\x91\xC6'a\x15-\x0Cy\xBB\x06\x04\xC1\x04\xA5\xFBoN\xB0p?1T\xBB=\xB0\x01\x81\x90U`\x05T_\x91\x82R`\x06` R`@\x90\x91 U`\x01\x90V[P_\x90V", + b"`\xA04a\x01\rW`\x1Fa\x1F\xB38\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01$W\x80\x84\x92`\x80\x94`@R\x839\x81\x01\x03\x12a\x01\rW\x80Q\x90`\x01`\x01`\xA0\x1B\x03\x82\x16\x82\x03a\x01\rW` \x81\x01Q\x90```@\x82\x01Q\x91\x01Q\x913\x15a\x01\x11W_\x80T`@Q\x95\x913\x90`\x01`\x01`\xA0\x1B\x03\x83\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3`\x01`\x01`\xA8\x1B\x03\x19\x163`\xFF`\xA0\x1B\x19\x16\x17_U\x81\x15a\x01\rW`\x80R`\x07U\x80`\x04U\x15a\0\xFCW[\x80`\x03U\x15a\0\xF2W[a\x1Ez\x90\x81a\x019\x829`\x80Q\x81\x81\x81a\x0Ez\x01Ra\x12\xAE\x01R\xF3[`d`\x03Ua\0\xD6V[gEc\x91\x82D\xF4\0\0`\x04Ua\0\xCCV[_\x80\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x01u\xE2;\x14a\x02dW\x80c\x10\xFF\xC6&\x14a\x02_W\x80c\x16\xAA~\x93\x14a\x02ZW\x80c\x17{\0r\x14a\x02UW\x80c/\x91\x83\xBA\x14a\x02PW\x80c1!\x1Ey\x14a\x02KW\x80c:\xAE}$\x14a\x02FW\x80c;C\xDD\xAD\x14a\x02AW\x80c=\x9E\x82!\x14a\x02_\x14a\x02\0W\x80c\xA5R#q\x14a\x01\xFBW\x80c\xA7\x0B\x9F\x0C\x14a\x01\xF6W\x80c\xABG\xC7\0\x14a\x01\xF1W\x80c\xAD;\x1BG\x14a\x01\xECW\x80c\xB9}\xD9\xE2\x14a\x01\xE7W\x80c\xBCFz\x93\x14a\x01\xE2W\x80c\xBD\xD5\xB8\x80\x14a\x01\xDDW\x80c\xC4Z\x01U\x14a\x01\xD8W\x80c\xC9\xCF\xEA\x88\x14a\x01\xD3W\x80c\xCE/\xD1\xFF\x14a\x01\xCEW\x80c\xD5\x17m#\x14a\x01\xC9W\x80c\xD9\x9F\xAF\0\x14a\x01\xC4W\x80c\xE6=0\xD5\x14a\x01\xBFW\x80c\xF2\xFD\xE3\x8B\x14a\x01\xBAW\x80c\xFD\x8Cu\xD2\x14a\x01\xB5Wc\xFF\xA1\xADt\x14a\x01\xB0W_\x80\xFD[a\x10\xDAV[a\x0FpV[a\x0E\x9EV[a\x0ENV[a\r\xF1V[a\r\xAAV[a\rUV[a\r8V[a\r\x05V[a\x0C\xADV[a\x0C-V[a\x0B\xFFV[a\x0BWV[a\x0B:V[a\x0B\x1DV[a\n\xE3V[a\n\xC6V[a\t\xDAV[a\t\xA8V[a\t\x1FV[a\x08\x8CV[a\x07#V[a\x06\xE7V[a\x06\xCAV[a\x06NV[a\x06*V[a\x06\rV[a\x05\x93V[a\x05dV[a\x05GV[a\x05\x1EV[a\x04\xCAV[a\x04\x8AV[a\x04mV[a\x03lV[a\x02\xF2V[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045\x80\x15a\x02\xC6W_\x19\x81\x01\x90\x81\x11a\x02\xC1Wb'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x02\xC1Wch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x02\xC1W`@Q\x90\x81R\x80` \x81\x01[\x03\x90\xF3[a\x10\xF7V[\x7F\xD6\x93h\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80\xFD[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045_R\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0` R` `@_ T`@Q\x90\x81R\xF3[\x91\x81`\x1F\x84\x01\x12\x15a\x02\xEEW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xEEW` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11a\x02\xEEWV[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xEEWa\x03\x9D\x906\x90`\x04\x01a\x03;V[\x90a\x03\xA6a\x19\xE9V[a\x03\xAEa\x1A5V[_[\x82\x81\x10a\x03\xB9W\0[a\x03\xCDa\x03\xC7\x82\x85\x85a\x11kV[5a\x1C\xA1V[\x15a\x04\x0FW`\x01\x90`\x07Ta\x03\xE3\x82\x86\x86a\x11kV[5\x90\x7FE\x1A\xCFH\r\xC8\x16\x05\xEE\x92\xFC\x82\x9CN\xFAH\x17\xDE\x96\xE1\xB5\xF0\xC0\x02F\xA5N)\xF2\x8D4\x1A_\x80\xA3\x01a\x03\xB0V[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7Fappchain is not tracked\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\tT`@Q\x90\x81R\xF3[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045_R`\n` R` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16`@Q\x90\x81R\xF3[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW\x7F{\xBF\x02\xCF\n\xEB\xB3'\x9D+k\xFD\x12n\xFE\xFAj\x86M\xCEW\xEF\x882ei\xB4\xB5\xAC>\xBB\x07`@`\x045a\x05\ta\x19\xE9V[`\x04T\x90\x80`\x04U\x82Q\x91\x82R` \x82\x01R\xA1\0[4a\x02\xEEW`@`\x03\x196\x01\x12a\x02\xEEW` a\x05?`$5`\x045a\x11\xEAV[`@Q\x90\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\x02T`@Q\x90\x81R\xF3[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045_R`\x0B` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEWa\x05\xABa\x19\xE9V[_`\tU_`\x08Ua\x05\xBBa\x1B\xAFV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16_U\x7F]\xB9\xEE\nI[\xF2\xE6\xFF\x9C\x91\xA7\x83L\x1B\xA4\xFD\xD2D\xA5\xE8\xAANS{\xD3\x8A\xEA\xE4\xB0s\xAA` `@Q3\x81R\xA1\0[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\x03T`@Q\x90\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\xFF_T`\xA0\x1C\x16`@Q\x90\x15\x15\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEWa\x06fa\x19\xE9V[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\x07T`@Q\x90\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `@Qch\x8DF\xF0\x81R\xF3[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x03a\x02\xEEWV[4a\x02\xEEW```\x03\x196\x01\x12a\x02\xEEW`$5`\x045a\x07C\x82a\x07\x05V[`D5\x80\x15\x15\x80\x91\x03a\x02\xEEWa\x07Xa\x19\xE9V[a\x07`a\x1A5V[a\x07k\x82\x15\x15a\x13~V[a\x07x\x82\x84;\x15\x15a\x13\xADV[a\x07\x8A\x82a\x07\x85\x81a\x1DBV[a\x13\xE0V[\x81_R`\n` Ra\x07\xDA\x83`@_ \x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[\x81_R`\x0B` R`@_ \x90`\xFF\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83T\x16\x91\x16\x17\x90U`\x07Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x93\x16\x83R\x7F\xAB\x08\x82h[h^\xE9F\xCCoH\xEF?E\xA10R+\xF8\x9A=\x89C\xCD\x05.Q\xC9$3o` 3\x94\xA4\0[\x90` \x80\x83Q\x92\x83\x81R\x01\x92\x01\x90_[\x81\x81\x10a\x08vWPPP\x90V[\x82Q\x84R` \x93\x84\x01\x93\x90\x92\x01\x91`\x01\x01a\x08iV[4a\x02\xEEW```\x03\x196\x01\x12a\x02\xEEW`\x045`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xEEWa\x08\xC0\x906\x90`\x04\x01a\x03;V[\x91\x90`D5\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xEEWa\x02\xBD\x93a\x08\xEAa\x08\xF2\x946\x90`\x04\x01a\x03;V[\x93\x90\x92a\x15\x13V[a\t\x11`@\x94\x92\x94Q\x94\x85\x94\x85R``` \x86\x01R``\x85\x01\x90a\x08YV[\x90\x83\x82\x03`@\x85\x01Ra\x08YV[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEWa\t7a\x19\xE9V[a\t?a\x1A5V[t\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16\x17_U\x7Fb\xE7\x8C\xEA\x01\xBE\xE3 \xCDNB\x02p\xB5\xEAt\0\r\x11\xB0\xC9\xF7GT\xEB\xDB\xFCTK\x05\xA2X` `@Q3\x81R\xA1\0[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x02\xEEW`@`\x03\x196\x01\x12a\x02\xEEW`\x045a\t\xF7\x81a\x07\x05V[`$5\x90a\n\x03a\x19\xE9V[`\x01T\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16a\n\x9EWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90\x81\x15a\nvW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\nl\x84\x15\x15a\x14yV[\x16\x17`\x01U`\x02U\0[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\x15LQ\xB8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\x05T`@Q\x90\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `@Q\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `@Qb'\x8D\0\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\x04T`@Q\x90\x81R\xF3[4a\x02\xEEW`@`\x03\x196\x01\x12a\x02\xEEW`\x045a\x0Bt\x81a\x07\x05V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$5\x91a\x0B\x95a\x19\xE9V[\x16\x90\x81\x15a\nvW\x80a\x0B\xF9WPG\x90[G\x82\x11a\x0B\xC8W_\x80\x80a\x0B\xC6\x94\x81\x94Z\xF1a\x0B\xC0a\x16\x98V[Pa\x16\xD7V[\0[PG\x90\x7F\xF0^\xB6\x08\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x90a\x0B\xA6V[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` a\x05?a\x17V[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045b'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x02\xC1Wch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x02\xC1W` \x90`@Q\x90\x81R\xF3[4a\x02\xEEW`@`\x03\x196\x01\x12a\x02\xEEW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xEEWa\x0E\"\x906\x90`\x04\x01a\x03;V[`$5\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xEEWa\x0EFa\x0B\xC6\x936\x90`\x04\x01a\x03;V[\x92\x90\x91a\x18\x03V[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045a\x0E\xD0\x81a\x07\x05V[a\x0E\xD8a\x19\xE9V[\x16\x80\x15a\x0FDWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[` `\x03\x196\x01\x12a\x02\xEEW`\x045a\x0F\x87a\x1A5V[a\x0F\xC1a\x0F\xA8_Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[3\x14a\x10\xCAWa\x0F\xD7`\x04T4\x90\x804\x14a\x19\xB2V[a\x0F\xE2\x81\x15\x15a\x13~V[a\x0F\xEF\x81a\x07\x85\x81a\x1DBV[a\x10\x1B`\x02Ta\x10\x14`\x01Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90\x83a\x1B\xE6V[\x90a\x10)\x81\x83;\x15\x15a\x13\xADV[a\x10\x7F\x82a\x10?\x83_R`\n` R`@_ \x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[`\x07T`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x93\x90\x93\x16\x83R3\x92\x7F\xAB\x08\x82h[h^\xE9F\xCCoH\xEF?E\xA10R+\xF8\x9A=\x89C\xCD\x05.Q\xC9$3o\x90` \x90\xA4\0[a\x10\xD544\x15a\x19{V[a\x0F\xD7V[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `@Qb\x0FF(\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[\x91\x90\x82\x03\x91\x82\x11a\x02\xC1WV[\x91\x90\x82\x01\x80\x92\x11a\x02\xC1WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[\x91\x90\x81\x10\x15a\r\xA5W`\x05\x1B\x01\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x11\xCBW`@RV[a\x11{V[\x90\x81` \x91\x03\x12a\x02\xEEWQ\x90V[`@Q=_\x82>=\x90\xFD[\x90a\x12\x07a\x12\0\x82_R`\x0B` R`@_ \x90V[T`\xFF\x16\x90V[a\x13\x0FWa\x12\x95\x91a\x12@a\x12&` \x93_R`\n` R`@_ \x90V[Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[`@Q\x7F\xB2\xFE\"\xD5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x81\x01\x92\x90\x92Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`$\x82\x01R\x91\x82\x90\x81\x90`D\x82\x01\x90V[\x03\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16Z\xFA\x90\x81\x15a\x13\nW_\x91a\x12\xE1WP\x90V[a\x0C*\x91P` =` \x11a\x13\x03W[a\x12\xFB\x81\x83a\x11\xA8V[\x81\x01\x90a\x11\xD0V[P=a\x12\xF1V[a\x11\xDFV[a\x13i\x91a\x130a\x0F\xA8a\x0F\xA8a\x12&` \x95_R`\n` R`@_ \x90V[`@Q\x80\x80\x95\x81\x94\x7F\x0Cg#c\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R`\x04\x83\x01\x91\x90` \x83\x01\x92RV[\x03\x91Z\xFA\x90\x81\x15a\x13\nW_\x91a\x12\xE1WP\x90V[\x15a\x13\x85WV[\x7F\xC8H\x85\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x13\xB5WPV[\x7FJ\x7FC\xFA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x15a\x13\xE8WPV[\x7F\x83\xADtY\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x15a\x14\x1CWPPV[\x7F\xF5b\xB2+\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x15a\x14QWV[\x7F\xEF\xCBZ\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x14\x80WV[\x7F\xEE>\x17\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x11\xCBW`\x05\x1B` \x01\x90V[\x90a\x14\xCA\x82a\x14\xA8V[a\x14\xD7`@Q\x91\x82a\x11\xA8V[\x82\x81R`\x1F\x19a\x14\xE7\x82\x94a\x14\xA8V[\x01\x90` 6\x91\x017V[\x80Q\x82\x10\x15a\r\xA5W` \x91`\x05\x1B\x01\x01\x90V[_\x19\x81\x14a\x02\xC1W`\x01\x01\x90V[\x94\x91\x92\x93_\x95a\x15!a\x17V[``\x90V[\x15a\x16\xDEWV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x0F`$\x82\x01R\x7FTransfer failed\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x97r\xB9\x10B\x01B\x81\x11a\x02\xC1Wb'\x8D\0\x90\x04`\x01\x81\x01\x80\x91\x11a\x02\xC1W\x90V[\x90\x91\x82\x81R\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xEEW` \x92`\x05\x1B\x80\x92\x84\x83\x017\x01\x01\x90V[\x92\x90a\x17\xD0\x90a\x0C*\x95\x93`@\x86R`@\x86\x01\x91a\x17zV[\x92` \x81\x85\x03\x91\x01Ra\x17zV[\x90\x91a\x17\xF5a\x0C*\x93`@\x84R`@\x84\x01\x90a\x08YV[\x91` \x81\x84\x03\x91\x01Ra\x08YV[\x91a\x18/\x93\x91a\x18'\x93`\tT\x15_\x14a\x19FWa\x18\x1Fa\x1B>V[`\tTa\x15\x13V[\x92\x90\x91`\tUV[a\x18_`@Q` \x81\x01\x90a\x18W\x81a\x18I\x87\x87\x86a\x17\xDEV[\x03`\x1F\x19\x81\x01\x83R\x82a\x11\xA8V[Q\x90 `\x08UV[`\tT\x80a\x18\xFBWPa\x18\xF3\x91a\x18\xEE\x91`\x08Ta\x18\xA6`\x07T_R\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0` R`@_ \x90V[Ua\x18\xB0_`\x08UV[\x7Fk\xE7\xED\xCD\xFDZ\xB7\x14u\x9C\x916l\xE1\xECH\xCF\0\xCF\xFC\x17\xEF\x0F\x10+\x83\xCBf4M\x7F\x97`\x07T\x92\x83\x92a\x18\xE6`@Q\x92\x83\x92\x83a\x17\xDEV[\x03\x90\xA2a\x15\x05V[`\x07UV[a\x15\xC5a\x1AkV[\x91PP\x7F*\x92\xA9W\xE4\xCB\xEB\xE0\xFAV\x13\x0E_\x14a\x01\xDFW\x80c\xA5R#q\x14a\x01\xDAW\x80c\xA7\x0B\x9F\x0C\x14a\x01\xD5W\x80c\xABG\xC7\0\x14a\x01\xD0W\x80c\xAD;\x1BG\x14a\x01\xCBW\x80c\xB9}\xD9\xE2\x14a\x01\xC6W\x80c\xBCFz\x93\x14a\x01\xC1W\x80c\xBD\xD5\xB8\x80\x14a\x01\xBCW\x80c\xC4Z\x01U\x14a\x01\xB7W\x80c\xC9\xCF\xEA\x88\x14a\x01\xB2W\x80c\xCE/\xD1\xFF\x14a\x01\xADW\x80c\xD5\x17m#\x14a\x01\xA8W\x80c\xD9\x9F\xAF\0\x14a\x01\xA3W\x80c\xF2\xFD\xE3\x8B\x14a\x01\x9EW\x80c\xF3\xAE!\x08\x14a\x01\x99W\x80c\xFD\x8Cu\xD2\x14a\x01\x94Wc\xFF\xA1\xADt\x14a\x01\x8FW_\x80\xFD[a\x0F\xB0V[a\x0EFV[a\r3V[a\x0CaV[a\x0C\x04V[a\x0B\xBDV[a\x0BhV[a\x0BKV[a\x0B\x18V[a\n\xC0V[a\n@V[a\n\nV[a\tbV[a\tEV[a\t(V[a\x08\xEEV[a\x08\xD1V[a\x08\x1CV[a\x07\xCCV[a\x07CV[a\x06\xB0V[a\x06_V[a\x06BV[a\x05\xC6V[a\x05\xA2V[a\x05\x85V[a\x05\x0BV[a\x04\xEEV[a\x04\x9AV[a\x04ZV[a\x04=V[a\x03\xBB\x07`@`\x045a\x04\xD9a\x18\x0BV[`\x04T\x90\x80`\x04U\x82Q\x91\x82R` \x82\x01R\xA1\0[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x02T`@Q\x90\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEWa\x05#a\x18\x0BV[_`\tU_`\x08Ua\x053a\x19\xD1V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16_U\x7F]\xB9\xEE\nI[\xF2\xE6\xFF\x9C\x91\xA7\x83L\x1B\xA4\xFD\xD2D\xA5\xE8\xAANS{\xD3\x8A\xEA\xE4\xB0s\xAA` `@Q3\x81R\xA1\0[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x03T`@Q\x90\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\xFF_T`\xA0\x1C\x16`@Q\x90\x15\x15\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEWa\x05\xDEa\x18\x0BV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x07T`@Q\x90\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `@Qch\x8DF\xF0\x81R\xF3[\x90` \x80\x83Q\x92\x83\x81R\x01\x92\x01\x90_[\x81\x81\x10a\x06\x9AWPPP\x90V[\x82Q\x84R` \x93\x84\x01\x93\x90\x92\x01\x91`\x01\x01a\x06\x8DV[4a\x02\xBEW```\x03\x196\x01\x12a\x02\xBEW`\x045`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xBEWa\x06\xE4\x906\x90`\x04\x01a\x03\x0BV[\x91\x90`D5\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xBEWa\x02\x8D\x93a\x07\x0Ea\x07\x16\x946\x90`\x04\x01a\x03\x0BV[\x93\x90\x92a\x11\xC0V[a\x075`@\x94\x92\x94Q\x94\x85\x94\x85R``` \x86\x01R``\x85\x01\x90a\x06}V[\x90\x83\x82\x03`@\x85\x01Ra\x06}V[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEWa\x07[a\x18\x0BV[a\x07ca\x18WV[t\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16\x17_U\x7Fb\xE7\x8C\xEA\x01\xBE\xE3 \xCDNB\x02p\xB5\xEAt\0\r\x11\xB0\xC9\xF7GT\xEB\xDB\xFCTK\x05\xA2X` `@Q3\x81R\xA1\0[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x03a\x02\xBEWV[4a\x02\xBEW`@`\x03\x196\x01\x12a\x02\xBEW`\x045a\x089\x81a\x07\xFEV[`$5\x90a\x08Ea\x18\x0BV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x91a\x08j\x82\x84\x16\x15a\x13\xF6V[\x16\x90\x81\x15a\x08\xA9W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\x08\x9F\x84\x15\x15a\x10\xB7V[\x16\x17`\x01U`\x02U\0[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x05T`@Q\x90\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `@Q\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `@Qb'\x8D\0\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x04T`@Q\x90\x81R\xF3[4a\x02\xBEW`@`\x03\x196\x01\x12a\x02\xBEW`\x045a\t\x7F\x81a\x07\xFEV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$5\x91a\t\xA0a\x18\x0BV[\x16\x90\x81\x15a\x08\xA9W\x80a\n\x04WPG\x90[G\x82\x11a\t\xD3W_\x80\x80a\t\xD1\x94\x81\x94Z\xF1a\t\xCBa\x14%V[Pa\x14dV[\0[PG\x90\x7F\xF0^\xB6\x08\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x90a\t\xB1V[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` a\n$a\x14\xC9V[`@Q\x90\x81R\xF3[\x90` a\n=\x92\x81\x81R\x01\x90a\x06}V[\x90V[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW`@Q\x80` `\x05T\x91\x82\x81R\x01\x90`\x05_R\x7F\x03kc\x84\xB5\xEC\xA7\x91\xC6'a\x15-\x0Cy\xBB\x06\x04\xC1\x04\xA5\xFBoN\xB0p?1T\xBB=\xB0\x90_[\x81\x81\x10a\n\xAAWa\x02\x8D\x85a\n\x9E\x81\x87\x03\x82a\x11\x13V[`@Q\x91\x82\x91\x82a\n,V[\x82T\x84R` \x90\x93\x01\x92`\x01\x92\x83\x01\x92\x01a\n\x87V[4a\x02\xBEW` `\x03\x196\x01\x12a\x02\xBEW`\x045a\n\xDCa\x18\x0BV[a\n\xE4a\x18WV[\x80`\x03U\x7F\xD9\xC7E\xB4\x03\x95\x887\x8F\xDE\x0Ct[\x99;\xFB9\xA2V\x9C\x80\xE1\xEDs\xD7\rN(\x10\0\xDD\xD1` `\x07T\x92`@Q\x90\x81R\xA2\0[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `\x08T`@Q\x90\x81R\xF3[4a\x02\xBEW` `\x03\x196\x01\x12a\x02\xBEW`\x045`\x05T\x81\x10\x15a\x0B\xB8W`\x05_R\x7F\x03kc\x84\xB5\xEC\xA7\x91\xC6'a\x15-\x0Cy\xBB\x06\x04\xC1\x04\xA5\xFBoN\xB0p?1T\xBB=\xB0\x01T`@Q\x90\x81R` \x90\xF3[a\x10\x14V[4a\x02\xBEW` `\x03\x196\x01\x12a\x02\xBEW`\x045b'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x02\x91Wch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x02\x91W` \x90`@Q\x90\x81R\xF3[4a\x02\xBEW`@`\x03\x196\x01\x12a\x02\xBEW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xBEWa\x0C5\x906\x90`\x04\x01a\x03\x0BV[`$5\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xBEWa\x0CYa\t\xD1\x936\x90`\x04\x01a\x03\x0BV[\x92\x90\x91a\x15\x90V[4a\x02\xBEW` `\x03\x196\x01\x12a\x02\xBEWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045a\x0C\x93\x81a\x07\xFEV[a\x0C\x9Ba\x18\x0BV[\x16\x80\x15a\r\x07Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[4a\x02\xBEW`@`\x03\x196\x01\x12a\x02\xBEW`$5`\x045a\rS\x82a\x07\xFEV[a\r[a\x18\x0BV[a\rca\x18WV[a\r\x85s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16\x15a\x13\xF6V[a\r\x90\x81\x15\x15a\x17\x08V[a\r\xA2\x81a\r\x9D\x81a\x1C\"V[a\x177V[a\r\xAF\x81\x83;\x15\x15a\x17jV[\x80_R`\n` Ra\r\xFF\x82`@_ \x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[`\x07Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x93\x16\x83R\x7F\xAB\x08\x82h[h^\xE9F\xCCoH\xEF?E\xA10R+\xF8\x9A=\x89C\xCD\x05.Q\xC9$3o` 3\x94\xA4\0[` `\x03\x196\x01\x12a\x02\xBEW`\x045a\x0E]a\x18WV[a\x0E\x97a\x0E~_Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[3\x14a\x0F\xA0Wa\x0E\xAD`\x04T4\x90\x804\x14a\x17\xD4V[a\x0E\xB8\x81\x15\x15a\x17\x08V[a\x0E\xC5\x81a\r\x9D\x81a\x1C\"V[a\x0E\xF1`\x02Ta\x0E\xEA`\x01Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90\x83a\x1A\x08V[\x90a\x0E\xFF\x81\x83;\x15\x15a\x17jV[a\x0FU\x82a\x0F\x15\x83_R`\n` R`@_ \x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[`\x07T`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x93\x90\x93\x16\x83R3\x92\x7F\xAB\x08\x82h[h^\xE9F\xCCoH\xEF?E\xA10R+\xF8\x9A=\x89C\xCD\x05.Q\xC9$3o\x90` \x90\xA4\0[a\x0F\xAB44\x15a\x17\x9DV[a\x0E\xADV[4a\x02\xBEW_`\x03\x196\x01\x12a\x02\xBEW` `@Qb\x0FB@\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[\x91\x90\x82\x03\x91\x82\x11a\x02\x91WV[\x91\x90\x82\x01\x80\x92\x11a\x02\x91WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[\x91\x90\x81\x10\x15a\x0B\xB8W`\x05\x1B\x01\x90V[\x15a\x10ZWPPV[\x7F\xF5b\xB2+\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x15a\x10\x8FWV[\x7F\xEF\xCBZ\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x10\xBEWV[\x7F\xEE>\x17\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x116W`@RV[a\x10\xE6V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x116W`\x05\x1B` \x01\x90V[\x90a\x11]\x82a\x11;V[a\x11j`@Q\x91\x82a\x11\x13V[\x82\x81R`\x1F\x19a\x11z\x82\x94a\x11;V[\x01\x90` 6\x91\x017V[\x80Q\x82\x10\x15a\x0B\xB8W` \x91`\x05\x1B\x01\x01\x90V[\x90\x81` \x91\x03\x12a\x02\xBEWQ\x90V[`@Q=_\x82>=\x90\xFD[_\x19\x81\x14a\x02\x91W`\x01\x01\x90V[\x94\x91\x92\x93_\x95a\x11\xCEa\x14\xC9V[a\x11\xDE`\x07T\x91\x82\x80\x82\x11a\x10QV[a\x11\xEA\x82`\x05Ta\x0F\xFAV[\x91a\x11\xF6\x83\x15\x15a\x10\x88V[`\x03T\x94\x83\x86\x10a\x13\xE1W[\x87\x94a\x12\x0F\x81\x8A\x14a\x10\xB7V[\x82\x15a\x13\xD2W[\x90\x84\x93\x92\x91a\x12/a\x12*\x89\x98\x97\x8Ca\x10\x07V[a\x11SV[\x9Aa\x12=a\x12*\x87\x8Da\x10\x07V[\x9A_[\x81\x81\x10a\x13\x8DWPPPPP_[\x83\x81\x10a\x12tWPPPP\x80\x86R\x80\x85R\x11a\x12gWPV[a\x12r\x90\x83\x85a\x18\xE7V[V[\x90\x91\x92\x93\x94Pa\x12\x8Ca\x12\x87\x82\x84a\x10\x07V[a\x1BdV[a\x12\xC1a\x0E~a\x0E~a\x12\xA7\x84_R`\n` R`@_ \x90V[Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90` `@Q\x80\x93\x7F\x0Cg#c\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R\x81\x80a\x13\0\x8A`\x04\x83\x01\x91\x90` \x83\x01\x92RV[\x03\x91Z\xFA\x91\x82\x15a\x13\x88W_\x92a\x13XW[P\x8A\x82a\x13+W[PPP`\x01\x01\x90\x85\x94\x93\x92\x91a\x12NV[\x91\x87\x91a\x13>`\x01\x95\x99a\x13O\x95a\x11\x84V[Ra\x13I\x82\x8Ca\x11\x84V[Ra\x11\xB2V[\x94\x90_\x8Aa\x13\x1AV[a\x13z\x91\x92P` =\x81\x11a\x13\x81W[a\x13r\x81\x83a\x11\x13V[\x81\x01\x90a\x11\x98V[\x90_a\x13\x12V[P=a\x13hV[a\x11\xA7V[\x84\x95\x96\x97\x98\x99P\x8Da\x13\xB0\x82a\x13\xA9\x81\x86`\x01\x97\x98\x99\x9Aa\x10AV[5\x92a\x11\x84V[R\x8Ca\x13\xC1\x82a\x13\xA9\x81\x89\x89a\x10AV[R\x01\x90\x89\x98\x97\x96\x95\x94\x93\x92\x91a\x12@V[a\x13\xDC\x89\x15a\x10\xB7V[a\x12\x16V[\x98P\x84\x92Pa\x13\xF0\x83\x82a\x10\x07V[\x98a\x12\x02V[\x15a\x13\xFDWV[\x7F\x15LQ\xB8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[=\x15a\x14_W=\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x116W`@Q\x91a\x14T` `\x1F\x19`\x1F\x84\x01\x16\x01\x84a\x11\x13V[\x82R=_` \x84\x01>V[``\x90V[\x15a\x14kWV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x0F`$\x82\x01R\x7FTransfer failed\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x97r\xB9\x10B\x01B\x81\x11a\x02\x91Wb'\x8D\0\x90\x04`\x01\x81\x01\x80\x91\x11a\x02\x91W\x90V[\x90\x91\x82\x81R\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xBEW` \x92`\x05\x1B\x80\x92\x84\x83\x017\x01\x01\x90V[\x92\x90a\x15]\x90a\n=\x95\x93`@\x86R`@\x86\x01\x91a\x15\x07V[\x92` \x81\x85\x03\x91\x01Ra\x15\x07V[\x90\x91a\x15\x82a\n=\x93`@\x84R`@\x84\x01\x90a\x06}V[\x91` \x81\x84\x03\x91\x01Ra\x06}V[\x91a\x15\xBC\x93\x91a\x15\xB4\x93`\tT\x15_\x14a\x16\xD3Wa\x15\xACa\x19`V[`\tTa\x11\xC0V[\x92\x90\x91`\tUV[a\x15\xEC`@Q` \x81\x01\x90a\x15\xE4\x81a\x15\xD6\x87\x87\x86a\x15kV[\x03`\x1F\x19\x81\x01\x83R\x82a\x11\x13V[Q\x90 `\x08UV[`\tT\x80a\x16\x88WPa\x16\x80\x91a\x16{\x91`\x08Ta\x163`\x07T_R\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0` R`@_ \x90V[Ua\x16=_`\x08UV[\x7Fk\xE7\xED\xCD\xFDZ\xB7\x14u\x9C\x916l\xE1\xECH\xCF\0\xCF\xFC\x17\xEF\x0F\x10+\x83\xCBf4M\x7F\x97`\x07T\x92\x83\x92a\x16s`@Q\x92\x83\x92\x83a\x15kV[\x03\x90\xA2a\x11\xB2V[`\x07UV[a\x12ra\x18\x8DV[\x91PP\x7F*\x92\xA9W\xE4\xCB\xEB\xE0\xFAV\x13\x0EV[_\x19\x82T\x91`\x03\x1B\x1B\x19\x16\x90UUV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`1`\x04R`$_\xFD[_\x81\x81R`\x06` R`@\x90 T\x90\x81\x15a\x1B^W_\x19\x82\x01\x90\x82\x82\x11a\x02\x91W`\x05T\x92_\x19\x84\x01\x93\x84\x11a\x02\x91W\x83\x83_\x95a\x1B\x1D\x95\x03a\x1B#W[PPPa\x1B\x0E`\x05a\x1ApV[`\x06\x90_R` R`@_ \x90V[U`\x01\x90V[a\x1B\x0Ea\x1BO\x91a\x1BEa\x1B;a\x1BU\x95`\x05a\x1A>V[\x90T\x90`\x03\x1B\x1C\x90V[\x92\x83\x91`\x05a\x1A>V[\x90a\x1ASV[U_\x80\x80a\x1B\x01V[PP_\x90V[`\x05T\x81\x10\x15a\x0B\xB8W`\x05_R\x7F\x03kc\x84\xB5\xEC\xA7\x91\xC6'a\x15-\x0Cy\xBB\x06\x04\xC1\x04\xA5\xFBoN\xB0p?1T\xBB=\xB0\x01T\x90V[\x91`\x1F\x19\x82\x84\x01`\x06\x1C`\x05\x1BQ\x93\x01\x92[_`\x01[\x15a\x1B\xC3W[P` _\x94\x01\x93\x84Q\x90a\x1B\xAEV[\x81\x81\x11a\x1B\xB4W\x90\x93\x92\x91\x92_`\x01[\x15a\x1B\xECW[P`\x1F\x19\x92\x90\x92\x01\x80Q\x90\x92\x90_a\x1B\xD3V[\x85\x81\x10a\x1B\xD9W\x90\x94\x91\x93\x92\x93\x84\x86\x10\x15a\x1C\x1AW\x90\x85R\x83R\x83\x82\x01\x80Q\x83\x85\x01\x80Q\x90\x92R\x90Ra\x1B\xAAV[PPPPP\x90V[\x80_R`\x06` R`@_ T\x15_\x14a\x1C\x97W`\x05Th\x01\0\0\0\0\0\0\0\0\x81\x10\x15a\x116W`\x01\x81\x01`\x05U`\x05T\x81\x10\x15a\x0B\xB8W\x7F\x03kc\x84\xB5\xEC\xA7\x91\xC6'a\x15-\x0Cy\xBB\x06\x04\xC1\x04\xA5\xFBoN\xB0p?1T\xBB=\xB0\x01\x81\x90U`\x05T_\x91\x82R`\x06` R`@\x90\x91 U`\x01\x90V[P_\x90V", + b"`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x01u\xE2;\x14a\x02dW\x80c\x10\xFF\xC6&\x14a\x02_W\x80c\x16\xAA~\x93\x14a\x02ZW\x80c\x17{\0r\x14a\x02UW\x80c/\x91\x83\xBA\x14a\x02PW\x80c1!\x1Ey\x14a\x02KW\x80c:\xAE}$\x14a\x02FW\x80c;C\xDD\xAD\x14a\x02AW\x80c=\x9E\x82!\x14a\x02_\x14a\x02\0W\x80c\xA5R#q\x14a\x01\xFBW\x80c\xA7\x0B\x9F\x0C\x14a\x01\xF6W\x80c\xABG\xC7\0\x14a\x01\xF1W\x80c\xAD;\x1BG\x14a\x01\xECW\x80c\xB9}\xD9\xE2\x14a\x01\xE7W\x80c\xBCFz\x93\x14a\x01\xE2W\x80c\xBD\xD5\xB8\x80\x14a\x01\xDDW\x80c\xC4Z\x01U\x14a\x01\xD8W\x80c\xC9\xCF\xEA\x88\x14a\x01\xD3W\x80c\xCE/\xD1\xFF\x14a\x01\xCEW\x80c\xD5\x17m#\x14a\x01\xC9W\x80c\xD9\x9F\xAF\0\x14a\x01\xC4W\x80c\xE6=0\xD5\x14a\x01\xBFW\x80c\xF2\xFD\xE3\x8B\x14a\x01\xBAW\x80c\xFD\x8Cu\xD2\x14a\x01\xB5Wc\xFF\xA1\xADt\x14a\x01\xB0W_\x80\xFD[a\x10\xDAV[a\x0FpV[a\x0E\x9EV[a\x0ENV[a\r\xF1V[a\r\xAAV[a\rUV[a\r8V[a\r\x05V[a\x0C\xADV[a\x0C-V[a\x0B\xFFV[a\x0BWV[a\x0B:V[a\x0B\x1DV[a\n\xE3V[a\n\xC6V[a\t\xDAV[a\t\xA8V[a\t\x1FV[a\x08\x8CV[a\x07#V[a\x06\xE7V[a\x06\xCAV[a\x06NV[a\x06*V[a\x06\rV[a\x05\x93V[a\x05dV[a\x05GV[a\x05\x1EV[a\x04\xCAV[a\x04\x8AV[a\x04mV[a\x03lV[a\x02\xF2V[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045\x80\x15a\x02\xC6W_\x19\x81\x01\x90\x81\x11a\x02\xC1Wb'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x02\xC1Wch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x02\xC1W`@Q\x90\x81R\x80` \x81\x01[\x03\x90\xF3[a\x10\xF7V[\x7F\xD6\x93h\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80\xFD[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045_R\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0` R` `@_ T`@Q\x90\x81R\xF3[\x91\x81`\x1F\x84\x01\x12\x15a\x02\xEEW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xEEW` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11a\x02\xEEWV[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xEEWa\x03\x9D\x906\x90`\x04\x01a\x03;V[\x90a\x03\xA6a\x19\xE9V[a\x03\xAEa\x1A5V[_[\x82\x81\x10a\x03\xB9W\0[a\x03\xCDa\x03\xC7\x82\x85\x85a\x11kV[5a\x1C\xA1V[\x15a\x04\x0FW`\x01\x90`\x07Ta\x03\xE3\x82\x86\x86a\x11kV[5\x90\x7FE\x1A\xCFH\r\xC8\x16\x05\xEE\x92\xFC\x82\x9CN\xFAH\x17\xDE\x96\xE1\xB5\xF0\xC0\x02F\xA5N)\xF2\x8D4\x1A_\x80\xA3\x01a\x03\xB0V[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7Fappchain is not tracked\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\tT`@Q\x90\x81R\xF3[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045_R`\n` R` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16`@Q\x90\x81R\xF3[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW\x7F{\xBF\x02\xCF\n\xEB\xB3'\x9D+k\xFD\x12n\xFE\xFAj\x86M\xCEW\xEF\x882ei\xB4\xB5\xAC>\xBB\x07`@`\x045a\x05\ta\x19\xE9V[`\x04T\x90\x80`\x04U\x82Q\x91\x82R` \x82\x01R\xA1\0[4a\x02\xEEW`@`\x03\x196\x01\x12a\x02\xEEW` a\x05?`$5`\x045a\x11\xEAV[`@Q\x90\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\x02T`@Q\x90\x81R\xF3[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045_R`\x0B` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEWa\x05\xABa\x19\xE9V[_`\tU_`\x08Ua\x05\xBBa\x1B\xAFV[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16_U\x7F]\xB9\xEE\nI[\xF2\xE6\xFF\x9C\x91\xA7\x83L\x1B\xA4\xFD\xD2D\xA5\xE8\xAANS{\xD3\x8A\xEA\xE4\xB0s\xAA` `@Q3\x81R\xA1\0[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\x03T`@Q\x90\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\xFF_T`\xA0\x1C\x16`@Q\x90\x15\x15\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEWa\x06fa\x19\xE9V[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\x07T`@Q\x90\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `@Qch\x8DF\xF0\x81R\xF3[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x03a\x02\xEEWV[4a\x02\xEEW```\x03\x196\x01\x12a\x02\xEEW`$5`\x045a\x07C\x82a\x07\x05V[`D5\x80\x15\x15\x80\x91\x03a\x02\xEEWa\x07Xa\x19\xE9V[a\x07`a\x1A5V[a\x07k\x82\x15\x15a\x13~V[a\x07x\x82\x84;\x15\x15a\x13\xADV[a\x07\x8A\x82a\x07\x85\x81a\x1DBV[a\x13\xE0V[\x81_R`\n` Ra\x07\xDA\x83`@_ \x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[\x81_R`\x0B` R`@_ \x90`\xFF\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83T\x16\x91\x16\x17\x90U`\x07Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x93\x16\x83R\x7F\xAB\x08\x82h[h^\xE9F\xCCoH\xEF?E\xA10R+\xF8\x9A=\x89C\xCD\x05.Q\xC9$3o` 3\x94\xA4\0[\x90` \x80\x83Q\x92\x83\x81R\x01\x92\x01\x90_[\x81\x81\x10a\x08vWPPP\x90V[\x82Q\x84R` \x93\x84\x01\x93\x90\x92\x01\x91`\x01\x01a\x08iV[4a\x02\xEEW```\x03\x196\x01\x12a\x02\xEEW`\x045`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xEEWa\x08\xC0\x906\x90`\x04\x01a\x03;V[\x91\x90`D5\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xEEWa\x02\xBD\x93a\x08\xEAa\x08\xF2\x946\x90`\x04\x01a\x03;V[\x93\x90\x92a\x15\x13V[a\t\x11`@\x94\x92\x94Q\x94\x85\x94\x85R``` \x86\x01R``\x85\x01\x90a\x08YV[\x90\x83\x82\x03`@\x85\x01Ra\x08YV[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEWa\t7a\x19\xE9V[a\t?a\x1A5V[t\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16\x17_U\x7Fb\xE7\x8C\xEA\x01\xBE\xE3 \xCDNB\x02p\xB5\xEAt\0\r\x11\xB0\xC9\xF7GT\xEB\xDB\xFCTK\x05\xA2X` `@Q3\x81R\xA1\0[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x02\xEEW`@`\x03\x196\x01\x12a\x02\xEEW`\x045a\t\xF7\x81a\x07\x05V[`$5\x90a\n\x03a\x19\xE9V[`\x01T\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16a\n\x9EWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90\x81\x15a\nvW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\nl\x84\x15\x15a\x14yV[\x16\x17`\x01U`\x02U\0[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\x15LQ\xB8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\x05T`@Q\x90\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `@Q\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `@Qb'\x8D\0\x81R\xF3[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `\x04T`@Q\x90\x81R\xF3[4a\x02\xEEW`@`\x03\x196\x01\x12a\x02\xEEW`\x045a\x0Bt\x81a\x07\x05V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`$5\x91a\x0B\x95a\x19\xE9V[\x16\x90\x81\x15a\nvW\x80a\x0B\xF9WPG\x90[G\x82\x11a\x0B\xC8W_\x80\x80a\x0B\xC6\x94\x81\x94Z\xF1a\x0B\xC0a\x16\x98V[Pa\x16\xD7V[\0[PG\x90\x7F\xF0^\xB6\x08\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x90a\x0B\xA6V[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` a\x05?a\x17V[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEW`\x045b'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x02\xC1Wch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x02\xC1W` \x90`@Q\x90\x81R\xF3[4a\x02\xEEW`@`\x03\x196\x01\x12a\x02\xEEW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xEEWa\x0E\"\x906\x90`\x04\x01a\x03;V[`$5\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xEEWa\x0EFa\x0B\xC6\x936\x90`\x04\x01a\x03;V[\x92\x90\x91a\x18\x03V[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x02\xEEW` `\x03\x196\x01\x12a\x02\xEEWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x045a\x0E\xD0\x81a\x07\x05V[a\x0E\xD8a\x19\xE9V[\x16\x80\x15a\x0FDWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[` `\x03\x196\x01\x12a\x02\xEEW`\x045a\x0F\x87a\x1A5V[a\x0F\xC1a\x0F\xA8_Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[3\x14a\x10\xCAWa\x0F\xD7`\x04T4\x90\x804\x14a\x19\xB2V[a\x0F\xE2\x81\x15\x15a\x13~V[a\x0F\xEF\x81a\x07\x85\x81a\x1DBV[a\x10\x1B`\x02Ta\x10\x14`\x01Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90\x83a\x1B\xE6V[\x90a\x10)\x81\x83;\x15\x15a\x13\xADV[a\x10\x7F\x82a\x10?\x83_R`\n` R`@_ \x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[`\x07T`@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x93\x90\x93\x16\x83R3\x92\x7F\xAB\x08\x82h[h^\xE9F\xCCoH\xEF?E\xA10R+\xF8\x9A=\x89C\xCD\x05.Q\xC9$3o\x90` \x90\xA4\0[a\x10\xD544\x15a\x19{V[a\x0F\xD7V[4a\x02\xEEW_`\x03\x196\x01\x12a\x02\xEEW` `@Qb\x0FF(\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[\x91\x90\x82\x03\x91\x82\x11a\x02\xC1WV[\x91\x90\x82\x01\x80\x92\x11a\x02\xC1WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[\x91\x90\x81\x10\x15a\r\xA5W`\x05\x1B\x01\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x11\xCBW`@RV[a\x11{V[\x90\x81` \x91\x03\x12a\x02\xEEWQ\x90V[`@Q=_\x82>=\x90\xFD[\x90a\x12\x07a\x12\0\x82_R`\x0B` R`@_ \x90V[T`\xFF\x16\x90V[a\x13\x0FWa\x12\x95\x91a\x12@a\x12&` \x93_R`\n` R`@_ \x90V[Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[`@Q\x7F\xB2\xFE\"\xD5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x04\x81\x01\x92\x90\x92Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`$\x82\x01R\x91\x82\x90\x81\x90`D\x82\x01\x90V[\x03\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16Z\xFA\x90\x81\x15a\x13\nW_\x91a\x12\xE1WP\x90V[a\x0C*\x91P` =` \x11a\x13\x03W[a\x12\xFB\x81\x83a\x11\xA8V[\x81\x01\x90a\x11\xD0V[P=a\x12\xF1V[a\x11\xDFV[a\x13i\x91a\x130a\x0F\xA8a\x0F\xA8a\x12&` \x95_R`\n` R`@_ \x90V[`@Q\x80\x80\x95\x81\x94\x7F\x0Cg#c\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R`\x04\x83\x01\x91\x90` \x83\x01\x92RV[\x03\x91Z\xFA\x90\x81\x15a\x13\nW_\x91a\x12\xE1WP\x90V[\x15a\x13\x85WV[\x7F\xC8H\x85\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x13\xB5WPV[\x7FJ\x7FC\xFA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x15a\x13\xE8WPV[\x7F\x83\xADtY\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x15a\x14\x1CWPPV[\x7F\xF5b\xB2+\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$R`D_\xFD[\x15a\x14QWV[\x7F\xEF\xCBZ\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x14\x80WV[\x7F\xEE>\x17\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x11\xCBW`\x05\x1B` \x01\x90V[\x90a\x14\xCA\x82a\x14\xA8V[a\x14\xD7`@Q\x91\x82a\x11\xA8V[\x82\x81R`\x1F\x19a\x14\xE7\x82\x94a\x14\xA8V[\x01\x90` 6\x91\x017V[\x80Q\x82\x10\x15a\r\xA5W` \x91`\x05\x1B\x01\x01\x90V[_\x19\x81\x14a\x02\xC1W`\x01\x01\x90V[\x94\x91\x92\x93_\x95a\x15!a\x17V[``\x90V[\x15a\x16\xDEWV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x0F`$\x82\x01R\x7FTransfer failed\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x97r\xB9\x10B\x01B\x81\x11a\x02\xC1Wb'\x8D\0\x90\x04`\x01\x81\x01\x80\x91\x11a\x02\xC1W\x90V[\x90\x91\x82\x81R\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x02\xEEW` \x92`\x05\x1B\x80\x92\x84\x83\x017\x01\x01\x90V[\x92\x90a\x17\xD0\x90a\x0C*\x95\x93`@\x86R`@\x86\x01\x91a\x17zV[\x92` \x81\x85\x03\x91\x01Ra\x17zV[\x90\x91a\x17\xF5a\x0C*\x93`@\x84R`@\x84\x01\x90a\x08YV[\x91` \x81\x84\x03\x91\x01Ra\x08YV[\x91a\x18/\x93\x91a\x18'\x93`\tT\x15_\x14a\x19FWa\x18\x1Fa\x1B>V[`\tTa\x15\x13V[\x92\x90\x91`\tUV[a\x18_`@Q` \x81\x01\x90a\x18W\x81a\x18I\x87\x87\x86a\x17\xDEV[\x03`\x1F\x19\x81\x01\x83R\x82a\x11\xA8V[Q\x90 `\x08UV[`\tT\x80a\x18\xFBWPa\x18\xF3\x91a\x18\xEE\x91`\x08Ta\x18\xA6`\x07T_R\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0` R`@_ \x90V[Ua\x18\xB0_`\x08UV[\x7Fk\xE7\xED\xCD\xFDZ\xB7\x14u\x9C\x916l\xE1\xECH\xCF\0\xCF\xFC\x17\xEF\x0F\x10+\x83\xCBf4M\x7F\x97`\x07T\x92\x83\x92a\x18\xE6`@Q\x92\x83\x92\x83a\x17\xDEV[\x03\x90\xA2a\x15\x05V[`\x07UV[a\x15\xC5a\x1AkV[\x91PP\x7F*\x92\xA9W\xE4\xCB\xEB\xE0\xFAV\x13\x0E = ( + alloy::sol_types::sol_data::Address, alloy::sol_types::sol_data::Uint<256>, alloy::sol_types::sol_data::Uint<256>, alloy::sol_types::sol_data::Uint<256>, ); #[doc(hidden)] type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, alloy::sol_types::private::primitives::aliases::U256, alloy::sol_types::private::primitives::aliases::U256, alloy::sol_types::private::primitives::aliases::U256, @@ -3118,7 +3191,12 @@ constructor(uint256 _epoch, uint256 _addChainFee, uint256 _maxAppchainsToQuery); #[doc(hidden)] impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: constructorCall) -> Self { - (value._epoch, value._addChainFee, value._maxAppchainsToQuery) + ( + value._gasMeterContract, + value._epoch, + value._addChainFee, + value._maxAppchainsToQuery, + ) } } #[automatically_derived] @@ -3126,9 +3204,10 @@ constructor(uint256 _epoch, uint256 _addChainFee, uint256 _maxAppchainsToQuery); impl ::core::convert::From> for constructorCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { - _epoch: tuple.0, - _addChainFee: tuple.1, - _maxAppchainsToQuery: tuple.2, + _gasMeterContract: tuple.0, + _epoch: tuple.1, + _addChainFee: tuple.2, + _maxAppchainsToQuery: tuple.3, } } } @@ -3136,6 +3215,7 @@ constructor(uint256 _epoch, uint256 _addChainFee, uint256 _maxAppchainsToQuery); #[automatically_derived] impl alloy_sol_types::SolConstructor for constructorCall { type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, alloy::sol_types::sol_data::Uint<256>, alloy::sol_types::sol_data::Uint<256>, alloy::sol_types::sol_data::Uint<256>, @@ -3152,6 +3232,9 @@ constructor(uint256 _epoch, uint256 _addChainFee, uint256 _maxAppchainsToQuery); #[inline] fn tokenize(&self) -> Self::Token<'_> { ( + ::tokenize( + &self._gasMeterContract, + ), as alloy_sol_types::SolType>::tokenize(&self._epoch), @@ -4042,22 +4125,24 @@ function addChainFee() external view returns (uint256); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `addLegacyChain(uint256,address)` and selector `0xf3ae2108`. + /**Function with signature `adminAddChain(uint256,address,bool)` and selector `0x81f0ebde`. ```solidity -function addLegacyChain(uint256 chainId, address chainContract) external; +function adminAddChain(uint256 chainId, address chainContract, bool isLegacy) external; ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct addLegacyChainCall { + pub struct adminAddChainCall { #[allow(missing_docs)] pub chainId: alloy::sol_types::private::primitives::aliases::U256, #[allow(missing_docs)] pub chainContract: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub isLegacy: bool, } - ///Container type for the return parameters of the [`addLegacyChain(uint256,address)`](addLegacyChainCall) function. + ///Container type for the return parameters of the [`adminAddChain(uint256,address,bool)`](adminAddChainCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct addLegacyChainReturn {} + pub struct adminAddChainReturn {} #[allow( non_camel_case_types, non_snake_case, @@ -4071,11 +4156,13 @@ function addLegacyChain(uint256 chainId, address chainContract) external; type UnderlyingSolTuple<'a> = ( alloy::sol_types::sol_data::Uint<256>, alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bool, ); #[doc(hidden)] type UnderlyingRustTuple<'a> = ( alloy::sol_types::private::primitives::aliases::U256, alloy::sol_types::private::Address, + bool, ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] @@ -4090,18 +4177,19 @@ function addLegacyChain(uint256 chainId, address chainContract) external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: addLegacyChainCall) -> Self { - (value.chainId, value.chainContract) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: adminAddChainCall) -> Self { + (value.chainId, value.chainContract, value.isLegacy) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for addLegacyChainCall { + impl ::core::convert::From> for adminAddChainCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { chainId: tuple.0, chainContract: tuple.1, + isLegacy: tuple.2, } } } @@ -4124,44 +4212,43 @@ function addLegacyChain(uint256 chainId, address chainContract) external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: addLegacyChainReturn) -> Self { + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: adminAddChainReturn) -> Self { () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for addLegacyChainReturn { + impl ::core::convert::From> for adminAddChainReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self {} } } } - impl addLegacyChainReturn { + impl adminAddChainReturn { fn _tokenize( &self, - ) -> ::ReturnToken<'_> { + ) -> ::ReturnToken<'_> { () } } #[automatically_derived] - impl alloy_sol_types::SolCall for addLegacyChainCall { + impl alloy_sol_types::SolCall for adminAddChainCall { type Parameters<'a> = ( alloy::sol_types::sol_data::Uint<256>, alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bool, ); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = addLegacyChainReturn; + type Return = adminAddChainReturn; type ReturnTuple<'a> = (); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "addLegacyChain(uint256,address)"; - const SELECTOR: [u8; 4] = [243u8, 174u8, 33u8, 8u8]; + const SIGNATURE: &'static str = "adminAddChain(uint256,address,bool)"; + const SELECTOR: [u8; 4] = [129u8, 240u8, 235u8, 222u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -4177,11 +4264,14 @@ function addLegacyChain(uint256 chainId, address chainContract) external; ::tokenize( &self.chainContract, ), + ::tokenize( + &self.isLegacy, + ), ) } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - addLegacyChainReturn::_tokenize(ret) + adminAddChainReturn::_tokenize(ret) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { @@ -5090,9 +5180,329 @@ function factory() external view returns (address); #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { ( - ::tokenize( - ret, - ), + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: factoryReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: factoryReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `gasMeterContract()` and selector `0xe63d30d5`. +```solidity +function gasMeterContract() external view returns (address); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct gasMeterContractCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`gasMeterContract()`](gasMeterContractCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct gasMeterContractReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: gasMeterContractCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for gasMeterContractCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: gasMeterContractReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for gasMeterContractReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for gasMeterContractCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::Address; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "gasMeterContract()"; + const SELECTOR: [u8; 4] = [230u8, 61u8, 48u8, 213u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: gasMeterContractReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: gasMeterContractReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `getAppchainGasUsed(uint256,uint256)` and selector `0x3aae7d24`. +```solidity +function getAppchainGasUsed(uint256 epoch, uint256 chainId) external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getAppchainGasUsedCall { + #[allow(missing_docs)] + pub epoch: alloy::sol_types::private::primitives::aliases::U256, + #[allow(missing_docs)] + pub chainId: alloy::sol_types::private::primitives::aliases::U256, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`getAppchainGasUsed(uint256,uint256)`](getAppchainGasUsedCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getAppchainGasUsedReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Uint<256>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getAppchainGasUsedCall) -> Self { + (value.epoch, value.chainId) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for getAppchainGasUsedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + epoch: tuple.0, + chainId: tuple.1, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getAppchainGasUsedReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for getAppchainGasUsedReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getAppchainGasUsedCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Uint<256>, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getAppchainGasUsed(uint256,uint256)"; + const SELECTOR: [u8; 4] = [58u8, 174u8, 125u8, 36u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.epoch), + as alloy_sol_types::SolType>::tokenize(&self.chainId), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), ) } #[inline] @@ -5101,7 +5511,7 @@ function factory() external view returns (address); '_, > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { - let r: factoryReturn = r.into(); + let r: getAppchainGasUsedReturn = r.into(); r._0 }) } @@ -5113,7 +5523,7 @@ function factory() external view returns (address); '_, > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { - let r: factoryReturn = r.into(); + let r: getAppchainGasUsedReturn = r.into(); r._0 }) } @@ -6042,6 +6452,162 @@ function getTrackedChainIds() external view returns (uint256[] memory chainIDs); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `isLegacyAppchainContract(uint256)` and selector `0x3d9e8221`. +```solidity +function isLegacyAppchainContract(uint256 chainId) external view returns (bool); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct isLegacyAppchainContractCall { + #[allow(missing_docs)] + pub chainId: alloy::sol_types::private::primitives::aliases::U256, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`isLegacyAppchainContract(uint256)`](isLegacyAppchainContractCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct isLegacyAppchainContractReturn { + #[allow(missing_docs)] + pub _0: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: isLegacyAppchainContractCall) -> Self { + (value.chainId,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for isLegacyAppchainContractCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { chainId: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: isLegacyAppchainContractReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for isLegacyAppchainContractReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for isLegacyAppchainContractCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = bool; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "isLegacyAppchainContract(uint256)"; + const SELECTOR: [u8; 4] = [61u8, 158u8, 130u8, 33u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.chainId), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: isLegacyAppchainContractReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: isLegacyAppchainContractReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `maxAppchainsToQuery()` and selector `0x4a61aef2`. ```solidity function maxAppchainsToQuery() external view returns (uint256); @@ -8332,7 +8898,7 @@ function withdrawFees(address to, uint256 amount) external; #[allow(missing_docs)] addChainFee(addChainFeeCall), #[allow(missing_docs)] - addLegacyChain(addLegacyChainCall), + adminAddChain(adminAddChainCall), #[allow(missing_docs)] aggregateTokens(aggregateTokensCall), #[allow(missing_docs)] @@ -8346,6 +8912,10 @@ function withdrawFees(address to, uint256 amount) external; #[allow(missing_docs)] factory(factoryCall), #[allow(missing_docs)] + gasMeterContract(gasMeterContractCall), + #[allow(missing_docs)] + getAppchainGasUsed(getAppchainGasUsedCall), + #[allow(missing_docs)] getCurrentEpoch(getCurrentEpochCall), #[allow(missing_docs)] getEpochEnd(getEpochEndCall), @@ -8358,6 +8928,8 @@ function withdrawFees(address to, uint256 amount) external; #[allow(missing_docs)] getTrackedChainIds(getTrackedChainIdsCall), #[allow(missing_docs)] + isLegacyAppchainContract(isLegacyAppchainContractCall), + #[allow(missing_docs)] maxAppchainsToQuery(maxAppchainsToQueryCall), #[allow(missing_docs)] owner(ownerCall), @@ -8403,13 +8975,16 @@ function withdrawFees(address to, uint256 amount) external; [23u8, 123u8, 0u8, 114u8], [47u8, 145u8, 131u8, 186u8], [49u8, 33u8, 30u8, 121u8], + [58u8, 174u8, 125u8, 36u8], [59u8, 67u8, 221u8, 173u8], + [61u8, 158u8, 130u8, 33u8], [63u8, 75u8, 168u8, 58u8], [74u8, 97u8, 174u8, 242u8], [92u8, 151u8, 90u8, 187u8], [113u8, 80u8, 24u8, 166u8], [118u8, 103u8, 24u8, 8u8], [120u8, 28u8, 217u8, 157u8], + [129u8, 240u8, 235u8, 222u8], [130u8, 41u8, 66u8, 198u8], [132u8, 86u8, 203u8, 89u8], [141u8, 165u8, 203u8, 91u8], @@ -8427,8 +9002,8 @@ function withdrawFees(address to, uint256 amount) external; [206u8, 47u8, 209u8, 255u8], [213u8, 23u8, 109u8, 35u8], [217u8, 159u8, 175u8, 0u8], + [230u8, 61u8, 48u8, 213u8], [242u8, 253u8, 227u8, 139u8], - [243u8, 174u8, 33u8, 8u8], [253u8, 140u8, 117u8, 210u8], [255u8, 161u8, 173u8, 116u8], ]; @@ -8437,7 +9012,7 @@ function withdrawFees(address to, uint256 amount) external; impl alloy_sol_types::SolInterface for GasAggregatorCalls { const NAME: &'static str = "GasAggregatorCalls"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 34usize; + const COUNT: usize = 37usize; #[inline] fn selector(&self) -> [u8; 4] { match self { @@ -8455,8 +9030,8 @@ function withdrawFees(address to, uint256 amount) external; Self::addChainFee(_) => { ::SELECTOR } - Self::addLegacyChain(_) => { - ::SELECTOR + Self::adminAddChain(_) => { + ::SELECTOR } Self::aggregateTokens(_) => { ::SELECTOR @@ -8474,6 +9049,12 @@ function withdrawFees(address to, uint256 amount) external; ::SELECTOR } Self::factory(_) => ::SELECTOR, + Self::gasMeterContract(_) => { + ::SELECTOR + } + Self::getAppchainGasUsed(_) => { + ::SELECTOR + } Self::getCurrentEpoch(_) => { ::SELECTOR } @@ -8492,6 +9073,9 @@ function withdrawFees(address to, uint256 amount) external; Self::getTrackedChainIds(_) => { ::SELECTOR } + Self::isLegacyAppchainContract(_) => { + ::SELECTOR + } Self::maxAppchainsToQuery(_) => { ::SELECTOR } @@ -8614,6 +9198,17 @@ function withdrawFees(address to, uint256 amount) external; } setAddChainFee }, + { + fn getAppchainGasUsed( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasAggregatorCalls::getAppchainGasUsed) + } + getAppchainGasUsed + }, { fn syndicateProxyBytecodeHash( data: &[u8], @@ -8625,6 +9220,17 @@ function withdrawFees(address to, uint256 amount) external; } syndicateProxyBytecodeHash }, + { + fn isLegacyAppchainContract( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasAggregatorCalls::isLegacyAppchainContract) + } + isLegacyAppchainContract + }, { fn unpause( data: &[u8], @@ -8687,6 +9293,17 @@ function withdrawFees(address to, uint256 amount) external; } START_TIMESTAMP }, + { + fn adminAddChain( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasAggregatorCalls::adminAddChain) + } + adminAddChain + }, { fn simulateAggregateTokens( data: &[u8], @@ -8869,26 +9486,26 @@ function withdrawFees(address to, uint256 amount) external; aggregateTokens }, { - fn transferOwnership( + fn gasMeterContract( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) - .map(GasAggregatorCalls::transferOwnership) + .map(GasAggregatorCalls::gasMeterContract) } - transferOwnership + gasMeterContract }, { - fn addLegacyChain( + fn transferOwnership( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) - .map(GasAggregatorCalls::addLegacyChain) + .map(GasAggregatorCalls::transferOwnership) } - addLegacyChain + transferOwnership }, { fn addChain( @@ -8994,6 +9611,17 @@ function withdrawFees(address to, uint256 amount) external; } setAddChainFee }, + { + fn getAppchainGasUsed( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasAggregatorCalls::getAppchainGasUsed) + } + getAppchainGasUsed + }, { fn syndicateProxyBytecodeHash( data: &[u8], @@ -9005,6 +9633,17 @@ function withdrawFees(address to, uint256 amount) external; } syndicateProxyBytecodeHash }, + { + fn isLegacyAppchainContract( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasAggregatorCalls::isLegacyAppchainContract) + } + isLegacyAppchainContract + }, { fn unpause( data: &[u8], @@ -9071,6 +9710,17 @@ function withdrawFees(address to, uint256 amount) external; } START_TIMESTAMP }, + { + fn adminAddChain( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasAggregatorCalls::adminAddChain) + } + adminAddChain + }, { fn simulateAggregateTokens( data: &[u8], @@ -9259,26 +9909,26 @@ function withdrawFees(address to, uint256 amount) external; aggregateTokens }, { - fn transferOwnership( + fn gasMeterContract( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(GasAggregatorCalls::transferOwnership) + .map(GasAggregatorCalls::gasMeterContract) } - transferOwnership + gasMeterContract }, { - fn addLegacyChain( + fn transferOwnership( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(GasAggregatorCalls::addLegacyChain) + .map(GasAggregatorCalls::transferOwnership) } - addLegacyChain + transferOwnership }, { fn addChain( @@ -9342,8 +9992,8 @@ function withdrawFees(address to, uint256 amount) external; inner, ) } - Self::addLegacyChain(inner) => { - ::abi_encoded_size( + Self::adminAddChain(inner) => { + ::abi_encoded_size( inner, ) } @@ -9375,6 +10025,16 @@ function withdrawFees(address to, uint256 amount) external; Self::factory(inner) => { ::abi_encoded_size(inner) } + Self::gasMeterContract(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::getAppchainGasUsed(inner) => { + ::abi_encoded_size( + inner, + ) + } Self::getCurrentEpoch(inner) => { ::abi_encoded_size( inner, @@ -9405,6 +10065,11 @@ function withdrawFees(address to, uint256 amount) external; inner, ) } + Self::isLegacyAppchainContract(inner) => { + ::abi_encoded_size( + inner, + ) + } Self::maxAppchainsToQuery(inner) => { ::abi_encoded_size( inner, @@ -9508,8 +10173,8 @@ function withdrawFees(address to, uint256 amount) external; out, ) } - Self::addLegacyChain(inner) => { - ::abi_encode_raw( + Self::adminAddChain(inner) => { + ::abi_encode_raw( inner, out, ) @@ -9547,6 +10212,18 @@ function withdrawFees(address to, uint256 amount) external; Self::factory(inner) => { ::abi_encode_raw(inner, out) } + Self::gasMeterContract(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::getAppchainGasUsed(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } Self::getCurrentEpoch(inner) => { ::abi_encode_raw( inner, @@ -9583,6 +10260,12 @@ function withdrawFees(address to, uint256 amount) external; out, ) } + Self::isLegacyAppchainContract(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } Self::maxAppchainsToQuery(inner) => { ::abi_encode_raw( inner, @@ -10525,6 +11208,7 @@ For more fine-grained control over the deployment process, use [`deploy_builder` N: alloy_contract::private::Network, >( provider: P, + _gasMeterContract: alloy::sol_types::private::Address, _epoch: alloy::sol_types::private::primitives::aliases::U256, _addChainFee: alloy::sol_types::private::primitives::aliases::U256, _maxAppchainsToQuery: alloy::sol_types::private::primitives::aliases::U256, @@ -10534,7 +11218,13 @@ For more fine-grained control over the deployment process, use [`deploy_builder` GasAggregatorInstance::< P, N, - >::deploy(provider, _epoch, _addChainFee, _maxAppchainsToQuery) + >::deploy( + provider, + _gasMeterContract, + _epoch, + _addChainFee, + _maxAppchainsToQuery, + ) } /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` and constructor arguments, if any. @@ -10547,6 +11237,7 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ N: alloy_contract::private::Network, >( provider: P, + _gasMeterContract: alloy::sol_types::private::Address, _epoch: alloy::sol_types::private::primitives::aliases::U256, _addChainFee: alloy::sol_types::private::primitives::aliases::U256, _maxAppchainsToQuery: alloy::sol_types::private::primitives::aliases::U256, @@ -10554,7 +11245,13 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ GasAggregatorInstance::< P, N, - >::deploy_builder(provider, _epoch, _addChainFee, _maxAppchainsToQuery) + >::deploy_builder( + provider, + _gasMeterContract, + _epoch, + _addChainFee, + _maxAppchainsToQuery, + ) } /**A [`GasAggregator`](self) instance. @@ -10608,12 +11305,14 @@ For more fine-grained control over the deployment process, use [`deploy_builder` #[inline] pub async fn deploy( provider: P, + _gasMeterContract: alloy::sol_types::private::Address, _epoch: alloy::sol_types::private::primitives::aliases::U256, _addChainFee: alloy::sol_types::private::primitives::aliases::U256, _maxAppchainsToQuery: alloy::sol_types::private::primitives::aliases::U256, ) -> alloy_contract::Result> { let call_builder = Self::deploy_builder( provider, + _gasMeterContract, _epoch, _addChainFee, _maxAppchainsToQuery, @@ -10629,6 +11328,7 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ #[inline] pub fn deploy_builder( provider: P, + _gasMeterContract: alloy::sol_types::private::Address, _epoch: alloy::sol_types::private::primitives::aliases::U256, _addChainFee: alloy::sol_types::private::primitives::aliases::U256, _maxAppchainsToQuery: alloy::sol_types::private::primitives::aliases::U256, @@ -10639,6 +11339,7 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ &BYTECODE[..], &alloy_sol_types::SolConstructor::abi_encode( &constructorCall { + _gasMeterContract, _epoch, _addChainFee, _maxAppchainsToQuery, @@ -10732,16 +11433,18 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::SolCallBuilder<&P, addChainFeeCall, N> { self.call_builder(&addChainFeeCall) } - ///Creates a new call builder for the [`addLegacyChain`] function. - pub fn addLegacyChain( + ///Creates a new call builder for the [`adminAddChain`] function. + pub fn adminAddChain( &self, chainId: alloy::sol_types::private::primitives::aliases::U256, chainContract: alloy::sol_types::private::Address, - ) -> alloy_contract::SolCallBuilder<&P, addLegacyChainCall, N> { + isLegacy: bool, + ) -> alloy_contract::SolCallBuilder<&P, adminAddChainCall, N> { self.call_builder( - &addLegacyChainCall { + &adminAddChainCall { chainId, chainContract, + isLegacy, }, ) } @@ -10796,6 +11499,25 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ pub fn factory(&self) -> alloy_contract::SolCallBuilder<&P, factoryCall, N> { self.call_builder(&factoryCall) } + ///Creates a new call builder for the [`gasMeterContract`] function. + pub fn gasMeterContract( + &self, + ) -> alloy_contract::SolCallBuilder<&P, gasMeterContractCall, N> { + self.call_builder(&gasMeterContractCall) + } + ///Creates a new call builder for the [`getAppchainGasUsed`] function. + pub fn getAppchainGasUsed( + &self, + epoch: alloy::sol_types::private::primitives::aliases::U256, + chainId: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, getAppchainGasUsedCall, N> { + self.call_builder( + &getAppchainGasUsedCall { + epoch, + chainId, + }, + ) + } ///Creates a new call builder for the [`getCurrentEpoch`] function. pub fn getCurrentEpoch( &self, @@ -10835,6 +11557,17 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::SolCallBuilder<&P, getTrackedChainIdsCall, N> { self.call_builder(&getTrackedChainIdsCall) } + ///Creates a new call builder for the [`isLegacyAppchainContract`] function. + pub fn isLegacyAppchainContract( + &self, + chainId: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, isLegacyAppchainContractCall, N> { + self.call_builder( + &isLegacyAppchainContractCall { + chainId, + }, + ) + } ///Creates a new call builder for the [`maxAppchainsToQuery`] function. pub fn maxAppchainsToQuery( &self, diff --git a/shared/contract-bindings/src/synd/gas_archive.rs b/shared/contract-bindings/src/synd/gas_archive.rs index f2447b175..b82ae6588 100644 --- a/shared/contract-bindings/src/synd/gas_archive.rs +++ b/shared/contract-bindings/src/synd/gas_archive.rs @@ -41,21 +41,23 @@ interface GasArchive { constructor(address _blockHashSender, uint256 _settlementChainID); function GAS_AGGREGATOR_STORAGE_LOCATION() external view returns (bytes32); + function GAS_ARCHIVE_STORAGE_LOCATION() external view returns (bytes32); function HEADER_STATE_ROOT_INDEX() external view returns (uint256); function SEND_ROOT_STORAGE_SLOT() external view returns (uint256); function STORAGE_ROOT_ACCOUNT_FIELDS_INDEX() external view returns (uint256); function UPGRADE_INTERFACE_VERSION() external view returns (string memory); + function VERSION() external view returns (uint256); function addSequencingChain(uint256 chainID, address aggregatorAddress, address outboxAddress, bool settlesToBase) external; function addSettlementChainAsSequencingChain(address aggregatorAddress) external; - function appchainGasFees(uint256 epoch, uint256 appchainId) external view returns (uint256 tokens); + function appchainGasFees(uint256 _epoch, uint256 appchainId) external view returns (uint256); function blockHashSender() external view returns (address); function confirmEpochDataHash(uint256 seqChainID, bytes32 sendRoot, bytes memory ethBlockHeader, bytes[] memory ethAccountProof, bytes[] memory ethStorageProof, bytes memory seqBlockHeader, bytes[] memory seqAccountProof, bytes[] memory seqStorageProof) external; function confirmSettlementChainEpochDataHash(bytes memory blockHeader, bytes[] memory accountProof, bytes[] memory storageProof) external; function epoch() external view returns (uint256); - function epochChainDataSubmitted(uint256 epoch, uint256 chainId) external view returns (bool submitted); + function epochChainDataSubmitted(uint256 _epoch, uint256 chainId) external view returns (bool); function epochRemainingChains() external view returns (uint256); - function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view returns (bytes32 dataHash); - function ethBlockHashes(bytes32 blockHash) external view returns (bool isPresent); + function epochVerifiedDataHash(uint256 _epoch, uint256 seqChainID) external view returns (bytes32); + function ethBlockHashes(bytes32 blockHash) external view returns (bool); function getAppchainCount(uint256 epochIndex) external view returns (uint256); function getAppchainGasFees(uint256 epochIndex, uint256 appchainId) external view returns (uint256); function getAppchainIds(uint256 epochIndex) external view returns (uint256[] memory chainIDs); @@ -68,15 +70,15 @@ interface GasArchive { function removeSequencingChain(uint256 chainID) external; function renounceOwnership() external; function sendBlockHashes(bytes32 ethBlockHash, bytes32 setBlockHash) external; - function seqChainGasAggregator(uint256 chainId) external view returns (address aggregatorAddress); - function seqChainOutbox(uint256 chainId) external view returns (address outboxAddress); + function seqChainGasAggregator(uint256 chainId) external view returns (address); + function seqChainOutbox(uint256 chainId) external view returns (address); function seqChainSettlesToBase(uint256 chainId) external view returns (bool); function sequencingChainCount() external view returns (uint256); function sequencingChainId(uint256 index) external view returns (uint256); - function setBlockHashes(bytes32 blockHash) external view returns (bool isPresent); + function setBlockHashes(bytes32 blockHash) external view returns (bool); function settlementChainID() external view returns (uint256); function submitEpochPreImageData(uint256 seqChainID, uint256[] memory appchains, uint256[] memory tokens) external; - function totalGasFees(uint256 epoch) external view returns (uint256 totalTokens); + function totalGasFees(uint256 _epoch) external view returns (uint256); function transferOwnership(address newOwner) external; function upgradeToAndCall(address newImplementation, bytes memory data) external payable; } @@ -114,6 +116,19 @@ interface GasArchive { ], "stateMutability": "view" }, + { + "type": "function", + "name": "GAS_ARCHIVE_STORAGE_LOCATION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, { "type": "function", "name": "HEADER_STATE_ROOT_INDEX", @@ -166,6 +181,19 @@ interface GasArchive { ], "stateMutability": "view" }, + { + "type": "function", + "name": "VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, { "type": "function", "name": "addSequencingChain", @@ -212,7 +240,7 @@ interface GasArchive { "name": "appchainGasFees", "inputs": [ { - "name": "epoch", + "name": "_epoch", "type": "uint256", "internalType": "uint256" }, @@ -224,7 +252,7 @@ interface GasArchive { ], "outputs": [ { - "name": "tokens", + "name": "", "type": "uint256", "internalType": "uint256" } @@ -333,7 +361,7 @@ interface GasArchive { "name": "epochChainDataSubmitted", "inputs": [ { - "name": "epoch", + "name": "_epoch", "type": "uint256", "internalType": "uint256" }, @@ -345,7 +373,7 @@ interface GasArchive { ], "outputs": [ { - "name": "submitted", + "name": "", "type": "bool", "internalType": "bool" } @@ -370,7 +398,7 @@ interface GasArchive { "name": "epochVerifiedDataHash", "inputs": [ { - "name": "epoch", + "name": "_epoch", "type": "uint256", "internalType": "uint256" }, @@ -382,7 +410,7 @@ interface GasArchive { ], "outputs": [ { - "name": "dataHash", + "name": "", "type": "bytes32", "internalType": "bytes32" } @@ -401,7 +429,7 @@ interface GasArchive { ], "outputs": [ { - "name": "isPresent", + "name": "", "type": "bool", "internalType": "bool" } @@ -625,7 +653,7 @@ interface GasArchive { ], "outputs": [ { - "name": "aggregatorAddress", + "name": "", "type": "address", "internalType": "address" } @@ -644,7 +672,7 @@ interface GasArchive { ], "outputs": [ { - "name": "outboxAddress", + "name": "", "type": "address", "internalType": "address" } @@ -714,7 +742,7 @@ interface GasArchive { ], "outputs": [ { - "name": "isPresent", + "name": "", "type": "bool", "internalType": "bool" } @@ -762,14 +790,14 @@ interface GasArchive { "name": "totalGasFees", "inputs": [ { - "name": "epoch", + "name": "_epoch", "type": "uint256", "internalType": "uint256" } ], "outputs": [ { - "name": "totalTokens", + "name": "", "type": "uint256", "internalType": "uint256" } @@ -1129,22 +1157,22 @@ pub mod GasArchive { /// The creation / init bytecode of the contract. /// /// ```text - ///0x60e03461017c57601f6136ef38819003918201601f19168301916001600160401b0383118484101761018057808492604094855283398101031261017c5780516001600160a01b0381169182820361017c576020015191306080521561016d57811561015e5760a05260c0525f5160206136cf5f395f51905f525460ff8160401c1661014f576002600160401b03196001600160401b038216016100f9575b60405161353a9081610195823960805181818161081b0152610a0b015260a05181818161067001526116c3015260c0518181816103a20152818161048d01528181610b0501528181610cdf015281816110250152611d540152f35b6001600160401b0319166001600160401b039081175f5160206136cf5f395f51905f52556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f61009e565b63f92ee8a960e01b5f5260045ffd5b633212217560e21b5f5260045ffd5b63d92e233d60e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c80631aa277af1461027f5780631c8081ed1461027a5780632262389714610275578063285f2446146102705780633198eb101461026b578063362b8154146102665780634a5723db146102615780634eb4f97a1461025c5780634f1ef2861461025757806352d1902d14610252578063563344b61461024d578063567f3b3e146102485780635a633080146102435780635e84009d1461023e57806360630122146102395780636b4d17ad146102345780636ba3d17f1461022f5780636cfadeb51461022a578063709ba44a146101df578063715018a6146102255780637d4588b1146102205780637d85a2811461021b5780637e26965d146102165780638a5f7e6d146102115780638da5cb5b1461020c578063900cf0cf14610207578063a552237114610202578063a6e5e125146101fd578063ad3cb1cc146101f8578063cd0f45d2146101f3578063ce537c9f146101ee578063daac1a56146101e9578063dc027d6b146101e4578063e18b4dae146101df578063e48465b7146101da578063f2fde38b146101d5578063f4030228146101d0578063f5ec3ad0146101cb5763fe4b84df146101c6575f80fd5b611923565b6118f4565b61180a565b6117bc565b611695565b610eac565b611678565b611640565b61160a565b6115db565b611565565b611525565b6114eb565b6114cf565b61147d565b611259565b611166565b610fb9565b610f83565b610ec7565b610e7d565b610e45565b610e2a565b610dba565b610d65565b610d28565b610c5b565b610a5b565b6109e4565b6107cf565b6106b1565b610694565b610644565b610472565b6103c5565b61038b565b610361565b6102cb565b90602080835192838152019201905f5b8181106102a15750505090565b8251845260209384019390920191600101610294565b9060206102c8928181520190610284565b90565b3461034f575f60031936011261034f5760405180602060015491828152019060015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6905f5b81811061033957610335856103298187038261073f565b604051918291826102b7565b0390f35b8254845260209093019260019283019201610312565b5f80fd5b5f52600560205260405f2090565b3461034f57602060031936011261034f576004355f52600b602052602060405f2054604051908152f35b3461034f575f60031936011261034f5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461034f57604060031936011261034f57600435602435906103e95f548210611b7b565b5f52600d60205260405f20905f52602052602060405f2054604051908152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361034f57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361034f57565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361034f57565b3461034f57602060031936011261034f5761048b610409565b7f0000000000000000000000000000000000000000000000000000000000000000906104b56121cd565b6104d673ffffffffffffffffffffffffffffffffffffffff82161515611baa565b6104e1821515611bd9565b6104f26104ed8361267f565b611c08565b61052761052361051c8461050f5f545f52600960205260405f2090565b905f5260205260405f2090565b5460ff1690565b1590565b61062c575b61058281610542845f52600460205260405f2090565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b7f5715dd8098a6bd04982c690b88461fa9a7cf9319992f6f997a61fb0a673b52f55f54916105d56105bb855f52600560205260405f2090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b906106276105ee61051c875f52600660205260405f2090565b60405193849384919273ffffffffffffffffffffffffffffffffffffffff60409295948160608601971685521660208401521515910152565b0390a3005b61063f61063a600354611c64565b600355565b61052c565b3461034f575f60031936011261034f57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461034f575f60031936011261034f576020600354604051908152f35b3461034f57602060031936011261034f576004355f526005602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761073a57604052565b6106f1565b90601f601f19910116810190811067ffffffffffffffff82111761073a57604052565b67ffffffffffffffff811161073a57601f01601f191660200190565b92919261078a82610762565b91610798604051938461073f565b82948184528183011161034f578281602093845f960137010152565b9080601f8301121561034f578160206102c89335910161077e565b604060031936011261034f576107e3610409565b60243567ffffffffffffffff811161034f576108039036906004016107b4565b9073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168030149081156109a2575b5061097a576108536121cd565b604051917f52d1902d00000000000000000000000000000000000000000000000000000000835260208360048173ffffffffffffffffffffffffffffffffffffffff86165afa5f9381610949575b506108e8577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff821660045260245ffd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc830361091c5761091a925061251c565b005b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600483905260245ffd5b61096c91945060203d602011610973575b610964818361073f565b8101906121be565b925f6108a1565b503d61095a565b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f610846565b3461034f575f60031936011261034f5773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016300361097a5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b3461034f57608060031936011261034f57600435610a7761042c565b610a7f61044f565b606435801515810361034f57610a936121cd565b610ab473ffffffffffffffffffffffffffffffffffffffff84161515611baa565b610abf841515611bd9565b610acb6104ed8561267f565b610ae861052361051c8661050f5f545f52600960205260405f2090565b610be9575b610b0383610542865f52600460205260405f2090565b7f00000000000000000000000000000000000000000000000000000000000000008403610b66575b50507f5715dd8098a6bd04982c690b88461fa9a7cf9319992f6f997a61fb0a673b52f55f54916105d56105bb855f52600560205260405f2090565b610ba082610b8e73ffffffffffffffffffffffffffffffffffffffff610be295161515611baa565b610542865f52600560205260405f2090565b610bb2845f52600660205260405f2090565b9060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b5f80610b2b565b610bf761063a600354611c64565b610aed565b9181601f8401121561034f5782359167ffffffffffffffff831161034f576020838186019501011161034f57565b9181601f8401121561034f5782359167ffffffffffffffff831161034f576020808501948460051b01011161034f57565b3461034f57606060031936011261034f5760043567ffffffffffffffff811161034f57610c8c903690600401610bfc565b9060243567ffffffffffffffff811161034f57610cad903690600401610c2a565b6044939193359067ffffffffffffffff821161034f57610d0a94610cd8610d03933690600401610c2a565b92909185877f0000000000000000000000000000000000000000000000000000000000000000612268565b369161077e565b602081519101205f52600860205261091a60ff60405f205416611c72565b3461034f57604060031936011261034f57600435602435905f52600960205260405f20905f52602052602060ff60405f2054166040519015158152f35b3461034f57602060031936011261034f57600435600154811015610db55760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60154604051908152602090f35b611f30565b3461034f57602060031936011261034f57600435610dda5f548210611b7b565b5f52600c60205260405f206040519081602082549182815201915f5260205f20905f5b818110610e1457610335856103298187038261073f565b8254845260209093019260019283019201610dfd565b3461034f575f60031936011261034f57602060405160028152f35b3461034f57604060031936011261034f57600435602435905f52600a60205260405f20905f52602052602060405f2054604051908152f35b3461034f57602060031936011261034f576004355f526008602052602060ff60405f2054166040519015158152f35b3461034f575f60031936011261034f57602060405160038152f35b3461034f575f60031936011261034f57610edf6121cd565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461034f57602060031936011261034f57600435610fa35f548210611b7b565b5f52600c602052602060405f2054604051908152f35b3461034f57602060031936011261034f57600435610fd56121cd565b610fe6610fe1826127ce565b611ca1565b611023610ffb825f52600460205260405f2090565b7fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055565b7f0000000000000000000000000000000000000000000000000000000000000000810361110f575b805f5461106a61052361051c8461050f855f52600960205260405f2090565b611098575b505f547f451acf480dc81605ee92fc829c4efa4817de96e1b5f0c00246a54e29f28d341a5f80a3005b5f9161050f6110af925f52600a60205260405f2090565b556110be61063a600354611cd0565b600354156110ce575b805f61106f565b6110fd5f54807f78df938181afcb28eaa7d099235bbf9877832d6faafe36d1ea70916f3ace33e05f80a2611c64565b5f5561110a600154600355565b6110c7565b611124610ffb825f52600560205260405f2090565b611161611139825f52600660205260405f2090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008154169055565b61104b565b3461034f5761010060031936011261034f5760043560243560443567ffffffffffffffff811161034f5761119e903690600401610bfc565b60649391933567ffffffffffffffff811161034f576111c1903690600401610c2a565b60849291923567ffffffffffffffff811161034f576111e4903690600401610c2a565b60a49291923567ffffffffffffffff811161034f57611207903690600401610bfc565b93909260c43567ffffffffffffffff811161034f5761122a903690600401610c2a565b97909660e4359b67ffffffffffffffff8d1161034f5761125161091a9d3690600401610c2a565b9c909b611d3a565b3461034f57606060031936011261034f5760043560243567ffffffffffffffff811161034f5761128d903690600401610c2a565b9060443567ffffffffffffffff811161034f576112ae903690600401610c2a565b6113206112ef8661050f5f979597546112e16112dc61052361051c8661050f865f52600960205260405f2090565b611e6e565b5f52600a60205260405f2090565b54604051602081019061131781611309878b8a8c88611eda565b03601f19810183528261073f565b51902014611f01565b5f5b8281106113ef578561136f6113448261050f5f545f52600960205260405f2090565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b61137d61063a600354611cd0565b600354156113ae575b5f547f4fe496241536a0244f6fd4540c5067809406efae92e0eb9326257becb1d312a25f80a3005b6113dd5f54807f78df938181afcb28eaa7d099235bbf9877832d6faafe36d1ea70916f3ace33e05f80a2611c64565b5f556113ea600154600355565b611386565b806113fd6001928488611f5d565b358061140b575b5001611322565b61147561146d61141c84888a611f5d565b35611439816114345f545f52600c60205260405f2090565b6126f9565b5061144d5f545f52600b60205260405f2090565b611458858254611f7b565b905561050f5f545f52600d60205260405f2090565b918254611f7b565b90555f611404565b3461034f575f60031936011261034f57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461034f575f60031936011261034f5760205f54604051908152f35b3461034f575f60031936011261034f5760206040517fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa06008152f35b3461034f57602060031936011261034f576004355f526004602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b3461034f575f60031936011261034f576040805190611584818361073f565b6005825260208201917f352e302e300000000000000000000000000000000000000000000000000000008352601f19601f8351948593602085525180918160208701528686015e5f85828601015201168101030190f35b3461034f57602060031936011261034f576004355f526006602052602060ff60405f2054166040519015158152f35b3461034f57602060031936011261034f5760043561162a5f548210611b7b565b5f52600b602052602060405f2054604051908152f35b3461034f57604060031936011261034f57600435602435905f52600d60205260405f20905f52602052602060405f2054604051908152f35b3461034f575f60031936011261034f576020600154604051908152f35b3461034f57604060031936011261034f5760043560243573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361179457817fafa20499e4d163c5d4412668267ab29988c69c33850c8222916323991f855e9f925f52600760205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055815f52600860205261177a60405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b60408051918252602082019290925290819081015b0390a1005b7f24b2e7fd000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461034f57602060031936011261034f5761091a6117d8610409565b6117e06121cd565b611f88565b90916117fc6102c893604084526040840190610284565b916020818403910152610284565b3461034f57606060031936011261034f57600435602435906044356118315f548310611b7b565b815f52600c60205260405f20548381039081116118ef57811580156118e6575b6118de575b5061186081612110565b9161186a82612110565b935f5b83811061188357604051806103358888836117e5565b6001906118cc6118ae61189e865f52600c60205260405f2090565b6118a88487611f7b565b90612767565b806118b9848a61218f565b5261050f865f52600d60205260405f2090565b546118d7828961218f565b520161186d565b90505f611856565b50808211611851565b611c37565b3461034f57602060031936011261034f576004355f526007602052602060ff60405f2054166040519015158152f35b3461034f57602060031936011261034f577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460043567ffffffffffffffff61197c604084901c60ff16159367ffffffffffffffff1690565b1680159081611b73575b6001149081611b69575b159081611b60575b50611b3857611a199082611a1060017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b611abd576121a3565b611a1f57005b611a8a7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290806020810161178f565b611b33680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b6121a3565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f611998565b303b159150611990565b839150611986565b15611b8257565b7fc5b14571000000000000000000000000000000000000000000000000000000005f5260045ffd5b15611bb157565b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b15611be057565b7fc84885d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b15611c0f57565b7fdf650a00000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f1981146118ef5760010190565b15611c7957565b7faafde8bb000000000000000000000000000000000000000000000000000000005f5260045ffd5b15611ca857565b7fec074aba000000000000000000000000000000000000000000000000000000005f5260045ffd5b80156118ef575f190190565b15611ce357565b7fbed9c277000000000000000000000000000000000000000000000000000000005f5260045ffd5b15611d1257565b7fab6d0b89000000000000000000000000000000000000000000000000000000005f5260045ffd5b9395979c919a899c919a611d529496989a8f87612268565b7f00000000000000000000000000000000000000000000000000000000000000008114611e4c5792611e079592611e0f989592611dda6105bb87611da7611e1c9f9c9961051c905f52600660205260405f2090565b15611e1e57610353611dd561051c611dc036888f61077e565b602081519101205f52600860205260405f2090565b611d0b565b95604051611dfe816113096020820194856020600391939293604081019481520152565b51902096612406565b92369161077e565b6020815191012014611c72565b565b610353611e4761051c611e3236888f61077e565b602081519101205f52600760205260405f2090565b611cdc565b505050505050505061051c611dc0611e1c93611e6993369161077e565b611c72565b15611e7557565b7f9fbfc589000000000000000000000000000000000000000000000000000000005f5260045ffd5b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831161034f5760209260051b809284830137010190565b9290611ef3906102c89593604086526040860191611e9d565b926020818503910152611e9d565b15611f0857565b7f5cb045db000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9190811015610db55760051b0190565b90600182018092116118ef57565b919082018092116118ef57565b73ffffffffffffffffffffffffffffffffffffffff1680156120495773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b905f1982019182116118ef57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4082019182116118ef57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082019182116118ef57565b60200390602082116118ef57565b919082039182116118ef57565b67ffffffffffffffff811161073a5760051b60200190565b9061211a826120f8565b612127604051918261073f565b828152601f1961213782946120f8565b0190602036910137565b805160031015610db55760800190565b805160021015610db55760600190565b805160101015610db5576102200190565b805115610db55760200190565b805160011015610db55760400190565b8051821015610db55760209160051b010190565b5f556121ad612db7565b6121b5612db7565b611e1c33611f88565b9081602091031261034f575190565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361220d57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b1561224057565b7f9a0cce53000000000000000000000000000000000000000000000000000000005f5260045ffd5b9392915f5496875f52600a60205260405f20865f5260205261228e60405f205415611e6e565b855f52600260205260405f205415612314576123119661050f95612305956122c16105bb8a5f52600460205260405f2090565b948b604051611dfe8161130960208201948560207fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa060091939293604081019481520152565b936112e1851515612239565b55565b7fa04c4553000000000000000000000000000000000000000000000000000000005f5260045ffd5b929190612348816120f8565b93612356604051958661073f565b602085838152019160051b81019183831161034f5781905b83821061237c575050505050565b813567ffffffffffffffff811161034f5760209161239d87849387016107b4565b81520191019061236e565b156123af57565b7f547706af000000000000000000000000000000000000000000000000000000005f5260045ffd5b156123de57565b7f3477dcda000000000000000000000000000000000000000000000000000000005f5260045ffd5b93612456956124ce6124f16124656124ec6124e061245661250b9d6102c89f9c6124da6124d56124da9d6124c09f6124ce6124d59f61246561246061245b6124566124c09a61246b95369161077e565b612877565b6128f2565b612141565b5161299f565b966040516124aa816113096020820194857fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060149260601b1681520190565b5190206040519687916020830160209181520190565b03601f19810187528661073f565b369161233c565b6129e1565b91612a81565b61245b815115156123a8565b612151565b966040516124aa8161130960208201948560209181520190565b612517815115156123d7565b61299f565b90813b1561260b5773ffffffffffffffffffffffffffffffffffffffff8216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a28051156125da576125d791612e0e565b50565b5050346125e357565b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b8054821015610db5575f5260205f2001905f90565b9161267b918354905f199060031b92831b921b19161790565b9055565b5f818152600260205260409020546126f4576001546801000000000000000081101561073a5760018101600155600154811015610db55760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601819055600154905f52600260205260405f2055600190565b505f90565b5f828152600182016020526040902054612761578054906801000000000000000082101561073a578261274c61273684600180960185558461264d565b81939154905f199060031b92831b921b19161790565b90558054925f520160205260405f2055600190565b50505f90565b906127719161264d565b90549060031b1c90565b805480156127a1575f190190612791828261264d565b5f1982549160031b1b1916905555565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f81815260026020526040902054908115612761575f198201908282116118ef57600154925f1984019384116118ef5783835f95612828950361282e575b505050612819600161277b565b6002905f5260205260405f2090565b55600190565b6128196128509161284661277161285695600161264d565b928391600161264d565b90612662565b555f808061280c565b6040519061286c8261071e565b5f6020838281520152565b61287f61285f565b506020815191604051926128928461071e565b835201602082015290565b1561034f57565b906128ae826120f8565b6128bb604051918261073f565b828152601f196128cb82946120f8565b01905f5b8281106128db57505050565b6020906128e661285f565b828285010152016128cf565b906128fc82612e52565b1561034f5761290a82612e71565b91612914836128a4565b9060208101805161292481612ed2565b81018091116118ef57945f905b8082106129535750506102c892939461294b9151906120eb565b90511461289d565b909561299781612964600193612f3d565b9060405161297360408261073f565b8281528160208201526129868b8a61218f565b526129918a8961218f565b50611f7b565b960190612931565b805180151590816129d5575b501561034f576129ba90612ff7565b905190602081106129c9575090565b6020036101000a900490565b6021915011155f6129ab565b6129eb81516128a4565b905f5b8151811015612a295780612a0d612a076001938561218f565b51612877565b612a17828661218f565b52612a22818561218f565b50016129ee565b505090565b60405190612a3d60208361073f565b5f808352366020840137565b90612a5382610762565b612a60604051918261073f565b828152601f196121378294610762565b908151811015610db5570160200190565b90612a8b9061306d565b5f915f612a9661285f565b50845115612d7e57935f915b8151831015612d1f5782158080612d09575b61034f571580612ced575b61034f57612ad6612ad0848461218f565b516128f2565b958651600281145f14612bd7575050612aff612afa612af488612172565b516132bb565b613309565b95612b15612b0e888884613376565b8092611f7b565b965111612bb95715612b4c5750612b2c9051612075565b1161034f575111612b4357612af46102c89161217f565b506102c8612a2e565b919094612b598651612075565b821461034f5780612b77610523612b7160019461217f565b51612e52565b15612b9a57612b88612b8e9161217f565b516132fb565b915b0191949094612aa2565b612ba6612bb39161217f565b5160208101519051902090565b91612b90565b505091509250612bca915051612075565b1161034f576102c8612a2e565b6011909791939794929414612bf0575b50600190612b90565b959380925094929094518314155f14612ccf5760ff612c4a612c44612c3e612c188787612a70565b517fff000000000000000000000000000000000000000000000000000000000000001690565b60f81c90565b94611f6d565b9316601081101561034f57612c68612c62828961218f565b516132e5565b15612c8a5750505050612c7d91925051612075565b0361034f576102c8612a2e565b86612ca2610523612b7184600196989a97999b61218f565b15612cbc57612cb491612b889161218f565b915b90612be7565b612cc991612ba69161218f565b91612cb6565b505050612cdc9051612075565b0361034f57612af46102c891612161565b50612d01612cfb848461218f565b5161327e565b861415612abf565b50612d17612ba6858561218f565b821415612ab4565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c6964204d50542070726f6f660000000000000000000000000000006044820152606490fd5b509050612daf92507f56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42191501461289d565b6102c8612a2e565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615612de657565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f806102c893602081519101845af43d15612e4a573d91612e2e83610762565b92612e3c604051948561073f565b83523d5f602085013e61341a565b60609161341a565b8051156126f457602060c0910151515f1a10612e6d57600190565b5f90565b8051156126f4575f9060208101908151612e8a81612ed2565b81018091116118ef579151905181018091116118ef5791905b828110612eb05750905090565b612eb981612f3d565b81018091116118ef57612ecc9091611c64565b90612ea3565b515f1a6080811015612ee357505f90565b60b881108015612f27575b15612ef95750600190565b60c0811015612f18576102c890612f139060b75b906120eb565b611f6d565b6102c890612f139060f7612f0d565b5060c08110158015612eee575060f88110612eee565b80515f1a906080821015612f52575050600190565b60b8821015612f685750612f136102c8916120b0565b60c0821015612fa95760010151602082900360b7016101000a9004017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4a0190565b60f8821015612fbf5750612f136102c891612083565b60010151602082900360f7016101000a9004017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0a0190565b9060208201916130078351612ed2565b9251908382018092116118ef57519283039283116118ef579190565b908160011b91808304600214901517156118ef57565b1561304057565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b906130965f613087845161308281151561289d565b613023565b613091600161289d565b6120eb565b906130a082612a49565b925f91825b6130af855f611f7b565b84101561316f5761312a612c446130af926130ca8760011690565b613132577f0f0000000000000000000000000000000000000000000000000000000000000061311461310b612c3e612c186131058c60011c90565b8b612a70565b60041c600f1690565b60f81b165f1a613124828b612a70565b53611f6d565b9390506130a5565b7f0f00000000000000000000000000000000000000000000000000000000000000613114613169612c3e612c186131058c60011c90565b60ff1690565b91509250611e1c9150835114613039565b6131a082613194835161308281151561289d565b6130918183111561289d565b906131aa82612a49565b9383925f5b6131b98287611f7b565b85101561326c579061322c6132266131b9936131d58860011690565b613235577f0f0000000000000000000000000000000000000000000000000000000000000061321661310b612c3e612c186132108d60011c90565b8c612a70565b60f81b165f1a613124828c612a70565b95611f6d565b949091506131af565b7f0f00000000000000000000000000000000000000000000000000000000000000613216613169612c3e612c186132108d60011c90565b9250509250611e1c9150835114613039565b80516020811015613296575060208101519051902090565b90602001512060405160208101918252602081526132b560408261073f565b51902090565b80511561034f576132ce6102c891612ff7565b6132da81939293612a49565b9283602001906134c2565b60018151036126f45760200151515f1a60801490565b61330490612ff7565b902090565b9081511561034f57600f61332561310b612c3e612c1886612172565b168061333857506102c860025f93613180565b6001810361334d57506102c860015f93613180565b6002810361336357506102c86002600193613180565b60030361034f576102c860018093613180565b91905f5b8381018082116118ef578251811080613410575b15613408576133be7fff000000000000000000000000000000000000000000000000000000000000009184612a70565b51167fff000000000000000000000000000000000000000000000000000000000000006133eb8386612a70565b51169003613401576133fc90611c64565b61337a565b9250505090565b509250505090565b508351821061338e565b90613457575080511561342f57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b815115806134aa575b613468575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15613460565b601f81116118ef576101000a90565b90918015613535575b602081101561350557806134de57505050565b6134f26134ed6134f7926120dd565b6134b3565b612075565b905182518216911916179052565b919080518252602081018091116118ef5790602081018091116118ef5791601f198101908111156134cb57611c37565b50505056f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00 + ///0x60e03461017c57601f61432b38819003918201601f19168301916001600160401b0383118484101761018057808492604094855283398101031261017c5780516001600160a01b0381169182820361017c576020015191306080521561016d57811561015e5760a05260c0525f51602061430b5f395f51905f525460ff8160401c1661014f576002600160401b03196001600160401b038216016100f9575b604051614176908161019582396080518181816109e30152610bd3015260a0518181816107fa0152611f84015260c0518181816103f30152818161051d01528181610d2b01528181610fa10152818161147701526127380152f35b6001600160401b0319166001600160401b039081175f51602061430b5f395f51905f52556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f61009e565b63f92ee8a960e01b5f5260045ffd5b633212217560e21b5f5260045ffd5b63d92e233d60e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c80631aa277af1461029f5780631c8081ed1461029a5780632262389714610295578063285f2446146102905780633198eb101461028b578063362b8154146102865780634a5723db146102815780634eb4f97a1461027c5780634f1ef2861461027757806352d1902d14610272578063563344b61461026d578063567f3b3e146102685780635a633080146102635780635e84009d1461025e5780635f7907431461025957806360630122146102545780636b4d17ad1461024f5780636ba3d17f1461024a5780636cfadeb514610245578063709ba44a146101fa578063715018a6146102405780637d4588b11461023b5780637d85a281146102365780637e26965d146102315780638a5f7e6d1461022c5780638da5cb5b14610227578063900cf0cf14610222578063a55223711461021d578063a6e5e12514610218578063ad3cb1cc14610213578063cd0f45d21461020e578063ce537c9f14610209578063daac1a5614610204578063dc027d6b146101ff578063e18b4dae146101fa578063e48465b7146101f5578063f2fde38b146101f0578063f4030228146101eb578063f5ec3ad0146101e6578063fe4b84df146101e15763ffa1ad74146101dc575f80fd5b612510565b6122b8565b61226a565b612109565b6120bb565b611f56565b6112a0565b611f1a565b611ec3565b611e4e565b611e00565b611d8a565b611d2b565b611cf1565b611cb5565b611c63565b611828565b611735565b6113ec565b611377565b6112bb565b611252565b6111fb565b6111e0565b611132565b6110f8565b611065565b611009565b610f1d565b610c23565b610bac565b610997565b61085a565b61081e565b6107ce565b610502565b610416565b6103dc565b610393565b6102eb565b90602080835192838152019201905f5b8181106102c15750505090565b82518452602093840193909201916001016102b4565b9060206102e89281815201906102a4565b90565b3461038f575f60031936011261038f576040517fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4015480825260208201907fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4015f5260205f20905f5b818110610379576103758561036981870382610907565b604051918291826102d7565b0390f35b8254845260209093019260019283019201610352565b5f80fd5b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40b602052602060405f2054604051908152f35b3461038f575f60031936011261038f5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461038f57604060031936011261038f576004356024359061045a7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054821061255a565b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40d60205260405f20905f52602052602060405f2054604051908152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361038f57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361038f57565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361038f57565b3461038f57602060031936011261038f5761051b610499565b7f000000000000000000000000000000000000000000000000000000000000000090610545612c2e565b61056673ffffffffffffffffffffffffffffffffffffffff82161515612589565b6105718215156125b8565b61058261057d83613169565b6125e7565b6105f66105f26105eb846105de7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f2090565b905f5260205260405f2090565b5460ff1690565b1590565b610778575b61067081610630845f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40460205260405f2090565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b7f5715dd8098a6bd04982c690b88461fa9a7cf9319992f6f997a61fb0a673b52f57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054916107026106e8855f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40560205260405f2090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b9061077361073a6105eb875f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40660205260405f2090565b60405193849384919273ffffffffffffffffffffffffffffffffffffffff60409295948160608601971685521660208401521515910152565b0390a3005b6107c96107a57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40354612643565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40355565b6105fb565b3461038f575f60031936011261038f57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461038f575f60031936011261038f5760207fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40354604051908152f35b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a405602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761090257604052565b6108b9565b90601f601f19910116810190811067ffffffffffffffff82111761090257604052565b67ffffffffffffffff811161090257601f01601f191660200190565b9291926109528261092a565b916109606040519384610907565b82948184528183011161038f578281602093845f960137010152565b9080601f8301121561038f578160206102e893359101610946565b604060031936011261038f576109ab610499565b60243567ffffffffffffffff811161038f576109cb90369060040161097c565b9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610b6a575b50610b4257610a1b612c2e565b604051917f52d1902d00000000000000000000000000000000000000000000000000000000835260208360048173ffffffffffffffffffffffffffffffffffffffff86165afa5f9381610b11575b50610ab0577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff821660045260245ffd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8303610ae457610ae29250613006565b005b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600483905260245ffd5b610b3491945060203d602011610b3b575b610b2c8183610907565b810190612c1f565b925f610a69565b503d610b22565b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f610a0e565b3461038f575f60031936011261038f5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610b425760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b3461038f57608060031936011261038f57600435610c3f6104bc565b610c476104df565b606435801515810361038f57610c5b612c2e565b610c7c73ffffffffffffffffffffffffffffffffffffffff84161515612589565b610c878415156125b8565b610c9361057d85613169565b610cef6105f26105eb866105de7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f2090565b610e8c575b610d2983610630865f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40460205260405f2090565b7f00000000000000000000000000000000000000000000000000000000000000008403610dcb575b50507f5715dd8098a6bd04982c690b88461fa9a7cf9319992f6f997a61fb0a673b52f57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054916107026106e8855f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40560205260405f2090565b610e2482610df373ffffffffffffffffffffffffffffffffffffffff610e8595161515612589565b610630865f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40560205260405f2090565b610e55845f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40660205260405f2090565b9060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b5f80610d51565b610eb96107a57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40354612643565b610cf4565b9181601f8401121561038f5782359167ffffffffffffffff831161038f576020838186019501011161038f57565b9181601f8401121561038f5782359167ffffffffffffffff831161038f576020808501948460051b01011161038f57565b3461038f57606060031936011261038f5760043567ffffffffffffffff811161038f57610f4e903690600401610ebe565b9060243567ffffffffffffffff811161038f57610f6f903690600401610eec565b6044939193359067ffffffffffffffff821161038f57610fcc94610f9a610fc5933690600401610eec565b92909185877f0000000000000000000000000000000000000000000000000000000000000000612cf8565b3691610946565b602081519101205f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a408602052610ae260ff60405f205416612656565b3461038f57604060031936011261038f57600435602435905f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f20905f52602052602060ff60405f2054166040519015158152f35b3461038f57602060031936011261038f576004357fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401548110156110f3577fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4015f527fdaac75c40bd42f199572623979cd72d831e7903a136ecb1935e6fa006548c8220154604051908152602090f35b612971565b3461038f575f60031936011261038f5760206040517fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4008152f35b3461038f57602060031936011261038f576004356111727fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054821061255a565b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40c60205260405f2060405190805480835260208301915f5260205f20905f5b8181106111ca576103758561036981870382610907565b82548452602090930192600192830192016111b3565b3461038f575f60031936011261038f57602060405160028152f35b3461038f57604060031936011261038f57600435602435905f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40a60205260405f20905f52602052602060405f2054604051908152f35b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a408602052602060ff60405f2054166040519015158152f35b3461038f575f60031936011261038f57602060405160038152f35b3461038f575f60031936011261038f576112d3612c2e565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461038f57602060031936011261038f576004356113b77fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054821061255a565b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40c602052602060405f2054604051908152f35b3461038f57602060031936011261038f57600435611408612c2e565b61141961141482613350565b612685565b61147561144d825f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40460205260405f2090565b7fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055565b7f000000000000000000000000000000000000000000000000000000000000000081036116a0575b807fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400546114fb6105f26105eb846105de855f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f2090565b611549575b507fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400547f451acf480dc81605ee92fc829c4efa4817de96e1b5f0c00246a54e29f28d341a5f80a3005b5f916105de61157f925f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40a60205260405f2090565b556115ad6107a57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a403546126b4565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40354156115dc575b805f611500565b61165261162e7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054807f78df938181afcb28eaa7d099235bbf9877832d6faafe36d1ea70916f3ace33e05f80a2612643565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40055565b61169b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401547fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40355565b6115d5565b6116d461144d825f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40560205260405f2090565b611730611708825f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40660205260405f2090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008154169055565b61149d565b3461038f5761010060031936011261038f5760043560243560443567ffffffffffffffff811161038f5761176d903690600401610ebe565b60649391933567ffffffffffffffff811161038f57611790903690600401610eec565b60849291923567ffffffffffffffff811161038f576117b3903690600401610eec565b60a49291923567ffffffffffffffff811161038f576117d6903690600401610ebe565b93909260c43567ffffffffffffffff811161038f576117f9903690600401610eec565b97909660e4359b67ffffffffffffffff8d1161038f57611820610ae29d3690600401610eec565b9c909b61271e565b3461038f57606060031936011261038f5760043560243567ffffffffffffffff811161038f5761185c903690600401610eec565b9060443567ffffffffffffffff811161038f5761187d903690600401610eec565b61194d61191c866105de7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400979597546118ef6118ea6105f26105eb866105de865f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f2090565b6128af565b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40a60205260405f2090565b54604051602081019061194481611936878b8a8c8861291b565b03601f198101835282610907565b51902014612942565b5f5b828110611b1857856119db6119b0826105de7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f2090565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b611a086107a57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a403546126b4565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4035415611a78575b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400547f4fe496241536a0244f6fd4540c5067809406efae92e0eb9326257becb1d312a25f80a3005b611aca61162e7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054807f78df938181afcb28eaa7d099235bbf9877832d6faafe36d1ea70916f3ace33e05f80a2612643565b611b137fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401547fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40355565b611a30565b80611b26600192848861299e565b3580611b34575b500161194f565b611c5b611c53611b4584888a61299e565b35611ba181611b9c7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40c60205260405f2090565b613291565b50611bf47fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40b60205260405f2090565b611bff8582546129bc565b90556105de7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40d60205260405f2090565b9182546129bc565b90555f611b2d565b3461038f575f60031936011261038f57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461038f575f60031936011261038f5760207fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054604051908152f35b3461038f575f60031936011261038f5760206040517fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa06008152f35b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a404602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b3461038f575f60031936011261038f576040805190611da98183610907565b6005825260208201917f352e302e300000000000000000000000000000000000000000000000000000008352601f19601f8351948593602085525180918160208701528686015e5f85828601015201168101030190f35b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a406602052602060ff60405f2054166040519015158152f35b3461038f57602060031936011261038f57600435611e8e7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054821061255a565b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40b602052602060405f2054604051908152f35b3461038f57604060031936011261038f57600435602435905f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40d60205260405f20905f52602052602060405f2054604051908152f35b3461038f575f60031936011261038f5760207fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40154604051908152f35b3461038f57604060031936011261038f5760043560243573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361209357817fafa20499e4d163c5d4412668267ab29988c69c33850c8222916323991f855e9f925f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40760205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055815f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40860205261207960405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b60408051918252602082019290925290819081015b0390a1005b7f24b2e7fd000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461038f57602060031936011261038f57610ae26120d7610499565b6120df612c2e565b6129c9565b90916120fb6102e8936040845260408401906102a4565b9160208184039101526102a4565b3461038f57606060031936011261038f57600435602435906044356121507fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054831061255a565b815f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40c6020526121858360405f2054612b2c565b81158015612261575b612259575b5061219d81612b51565b916121a782612b51565b935f5b8381106121c057604051806103758888836120e4565b60019061224761220a6121fa865f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40c60205260405f2090565b61220484876129bc565b906132e9565b80612215848a612bd0565b526105de865f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40d60205260405f2090565b546122528289612bd0565b52016121aa565b90505f612193565b5080821161218e565b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a407602052602060ff60405f2054166040519015158152f35b3461038f57602060031936011261038f577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460043567ffffffffffffffff612311604084901c60ff16159367ffffffffffffffff1690565b1680159081612508575b60011490816124fe575b1590816124f5575b506124cd576123ae90826123a560017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61245257612be4565b6123b457005b61241f7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290806020810161208e565b6124c8680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b612be4565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f61232d565b303b159150612325565b83915061231b565b3461038f575f60031936011261038f576020604051620f42408152f35b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40560205260405f2090565b1561256157565b7fc5b14571000000000000000000000000000000000000000000000000000000005f5260045ffd5b1561259057565b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b156125bf57565b7fc84885d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b156125ee57565b7fdf650a00000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f1981146126515760010190565b612616565b1561265d57565b7faafde8bb000000000000000000000000000000000000000000000000000000005f5260045ffd5b1561268c57565b7fec074aba000000000000000000000000000000000000000000000000000000005f5260045ffd5b8015612651575f190190565b156126c757565b7fbed9c277000000000000000000000000000000000000000000000000000000005f5260045ffd5b156126f657565b7fab6d0b89000000000000000000000000000000000000000000000000000000005f5260045ffd5b9395979c919a899c919a6127369496989a8f87612cf8565b7f0000000000000000000000000000000000000000000000000000000000000000811461288d579261282995926128319895926127fc6106e8876127aa61283e9f9c996105eb905f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40660205260405f2090565b156128405761252d6127f76105eb6127c336888f610946565b602081519101205f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40860205260405f2090565b6126ef565b95604051612820816119366020820194856020600391939293604081019481520152565b51902096612ef0565b923691610946565b6020815191012014612656565b565b61252d6128886105eb61285436888f610946565b602081519101205f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40760205260405f2090565b6126c0565b50505050505050506105eb6127c361283e936128aa933691610946565b612656565b156128b657565b7f9fbfc589000000000000000000000000000000000000000000000000000000005f5260045ffd5b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831161038f5760209260051b809284830137010190565b9290612934906102e895936040865260408601916128de565b9260208185039101526128de565b1561294957565b7f5cb045db000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91908110156110f35760051b0190565b906001820180921161265157565b9190820180921161265157565b73ffffffffffffffffffffffffffffffffffffffff168015612a8a5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b905f19820191821161265157565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40820191821161265157565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80820191821161265157565b602003906020821161265157565b9190820391821161265157565b67ffffffffffffffff81116109025760051b60200190565b90612b5b82612b39565b612b686040519182610907565b828152601f19612b788294612b39565b0190602036910137565b8051600310156110f35760800190565b8051600210156110f35760600190565b8051601010156110f3576102200190565b8051156110f35760200190565b8051600110156110f35760400190565b80518210156110f35760209160051b010190565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40055612c0e6139f3565b612c166139f3565b61283e336129c9565b9081602091031261038f575190565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303612c6e57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b15612ca157565b7fa04c4553000000000000000000000000000000000000000000000000000000005f5260045ffd5b15612cd057565b7f9a0cce53000000000000000000000000000000000000000000000000000000005f5260045ffd5b93916105de9396612e2396612e17947fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054998a5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40a60205260405f20895f52602052612d6960405f2054156128af565b885f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a402602052612d9f60405f20541515612c9a565b612dd36106e88a5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40460205260405f2090565b948b6040516128208161193660208201948560207fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa060091939293604081019481520152565b936118ef851515612cc9565b55565b929190612e3281612b39565b93612e406040519586610907565b602085838152019160051b81019183831161038f5781905b838210612e66575050505050565b813567ffffffffffffffff811161038f57602091612e87878493870161097c565b815201910190612e58565b15612e9957565b7f547706af000000000000000000000000000000000000000000000000000000005f5260045ffd5b15612ec857565b7f3477dcda000000000000000000000000000000000000000000000000000000005f5260045ffd5b93612f4095612fb8612fdb612f4f612fd6612fca612f40612ff59d6102e89f9c612fc4612fbf612fc49d612faa9f612fb8612fbf9f612f4f612f4a612f45612f40612faa9a612f55953691610946565b6134b3565b61352e565b612b82565b516135db565b96604051612f94816119366020820194857fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060149260601b1681520190565b5190206040519687916020830160209181520190565b03601f198101875286610907565b3691612e26565b61361d565b916136bd565b612f4581511515612e92565b612b92565b96604051612f948161193660208201948560209181520190565b61300181511515612ec1565b6135db565b90813b156130f55773ffffffffffffffffffffffffffffffffffffffff8216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a28051156130c4576130c191613a4a565b50565b5050346130cd57565b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b80548210156110f3575f5260205f2001905f90565b91613165918354905f199060031b92831b921b19161790565b9055565b5f8181527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a402602052604090205461328c577fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4015468010000000000000000811015610902576132376132218260018594017fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401557fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401613137565b81939154905f199060031b92831b921b19161790565b90557fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40154905f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40260205260405f2055600190565b505f90565b5f8281526001820160205260409020546132e3578054906801000000000000000082101561090257826132ce613221846001809601855584613137565b90558054925f520160205260405f2055600190565b50505f90565b906132f391613137565b90549060031b1c90565b80548015613323575f1901906133138282613137565b5f1982549160031b1b1916905555565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f8181527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40260205260409020549081156132e3575f19820190828211612651577fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40154925f1984019384116126515783835f95613426950361342c575b5050506133f87fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4016132fd565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a402905f5260205260405f2090565b55600190565b6133f861348c916134636132f3613492957fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401613137565b9283917fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401613137565b9061314c565b555f80806133cc565b604051906134a8826108e6565b5f6020838281520152565b6134bb61349b565b506020815191604051926134ce846108e6565b835201602082015290565b1561038f57565b906134ea82612b39565b6134f76040519182610907565b828152601f196135078294612b39565b01905f5b82811061351757505050565b60209061352261349b565b8282850101520161350b565b9061353882613a8e565b1561038f5761354682613aad565b91613550836134e0565b9060208101805161356081613b0e565b810180911161265157945f905b80821061358f5750506102e8929394613587915190612b2c565b9051146134d9565b90956135d3816135a0600193613b79565b906040516135af604082610907565b8281528160208201526135c28b8a612bd0565b526135cd8a89612bd0565b506129bc565b96019061356d565b80518015159081613611575b501561038f576135f690613c33565b90519060208110613605575090565b6020036101000a900490565b6021915011155f6135e7565b61362781516134e0565b905f5b8151811015613665578061364961364360019385612bd0565b516134b3565b6136538286612bd0565b5261365e8185612bd0565b500161362a565b505090565b60405190613679602083610907565b5f808352366020840137565b9061368f8261092a565b61369c6040519182610907565b828152601f19612b78829461092a565b9081518110156110f3570160200190565b906136c790613ca9565b5f915f6136d261349b565b508451156139ba57935f915b815183101561395b5782158080613945575b61038f571580613929575b61038f5761371261370c8484612bd0565b5161352e565b958651600281145f1461381357505061373b61373661373088612bb3565b51613ef7565b613f45565b9561375161374a888884613fb2565b80926129bc565b9651116137f5571561378857506137689051612ab6565b1161038f57511161377f576137306102e891612bc0565b506102e861366a565b9190946137958651612ab6565b821461038f57806137b36105f26137ad600194612bc0565b51613a8e565b156137d6576137c46137ca91612bc0565b51613f37565b915b01919490946136de565b6137e26137ef91612bc0565b5160208101519051902090565b916137cc565b505091509250613806915051612ab6565b1161038f576102e861366a565b601190979193979492941461382c575b506001906137cc565b959380925094929094518314155f1461390b5760ff61388661388061387a61385487876136ac565b517fff000000000000000000000000000000000000000000000000000000000000001690565b60f81c90565b946129ae565b9316601081101561038f576138a461389e8289612bd0565b51613f21565b156138c657505050506138b991925051612ab6565b0361038f576102e861366a565b866138de6105f26137ad84600196989a97999b612bd0565b156138f8576138f0916137c491612bd0565b915b90613823565b613905916137e291612bd0565b916138f2565b5050506139189051612ab6565b0361038f576137306102e891612ba2565b5061393d6139378484612bd0565b51613eba565b8614156136fb565b506139536137e28585612bd0565b8214156136f0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c6964204d50542070726f6f660000000000000000000000000000006044820152606490fd5b5090506139eb92507f56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4219150146134d9565b6102e861366a565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615613a2257565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f806102e893602081519101845af43d15613a86573d91613a6a8361092a565b92613a786040519485610907565b83523d5f602085013e614056565b606091614056565b80511561328c57602060c0910151515f1a10613aa957600190565b5f90565b80511561328c575f9060208101908151613ac681613b0e565b8101809111612651579151905181018091116126515791905b828110613aec5750905090565b613af581613b79565b810180911161265157613b089091612643565b90613adf565b515f1a6080811015613b1f57505f90565b60b881108015613b63575b15613b355750600190565b60c0811015613b54576102e890613b4f9060b75b90612b2c565b6129ae565b6102e890613b4f9060f7613b49565b5060c08110158015613b2a575060f88110613b2a565b80515f1a906080821015613b8e575050600190565b60b8821015613ba45750613b4f6102e891612af1565b60c0821015613be55760010151602082900360b7016101000a9004017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4a0190565b60f8821015613bfb5750613b4f6102e891612ac4565b60010151602082900360f7016101000a9004017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0a0190565b906020820191613c438351613b0e565b9251908382018092116126515751928303928311612651579190565b908160011b918083046002149015171561265157565b15613c7c57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b90613cd25f613cc38451613cbe8115156134d9565b613c5f565b613ccd60016134d9565b612b2c565b90613cdc82613685565b925f91825b613ceb855f6129bc565b841015613dab57613d66613880613ceb92613d068760011690565b613d6e577f0f00000000000000000000000000000000000000000000000000000000000000613d50613d4761387a613854613d418c60011c90565b8b6136ac565b60041c600f1690565b60f81b165f1a613d60828b6136ac565b536129ae565b939050613ce1565b7f0f00000000000000000000000000000000000000000000000000000000000000613d50613da561387a613854613d418c60011c90565b60ff1690565b9150925061283e9150835114613c75565b613ddc82613dd08351613cbe8115156134d9565b613ccd818311156134d9565b90613de682613685565b9383925f5b613df582876129bc565b851015613ea85790613e68613e62613df593613e118860011690565b613e71577f0f00000000000000000000000000000000000000000000000000000000000000613e52613d4761387a613854613e4c8d60011c90565b8c6136ac565b60f81b165f1a613d60828c6136ac565b956129ae565b94909150613deb565b7f0f00000000000000000000000000000000000000000000000000000000000000613e52613da561387a613854613e4c8d60011c90565b925050925061283e9150835114613c75565b80516020811015613ed2575060208101519051902090565b9060200151206040516020810191825260208152613ef1604082610907565b51902090565b80511561038f57613f0a6102e891613c33565b613f1681939293613685565b9283602001906140fe565b600181510361328c5760200151515f1a60801490565b613f4090613c33565b902090565b9081511561038f57600f613f61613d4761387a61385486612bb3565b1680613f7457506102e860025f93613dbc565b60018103613f8957506102e860015f93613dbc565b60028103613f9f57506102e86002600193613dbc565b60030361038f576102e860018093613dbc565b91905f5b83810180821161265157825181108061404c575b1561404457613ffa7fff0000000000000000000000000000000000000000000000000000000000000091846136ac565b51167fff0000000000000000000000000000000000000000000000000000000000000061402783866136ac565b5116900361403d5761403890612643565b613fb6565b9250505090565b509250505090565b5083518210613fca565b90614093575080511561406b57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b815115806140e6575b6140a4575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561409c565b601f8111612651576101000a90565b90918015614171575b6020811015614141578061411a57505050565b61412e61412961413392612b1e565b6140ef565b612ab6565b905182518216911916179052565b919080518252602081018091116126515790602081018091116126515791601f1981019081111561410757612616565b50505056f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\xE04a\x01|W`\x1Fa6\xEF8\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01\x80W\x80\x84\x92`@\x94\x85R\x839\x81\x01\x03\x12a\x01|W\x80Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x91\x82\x82\x03a\x01|W` \x01Q\x910`\x80R\x15a\x01mW\x81\x15a\x01^W`\xA0R`\xC0R_Q` a6\xCF_9_Q\x90_RT`\xFF\x81`@\x1C\x16a\x01OW`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01a\0\xF9W[`@Qa5:\x90\x81a\x01\x95\x829`\x80Q\x81\x81\x81a\x08\x1B\x01Ra\n\x0B\x01R`\xA0Q\x81\x81\x81a\x06p\x01Ra\x16\xC3\x01R`\xC0Q\x81\x81\x81a\x03\xA2\x01R\x81\x81a\x04\x8D\x01R\x81\x81a\x0B\x05\x01R\x81\x81a\x0C\xDF\x01R\x81\x81a\x10%\x01Ra\x1DT\x01R\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a6\xCF_9_Q\x90_RU`@Q\x90\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_a\0\x9EV[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[c2\x12!u`\xE2\x1B_R`\x04_\xFD[c\xD9.#=`\xE0\x1B_R`\x04_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x1A\xA2w\xAF\x14a\x02\x7FW\x80c\x1C\x80\x81\xED\x14a\x02zW\x80c\"b8\x97\x14a\x02uW\x80c(_$F\x14a\x02pW\x80c1\x98\xEB\x10\x14a\x02kW\x80c6+\x81T\x14a\x02fW\x80cJW#\xDB\x14a\x02aW\x80cN\xB4\xF9z\x14a\x02\\W\x80cO\x1E\xF2\x86\x14a\x02WW\x80cR\xD1\x90-\x14a\x02RW\x80cV3D\xB6\x14a\x02MW\x80cV\x7F;>\x14a\x02HW\x80cZc0\x80\x14a\x02CW\x80c^\x84\0\x9D\x14a\x02>W\x80c`c\x01\"\x14a\x029W\x80ckM\x17\xAD\x14a\x024W\x80ck\xA3\xD1\x7F\x14a\x02/W\x80cl\xFA\xDE\xB5\x14a\x02*W\x80cp\x9B\xA4J\x14a\x01\xDFW\x80cqP\x18\xA6\x14a\x02%W\x80c}E\x88\xB1\x14a\x02 W\x80c}\x85\xA2\x81\x14a\x02\x1BW\x80c~&\x96]\x14a\x02\x16W\x80c\x8A_~m\x14a\x02\x11W\x80c\x8D\xA5\xCB[\x14a\x02\x0CW\x80c\x90\x0C\xF0\xCF\x14a\x02\x07W\x80c\xA5R#q\x14a\x02\x02W\x80c\xA6\xE5\xE1%\x14a\x01\xFDW\x80c\xAD<\xB1\xCC\x14a\x01\xF8W\x80c\xCD\x0FE\xD2\x14a\x01\xF3W\x80c\xCES|\x9F\x14a\x01\xEEW\x80c\xDA\xAC\x1AV\x14a\x01\xE9W\x80c\xDC\x02}k\x14a\x01\xE4W\x80c\xE1\x8BM\xAE\x14a\x01\xDFW\x80c\xE4\x84e\xB7\x14a\x01\xDAW\x80c\xF2\xFD\xE3\x8B\x14a\x01\xD5W\x80c\xF4\x03\x02(\x14a\x01\xD0W\x80c\xF5\xEC:\xD0\x14a\x01\xCBWc\xFEK\x84\xDF\x14a\x01\xC6W_\x80\xFD[a\x19#V[a\x18\xF4V[a\x18\nV[a\x17\xBCV[a\x16\x95V[a\x0E\xACV[a\x16xV[a\x16@V[a\x16\nV[a\x15\xDBV[a\x15eV[a\x15%V[a\x14\xEBV[a\x14\xCFV[a\x14}V[a\x12YV[a\x11fV[a\x0F\xB9V[a\x0F\x83V[a\x0E\xC7V[a\x0E}V[a\x0EEV[a\x0E*V[a\r\xBAV[a\reV[a\r(V[a\x0C[V[a\n[V[a\t\xE4V[a\x07\xCFV[a\x06\xB1V[a\x06\x94V[a\x06DV[a\x04rV[a\x03\xC5V[a\x03\x8BV[a\x03aV[a\x02\xCBV[\x90` \x80\x83Q\x92\x83\x81R\x01\x92\x01\x90_[\x81\x81\x10a\x02\xA1WPPP\x90V[\x82Q\x84R` \x93\x84\x01\x93\x90\x92\x01\x91`\x01\x01a\x02\x94V[\x90` a\x02\xC8\x92\x81\x81R\x01\x90a\x02\x84V[\x90V[4a\x03OW_`\x03\x196\x01\x12a\x03OW`@Q\x80` `\x01T\x91\x82\x81R\x01\x90`\x01_R\x7F\xB1\x0E-Rv\x12\x07;&\xEE\xCD\xFDq~j2\x0C\xF4KJ\xFA\xC2\xB0s-\x9F\xCB\xE2\xB7\xFA\x0C\xF6\x90_[\x81\x81\x10a\x039Wa\x035\x85a\x03)\x81\x87\x03\x82a\x07?V[`@Q\x91\x82\x91\x82a\x02\xB7V[\x03\x90\xF3[\x82T\x84R` \x90\x93\x01\x92`\x01\x92\x83\x01\x92\x01a\x03\x12V[_\x80\xFD[_R`\x05` R`@_ \x90V[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x0B` R` `@_ T`@Q\x90\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `@Q\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xF3[4a\x03OW`@`\x03\x196\x01\x12a\x03OW`\x045`$5\x90a\x03\xE9_T\x82\x10a\x1B{V[_R`\r` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03OWV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03OWV[`D5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03OWV[4a\x03OW` `\x03\x196\x01\x12a\x03OWa\x04\x8Ba\x04\tV[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\x04\xB5a!\xCDV[a\x04\xD6s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x1B\xAAV[a\x04\xE1\x82\x15\x15a\x1B\xD9V[a\x04\xF2a\x04\xED\x83a&\x7FV[a\x1C\x08V[a\x05'a\x05#a\x05\x1C\x84a\x05\x0F_T_R`\t` R`@_ \x90V[\x90_R` R`@_ \x90V[T`\xFF\x16\x90V[\x15\x90V[a\x06,W[a\x05\x82\x81a\x05B\x84_R`\x04` R`@_ \x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[\x7FW\x15\xDD\x80\x98\xA6\xBD\x04\x98,i\x0B\x88F\x1F\xA9\xA7\xCF\x93\x19\x99/o\x99za\xFB\ng;R\xF5_T\x91a\x05\xD5a\x05\xBB\x85_R`\x05` R`@_ \x90V[Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90a\x06'a\x05\xEEa\x05\x1C\x87_R`\x06` R`@_ \x90V[`@Q\x93\x84\x93\x84\x91\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@\x92\x95\x94\x81``\x86\x01\x97\x16\x85R\x16` \x84\x01R\x15\x15\x91\x01RV[\x03\x90\xA3\0[a\x06?a\x06:`\x03Ta\x1CdV[`\x03UV[a\x05,V[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `\x03T`@Q\x90\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x05` R` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16`@Q\x90\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`@\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07:W`@RV[a\x06\xF1V[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07:W`@RV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07:W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x92\x91\x92a\x07\x8A\x82a\x07bV[\x91a\x07\x98`@Q\x93\x84a\x07?V[\x82\x94\x81\x84R\x81\x83\x01\x11a\x03OW\x82\x81` \x93\x84_\x96\x017\x01\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x03OW\x81` a\x02\xC8\x935\x91\x01a\x07~V[`@`\x03\x196\x01\x12a\x03OWa\x07\xE3a\x04\tV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x08\x03\x906\x90`\x04\x01a\x07\xB4V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\t\xA2W[Pa\tzWa\x08Sa!\xCDV[`@Q\x91\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` \x83`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x86\x16Z\xFA_\x93\x81a\tIW[Pa\x08\xE8W\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16`\x04R`$_\xFD[\x90\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x83\x03a\t\x1CWa\t\x1A\x92Pa%\x1CV[\0[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04\x83\x90R`$_\xFD[a\tl\x91\x94P` =` \x11a\tsW[a\td\x81\x83a\x07?V[\x81\x01\x90a!\xBEV[\x92_a\x08\xA1V[P=a\tZV[\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15_a\x08FV[4a\x03OW_`\x03\x196\x01\x12a\x03OWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x160\x03a\tzW` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[4a\x03OW`\x80`\x03\x196\x01\x12a\x03OW`\x045a\nwa\x04,V[a\n\x7Fa\x04OV[`d5\x80\x15\x15\x81\x03a\x03OWa\n\x93a!\xCDV[a\n\xB4s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x15\x15a\x1B\xAAV[a\n\xBF\x84\x15\x15a\x1B\xD9V[a\n\xCBa\x04\xED\x85a&\x7FV[a\n\xE8a\x05#a\x05\x1C\x86a\x05\x0F_T_R`\t` R`@_ \x90V[a\x0B\xE9W[a\x0B\x03\x83a\x05B\x86_R`\x04` R`@_ \x90V[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84\x03a\x0BfW[PP\x7FW\x15\xDD\x80\x98\xA6\xBD\x04\x98,i\x0B\x88F\x1F\xA9\xA7\xCF\x93\x19\x99/o\x99za\xFB\ng;R\xF5_T\x91a\x05\xD5a\x05\xBB\x85_R`\x05` R`@_ \x90V[a\x0B\xA0\x82a\x0B\x8Es\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x0B\xE2\x95\x16\x15\x15a\x1B\xAAV[a\x05B\x86_R`\x05` R`@_ \x90V[a\x0B\xB2\x84_R`\x06` R`@_ \x90V[\x90`\xFF\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83T\x16\x91\x15\x15\x16\x17\x90UV[_\x80a\x0B+V[a\x0B\xF7a\x06:`\x03Ta\x1CdV[a\n\xEDV[\x91\x81`\x1F\x84\x01\x12\x15a\x03OW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03OW` \x83\x81\x86\x01\x95\x01\x01\x11a\x03OWV[\x91\x81`\x1F\x84\x01\x12\x15a\x03OW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03OW` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11a\x03OWV[4a\x03OW```\x03\x196\x01\x12a\x03OW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x0C\x8C\x906\x90`\x04\x01a\x0B\xFCV[\x90`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x0C\xAD\x906\x90`\x04\x01a\x0C*V[`D\x93\x91\x935\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03OWa\r\n\x94a\x0C\xD8a\r\x03\x936\x90`\x04\x01a\x0C*V[\x92\x90\x91\x85\x87\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a\"hV[6\x91a\x07~V[` \x81Q\x91\x01 _R`\x08` Ra\t\x1A`\xFF`@_ T\x16a\x1CrV[4a\x03OW`@`\x03\x196\x01\x12a\x03OW`\x045`$5\x90_R`\t` R`@_ \x90_R` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045`\x01T\x81\x10\x15a\r\xB5W`\x01_R\x7F\xB1\x0E-Rv\x12\x07;&\xEE\xCD\xFDq~j2\x0C\xF4KJ\xFA\xC2\xB0s-\x9F\xCB\xE2\xB7\xFA\x0C\xF6\x01T`@Q\x90\x81R` \x90\xF3[a\x1F0V[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045a\r\xDA_T\x82\x10a\x1B{V[_R`\x0C` R`@_ `@Q\x90\x81` \x82T\x91\x82\x81R\x01\x91_R` _ \x90_[\x81\x81\x10a\x0E\x14Wa\x035\x85a\x03)\x81\x87\x03\x82a\x07?V[\x82T\x84R` \x90\x93\x01\x92`\x01\x92\x83\x01\x92\x01a\r\xFDV[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `@Q`\x02\x81R\xF3[4a\x03OW`@`\x03\x196\x01\x12a\x03OW`\x045`$5\x90_R`\n` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x08` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `@Q`\x03\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OWa\x0E\xDFa!\xCDV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045a\x0F\xA3_T\x82\x10a\x1B{V[_R`\x0C` R` `@_ T`@Q\x90\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045a\x0F\xD5a!\xCDV[a\x0F\xE6a\x0F\xE1\x82a'\xCEV[a\x1C\xA1V[a\x10#a\x0F\xFB\x82_R`\x04` R`@_ \x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81T\x16\x90UV[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x03a\x11\x0FW[\x80_Ta\x10ja\x05#a\x05\x1C\x84a\x05\x0F\x85_R`\t` R`@_ \x90V[a\x10\x98W[P_T\x7FE\x1A\xCFH\r\xC8\x16\x05\xEE\x92\xFC\x82\x9CN\xFAH\x17\xDE\x96\xE1\xB5\xF0\xC0\x02F\xA5N)\xF2\x8D4\x1A_\x80\xA3\0[_\x91a\x05\x0Fa\x10\xAF\x92_R`\n` R`@_ \x90V[Ua\x10\xBEa\x06:`\x03Ta\x1C\xD0V[`\x03T\x15a\x10\xCEW[\x80_a\x10oV[a\x10\xFD_T\x80\x7Fx\xDF\x93\x81\x81\xAF\xCB(\xEA\xA7\xD0\x99#[\xBF\x98w\x83-o\xAA\xFE6\xD1\xEAp\x91o:\xCE3\xE0_\x80\xA2a\x1CdV[_Ua\x11\n`\x01T`\x03UV[a\x10\xC7V[a\x11$a\x0F\xFB\x82_R`\x05` R`@_ \x90V[a\x11aa\x119\x82_R`\x06` R`@_ \x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x81T\x16\x90UV[a\x10KV[4a\x03OWa\x01\0`\x03\x196\x01\x12a\x03OW`\x045`$5`D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x11\x9E\x906\x90`\x04\x01a\x0B\xFCV[`d\x93\x91\x935g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x11\xC1\x906\x90`\x04\x01a\x0C*V[`\x84\x92\x91\x925g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x11\xE4\x906\x90`\x04\x01a\x0C*V[`\xA4\x92\x91\x925g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x12\x07\x906\x90`\x04\x01a\x0B\xFCV[\x93\x90\x92`\xC45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x12*\x906\x90`\x04\x01a\x0C*V[\x97\x90\x96`\xE45\x9Bg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x8D\x11a\x03OWa\x12Qa\t\x1A\x9D6\x90`\x04\x01a\x0C*V[\x9C\x90\x9Ba\x1D:V[4a\x03OW```\x03\x196\x01\x12a\x03OW`\x045`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x12\x8D\x906\x90`\x04\x01a\x0C*V[\x90`D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x12\xAE\x906\x90`\x04\x01a\x0C*V[a\x13 a\x12\xEF\x86a\x05\x0F_\x97\x95\x97Ta\x12\xE1a\x12\xDCa\x05#a\x05\x1C\x86a\x05\x0F\x86_R`\t` R`@_ \x90V[a\x1EnV[_R`\n` R`@_ \x90V[T`@Q` \x81\x01\x90a\x13\x17\x81a\x13\t\x87\x8B\x8A\x8C\x88a\x1E\xDAV[\x03`\x1F\x19\x81\x01\x83R\x82a\x07?V[Q\x90 \x14a\x1F\x01V[_[\x82\x81\x10a\x13\xEFW\x85a\x13oa\x13D\x82a\x05\x0F_T_R`\t` R`@_ \x90V[`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[a\x13}a\x06:`\x03Ta\x1C\xD0V[`\x03T\x15a\x13\xAEW[_T\x7FO\xE4\x96$\x156\xA0$Oo\xD4T\x0CPg\x80\x94\x06\xEF\xAE\x92\xE0\xEB\x93&%{\xEC\xB1\xD3\x12\xA2_\x80\xA3\0[a\x13\xDD_T\x80\x7Fx\xDF\x93\x81\x81\xAF\xCB(\xEA\xA7\xD0\x99#[\xBF\x98w\x83-o\xAA\xFE6\xD1\xEAp\x91o:\xCE3\xE0_\x80\xA2a\x1CdV[_Ua\x13\xEA`\x01T`\x03UV[a\x13\x86V[\x80a\x13\xFD`\x01\x92\x84\x88a\x1F]V[5\x80a\x14\x0BW[P\x01a\x13\"V[a\x14ua\x14ma\x14\x1C\x84\x88\x8Aa\x1F]V[5a\x149\x81a\x144_T_R`\x0C` R`@_ \x90V[a&\xF9V[Pa\x14M_T_R`\x0B` R`@_ \x90V[a\x14X\x85\x82Ta\x1F{V[\x90Ua\x05\x0F_T_R`\r` R`@_ \x90V[\x91\x82Ta\x1F{V[\x90U_a\x14\x04V[4a\x03OW_`\x03\x196\x01\x12a\x03OW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` _T`@Q\x90\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `@Q\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x04` R` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16`@Q\x90\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW`@\x80Q\x90a\x15\x84\x81\x83a\x07?V[`\x05\x82R` \x82\x01\x91\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R`\x1F\x19`\x1F\x83Q\x94\x85\x93` \x85RQ\x80\x91\x81` \x87\x01R\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x81\x01\x03\x01\x90\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x06` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045a\x16*_T\x82\x10a\x1B{V[_R`\x0B` R` `@_ T`@Q\x90\x81R\xF3[4a\x03OW`@`\x03\x196\x01\x12a\x03OW`\x045`$5\x90_R`\r` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `\x01T`@Q\x90\x81R\xF3[4a\x03OW`@`\x03\x196\x01\x12a\x03OW`\x045`$5s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x163\x03a\x17\x94W\x81\x7F\xAF\xA2\x04\x99\xE4\xD1c\xC5\xD4A&h&z\xB2\x99\x88\xC6\x9C3\x85\x0C\x82\"\x91c#\x99\x1F\x85^\x9F\x92_R`\x07` R`@_ `\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90U\x81_R`\x08` Ra\x17z`@_ `\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[`@\x80Q\x91\x82R` \x82\x01\x92\x90\x92R\x90\x81\x90\x81\x01[\x03\x90\xA1\0[\x7F$\xB2\xE7\xFD\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x03OW` `\x03\x196\x01\x12a\x03OWa\t\x1Aa\x17\xD8a\x04\tV[a\x17\xE0a!\xCDV[a\x1F\x88V[\x90\x91a\x17\xFCa\x02\xC8\x93`@\x84R`@\x84\x01\x90a\x02\x84V[\x91` \x81\x84\x03\x91\x01Ra\x02\x84V[4a\x03OW```\x03\x196\x01\x12a\x03OW`\x045`$5\x90`D5a\x181_T\x83\x10a\x1B{V[\x81_R`\x0C` R`@_ T\x83\x81\x03\x90\x81\x11a\x18\xEFW\x81\x15\x80\x15a\x18\xE6W[a\x18\xDEW[Pa\x18`\x81a!\x10V[\x91a\x18j\x82a!\x10V[\x93_[\x83\x81\x10a\x18\x83W`@Q\x80a\x035\x88\x88\x83a\x17\xE5V[`\x01\x90a\x18\xCCa\x18\xAEa\x18\x9E\x86_R`\x0C` R`@_ \x90V[a\x18\xA8\x84\x87a\x1F{V[\x90a'gV[\x80a\x18\xB9\x84\x8Aa!\x8FV[Ra\x05\x0F\x86_R`\r` R`@_ \x90V[Ta\x18\xD7\x82\x89a!\x8FV[R\x01a\x18mV[\x90P_a\x18VV[P\x80\x82\x11a\x18QV[a\x1C7V[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x07` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x19|`@\x84\x90\x1C`\xFF\x16\x15\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x16\x80\x15\x90\x81a\x1BsW[`\x01\x14\x90\x81a\x1BiW[\x15\x90\x81a\x1B`W[Pa\x1B8Wa\x1A\x19\x90\x82a\x1A\x10`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a\x1A\xBDWa!\xA3V[a\x1A\x1FW\0[a\x1A\x8A\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90\x80` \x81\x01a\x17\x8FV[a\x1B3h\x01\0\0\0\0\0\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a!\xA3V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15_a\x19\x98V[0;\x15\x91Pa\x19\x90V[\x83\x91Pa\x19\x86V[\x15a\x1B\x82WV[\x7F\xC5\xB1Eq\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x1B\xB1WV[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x1B\xE0WV[\x7F\xC8H\x85\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x1C\x0FWV[\x7F\xDFe\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[_\x19\x81\x14a\x18\xEFW`\x01\x01\x90V[\x15a\x1CyWV[\x7F\xAA\xFD\xE8\xBB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x1C\xA8WV[\x7F\xEC\x07J\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x80\x15a\x18\xEFW_\x19\x01\x90V[\x15a\x1C\xE3WV[\x7F\xBE\xD9\xC2w\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x1D\x12WV[\x7F\xABm\x0B\x89\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93\x95\x97\x9C\x91\x9A\x89\x9C\x91\x9Aa\x1DR\x94\x96\x98\x9A\x8F\x87a\"hV[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x14a\x1ELW\x92a\x1E\x07\x95\x92a\x1E\x0F\x98\x95\x92a\x1D\xDAa\x05\xBB\x87a\x1D\xA7a\x1E\x1C\x9F\x9C\x99a\x05\x1C\x90_R`\x06` R`@_ \x90V[\x15a\x1E\x1EWa\x03Sa\x1D\xD5a\x05\x1Ca\x1D\xC06\x88\x8Fa\x07~V[` \x81Q\x91\x01 _R`\x08` R`@_ \x90V[a\x1D\x0BV[\x95`@Qa\x1D\xFE\x81a\x13\t` \x82\x01\x94\x85` `\x03\x91\x93\x92\x93`@\x81\x01\x94\x81R\x01RV[Q\x90 \x96a$\x06V[\x926\x91a\x07~V[` \x81Q\x91\x01 \x14a\x1CrV[V[a\x03Sa\x1EGa\x05\x1Ca\x1E26\x88\x8Fa\x07~V[` \x81Q\x91\x01 _R`\x07` R`@_ \x90V[a\x1C\xDCV[PPPPPPPPa\x05\x1Ca\x1D\xC0a\x1E\x1C\x93a\x1Ei\x936\x91a\x07~V[a\x1CrV[\x15a\x1EuWV[\x7F\x9F\xBF\xC5\x89\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90\x91\x82\x81R\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03OW` \x92`\x05\x1B\x80\x92\x84\x83\x017\x01\x01\x90V[\x92\x90a\x1E\xF3\x90a\x02\xC8\x95\x93`@\x86R`@\x86\x01\x91a\x1E\x9DV[\x92` \x81\x85\x03\x91\x01Ra\x1E\x9DV[\x15a\x1F\x08WV[\x7F\\\xB0E\xDB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[\x91\x90\x81\x10\x15a\r\xB5W`\x05\x1B\x01\x90V[\x90`\x01\x82\x01\x80\x92\x11a\x18\xEFWV[\x91\x90\x82\x01\x80\x92\x11a\x18\xEFWV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a IWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[\x90_\x19\x82\x01\x91\x82\x11a\x18\xEFWV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF@\x82\x01\x91\x82\x11a\x18\xEFWV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x01\x91\x82\x11a\x18\xEFWV[` \x03\x90` \x82\x11a\x18\xEFWV[\x91\x90\x82\x03\x91\x82\x11a\x18\xEFWV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07:W`\x05\x1B` \x01\x90V[\x90a!\x1A\x82a \xF8V[a!'`@Q\x91\x82a\x07?V[\x82\x81R`\x1F\x19a!7\x82\x94a \xF8V[\x01\x90` 6\x91\x017V[\x80Q`\x03\x10\x15a\r\xB5W`\x80\x01\x90V[\x80Q`\x02\x10\x15a\r\xB5W``\x01\x90V[\x80Q`\x10\x10\x15a\r\xB5Wa\x02 \x01\x90V[\x80Q\x15a\r\xB5W` \x01\x90V[\x80Q`\x01\x10\x15a\r\xB5W`@\x01\x90V[\x80Q\x82\x10\x15a\r\xB5W` \x91`\x05\x1B\x01\x01\x90V[_Ua!\xADa-\xB7V[a!\xB5a-\xB7V[a\x1E\x1C3a\x1F\x88V[\x90\x81` \x91\x03\x12a\x03OWQ\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a\"\rWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[\x15a\"@WV[\x7F\x9A\x0C\xCES\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93\x92\x91_T\x96\x87_R`\n` R`@_ \x86_R` Ra\"\x8E`@_ T\x15a\x1EnV[\x85_R`\x02` R`@_ T\x15a#\x14Wa#\x11\x96a\x05\x0F\x95a#\x05\x95a\"\xC1a\x05\xBB\x8A_R`\x04` R`@_ \x90V[\x94\x8B`@Qa\x1D\xFE\x81a\x13\t` \x82\x01\x94\x85` \x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x91\x93\x92\x93`@\x81\x01\x94\x81R\x01RV[\x93a\x12\xE1\x85\x15\x15a\"9V[UV[\x7F\xA0LES\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x92\x91\x90a#H\x81a \xF8V[\x93a#V`@Q\x95\x86a\x07?V[` \x85\x83\x81R\x01\x91`\x05\x1B\x81\x01\x91\x83\x83\x11a\x03OW\x81\x90[\x83\x82\x10a#|WPPPPPV[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OW` \x91a#\x9D\x87\x84\x93\x87\x01a\x07\xB4V[\x81R\x01\x91\x01\x90a#nV[\x15a#\xAFWV[\x7FTw\x06\xAF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a#\xDEWV[\x7F4w\xDC\xDA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93a$V\x95a$\xCEa$\xF1a$ea$\xECa$\xE0a$Va%\x0B\x9Da\x02\xC8\x9F\x9Ca$\xDAa$\xD5a$\xDA\x9Da$\xC0\x9Fa$\xCEa$\xD5\x9Fa$ea$`a$[a$Va$\xC0\x9Aa$k\x956\x91a\x07~V[a(wV[a(\xF2V[a!AV[Qa)\x9FV[\x96`@Qa$\xAA\x81a\x13\t` \x82\x01\x94\x85\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0`\x14\x92``\x1B\x16\x81R\x01\x90V[Q\x90 `@Q\x96\x87\x91` \x83\x01` \x91\x81R\x01\x90V[\x03`\x1F\x19\x81\x01\x87R\x86a\x07?V[6\x91a# v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\x80Q\x15a%\xDAWa%\xD7\x91a.\x0EV[PV[PP4a%\xE3WV[\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[\x80T\x82\x10\x15a\r\xB5W_R` _ \x01\x90_\x90V[\x91a&{\x91\x83T\x90_\x19\x90`\x03\x1B\x92\x83\x1B\x92\x1B\x19\x16\x17\x90V[\x90UV[_\x81\x81R`\x02` R`@\x90 Ta&\xF4W`\x01Th\x01\0\0\0\0\0\0\0\0\x81\x10\x15a\x07:W`\x01\x81\x01`\x01U`\x01T\x81\x10\x15a\r\xB5W`\x01_R\x7F\xB1\x0E-Rv\x12\x07;&\xEE\xCD\xFDq~j2\x0C\xF4KJ\xFA\xC2\xB0s-\x9F\xCB\xE2\xB7\xFA\x0C\xF6\x01\x81\x90U`\x01T\x90_R`\x02` R`@_ U`\x01\x90V[P_\x90V[_\x82\x81R`\x01\x82\x01` R`@\x90 Ta'aW\x80T\x90h\x01\0\0\0\0\0\0\0\0\x82\x10\x15a\x07:W\x82a'La'6\x84`\x01\x80\x96\x01\x85U\x84a&MV[\x81\x93\x91T\x90_\x19\x90`\x03\x1B\x92\x83\x1B\x92\x1B\x19\x16\x17\x90V[\x90U\x80T\x92_R\x01` R`@_ U`\x01\x90V[PP_\x90V[\x90a'q\x91a&MV[\x90T\x90`\x03\x1B\x1C\x90V[\x80T\x80\x15a'\xA1W_\x19\x01\x90a'\x91\x82\x82a&MV[_\x19\x82T\x91`\x03\x1B\x1B\x19\x16\x90UUV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`1`\x04R`$_\xFD[_\x81\x81R`\x02` R`@\x90 T\x90\x81\x15a'aW_\x19\x82\x01\x90\x82\x82\x11a\x18\xEFW`\x01T\x92_\x19\x84\x01\x93\x84\x11a\x18\xEFW\x83\x83_\x95a((\x95\x03a(.W[PPPa(\x19`\x01a'{V[`\x02\x90_R` R`@_ \x90V[U`\x01\x90V[a(\x19a(P\x91a(Fa'qa(V\x95`\x01a&MV[\x92\x83\x91`\x01a&MV[\x90a&bV[U_\x80\x80a(\x0CV[`@Q\x90a(l\x82a\x07\x1EV[_` \x83\x82\x81R\x01RV[a(\x7Fa(_V[P` \x81Q\x91`@Q\x92a(\x92\x84a\x07\x1EV[\x83R\x01` \x82\x01R\x90V[\x15a\x03OWV[\x90a(\xAE\x82a \xF8V[a(\xBB`@Q\x91\x82a\x07?V[\x82\x81R`\x1F\x19a(\xCB\x82\x94a \xF8V[\x01\x90_[\x82\x81\x10a(\xDBWPPPV[` \x90a(\xE6a(_V[\x82\x82\x85\x01\x01R\x01a(\xCFV[\x90a(\xFC\x82a.RV[\x15a\x03OWa)\n\x82a.qV[\x91a)\x14\x83a(\xA4V[\x90` \x81\x01\x80Qa)$\x81a.\xD2V[\x81\x01\x80\x91\x11a\x18\xEFW\x94_\x90[\x80\x82\x10a)SWPPa\x02\xC8\x92\x93\x94a)K\x91Q\x90a \xEBV[\x90Q\x14a(\x9DV[\x90\x95a)\x97\x81a)d`\x01\x93a/=V[\x90`@Qa)s`@\x82a\x07?V[\x82\x81R\x81` \x82\x01Ra)\x86\x8B\x8Aa!\x8FV[Ra)\x91\x8A\x89a!\x8FV[Pa\x1F{V[\x96\x01\x90a)1V[\x80Q\x80\x15\x15\x90\x81a)\xD5W[P\x15a\x03OWa)\xBA\x90a/\xF7V[\x90Q\x90` \x81\x10a)\xC9WP\x90V[` \x03a\x01\0\n\x90\x04\x90V[`!\x91P\x11\x15_a)\xABV[a)\xEB\x81Qa(\xA4V[\x90_[\x81Q\x81\x10\x15a*)W\x80a*\ra*\x07`\x01\x93\x85a!\x8FV[Qa(wV[a*\x17\x82\x86a!\x8FV[Ra*\"\x81\x85a!\x8FV[P\x01a)\xEEV[PP\x90V[`@Q\x90a*=` \x83a\x07?V[_\x80\x83R6` \x84\x017V[\x90a*S\x82a\x07bV[a*``@Q\x91\x82a\x07?V[\x82\x81R`\x1F\x19a!7\x82\x94a\x07bV[\x90\x81Q\x81\x10\x15a\r\xB5W\x01` \x01\x90V[\x90a*\x8B\x90a0mV[_\x91_a*\x96a(_V[P\x84Q\x15a-~W\x93_\x91[\x81Q\x83\x10\x15a-\x1FW\x82\x15\x80\x80a-\tW[a\x03OW\x15\x80a,\xEDW[a\x03OWa*\xD6a*\xD0\x84\x84a!\x8FV[Qa(\xF2V[\x95\x86Q`\x02\x81\x14_\x14a+\xD7WPPa*\xFFa*\xFAa*\xF4\x88a!rV[Qa2\xBBV[a3\tV[\x95a+\x15a+\x0E\x88\x88\x84a3vV[\x80\x92a\x1F{V[\x96Q\x11a+\xB9W\x15a+LWPa+,\x90Qa uV[\x11a\x03OWQ\x11a+CWa*\xF4a\x02\xC8\x91a!\x7FV[Pa\x02\xC8a*.V[\x91\x90\x94a+Y\x86Qa uV[\x82\x14a\x03OW\x80a+wa\x05#a+q`\x01\x94a!\x7FV[Qa.RV[\x15a+\x9AWa+\x88a+\x8E\x91a!\x7FV[Qa2\xFBV[\x91[\x01\x91\x94\x90\x94a*\xA2V[a+\xA6a+\xB3\x91a!\x7FV[Q` \x81\x01Q\x90Q\x90 \x90V[\x91a+\x90V[PP\x91P\x92Pa+\xCA\x91PQa uV[\x11a\x03OWa\x02\xC8a*.V[`\x11\x90\x97\x91\x93\x97\x94\x92\x94\x14a+\xF0W[P`\x01\x90a+\x90V[\x95\x93\x80\x92P\x94\x92\x90\x94Q\x83\x14\x15_\x14a,\xCFW`\xFFa,Ja,Da,>a,\x18\x87\x87a*pV[Q\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90V[`\xF8\x1C\x90V[\x94a\x1FmV[\x93\x16`\x10\x81\x10\x15a\x03OWa,ha,b\x82\x89a!\x8FV[Qa2\xE5V[\x15a,\x8AWPPPPa,}\x91\x92PQa uV[\x03a\x03OWa\x02\xC8a*.V[\x86a,\xA2a\x05#a+q\x84`\x01\x96\x98\x9A\x97\x99\x9Ba!\x8FV[\x15a,\xBCWa,\xB4\x91a+\x88\x91a!\x8FV[\x91[\x90a+\xE7V[a,\xC9\x91a+\xA6\x91a!\x8FV[\x91a,\xB6V[PPPa,\xDC\x90Qa uV[\x03a\x03OWa*\xF4a\x02\xC8\x91a!aV[Pa-\x01a,\xFB\x84\x84a!\x8FV[Qa2~V[\x86\x14\x15a*\xBFV[Pa-\x17a+\xA6\x85\x85a!\x8FV[\x82\x14\x15a*\xB4V[`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x11`$\x82\x01R\x7FInvalid MPT proof\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x90\xFD[P\x90Pa-\xAF\x92P\x7FV\xE8\x1F\x17\x1B\xCCU\xA6\xFF\x83E\xE6\x92\xC0\xF8n[H\xE0\x1B\x99l\xAD\xC0\x01b/\xB5\xE3c\xB4!\x91P\x14a(\x9DV[a\x02\xC8a*.V[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a-\xE6WV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80a\x02\xC8\x93` \x81Q\x91\x01\x84Z\xF4=\x15a.JW=\x91a..\x83a\x07bV[\x92a.<`@Q\x94\x85a\x07?V[\x83R=_` \x85\x01>a4\x1AV[``\x91a4\x1AV[\x80Q\x15a&\xF4W` `\xC0\x91\x01QQ_\x1A\x10a.mW`\x01\x90V[_\x90V[\x80Q\x15a&\xF4W_\x90` \x81\x01\x90\x81Qa.\x8A\x81a.\xD2V[\x81\x01\x80\x91\x11a\x18\xEFW\x91Q\x90Q\x81\x01\x80\x91\x11a\x18\xEFW\x91\x90[\x82\x81\x10a.\xB0WP\x90P\x90V[a.\xB9\x81a/=V[\x81\x01\x80\x91\x11a\x18\xEFWa.\xCC\x90\x91a\x1CdV[\x90a.\xA3V[Q_\x1A`\x80\x81\x10\x15a.\xE3WP_\x90V[`\xB8\x81\x10\x80\x15a/'W[\x15a.\xF9WP`\x01\x90V[`\xC0\x81\x10\x15a/\x18Wa\x02\xC8\x90a/\x13\x90`\xB7[\x90a \xEBV[a\x1FmV[a\x02\xC8\x90a/\x13\x90`\xF7a/\rV[P`\xC0\x81\x10\x15\x80\x15a.\xEEWP`\xF8\x81\x10a.\xEEV[\x80Q_\x1A\x90`\x80\x82\x10\x15a/RWPP`\x01\x90V[`\xB8\x82\x10\x15a/hWPa/\x13a\x02\xC8\x91a \xB0V[`\xC0\x82\x10\x15a/\xA9W`\x01\x01Q` \x82\x90\x03`\xB7\x01a\x01\0\n\x90\x04\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFJ\x01\x90V[`\xF8\x82\x10\x15a/\xBFWPa/\x13a\x02\xC8\x91a \x83V[`\x01\x01Q` \x82\x90\x03`\xF7\x01a\x01\0\n\x90\x04\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\n\x01\x90V[\x90` \x82\x01\x91a0\x07\x83Qa.\xD2V[\x92Q\x90\x83\x82\x01\x80\x92\x11a\x18\xEFWQ\x92\x83\x03\x92\x83\x11a\x18\xEFW\x91\x90V[\x90\x81`\x01\x1B\x91\x80\x83\x04`\x02\x14\x90\x15\x17\x15a\x18\xEFWV[\x15a0@WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x01`\x04R`$_\xFD[\x90a0\x96_a0\x87\x84Qa0\x82\x81\x15\x15a(\x9DV[a0#V[a0\x91`\x01a(\x9DV[a \xEBV[\x90a0\xA0\x82a*IV[\x92_\x91\x82[a0\xAF\x85_a\x1F{V[\x84\x10\x15a1oWa1*a,Da0\xAF\x92a0\xCA\x87`\x01\x16\x90V[a12W\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a1\x14a1\x0Ba,>a,\x18a1\x05\x8C`\x01\x1C\x90V[\x8Ba*pV[`\x04\x1C`\x0F\x16\x90V[`\xF8\x1B\x16_\x1Aa1$\x82\x8Ba*pV[Sa\x1FmV[\x93\x90Pa0\xA5V[\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a1\x14a1ia,>a,\x18a1\x05\x8C`\x01\x1C\x90V[`\xFF\x16\x90V[\x91P\x92Pa\x1E\x1C\x91P\x83Q\x14a09V[a1\xA0\x82a1\x94\x83Qa0\x82\x81\x15\x15a(\x9DV[a0\x91\x81\x83\x11\x15a(\x9DV[\x90a1\xAA\x82a*IV[\x93\x83\x92_[a1\xB9\x82\x87a\x1F{V[\x85\x10\x15a2lW\x90a2,a2&a1\xB9\x93a1\xD5\x88`\x01\x16\x90V[a25W\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a2\x16a1\x0Ba,>a,\x18a2\x10\x8D`\x01\x1C\x90V[\x8Ca*pV[`\xF8\x1B\x16_\x1Aa1$\x82\x8Ca*pV[\x95a\x1FmV[\x94\x90\x91Pa1\xAFV[\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a2\x16a1ia,>a,\x18a2\x10\x8D`\x01\x1C\x90V[\x92PP\x92Pa\x1E\x1C\x91P\x83Q\x14a09V[\x80Q` \x81\x10\x15a2\x96WP` \x81\x01Q\x90Q\x90 \x90V[\x90` \x01Q `@Q` \x81\x01\x91\x82R` \x81Ra2\xB5`@\x82a\x07?V[Q\x90 \x90V[\x80Q\x15a\x03OWa2\xCEa\x02\xC8\x91a/\xF7V[a2\xDA\x81\x93\x92\x93a*IV[\x92\x83` \x01\x90a4\xC2V[`\x01\x81Q\x03a&\xF4W` \x01QQ_\x1A`\x80\x14\x90V[a3\x04\x90a/\xF7V[\x90 \x90V[\x90\x81Q\x15a\x03OW`\x0Fa3%a1\x0Ba,>a,\x18\x86a!rV[\x16\x80a38WPa\x02\xC8`\x02_\x93a1\x80V[`\x01\x81\x03a3MWPa\x02\xC8`\x01_\x93a1\x80V[`\x02\x81\x03a3cWPa\x02\xC8`\x02`\x01\x93a1\x80V[`\x03\x03a\x03OWa\x02\xC8`\x01\x80\x93a1\x80V[\x91\x90_[\x83\x81\x01\x80\x82\x11a\x18\xEFW\x82Q\x81\x10\x80a4\x10W[\x15a4\x08Wa3\xBE\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x91\x84a*pV[Q\x16\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a3\xEB\x83\x86a*pV[Q\x16\x90\x03a4\x01Wa3\xFC\x90a\x1CdV[a3zV[\x92PPP\x90V[P\x92PPP\x90V[P\x83Q\x82\x10a3\x8EV[\x90a4WWP\x80Q\x15a4/W\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a4\xAAW[a4hWP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a4`V[`\x1F\x81\x11a\x18\xEFWa\x01\0\n\x90V[\x90\x91\x80\x15a55W[` \x81\x10\x15a5\x05W\x80a4\xDEWPPPV[a4\xF2a4\xEDa4\xF7\x92a \xDDV[a4\xB3V[a uV[\x90Q\x82Q\x82\x16\x91\x19\x16\x17\x90RV[\x91\x90\x80Q\x82R` \x81\x01\x80\x91\x11a\x18\xEFW\x90` \x81\x01\x80\x91\x11a\x18\xEFW\x91`\x1F\x19\x81\x01\x90\x81\x11\x15a4\xCBWa\x1C7V[PPPV\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0", + b"`\xE04a\x01|W`\x1FaC+8\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01\x80W\x80\x84\x92`@\x94\x85R\x839\x81\x01\x03\x12a\x01|W\x80Q`\x01`\x01`\xA0\x1B\x03\x81\x16\x91\x82\x82\x03a\x01|W` \x01Q\x910`\x80R\x15a\x01mW\x81\x15a\x01^W`\xA0R`\xC0R_Q` aC\x0B_9_Q\x90_RT`\xFF\x81`@\x1C\x16a\x01OW`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01a\0\xF9W[`@QaAv\x90\x81a\x01\x95\x829`\x80Q\x81\x81\x81a\t\xE3\x01Ra\x0B\xD3\x01R`\xA0Q\x81\x81\x81a\x07\xFA\x01Ra\x1F\x84\x01R`\xC0Q\x81\x81\x81a\x03\xF3\x01R\x81\x81a\x05\x1D\x01R\x81\x81a\r+\x01R\x81\x81a\x0F\xA1\x01R\x81\x81a\x14w\x01Ra'8\x01R\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` aC\x0B_9_Q\x90_RU`@Q\x90\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_a\0\x9EV[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[c2\x12!u`\xE2\x1B_R`\x04_\xFD[c\xD9.#=`\xE0\x1B_R`\x04_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x1A\xA2w\xAF\x14a\x02\x9FW\x80c\x1C\x80\x81\xED\x14a\x02\x9AW\x80c\"b8\x97\x14a\x02\x95W\x80c(_$F\x14a\x02\x90W\x80c1\x98\xEB\x10\x14a\x02\x8BW\x80c6+\x81T\x14a\x02\x86W\x80cJW#\xDB\x14a\x02\x81W\x80cN\xB4\xF9z\x14a\x02|W\x80cO\x1E\xF2\x86\x14a\x02wW\x80cR\xD1\x90-\x14a\x02rW\x80cV3D\xB6\x14a\x02mW\x80cV\x7F;>\x14a\x02hW\x80cZc0\x80\x14a\x02cW\x80c^\x84\0\x9D\x14a\x02^W\x80c_y\x07C\x14a\x02YW\x80c`c\x01\"\x14a\x02TW\x80ckM\x17\xAD\x14a\x02OW\x80ck\xA3\xD1\x7F\x14a\x02JW\x80cl\xFA\xDE\xB5\x14a\x02EW\x80cp\x9B\xA4J\x14a\x01\xFAW\x80cqP\x18\xA6\x14a\x02@W\x80c}E\x88\xB1\x14a\x02;W\x80c}\x85\xA2\x81\x14a\x026W\x80c~&\x96]\x14a\x021W\x80c\x8A_~m\x14a\x02,W\x80c\x8D\xA5\xCB[\x14a\x02'W\x80c\x90\x0C\xF0\xCF\x14a\x02\"W\x80c\xA5R#q\x14a\x02\x1DW\x80c\xA6\xE5\xE1%\x14a\x02\x18W\x80c\xAD<\xB1\xCC\x14a\x02\x13W\x80c\xCD\x0FE\xD2\x14a\x02\x0EW\x80c\xCES|\x9F\x14a\x02\tW\x80c\xDA\xAC\x1AV\x14a\x02\x04W\x80c\xDC\x02}k\x14a\x01\xFFW\x80c\xE1\x8BM\xAE\x14a\x01\xFAW\x80c\xE4\x84e\xB7\x14a\x01\xF5W\x80c\xF2\xFD\xE3\x8B\x14a\x01\xF0W\x80c\xF4\x03\x02(\x14a\x01\xEBW\x80c\xF5\xEC:\xD0\x14a\x01\xE6W\x80c\xFEK\x84\xDF\x14a\x01\xE1Wc\xFF\xA1\xADt\x14a\x01\xDCW_\x80\xFD[a%\x10V[a\"\xB8V[a\"jV[a!\tV[a \xBBV[a\x1FVV[a\x12\xA0V[a\x1F\x1AV[a\x1E\xC3V[a\x1ENV[a\x1E\0V[a\x1D\x8AV[a\x1D+V[a\x1C\xF1V[a\x1C\xB5V[a\x1CcV[a\x18(V[a\x175V[a\x13\xECV[a\x13wV[a\x12\xBBV[a\x12RV[a\x11\xFBV[a\x11\xE0V[a\x112V[a\x10\xF8V[a\x10eV[a\x10\tV[a\x0F\x1DV[a\x0C#V[a\x0B\xACV[a\t\x97V[a\x08ZV[a\x08\x1EV[a\x07\xCEV[a\x05\x02V[a\x04\x16V[a\x03\xDCV[a\x03\x93V[a\x02\xEBV[\x90` \x80\x83Q\x92\x83\x81R\x01\x92\x01\x90_[\x81\x81\x10a\x02\xC1WPPP\x90V[\x82Q\x84R` \x93\x84\x01\x93\x90\x92\x01\x91`\x01\x01a\x02\xB4V[\x90` a\x02\xE8\x92\x81\x81R\x01\x90a\x02\xA4V[\x90V[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW`@Q\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x80\x82R` \x82\x01\x90\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01_R` _ \x90_[\x81\x81\x10a\x03yWa\x03u\x85a\x03i\x81\x87\x03\x82a\t\x07V[`@Q\x91\x82\x91\x82a\x02\xD7V[\x03\x90\xF3[\x82T\x84R` \x90\x93\x01\x92`\x01\x92\x83\x01\x92\x01a\x03RV[_\x80\xFD[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0B` R` `@_ T`@Q\x90\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Q\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xF3[4a\x03\x8FW`@`\x03\x196\x01\x12a\x03\x8FW`\x045`$5\x90a\x04Z\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x82\x10a%ZV[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\r` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03\x8FWV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03\x8FWV[`D5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03\x8FWV[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FWa\x05\x1Ba\x04\x99V[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\x05Ea,.V[a\x05fs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a%\x89V[a\x05q\x82\x15\x15a%\xB8V[a\x05\x82a\x05}\x83a1iV[a%\xE7V[a\x05\xF6a\x05\xF2a\x05\xEB\x84a\x05\xDE\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90V[\x90_R` R`@_ \x90V[T`\xFF\x16\x90V[\x15\x90V[a\x07xW[a\x06p\x81a\x060\x84_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x04` R`@_ \x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[\x7FW\x15\xDD\x80\x98\xA6\xBD\x04\x98,i\x0B\x88F\x1F\xA9\xA7\xCF\x93\x19\x99/o\x99za\xFB\ng;R\xF5\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x91a\x07\x02a\x06\xE8\x85_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x05` R`@_ \x90V[Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90a\x07sa\x07:a\x05\xEB\x87_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x06` R`@_ \x90V[`@Q\x93\x84\x93\x84\x91\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@\x92\x95\x94\x81``\x86\x01\x97\x16\x85R\x16` \x84\x01R\x15\x15\x91\x01RV[\x03\x90\xA3\0[a\x07\xC9a\x07\xA5\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03Ta&CV[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03UV[a\x05\xFBV[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` \x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03T`@Q\x90\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x05` R` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16`@Q\x90\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`@\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\t\x02W`@RV[a\x08\xB9V[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\t\x02W`@RV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\t\x02W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x92\x91\x92a\tR\x82a\t*V[\x91a\t``@Q\x93\x84a\t\x07V[\x82\x94\x81\x84R\x81\x83\x01\x11a\x03\x8FW\x82\x81` \x93\x84_\x96\x017\x01\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x03\x8FW\x81` a\x02\xE8\x935\x91\x01a\tFV[`@`\x03\x196\x01\x12a\x03\x8FWa\t\xABa\x04\x99V[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\t\xCB\x906\x90`\x04\x01a\t|V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\x0BjW[Pa\x0BBWa\n\x1Ba,.V[`@Q\x91\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` \x83`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x86\x16Z\xFA_\x93\x81a\x0B\x11W[Pa\n\xB0W\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16`\x04R`$_\xFD[\x90\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x83\x03a\n\xE4Wa\n\xE2\x92Pa0\x06V[\0[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04\x83\x90R`$_\xFD[a\x0B4\x91\x94P` =` \x11a\x0B;W[a\x0B,\x81\x83a\t\x07V[\x81\x01\x90a,\x1FV[\x92_a\niV[P=a\x0B\"V[\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15_a\n\x0EV[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x160\x03a\x0BBW` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[4a\x03\x8FW`\x80`\x03\x196\x01\x12a\x03\x8FW`\x045a\x0C?a\x04\xBCV[a\x0CGa\x04\xDFV[`d5\x80\x15\x15\x81\x03a\x03\x8FWa\x0C[a,.V[a\x0C|s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x15\x15a%\x89V[a\x0C\x87\x84\x15\x15a%\xB8V[a\x0C\x93a\x05}\x85a1iV[a\x0C\xEFa\x05\xF2a\x05\xEB\x86a\x05\xDE\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90V[a\x0E\x8CW[a\r)\x83a\x060\x86_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x04` R`@_ \x90V[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84\x03a\r\xCBW[PP\x7FW\x15\xDD\x80\x98\xA6\xBD\x04\x98,i\x0B\x88F\x1F\xA9\xA7\xCF\x93\x19\x99/o\x99za\xFB\ng;R\xF5\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x91a\x07\x02a\x06\xE8\x85_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x05` R`@_ \x90V[a\x0E$\x82a\r\xF3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x0E\x85\x95\x16\x15\x15a%\x89V[a\x060\x86_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x05` R`@_ \x90V[a\x0EU\x84_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x06` R`@_ \x90V[\x90`\xFF\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83T\x16\x91\x15\x15\x16\x17\x90UV[_\x80a\rQV[a\x0E\xB9a\x07\xA5\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03Ta&CV[a\x0C\xF4V[\x91\x81`\x1F\x84\x01\x12\x15a\x03\x8FW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03\x8FW` \x83\x81\x86\x01\x95\x01\x01\x11a\x03\x8FWV[\x91\x81`\x1F\x84\x01\x12\x15a\x03\x8FW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03\x8FW` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11a\x03\x8FWV[4a\x03\x8FW```\x03\x196\x01\x12a\x03\x8FW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x0FN\x906\x90`\x04\x01a\x0E\xBEV[\x90`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x0Fo\x906\x90`\x04\x01a\x0E\xECV[`D\x93\x91\x935\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03\x8FWa\x0F\xCC\x94a\x0F\x9Aa\x0F\xC5\x936\x90`\x04\x01a\x0E\xECV[\x92\x90\x91\x85\x87\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a,\xF8V[6\x91a\tFV[` \x81Q\x91\x01 _R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x08` Ra\n\xE2`\xFF`@_ T\x16a&VV[4a\x03\x8FW`@`\x03\x196\x01\x12a\x03\x8FW`\x045`$5\x90_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90_R` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x81\x10\x15a\x10\xF3W\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01_R\x7F\xDA\xACu\xC4\x0B\xD4/\x19\x95rb9y\xCDr\xD81\xE7\x90:\x13n\xCB\x195\xE6\xFA\0eH\xC8\"\x01T`@Q\x90\x81R` \x90\xF3[a)qV[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Q\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045a\x11r\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x82\x10a%ZV[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0C` R`@_ `@Q\x90\x80T\x80\x83R` \x83\x01\x91_R` _ \x90_[\x81\x81\x10a\x11\xCAWa\x03u\x85a\x03i\x81\x87\x03\x82a\t\x07V[\x82T\x84R` \x90\x93\x01\x92`\x01\x92\x83\x01\x92\x01a\x11\xB3V[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Q`\x02\x81R\xF3[4a\x03\x8FW`@`\x03\x196\x01\x12a\x03\x8FW`\x045`$5\x90_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\n` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x08` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Q`\x03\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FWa\x12\xD3a,.V[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045a\x13\xB7\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x82\x10a%ZV[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0C` R` `@_ T`@Q\x90\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045a\x14\x08a,.V[a\x14\x19a\x14\x14\x82a3PV[a&\x85V[a\x14ua\x14M\x82_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x04` R`@_ \x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81T\x16\x90UV[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x03a\x16\xA0W[\x80\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0Ta\x14\xFBa\x05\xF2a\x05\xEB\x84a\x05\xDE\x85_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90V[a\x15IW[P\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x7FE\x1A\xCFH\r\xC8\x16\x05\xEE\x92\xFC\x82\x9CN\xFAH\x17\xDE\x96\xE1\xB5\xF0\xC0\x02F\xA5N)\xF2\x8D4\x1A_\x80\xA3\0[_\x91a\x05\xDEa\x15\x7F\x92_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\n` R`@_ \x90V[Ua\x15\xADa\x07\xA5\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03Ta&\xB4V[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03T\x15a\x15\xDCW[\x80_a\x15\0V[a\x16Ra\x16.\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x80\x7Fx\xDF\x93\x81\x81\xAF\xCB(\xEA\xA7\xD0\x99#[\xBF\x98w\x83-o\xAA\xFE6\xD1\xEAp\x91o:\xCE3\xE0_\x80\xA2a&CV[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0UV[a\x16\x9B\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03UV[a\x15\xD5V[a\x16\xD4a\x14M\x82_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x05` R`@_ \x90V[a\x170a\x17\x08\x82_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x06` R`@_ \x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x81T\x16\x90UV[a\x14\x9DV[4a\x03\x8FWa\x01\0`\x03\x196\x01\x12a\x03\x8FW`\x045`$5`D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x17m\x906\x90`\x04\x01a\x0E\xBEV[`d\x93\x91\x935g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x17\x90\x906\x90`\x04\x01a\x0E\xECV[`\x84\x92\x91\x925g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x17\xB3\x906\x90`\x04\x01a\x0E\xECV[`\xA4\x92\x91\x925g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x17\xD6\x906\x90`\x04\x01a\x0E\xBEV[\x93\x90\x92`\xC45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x17\xF9\x906\x90`\x04\x01a\x0E\xECV[\x97\x90\x96`\xE45\x9Bg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x8D\x11a\x03\x8FWa\x18 a\n\xE2\x9D6\x90`\x04\x01a\x0E\xECV[\x9C\x90\x9Ba'\x1EV[4a\x03\x8FW```\x03\x196\x01\x12a\x03\x8FW`\x045`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x18\\\x906\x90`\x04\x01a\x0E\xECV[\x90`D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x18}\x906\x90`\x04\x01a\x0E\xECV[a\x19Ma\x19\x1C\x86a\x05\xDE\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0\x97\x95\x97Ta\x18\xEFa\x18\xEAa\x05\xF2a\x05\xEB\x86a\x05\xDE\x86_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90V[a(\xAFV[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\n` R`@_ \x90V[T`@Q` \x81\x01\x90a\x19D\x81a\x196\x87\x8B\x8A\x8C\x88a)\x1BV[\x03`\x1F\x19\x81\x01\x83R\x82a\t\x07V[Q\x90 \x14a)BV[_[\x82\x81\x10a\x1B\x18W\x85a\x19\xDBa\x19\xB0\x82a\x05\xDE\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90V[`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[a\x1A\x08a\x07\xA5\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03Ta&\xB4V[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03T\x15a\x1AxW[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x7FO\xE4\x96$\x156\xA0$Oo\xD4T\x0CPg\x80\x94\x06\xEF\xAE\x92\xE0\xEB\x93&%{\xEC\xB1\xD3\x12\xA2_\x80\xA3\0[a\x1A\xCAa\x16.\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x80\x7Fx\xDF\x93\x81\x81\xAF\xCB(\xEA\xA7\xD0\x99#[\xBF\x98w\x83-o\xAA\xFE6\xD1\xEAp\x91o:\xCE3\xE0_\x80\xA2a&CV[a\x1B\x13\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03UV[a\x1A0V[\x80a\x1B&`\x01\x92\x84\x88a)\x9EV[5\x80a\x1B4W[P\x01a\x19OV[a\x1C[a\x1CSa\x1BE\x84\x88\x8Aa)\x9EV[5a\x1B\xA1\x81a\x1B\x9C\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0C` R`@_ \x90V[a2\x91V[Pa\x1B\xF4\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0B` R`@_ \x90V[a\x1B\xFF\x85\x82Ta)\xBCV[\x90Ua\x05\xDE\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\r` R`@_ \x90V[\x91\x82Ta)\xBCV[\x90U_a\x1B-V[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` \x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T`@Q\x90\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Q\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x04` R` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16`@Q\x90\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW`@\x80Q\x90a\x1D\xA9\x81\x83a\t\x07V[`\x05\x82R` \x82\x01\x91\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R`\x1F\x19`\x1F\x83Q\x94\x85\x93` \x85RQ\x80\x91\x81` \x87\x01R\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x81\x01\x03\x01\x90\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x06` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045a\x1E\x8E\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x82\x10a%ZV[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0B` R` `@_ T`@Q\x90\x81R\xF3[4a\x03\x8FW`@`\x03\x196\x01\x12a\x03\x8FW`\x045`$5\x90_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\r` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` \x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T`@Q\x90\x81R\xF3[4a\x03\x8FW`@`\x03\x196\x01\x12a\x03\x8FW`\x045`$5s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x163\x03a \x93W\x81\x7F\xAF\xA2\x04\x99\xE4\xD1c\xC5\xD4A&h&z\xB2\x99\x88\xC6\x9C3\x85\x0C\x82\"\x91c#\x99\x1F\x85^\x9F\x92_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x07` R`@_ `\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90U\x81_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x08` Ra y`@_ `\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[`@\x80Q\x91\x82R` \x82\x01\x92\x90\x92R\x90\x81\x90\x81\x01[\x03\x90\xA1\0[\x7F$\xB2\xE7\xFD\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FWa\n\xE2a \xD7a\x04\x99V[a \xDFa,.V[a)\xC9V[\x90\x91a \xFBa\x02\xE8\x93`@\x84R`@\x84\x01\x90a\x02\xA4V[\x91` \x81\x84\x03\x91\x01Ra\x02\xA4V[4a\x03\x8FW```\x03\x196\x01\x12a\x03\x8FW`\x045`$5\x90`D5a!P\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x83\x10a%ZV[\x81_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0C` Ra!\x85\x83`@_ Ta+,V[\x81\x15\x80\x15a\"aW[a\"YW[Pa!\x9D\x81a+QV[\x91a!\xA7\x82a+QV[\x93_[\x83\x81\x10a!\xC0W`@Q\x80a\x03u\x88\x88\x83a \xE4V[`\x01\x90a\"Ga\"\na!\xFA\x86_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0C` R`@_ \x90V[a\"\x04\x84\x87a)\xBCV[\x90a2\xE9V[\x80a\"\x15\x84\x8Aa+\xD0V[Ra\x05\xDE\x86_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\r` R`@_ \x90V[Ta\"R\x82\x89a+\xD0V[R\x01a!\xAAV[\x90P_a!\x93V[P\x80\x82\x11a!\x8EV[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x07` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa#\x11`@\x84\x90\x1C`\xFF\x16\x15\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x16\x80\x15\x90\x81a%\x08W[`\x01\x14\x90\x81a$\xFEW[\x15\x90\x81a$\xF5W[Pa$\xCDWa#\xAE\x90\x82a#\xA5`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a$RWa+\xE4V[a#\xB4W\0[a$\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90\x80` \x81\x01a \x8EV[a$\xC8h\x01\0\0\0\0\0\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a+\xE4V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15_a#-V[0;\x15\x91Pa#%V[\x83\x91Pa#\x1BV[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Qb\x0FB@\x81R\xF3[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x05` R`@_ \x90V[\x15a%aWV[\x7F\xC5\xB1Eq\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a%\x90WV[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a%\xBFWV[\x7F\xC8H\x85\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a%\xEEWV[\x7F\xDFe\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[_\x19\x81\x14a&QW`\x01\x01\x90V[a&\x16V[\x15a&]WV[\x7F\xAA\xFD\xE8\xBB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a&\x8CWV[\x7F\xEC\x07J\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x80\x15a&QW_\x19\x01\x90V[\x15a&\xC7WV[\x7F\xBE\xD9\xC2w\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a&\xF6WV[\x7F\xABm\x0B\x89\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93\x95\x97\x9C\x91\x9A\x89\x9C\x91\x9Aa'6\x94\x96\x98\x9A\x8F\x87a,\xF8V[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x14a(\x8DW\x92a()\x95\x92a(1\x98\x95\x92a'\xFCa\x06\xE8\x87a'\xAAa(>\x9F\x9C\x99a\x05\xEB\x90_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x06` R`@_ \x90V[\x15a(@Wa%-a'\xF7a\x05\xEBa'\xC36\x88\x8Fa\tFV[` \x81Q\x91\x01 _R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x08` R`@_ \x90V[a&\xEFV[\x95`@Qa( \x81a\x196` \x82\x01\x94\x85` `\x03\x91\x93\x92\x93`@\x81\x01\x94\x81R\x01RV[Q\x90 \x96a.\xF0V[\x926\x91a\tFV[` \x81Q\x91\x01 \x14a&VV[V[a%-a(\x88a\x05\xEBa(T6\x88\x8Fa\tFV[` \x81Q\x91\x01 _R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x07` R`@_ \x90V[a&\xC0V[PPPPPPPPa\x05\xEBa'\xC3a(>\x93a(\xAA\x936\x91a\tFV[a&VV[\x15a(\xB6WV[\x7F\x9F\xBF\xC5\x89\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90\x91\x82\x81R\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03\x8FW` \x92`\x05\x1B\x80\x92\x84\x83\x017\x01\x01\x90V[\x92\x90a)4\x90a\x02\xE8\x95\x93`@\x86R`@\x86\x01\x91a(\xDEV[\x92` \x81\x85\x03\x91\x01Ra(\xDEV[\x15a)IWV[\x7F\\\xB0E\xDB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[\x91\x90\x81\x10\x15a\x10\xF3W`\x05\x1B\x01\x90V[\x90`\x01\x82\x01\x80\x92\x11a&QWV[\x91\x90\x82\x01\x80\x92\x11a&QWV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a*\x8AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[\x90_\x19\x82\x01\x91\x82\x11a&QWV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF@\x82\x01\x91\x82\x11a&QWV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x01\x91\x82\x11a&QWV[` \x03\x90` \x82\x11a&QWV[\x91\x90\x82\x03\x91\x82\x11a&QWV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\t\x02W`\x05\x1B` \x01\x90V[\x90a+[\x82a+9V[a+h`@Q\x91\x82a\t\x07V[\x82\x81R`\x1F\x19a+x\x82\x94a+9V[\x01\x90` 6\x91\x017V[\x80Q`\x03\x10\x15a\x10\xF3W`\x80\x01\x90V[\x80Q`\x02\x10\x15a\x10\xF3W``\x01\x90V[\x80Q`\x10\x10\x15a\x10\xF3Wa\x02 \x01\x90V[\x80Q\x15a\x10\xF3W` \x01\x90V[\x80Q`\x01\x10\x15a\x10\xF3W`@\x01\x90V[\x80Q\x82\x10\x15a\x10\xF3W` \x91`\x05\x1B\x01\x01\x90V[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0Ua,\x0Ea9\xF3V[a,\x16a9\xF3V[a(>3a)\xC9V[\x90\x81` \x91\x03\x12a\x03\x8FWQ\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a,nWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[\x15a,\xA1WV[\x7F\xA0LES\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a,\xD0WV[\x7F\x9A\x0C\xCES\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93\x91a\x05\xDE\x93\x96a.#\x96a.\x17\x94\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x99\x8A_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\n` R`@_ \x89_R` Ra-i`@_ T\x15a(\xAFV[\x88_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x02` Ra-\x9F`@_ T\x15\x15a,\x9AV[a-\xD3a\x06\xE8\x8A_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x04` R`@_ \x90V[\x94\x8B`@Qa( \x81a\x196` \x82\x01\x94\x85` \x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x91\x93\x92\x93`@\x81\x01\x94\x81R\x01RV[\x93a\x18\xEF\x85\x15\x15a,\xC9V[UV[\x92\x91\x90a.2\x81a+9V[\x93a.@`@Q\x95\x86a\t\x07V[` \x85\x83\x81R\x01\x91`\x05\x1B\x81\x01\x91\x83\x83\x11a\x03\x8FW\x81\x90[\x83\x82\x10a.fWPPPPPV[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FW` \x91a.\x87\x87\x84\x93\x87\x01a\t|V[\x81R\x01\x91\x01\x90a.XV[\x15a.\x99WV[\x7FTw\x06\xAF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a.\xC8WV[\x7F4w\xDC\xDA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93a/@\x95a/\xB8a/\xDBa/Oa/\xD6a/\xCAa/@a/\xF5\x9Da\x02\xE8\x9F\x9Ca/\xC4a/\xBFa/\xC4\x9Da/\xAA\x9Fa/\xB8a/\xBF\x9Fa/Oa/Ja/Ea/@a/\xAA\x9Aa/U\x956\x91a\tFV[a4\xB3V[a5.V[a+\x82V[Qa5\xDBV[\x96`@Qa/\x94\x81a\x196` \x82\x01\x94\x85\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0`\x14\x92``\x1B\x16\x81R\x01\x90V[Q\x90 `@Q\x96\x87\x91` \x83\x01` \x91\x81R\x01\x90V[\x03`\x1F\x19\x81\x01\x87R\x86a\t\x07V[6\x91a.&V[a6\x1DV[\x91a6\xBDV[a/E\x81Q\x15\x15a.\x92V[a+\x92V[\x96`@Qa/\x94\x81a\x196` \x82\x01\x94\x85` \x91\x81R\x01\x90V[a0\x01\x81Q\x15\x15a.\xC1V[a5\xDBV[\x90\x81;\x15a0\xF5Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\x80Q\x15a0\xC4Wa0\xC1\x91a:JV[PV[PP4a0\xCDWV[\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[\x80T\x82\x10\x15a\x10\xF3W_R` _ \x01\x90_\x90V[\x91a1e\x91\x83T\x90_\x19\x90`\x03\x1B\x92\x83\x1B\x92\x1B\x19\x16\x17\x90V[\x90UV[_\x81\x81R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x02` R`@\x90 Ta2\x8CW\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01Th\x01\0\0\0\0\0\0\0\0\x81\x10\x15a\t\x02Wa27a2!\x82`\x01\x85\x94\x01\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01U\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01a17V[\x81\x93\x91T\x90_\x19\x90`\x03\x1B\x92\x83\x1B\x92\x1B\x19\x16\x17\x90V[\x90U\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x90_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x02` R`@_ U`\x01\x90V[P_\x90V[_\x82\x81R`\x01\x82\x01` R`@\x90 Ta2\xE3W\x80T\x90h\x01\0\0\0\0\0\0\0\0\x82\x10\x15a\t\x02W\x82a2\xCEa2!\x84`\x01\x80\x96\x01\x85U\x84a17V[\x90U\x80T\x92_R\x01` R`@_ U`\x01\x90V[PP_\x90V[\x90a2\xF3\x91a17V[\x90T\x90`\x03\x1B\x1C\x90V[\x80T\x80\x15a3#W_\x19\x01\x90a3\x13\x82\x82a17V[_\x19\x82T\x91`\x03\x1B\x1B\x19\x16\x90UUV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`1`\x04R`$_\xFD[_\x81\x81R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x02` R`@\x90 T\x90\x81\x15a2\xE3W_\x19\x82\x01\x90\x82\x82\x11a&QW\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x92_\x19\x84\x01\x93\x84\x11a&QW\x83\x83_\x95a4&\x95\x03a4,W[PPPa3\xF8\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01a2\xFDV[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x02\x90_R` R`@_ \x90V[U`\x01\x90V[a3\xF8a4\x8C\x91a4ca2\xF3a4\x92\x95\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01a17V[\x92\x83\x91\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01a17V[\x90a1LV[U_\x80\x80a3\xCCV[`@Q\x90a4\xA8\x82a\x08\xE6V[_` \x83\x82\x81R\x01RV[a4\xBBa4\x9BV[P` \x81Q\x91`@Q\x92a4\xCE\x84a\x08\xE6V[\x83R\x01` \x82\x01R\x90V[\x15a\x03\x8FWV[\x90a4\xEA\x82a+9V[a4\xF7`@Q\x91\x82a\t\x07V[\x82\x81R`\x1F\x19a5\x07\x82\x94a+9V[\x01\x90_[\x82\x81\x10a5\x17WPPPV[` \x90a5\"a4\x9BV[\x82\x82\x85\x01\x01R\x01a5\x0BV[\x90a58\x82a:\x8EV[\x15a\x03\x8FWa5F\x82a:\xADV[\x91a5P\x83a4\xE0V[\x90` \x81\x01\x80Qa5`\x81a;\x0EV[\x81\x01\x80\x91\x11a&QW\x94_\x90[\x80\x82\x10a5\x8FWPPa\x02\xE8\x92\x93\x94a5\x87\x91Q\x90a+,V[\x90Q\x14a4\xD9V[\x90\x95a5\xD3\x81a5\xA0`\x01\x93a;yV[\x90`@Qa5\xAF`@\x82a\t\x07V[\x82\x81R\x81` \x82\x01Ra5\xC2\x8B\x8Aa+\xD0V[Ra5\xCD\x8A\x89a+\xD0V[Pa)\xBCV[\x96\x01\x90a5mV[\x80Q\x80\x15\x15\x90\x81a6\x11W[P\x15a\x03\x8FWa5\xF6\x90a<3V[\x90Q\x90` \x81\x10a6\x05WP\x90V[` \x03a\x01\0\n\x90\x04\x90V[`!\x91P\x11\x15_a5\xE7V[a6'\x81Qa4\xE0V[\x90_[\x81Q\x81\x10\x15a6eW\x80a6Ia6C`\x01\x93\x85a+\xD0V[Qa4\xB3V[a6S\x82\x86a+\xD0V[Ra6^\x81\x85a+\xD0V[P\x01a6*V[PP\x90V[`@Q\x90a6y` \x83a\t\x07V[_\x80\x83R6` \x84\x017V[\x90a6\x8F\x82a\t*V[a6\x9C`@Q\x91\x82a\t\x07V[\x82\x81R`\x1F\x19a+x\x82\x94a\t*V[\x90\x81Q\x81\x10\x15a\x10\xF3W\x01` \x01\x90V[\x90a6\xC7\x90a<\xA9V[_\x91_a6\xD2a4\x9BV[P\x84Q\x15a9\xBAW\x93_\x91[\x81Q\x83\x10\x15a9[W\x82\x15\x80\x80a9EW[a\x03\x8FW\x15\x80a9)W[a\x03\x8FWa7\x12a7\x0C\x84\x84a+\xD0V[Qa5.V[\x95\x86Q`\x02\x81\x14_\x14a8\x13WPPa7;a76a70\x88a+\xB3V[Qa>\xF7V[a?EV[\x95a7Qa7J\x88\x88\x84a?\xB2V[\x80\x92a)\xBCV[\x96Q\x11a7\xF5W\x15a7\x88WPa7h\x90Qa*\xB6V[\x11a\x03\x8FWQ\x11a7\x7FWa70a\x02\xE8\x91a+\xC0V[Pa\x02\xE8a6jV[\x91\x90\x94a7\x95\x86Qa*\xB6V[\x82\x14a\x03\x8FW\x80a7\xB3a\x05\xF2a7\xAD`\x01\x94a+\xC0V[Qa:\x8EV[\x15a7\xD6Wa7\xC4a7\xCA\x91a+\xC0V[Qa?7V[\x91[\x01\x91\x94\x90\x94a6\xDEV[a7\xE2a7\xEF\x91a+\xC0V[Q` \x81\x01Q\x90Q\x90 \x90V[\x91a7\xCCV[PP\x91P\x92Pa8\x06\x91PQa*\xB6V[\x11a\x03\x8FWa\x02\xE8a6jV[`\x11\x90\x97\x91\x93\x97\x94\x92\x94\x14a8,W[P`\x01\x90a7\xCCV[\x95\x93\x80\x92P\x94\x92\x90\x94Q\x83\x14\x15_\x14a9\x0BW`\xFFa8\x86a8\x80a8za8T\x87\x87a6\xACV[Q\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90V[`\xF8\x1C\x90V[\x94a)\xAEV[\x93\x16`\x10\x81\x10\x15a\x03\x8FWa8\xA4a8\x9E\x82\x89a+\xD0V[Qa?!V[\x15a8\xC6WPPPPa8\xB9\x91\x92PQa*\xB6V[\x03a\x03\x8FWa\x02\xE8a6jV[\x86a8\xDEa\x05\xF2a7\xAD\x84`\x01\x96\x98\x9A\x97\x99\x9Ba+\xD0V[\x15a8\xF8Wa8\xF0\x91a7\xC4\x91a+\xD0V[\x91[\x90a8#V[a9\x05\x91a7\xE2\x91a+\xD0V[\x91a8\xF2V[PPPa9\x18\x90Qa*\xB6V[\x03a\x03\x8FWa70a\x02\xE8\x91a+\xA2V[Pa9=a97\x84\x84a+\xD0V[Qa>\xBAV[\x86\x14\x15a6\xFBV[Pa9Sa7\xE2\x85\x85a+\xD0V[\x82\x14\x15a6\xF0V[`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x11`$\x82\x01R\x7FInvalid MPT proof\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x90\xFD[P\x90Pa9\xEB\x92P\x7FV\xE8\x1F\x17\x1B\xCCU\xA6\xFF\x83E\xE6\x92\xC0\xF8n[H\xE0\x1B\x99l\xAD\xC0\x01b/\xB5\xE3c\xB4!\x91P\x14a4\xD9V[a\x02\xE8a6jV[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a:\"WV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80a\x02\xE8\x93` \x81Q\x91\x01\x84Z\xF4=\x15a:\x86W=\x91a:j\x83a\t*V[\x92a:x`@Q\x94\x85a\t\x07V[\x83R=_` \x85\x01>a@VV[``\x91a@VV[\x80Q\x15a2\x8CW` `\xC0\x91\x01QQ_\x1A\x10a:\xA9W`\x01\x90V[_\x90V[\x80Q\x15a2\x8CW_\x90` \x81\x01\x90\x81Qa:\xC6\x81a;\x0EV[\x81\x01\x80\x91\x11a&QW\x91Q\x90Q\x81\x01\x80\x91\x11a&QW\x91\x90[\x82\x81\x10a:\xECWP\x90P\x90V[a:\xF5\x81a;yV[\x81\x01\x80\x91\x11a&QWa;\x08\x90\x91a&CV[\x90a:\xDFV[Q_\x1A`\x80\x81\x10\x15a;\x1FWP_\x90V[`\xB8\x81\x10\x80\x15a;cW[\x15a;5WP`\x01\x90V[`\xC0\x81\x10\x15a;TWa\x02\xE8\x90a;O\x90`\xB7[\x90a+,V[a)\xAEV[a\x02\xE8\x90a;O\x90`\xF7a;IV[P`\xC0\x81\x10\x15\x80\x15a;*WP`\xF8\x81\x10a;*V[\x80Q_\x1A\x90`\x80\x82\x10\x15a;\x8EWPP`\x01\x90V[`\xB8\x82\x10\x15a;\xA4WPa;Oa\x02\xE8\x91a*\xF1V[`\xC0\x82\x10\x15a;\xE5W`\x01\x01Q` \x82\x90\x03`\xB7\x01a\x01\0\n\x90\x04\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFJ\x01\x90V[`\xF8\x82\x10\x15a;\xFBWPa;Oa\x02\xE8\x91a*\xC4V[`\x01\x01Q` \x82\x90\x03`\xF7\x01a\x01\0\n\x90\x04\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\n\x01\x90V[\x90` \x82\x01\x91a\x91P\x83Q\x14a\xA8W\x90a>ha>ba=\xF5\x93a>\x11\x88`\x01\x16\x90V[a>qW\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a>Ra=Ga8za8Ta>L\x8D`\x01\x1C\x90V[\x8Ca6\xACV[`\xF8\x1B\x16_\x1Aa=`\x82\x8Ca6\xACV[\x95a)\xAEV[\x94\x90\x91Pa=\xEBV[\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a>Ra=\xA5a8za8Ta>L\x8D`\x01\x1C\x90V[\x92PP\x92Pa(>\x91P\x83Q\x14a\xD2WP` \x81\x01Q\x90Q\x90 \x90V[\x90` \x01Q `@Q` \x81\x01\x91\x82R` \x81Ra>\xF1`@\x82a\t\x07V[Q\x90 \x90V[\x80Q\x15a\x03\x8FWa?\na\x02\xE8\x91a<3V[a?\x16\x81\x93\x92\x93a6\x85V[\x92\x83` \x01\x90a@\xFEV[`\x01\x81Q\x03a2\x8CW` \x01QQ_\x1A`\x80\x14\x90V[a?@\x90a<3V[\x90 \x90V[\x90\x81Q\x15a\x03\x8FW`\x0Fa?aa=Ga8za8T\x86a+\xB3V[\x16\x80a?tWPa\x02\xE8`\x02_\x93a=\xBCV[`\x01\x81\x03a?\x89WPa\x02\xE8`\x01_\x93a=\xBCV[`\x02\x81\x03a?\x9FWPa\x02\xE8`\x02`\x01\x93a=\xBCV[`\x03\x03a\x03\x8FWa\x02\xE8`\x01\x80\x93a=\xBCV[\x91\x90_[\x83\x81\x01\x80\x82\x11a&QW\x82Q\x81\x10\x80a@LW[\x15a@DWa?\xFA\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x91\x84a6\xACV[Q\x16\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a@'\x83\x86a6\xACV[Q\x16\x90\x03a@=Wa@8\x90a&CV[a?\xB6V[\x92PPP\x90V[P\x92PPP\x90V[P\x83Q\x82\x10a?\xCAV[\x90a@\x93WP\x80Q\x15a@kW\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a@\xE6W[a@\xA4WP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a@\x9CV[`\x1F\x81\x11a&QWa\x01\0\n\x90V[\x90\x91\x80\x15aAqW[` \x81\x10\x15aAAW\x80aA\x1AWPPPV[aA.aA)aA3\x92a+\x1EV[a@\xEFV[a*\xB6V[\x90Q\x82Q\x82\x16\x91\x19\x16\x17\x90RV[\x91\x90\x80Q\x82R` \x81\x01\x80\x91\x11a&QW\x90` \x81\x01\x80\x91\x11a&QW\x91`\x1F\x19\x81\x01\x90\x81\x11\x15aA\x07Wa&\x16V[PPPV\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0", ); /// The runtime bytecode of the contract, as deployed on the network. /// /// ```text - ///0x60806040526004361015610011575f80fd5b5f3560e01c80631aa277af1461027f5780631c8081ed1461027a5780632262389714610275578063285f2446146102705780633198eb101461026b578063362b8154146102665780634a5723db146102615780634eb4f97a1461025c5780634f1ef2861461025757806352d1902d14610252578063563344b61461024d578063567f3b3e146102485780635a633080146102435780635e84009d1461023e57806360630122146102395780636b4d17ad146102345780636ba3d17f1461022f5780636cfadeb51461022a578063709ba44a146101df578063715018a6146102255780637d4588b1146102205780637d85a2811461021b5780637e26965d146102165780638a5f7e6d146102115780638da5cb5b1461020c578063900cf0cf14610207578063a552237114610202578063a6e5e125146101fd578063ad3cb1cc146101f8578063cd0f45d2146101f3578063ce537c9f146101ee578063daac1a56146101e9578063dc027d6b146101e4578063e18b4dae146101df578063e48465b7146101da578063f2fde38b146101d5578063f4030228146101d0578063f5ec3ad0146101cb5763fe4b84df146101c6575f80fd5b611923565b6118f4565b61180a565b6117bc565b611695565b610eac565b611678565b611640565b61160a565b6115db565b611565565b611525565b6114eb565b6114cf565b61147d565b611259565b611166565b610fb9565b610f83565b610ec7565b610e7d565b610e45565b610e2a565b610dba565b610d65565b610d28565b610c5b565b610a5b565b6109e4565b6107cf565b6106b1565b610694565b610644565b610472565b6103c5565b61038b565b610361565b6102cb565b90602080835192838152019201905f5b8181106102a15750505090565b8251845260209384019390920191600101610294565b9060206102c8928181520190610284565b90565b3461034f575f60031936011261034f5760405180602060015491828152019060015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6905f5b81811061033957610335856103298187038261073f565b604051918291826102b7565b0390f35b8254845260209093019260019283019201610312565b5f80fd5b5f52600560205260405f2090565b3461034f57602060031936011261034f576004355f52600b602052602060405f2054604051908152f35b3461034f575f60031936011261034f5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461034f57604060031936011261034f57600435602435906103e95f548210611b7b565b5f52600d60205260405f20905f52602052602060405f2054604051908152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361034f57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361034f57565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361034f57565b3461034f57602060031936011261034f5761048b610409565b7f0000000000000000000000000000000000000000000000000000000000000000906104b56121cd565b6104d673ffffffffffffffffffffffffffffffffffffffff82161515611baa565b6104e1821515611bd9565b6104f26104ed8361267f565b611c08565b61052761052361051c8461050f5f545f52600960205260405f2090565b905f5260205260405f2090565b5460ff1690565b1590565b61062c575b61058281610542845f52600460205260405f2090565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b7f5715dd8098a6bd04982c690b88461fa9a7cf9319992f6f997a61fb0a673b52f55f54916105d56105bb855f52600560205260405f2090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b906106276105ee61051c875f52600660205260405f2090565b60405193849384919273ffffffffffffffffffffffffffffffffffffffff60409295948160608601971685521660208401521515910152565b0390a3005b61063f61063a600354611c64565b600355565b61052c565b3461034f575f60031936011261034f57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461034f575f60031936011261034f576020600354604051908152f35b3461034f57602060031936011261034f576004355f526005602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761073a57604052565b6106f1565b90601f601f19910116810190811067ffffffffffffffff82111761073a57604052565b67ffffffffffffffff811161073a57601f01601f191660200190565b92919261078a82610762565b91610798604051938461073f565b82948184528183011161034f578281602093845f960137010152565b9080601f8301121561034f578160206102c89335910161077e565b604060031936011261034f576107e3610409565b60243567ffffffffffffffff811161034f576108039036906004016107b4565b9073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168030149081156109a2575b5061097a576108536121cd565b604051917f52d1902d00000000000000000000000000000000000000000000000000000000835260208360048173ffffffffffffffffffffffffffffffffffffffff86165afa5f9381610949575b506108e8577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff821660045260245ffd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc830361091c5761091a925061251c565b005b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600483905260245ffd5b61096c91945060203d602011610973575b610964818361073f565b8101906121be565b925f6108a1565b503d61095a565b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f610846565b3461034f575f60031936011261034f5773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016300361097a5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b3461034f57608060031936011261034f57600435610a7761042c565b610a7f61044f565b606435801515810361034f57610a936121cd565b610ab473ffffffffffffffffffffffffffffffffffffffff84161515611baa565b610abf841515611bd9565b610acb6104ed8561267f565b610ae861052361051c8661050f5f545f52600960205260405f2090565b610be9575b610b0383610542865f52600460205260405f2090565b7f00000000000000000000000000000000000000000000000000000000000000008403610b66575b50507f5715dd8098a6bd04982c690b88461fa9a7cf9319992f6f997a61fb0a673b52f55f54916105d56105bb855f52600560205260405f2090565b610ba082610b8e73ffffffffffffffffffffffffffffffffffffffff610be295161515611baa565b610542865f52600560205260405f2090565b610bb2845f52600660205260405f2090565b9060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b5f80610b2b565b610bf761063a600354611c64565b610aed565b9181601f8401121561034f5782359167ffffffffffffffff831161034f576020838186019501011161034f57565b9181601f8401121561034f5782359167ffffffffffffffff831161034f576020808501948460051b01011161034f57565b3461034f57606060031936011261034f5760043567ffffffffffffffff811161034f57610c8c903690600401610bfc565b9060243567ffffffffffffffff811161034f57610cad903690600401610c2a565b6044939193359067ffffffffffffffff821161034f57610d0a94610cd8610d03933690600401610c2a565b92909185877f0000000000000000000000000000000000000000000000000000000000000000612268565b369161077e565b602081519101205f52600860205261091a60ff60405f205416611c72565b3461034f57604060031936011261034f57600435602435905f52600960205260405f20905f52602052602060ff60405f2054166040519015158152f35b3461034f57602060031936011261034f57600435600154811015610db55760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60154604051908152602090f35b611f30565b3461034f57602060031936011261034f57600435610dda5f548210611b7b565b5f52600c60205260405f206040519081602082549182815201915f5260205f20905f5b818110610e1457610335856103298187038261073f565b8254845260209093019260019283019201610dfd565b3461034f575f60031936011261034f57602060405160028152f35b3461034f57604060031936011261034f57600435602435905f52600a60205260405f20905f52602052602060405f2054604051908152f35b3461034f57602060031936011261034f576004355f526008602052602060ff60405f2054166040519015158152f35b3461034f575f60031936011261034f57602060405160038152f35b3461034f575f60031936011261034f57610edf6121cd565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461034f57602060031936011261034f57600435610fa35f548210611b7b565b5f52600c602052602060405f2054604051908152f35b3461034f57602060031936011261034f57600435610fd56121cd565b610fe6610fe1826127ce565b611ca1565b611023610ffb825f52600460205260405f2090565b7fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055565b7f0000000000000000000000000000000000000000000000000000000000000000810361110f575b805f5461106a61052361051c8461050f855f52600960205260405f2090565b611098575b505f547f451acf480dc81605ee92fc829c4efa4817de96e1b5f0c00246a54e29f28d341a5f80a3005b5f9161050f6110af925f52600a60205260405f2090565b556110be61063a600354611cd0565b600354156110ce575b805f61106f565b6110fd5f54807f78df938181afcb28eaa7d099235bbf9877832d6faafe36d1ea70916f3ace33e05f80a2611c64565b5f5561110a600154600355565b6110c7565b611124610ffb825f52600560205260405f2090565b611161611139825f52600660205260405f2090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008154169055565b61104b565b3461034f5761010060031936011261034f5760043560243560443567ffffffffffffffff811161034f5761119e903690600401610bfc565b60649391933567ffffffffffffffff811161034f576111c1903690600401610c2a565b60849291923567ffffffffffffffff811161034f576111e4903690600401610c2a565b60a49291923567ffffffffffffffff811161034f57611207903690600401610bfc565b93909260c43567ffffffffffffffff811161034f5761122a903690600401610c2a565b97909660e4359b67ffffffffffffffff8d1161034f5761125161091a9d3690600401610c2a565b9c909b611d3a565b3461034f57606060031936011261034f5760043560243567ffffffffffffffff811161034f5761128d903690600401610c2a565b9060443567ffffffffffffffff811161034f576112ae903690600401610c2a565b6113206112ef8661050f5f979597546112e16112dc61052361051c8661050f865f52600960205260405f2090565b611e6e565b5f52600a60205260405f2090565b54604051602081019061131781611309878b8a8c88611eda565b03601f19810183528261073f565b51902014611f01565b5f5b8281106113ef578561136f6113448261050f5f545f52600960205260405f2090565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b61137d61063a600354611cd0565b600354156113ae575b5f547f4fe496241536a0244f6fd4540c5067809406efae92e0eb9326257becb1d312a25f80a3005b6113dd5f54807f78df938181afcb28eaa7d099235bbf9877832d6faafe36d1ea70916f3ace33e05f80a2611c64565b5f556113ea600154600355565b611386565b806113fd6001928488611f5d565b358061140b575b5001611322565b61147561146d61141c84888a611f5d565b35611439816114345f545f52600c60205260405f2090565b6126f9565b5061144d5f545f52600b60205260405f2090565b611458858254611f7b565b905561050f5f545f52600d60205260405f2090565b918254611f7b565b90555f611404565b3461034f575f60031936011261034f57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461034f575f60031936011261034f5760205f54604051908152f35b3461034f575f60031936011261034f5760206040517fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa06008152f35b3461034f57602060031936011261034f576004355f526004602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b3461034f575f60031936011261034f576040805190611584818361073f565b6005825260208201917f352e302e300000000000000000000000000000000000000000000000000000008352601f19601f8351948593602085525180918160208701528686015e5f85828601015201168101030190f35b3461034f57602060031936011261034f576004355f526006602052602060ff60405f2054166040519015158152f35b3461034f57602060031936011261034f5760043561162a5f548210611b7b565b5f52600b602052602060405f2054604051908152f35b3461034f57604060031936011261034f57600435602435905f52600d60205260405f20905f52602052602060405f2054604051908152f35b3461034f575f60031936011261034f576020600154604051908152f35b3461034f57604060031936011261034f5760043560243573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361179457817fafa20499e4d163c5d4412668267ab29988c69c33850c8222916323991f855e9f925f52600760205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055815f52600860205261177a60405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b60408051918252602082019290925290819081015b0390a1005b7f24b2e7fd000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461034f57602060031936011261034f5761091a6117d8610409565b6117e06121cd565b611f88565b90916117fc6102c893604084526040840190610284565b916020818403910152610284565b3461034f57606060031936011261034f57600435602435906044356118315f548310611b7b565b815f52600c60205260405f20548381039081116118ef57811580156118e6575b6118de575b5061186081612110565b9161186a82612110565b935f5b83811061188357604051806103358888836117e5565b6001906118cc6118ae61189e865f52600c60205260405f2090565b6118a88487611f7b565b90612767565b806118b9848a61218f565b5261050f865f52600d60205260405f2090565b546118d7828961218f565b520161186d565b90505f611856565b50808211611851565b611c37565b3461034f57602060031936011261034f576004355f526007602052602060ff60405f2054166040519015158152f35b3461034f57602060031936011261034f577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460043567ffffffffffffffff61197c604084901c60ff16159367ffffffffffffffff1690565b1680159081611b73575b6001149081611b69575b159081611b60575b50611b3857611a199082611a1060017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b611abd576121a3565b611a1f57005b611a8a7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290806020810161178f565b611b33680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b6121a3565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f611998565b303b159150611990565b839150611986565b15611b8257565b7fc5b14571000000000000000000000000000000000000000000000000000000005f5260045ffd5b15611bb157565b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b15611be057565b7fc84885d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b15611c0f57565b7fdf650a00000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f1981146118ef5760010190565b15611c7957565b7faafde8bb000000000000000000000000000000000000000000000000000000005f5260045ffd5b15611ca857565b7fec074aba000000000000000000000000000000000000000000000000000000005f5260045ffd5b80156118ef575f190190565b15611ce357565b7fbed9c277000000000000000000000000000000000000000000000000000000005f5260045ffd5b15611d1257565b7fab6d0b89000000000000000000000000000000000000000000000000000000005f5260045ffd5b9395979c919a899c919a611d529496989a8f87612268565b7f00000000000000000000000000000000000000000000000000000000000000008114611e4c5792611e079592611e0f989592611dda6105bb87611da7611e1c9f9c9961051c905f52600660205260405f2090565b15611e1e57610353611dd561051c611dc036888f61077e565b602081519101205f52600860205260405f2090565b611d0b565b95604051611dfe816113096020820194856020600391939293604081019481520152565b51902096612406565b92369161077e565b6020815191012014611c72565b565b610353611e4761051c611e3236888f61077e565b602081519101205f52600760205260405f2090565b611cdc565b505050505050505061051c611dc0611e1c93611e6993369161077e565b611c72565b15611e7557565b7f9fbfc589000000000000000000000000000000000000000000000000000000005f5260045ffd5b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831161034f5760209260051b809284830137010190565b9290611ef3906102c89593604086526040860191611e9d565b926020818503910152611e9d565b15611f0857565b7f5cb045db000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9190811015610db55760051b0190565b90600182018092116118ef57565b919082018092116118ef57565b73ffffffffffffffffffffffffffffffffffffffff1680156120495773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b905f1982019182116118ef57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4082019182116118ef57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8082019182116118ef57565b60200390602082116118ef57565b919082039182116118ef57565b67ffffffffffffffff811161073a5760051b60200190565b9061211a826120f8565b612127604051918261073f565b828152601f1961213782946120f8565b0190602036910137565b805160031015610db55760800190565b805160021015610db55760600190565b805160101015610db5576102200190565b805115610db55760200190565b805160011015610db55760400190565b8051821015610db55760209160051b010190565b5f556121ad612db7565b6121b5612db7565b611e1c33611f88565b9081602091031261034f575190565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361220d57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b1561224057565b7f9a0cce53000000000000000000000000000000000000000000000000000000005f5260045ffd5b9392915f5496875f52600a60205260405f20865f5260205261228e60405f205415611e6e565b855f52600260205260405f205415612314576123119661050f95612305956122c16105bb8a5f52600460205260405f2090565b948b604051611dfe8161130960208201948560207fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa060091939293604081019481520152565b936112e1851515612239565b55565b7fa04c4553000000000000000000000000000000000000000000000000000000005f5260045ffd5b929190612348816120f8565b93612356604051958661073f565b602085838152019160051b81019183831161034f5781905b83821061237c575050505050565b813567ffffffffffffffff811161034f5760209161239d87849387016107b4565b81520191019061236e565b156123af57565b7f547706af000000000000000000000000000000000000000000000000000000005f5260045ffd5b156123de57565b7f3477dcda000000000000000000000000000000000000000000000000000000005f5260045ffd5b93612456956124ce6124f16124656124ec6124e061245661250b9d6102c89f9c6124da6124d56124da9d6124c09f6124ce6124d59f61246561246061245b6124566124c09a61246b95369161077e565b612877565b6128f2565b612141565b5161299f565b966040516124aa816113096020820194857fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060149260601b1681520190565b5190206040519687916020830160209181520190565b03601f19810187528661073f565b369161233c565b6129e1565b91612a81565b61245b815115156123a8565b612151565b966040516124aa8161130960208201948560209181520190565b612517815115156123d7565b61299f565b90813b1561260b5773ffffffffffffffffffffffffffffffffffffffff8216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a28051156125da576125d791612e0e565b50565b5050346125e357565b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b8054821015610db5575f5260205f2001905f90565b9161267b918354905f199060031b92831b921b19161790565b9055565b5f818152600260205260409020546126f4576001546801000000000000000081101561073a5760018101600155600154811015610db55760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601819055600154905f52600260205260405f2055600190565b505f90565b5f828152600182016020526040902054612761578054906801000000000000000082101561073a578261274c61273684600180960185558461264d565b81939154905f199060031b92831b921b19161790565b90558054925f520160205260405f2055600190565b50505f90565b906127719161264d565b90549060031b1c90565b805480156127a1575f190190612791828261264d565b5f1982549160031b1b1916905555565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f81815260026020526040902054908115612761575f198201908282116118ef57600154925f1984019384116118ef5783835f95612828950361282e575b505050612819600161277b565b6002905f5260205260405f2090565b55600190565b6128196128509161284661277161285695600161264d565b928391600161264d565b90612662565b555f808061280c565b6040519061286c8261071e565b5f6020838281520152565b61287f61285f565b506020815191604051926128928461071e565b835201602082015290565b1561034f57565b906128ae826120f8565b6128bb604051918261073f565b828152601f196128cb82946120f8565b01905f5b8281106128db57505050565b6020906128e661285f565b828285010152016128cf565b906128fc82612e52565b1561034f5761290a82612e71565b91612914836128a4565b9060208101805161292481612ed2565b81018091116118ef57945f905b8082106129535750506102c892939461294b9151906120eb565b90511461289d565b909561299781612964600193612f3d565b9060405161297360408261073f565b8281528160208201526129868b8a61218f565b526129918a8961218f565b50611f7b565b960190612931565b805180151590816129d5575b501561034f576129ba90612ff7565b905190602081106129c9575090565b6020036101000a900490565b6021915011155f6129ab565b6129eb81516128a4565b905f5b8151811015612a295780612a0d612a076001938561218f565b51612877565b612a17828661218f565b52612a22818561218f565b50016129ee565b505090565b60405190612a3d60208361073f565b5f808352366020840137565b90612a5382610762565b612a60604051918261073f565b828152601f196121378294610762565b908151811015610db5570160200190565b90612a8b9061306d565b5f915f612a9661285f565b50845115612d7e57935f915b8151831015612d1f5782158080612d09575b61034f571580612ced575b61034f57612ad6612ad0848461218f565b516128f2565b958651600281145f14612bd7575050612aff612afa612af488612172565b516132bb565b613309565b95612b15612b0e888884613376565b8092611f7b565b965111612bb95715612b4c5750612b2c9051612075565b1161034f575111612b4357612af46102c89161217f565b506102c8612a2e565b919094612b598651612075565b821461034f5780612b77610523612b7160019461217f565b51612e52565b15612b9a57612b88612b8e9161217f565b516132fb565b915b0191949094612aa2565b612ba6612bb39161217f565b5160208101519051902090565b91612b90565b505091509250612bca915051612075565b1161034f576102c8612a2e565b6011909791939794929414612bf0575b50600190612b90565b959380925094929094518314155f14612ccf5760ff612c4a612c44612c3e612c188787612a70565b517fff000000000000000000000000000000000000000000000000000000000000001690565b60f81c90565b94611f6d565b9316601081101561034f57612c68612c62828961218f565b516132e5565b15612c8a5750505050612c7d91925051612075565b0361034f576102c8612a2e565b86612ca2610523612b7184600196989a97999b61218f565b15612cbc57612cb491612b889161218f565b915b90612be7565b612cc991612ba69161218f565b91612cb6565b505050612cdc9051612075565b0361034f57612af46102c891612161565b50612d01612cfb848461218f565b5161327e565b861415612abf565b50612d17612ba6858561218f565b821415612ab4565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c6964204d50542070726f6f660000000000000000000000000000006044820152606490fd5b509050612daf92507f56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42191501461289d565b6102c8612a2e565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615612de657565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f806102c893602081519101845af43d15612e4a573d91612e2e83610762565b92612e3c604051948561073f565b83523d5f602085013e61341a565b60609161341a565b8051156126f457602060c0910151515f1a10612e6d57600190565b5f90565b8051156126f4575f9060208101908151612e8a81612ed2565b81018091116118ef579151905181018091116118ef5791905b828110612eb05750905090565b612eb981612f3d565b81018091116118ef57612ecc9091611c64565b90612ea3565b515f1a6080811015612ee357505f90565b60b881108015612f27575b15612ef95750600190565b60c0811015612f18576102c890612f139060b75b906120eb565b611f6d565b6102c890612f139060f7612f0d565b5060c08110158015612eee575060f88110612eee565b80515f1a906080821015612f52575050600190565b60b8821015612f685750612f136102c8916120b0565b60c0821015612fa95760010151602082900360b7016101000a9004017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4a0190565b60f8821015612fbf5750612f136102c891612083565b60010151602082900360f7016101000a9004017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0a0190565b9060208201916130078351612ed2565b9251908382018092116118ef57519283039283116118ef579190565b908160011b91808304600214901517156118ef57565b1561304057565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b906130965f613087845161308281151561289d565b613023565b613091600161289d565b6120eb565b906130a082612a49565b925f91825b6130af855f611f7b565b84101561316f5761312a612c446130af926130ca8760011690565b613132577f0f0000000000000000000000000000000000000000000000000000000000000061311461310b612c3e612c186131058c60011c90565b8b612a70565b60041c600f1690565b60f81b165f1a613124828b612a70565b53611f6d565b9390506130a5565b7f0f00000000000000000000000000000000000000000000000000000000000000613114613169612c3e612c186131058c60011c90565b60ff1690565b91509250611e1c9150835114613039565b6131a082613194835161308281151561289d565b6130918183111561289d565b906131aa82612a49565b9383925f5b6131b98287611f7b565b85101561326c579061322c6132266131b9936131d58860011690565b613235577f0f0000000000000000000000000000000000000000000000000000000000000061321661310b612c3e612c186132108d60011c90565b8c612a70565b60f81b165f1a613124828c612a70565b95611f6d565b949091506131af565b7f0f00000000000000000000000000000000000000000000000000000000000000613216613169612c3e612c186132108d60011c90565b9250509250611e1c9150835114613039565b80516020811015613296575060208101519051902090565b90602001512060405160208101918252602081526132b560408261073f565b51902090565b80511561034f576132ce6102c891612ff7565b6132da81939293612a49565b9283602001906134c2565b60018151036126f45760200151515f1a60801490565b61330490612ff7565b902090565b9081511561034f57600f61332561310b612c3e612c1886612172565b168061333857506102c860025f93613180565b6001810361334d57506102c860015f93613180565b6002810361336357506102c86002600193613180565b60030361034f576102c860018093613180565b91905f5b8381018082116118ef578251811080613410575b15613408576133be7fff000000000000000000000000000000000000000000000000000000000000009184612a70565b51167fff000000000000000000000000000000000000000000000000000000000000006133eb8386612a70565b51169003613401576133fc90611c64565b61337a565b9250505090565b509250505090565b508351821061338e565b90613457575080511561342f57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b815115806134aa575b613468575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15613460565b601f81116118ef576101000a90565b90918015613535575b602081101561350557806134de57505050565b6134f26134ed6134f7926120dd565b6134b3565b612075565b905182518216911916179052565b919080518252602081018091116118ef5790602081018091116118ef5791601f198101908111156134cb57611c37565b50505056 + ///0x60806040526004361015610011575f80fd5b5f3560e01c80631aa277af1461029f5780631c8081ed1461029a5780632262389714610295578063285f2446146102905780633198eb101461028b578063362b8154146102865780634a5723db146102815780634eb4f97a1461027c5780634f1ef2861461027757806352d1902d14610272578063563344b61461026d578063567f3b3e146102685780635a633080146102635780635e84009d1461025e5780635f7907431461025957806360630122146102545780636b4d17ad1461024f5780636ba3d17f1461024a5780636cfadeb514610245578063709ba44a146101fa578063715018a6146102405780637d4588b11461023b5780637d85a281146102365780637e26965d146102315780638a5f7e6d1461022c5780638da5cb5b14610227578063900cf0cf14610222578063a55223711461021d578063a6e5e12514610218578063ad3cb1cc14610213578063cd0f45d21461020e578063ce537c9f14610209578063daac1a5614610204578063dc027d6b146101ff578063e18b4dae146101fa578063e48465b7146101f5578063f2fde38b146101f0578063f4030228146101eb578063f5ec3ad0146101e6578063fe4b84df146101e15763ffa1ad74146101dc575f80fd5b612510565b6122b8565b61226a565b612109565b6120bb565b611f56565b6112a0565b611f1a565b611ec3565b611e4e565b611e00565b611d8a565b611d2b565b611cf1565b611cb5565b611c63565b611828565b611735565b6113ec565b611377565b6112bb565b611252565b6111fb565b6111e0565b611132565b6110f8565b611065565b611009565b610f1d565b610c23565b610bac565b610997565b61085a565b61081e565b6107ce565b610502565b610416565b6103dc565b610393565b6102eb565b90602080835192838152019201905f5b8181106102c15750505090565b82518452602093840193909201916001016102b4565b9060206102e89281815201906102a4565b90565b3461038f575f60031936011261038f576040517fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4015480825260208201907fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4015f5260205f20905f5b818110610379576103758561036981870382610907565b604051918291826102d7565b0390f35b8254845260209093019260019283019201610352565b5f80fd5b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40b602052602060405f2054604051908152f35b3461038f575f60031936011261038f5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461038f57604060031936011261038f576004356024359061045a7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054821061255a565b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40d60205260405f20905f52602052602060405f2054604051908152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361038f57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361038f57565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361038f57565b3461038f57602060031936011261038f5761051b610499565b7f000000000000000000000000000000000000000000000000000000000000000090610545612c2e565b61056673ffffffffffffffffffffffffffffffffffffffff82161515612589565b6105718215156125b8565b61058261057d83613169565b6125e7565b6105f66105f26105eb846105de7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f2090565b905f5260205260405f2090565b5460ff1690565b1590565b610778575b61067081610630845f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40460205260405f2090565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b7f5715dd8098a6bd04982c690b88461fa9a7cf9319992f6f997a61fb0a673b52f57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054916107026106e8855f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40560205260405f2090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b9061077361073a6105eb875f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40660205260405f2090565b60405193849384919273ffffffffffffffffffffffffffffffffffffffff60409295948160608601971685521660208401521515910152565b0390a3005b6107c96107a57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40354612643565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40355565b6105fb565b3461038f575f60031936011261038f57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461038f575f60031936011261038f5760207fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40354604051908152f35b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a405602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff82111761090257604052565b6108b9565b90601f601f19910116810190811067ffffffffffffffff82111761090257604052565b67ffffffffffffffff811161090257601f01601f191660200190565b9291926109528261092a565b916109606040519384610907565b82948184528183011161038f578281602093845f960137010152565b9080601f8301121561038f578160206102e893359101610946565b604060031936011261038f576109ab610499565b60243567ffffffffffffffff811161038f576109cb90369060040161097c565b9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610b6a575b50610b4257610a1b612c2e565b604051917f52d1902d00000000000000000000000000000000000000000000000000000000835260208360048173ffffffffffffffffffffffffffffffffffffffff86165afa5f9381610b11575b50610ab0577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff821660045260245ffd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8303610ae457610ae29250613006565b005b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600483905260245ffd5b610b3491945060203d602011610b3b575b610b2c8183610907565b810190612c1f565b925f610a69565b503d610b22565b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f610a0e565b3461038f575f60031936011261038f5773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610b425760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b3461038f57608060031936011261038f57600435610c3f6104bc565b610c476104df565b606435801515810361038f57610c5b612c2e565b610c7c73ffffffffffffffffffffffffffffffffffffffff84161515612589565b610c878415156125b8565b610c9361057d85613169565b610cef6105f26105eb866105de7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f2090565b610e8c575b610d2983610630865f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40460205260405f2090565b7f00000000000000000000000000000000000000000000000000000000000000008403610dcb575b50507f5715dd8098a6bd04982c690b88461fa9a7cf9319992f6f997a61fb0a673b52f57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054916107026106e8855f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40560205260405f2090565b610e2482610df373ffffffffffffffffffffffffffffffffffffffff610e8595161515612589565b610630865f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40560205260405f2090565b610e55845f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40660205260405f2090565b9060ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083541691151516179055565b5f80610d51565b610eb96107a57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40354612643565b610cf4565b9181601f8401121561038f5782359167ffffffffffffffff831161038f576020838186019501011161038f57565b9181601f8401121561038f5782359167ffffffffffffffff831161038f576020808501948460051b01011161038f57565b3461038f57606060031936011261038f5760043567ffffffffffffffff811161038f57610f4e903690600401610ebe565b9060243567ffffffffffffffff811161038f57610f6f903690600401610eec565b6044939193359067ffffffffffffffff821161038f57610fcc94610f9a610fc5933690600401610eec565b92909185877f0000000000000000000000000000000000000000000000000000000000000000612cf8565b3691610946565b602081519101205f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a408602052610ae260ff60405f205416612656565b3461038f57604060031936011261038f57600435602435905f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f20905f52602052602060ff60405f2054166040519015158152f35b3461038f57602060031936011261038f576004357fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401548110156110f3577fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4015f527fdaac75c40bd42f199572623979cd72d831e7903a136ecb1935e6fa006548c8220154604051908152602090f35b612971565b3461038f575f60031936011261038f5760206040517fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4008152f35b3461038f57602060031936011261038f576004356111727fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054821061255a565b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40c60205260405f2060405190805480835260208301915f5260205f20905f5b8181106111ca576103758561036981870382610907565b82548452602090930192600192830192016111b3565b3461038f575f60031936011261038f57602060405160028152f35b3461038f57604060031936011261038f57600435602435905f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40a60205260405f20905f52602052602060405f2054604051908152f35b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a408602052602060ff60405f2054166040519015158152f35b3461038f575f60031936011261038f57602060405160038152f35b3461038f575f60031936011261038f576112d3612c2e565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461038f57602060031936011261038f576004356113b77fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054821061255a565b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40c602052602060405f2054604051908152f35b3461038f57602060031936011261038f57600435611408612c2e565b61141961141482613350565b612685565b61147561144d825f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40460205260405f2090565b7fffffffffffffffffffffffff00000000000000000000000000000000000000008154169055565b7f000000000000000000000000000000000000000000000000000000000000000081036116a0575b807fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400546114fb6105f26105eb846105de855f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f2090565b611549575b507fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400547f451acf480dc81605ee92fc829c4efa4817de96e1b5f0c00246a54e29f28d341a5f80a3005b5f916105de61157f925f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40a60205260405f2090565b556115ad6107a57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a403546126b4565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40354156115dc575b805f611500565b61165261162e7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054807f78df938181afcb28eaa7d099235bbf9877832d6faafe36d1ea70916f3ace33e05f80a2612643565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40055565b61169b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401547fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40355565b6115d5565b6116d461144d825f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40560205260405f2090565b611730611708825f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40660205260405f2090565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008154169055565b61149d565b3461038f5761010060031936011261038f5760043560243560443567ffffffffffffffff811161038f5761176d903690600401610ebe565b60649391933567ffffffffffffffff811161038f57611790903690600401610eec565b60849291923567ffffffffffffffff811161038f576117b3903690600401610eec565b60a49291923567ffffffffffffffff811161038f576117d6903690600401610ebe565b93909260c43567ffffffffffffffff811161038f576117f9903690600401610eec565b97909660e4359b67ffffffffffffffff8d1161038f57611820610ae29d3690600401610eec565b9c909b61271e565b3461038f57606060031936011261038f5760043560243567ffffffffffffffff811161038f5761185c903690600401610eec565b9060443567ffffffffffffffff811161038f5761187d903690600401610eec565b61194d61191c866105de7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400979597546118ef6118ea6105f26105eb866105de865f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f2090565b6128af565b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40a60205260405f2090565b54604051602081019061194481611936878b8a8c8861291b565b03601f198101835282610907565b51902014612942565b5f5b828110611b1857856119db6119b0826105de7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40960205260405f2090565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b611a086107a57fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a403546126b4565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4035415611a78575b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400547f4fe496241536a0244f6fd4540c5067809406efae92e0eb9326257becb1d312a25f80a3005b611aca61162e7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054807f78df938181afcb28eaa7d099235bbf9877832d6faafe36d1ea70916f3ace33e05f80a2612643565b611b137fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401547fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40355565b611a30565b80611b26600192848861299e565b3580611b34575b500161194f565b611c5b611c53611b4584888a61299e565b35611ba181611b9c7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40c60205260405f2090565b613291565b50611bf47fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40b60205260405f2090565b611bff8582546129bc565b90556105de7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400545f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40d60205260405f2090565b9182546129bc565b90555f611b2d565b3461038f575f60031936011261038f57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461038f575f60031936011261038f5760207fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054604051908152f35b3461038f575f60031936011261038f5760206040517fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa06008152f35b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a404602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b3461038f575f60031936011261038f576040805190611da98183610907565b6005825260208201917f352e302e300000000000000000000000000000000000000000000000000000008352601f19601f8351948593602085525180918160208701528686015e5f85828601015201168101030190f35b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a406602052602060ff60405f2054166040519015158152f35b3461038f57602060031936011261038f57600435611e8e7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054821061255a565b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40b602052602060405f2054604051908152f35b3461038f57604060031936011261038f57600435602435905f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40d60205260405f20905f52602052602060405f2054604051908152f35b3461038f575f60031936011261038f5760207fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40154604051908152f35b3461038f57604060031936011261038f5760043560243573ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361209357817fafa20499e4d163c5d4412668267ab29988c69c33850c8222916323991f855e9f925f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40760205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055815f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40860205261207960405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055565b60408051918252602082019290925290819081015b0390a1005b7f24b2e7fd000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461038f57602060031936011261038f57610ae26120d7610499565b6120df612c2e565b6129c9565b90916120fb6102e8936040845260408401906102a4565b9160208184039101526102a4565b3461038f57606060031936011261038f57600435602435906044356121507fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054831061255a565b815f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40c6020526121858360405f2054612b2c565b81158015612261575b612259575b5061219d81612b51565b916121a782612b51565b935f5b8381106121c057604051806103758888836120e4565b60019061224761220a6121fa865f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40c60205260405f2090565b61220484876129bc565b906132e9565b80612215848a612bd0565b526105de865f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40d60205260405f2090565b546122528289612bd0565b52016121aa565b90505f612193565b5080821161218e565b3461038f57602060031936011261038f576004355f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a407602052602060ff60405f2054166040519015158152f35b3461038f57602060031936011261038f577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460043567ffffffffffffffff612311604084901c60ff16159367ffffffffffffffff1690565b1680159081612508575b60011490816124fe575b1590816124f5575b506124cd576123ae90826123a560017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61245257612be4565b6123b457005b61241f7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290806020810161208e565b6124c8680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b612be4565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f61232d565b303b159150612325565b83915061231b565b3461038f575f60031936011261038f576020604051620f42408152f35b5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40560205260405f2090565b1561256157565b7fc5b14571000000000000000000000000000000000000000000000000000000005f5260045ffd5b1561259057565b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b156125bf57565b7fc84885d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b156125ee57565b7fdf650a00000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f1981146126515760010190565b612616565b1561265d57565b7faafde8bb000000000000000000000000000000000000000000000000000000005f5260045ffd5b1561268c57565b7fec074aba000000000000000000000000000000000000000000000000000000005f5260045ffd5b8015612651575f190190565b156126c757565b7fbed9c277000000000000000000000000000000000000000000000000000000005f5260045ffd5b156126f657565b7fab6d0b89000000000000000000000000000000000000000000000000000000005f5260045ffd5b9395979c919a899c919a6127369496989a8f87612cf8565b7f0000000000000000000000000000000000000000000000000000000000000000811461288d579261282995926128319895926127fc6106e8876127aa61283e9f9c996105eb905f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40660205260405f2090565b156128405761252d6127f76105eb6127c336888f610946565b602081519101205f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40860205260405f2090565b6126ef565b95604051612820816119366020820194856020600391939293604081019481520152565b51902096612ef0565b923691610946565b6020815191012014612656565b565b61252d6128886105eb61285436888f610946565b602081519101205f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40760205260405f2090565b6126c0565b50505050505050506105eb6127c361283e936128aa933691610946565b612656565b156128b657565b7f9fbfc589000000000000000000000000000000000000000000000000000000005f5260045ffd5b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831161038f5760209260051b809284830137010190565b9290612934906102e895936040865260408601916128de565b9260208185039101526128de565b1561294957565b7f5cb045db000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91908110156110f35760051b0190565b906001820180921161265157565b9190820180921161265157565b73ffffffffffffffffffffffffffffffffffffffff168015612a8a5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b905f19820191821161265157565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40820191821161265157565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80820191821161265157565b602003906020821161265157565b9190820391821161265157565b67ffffffffffffffff81116109025760051b60200190565b90612b5b82612b39565b612b686040519182610907565b828152601f19612b788294612b39565b0190602036910137565b8051600310156110f35760800190565b8051600210156110f35760600190565b8051601010156110f3576102200190565b8051156110f35760200190565b8051600110156110f35760400190565b80518210156110f35760209160051b010190565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40055612c0e6139f3565b612c166139f3565b61283e336129c9565b9081602091031261038f575190565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303612c6e57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b15612ca157565b7fa04c4553000000000000000000000000000000000000000000000000000000005f5260045ffd5b15612cd057565b7f9a0cce53000000000000000000000000000000000000000000000000000000005f5260045ffd5b93916105de9396612e2396612e17947fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40054998a5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40a60205260405f20895f52602052612d6960405f2054156128af565b885f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a402602052612d9f60405f20541515612c9a565b612dd36106e88a5f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40460205260405f2090565b948b6040516128208161193660208201948560207fb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa060091939293604081019481520152565b936118ef851515612cc9565b55565b929190612e3281612b39565b93612e406040519586610907565b602085838152019160051b81019183831161038f5781905b838210612e66575050505050565b813567ffffffffffffffff811161038f57602091612e87878493870161097c565b815201910190612e58565b15612e9957565b7f547706af000000000000000000000000000000000000000000000000000000005f5260045ffd5b15612ec857565b7f3477dcda000000000000000000000000000000000000000000000000000000005f5260045ffd5b93612f4095612fb8612fdb612f4f612fd6612fca612f40612ff59d6102e89f9c612fc4612fbf612fc49d612faa9f612fb8612fbf9f612f4f612f4a612f45612f40612faa9a612f55953691610946565b6134b3565b61352e565b612b82565b516135db565b96604051612f94816119366020820194857fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060149260601b1681520190565b5190206040519687916020830160209181520190565b03601f198101875286610907565b3691612e26565b61361d565b916136bd565b612f4581511515612e92565b612b92565b96604051612f948161193660208201948560209181520190565b61300181511515612ec1565b6135db565b90813b156130f55773ffffffffffffffffffffffffffffffffffffffff8216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a28051156130c4576130c191613a4a565b50565b5050346130cd57565b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b80548210156110f3575f5260205f2001905f90565b91613165918354905f199060031b92831b921b19161790565b9055565b5f8181527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a402602052604090205461328c577fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4015468010000000000000000811015610902576132376132218260018594017fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401557fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401613137565b81939154905f199060031b92831b921b19161790565b90557fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40154905f527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40260205260405f2055600190565b505f90565b5f8281526001820160205260409020546132e3578054906801000000000000000082101561090257826132ce613221846001809601855584613137565b90558054925f520160205260405f2055600190565b50505f90565b906132f391613137565b90549060031b1c90565b80548015613323575f1901906133138282613137565b5f1982549160031b1b1916905555565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f8181527fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40260205260409020549081156132e3575f19820190828211612651577fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a40154925f1984019384116126515783835f95613426950361342c575b5050506133f87fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a4016132fd565b7fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a402905f5260205260405f2090565b55600190565b6133f861348c916134636132f3613492957fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401613137565b9283917fd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a401613137565b9061314c565b555f80806133cc565b604051906134a8826108e6565b5f6020838281520152565b6134bb61349b565b506020815191604051926134ce846108e6565b835201602082015290565b1561038f57565b906134ea82612b39565b6134f76040519182610907565b828152601f196135078294612b39565b01905f5b82811061351757505050565b60209061352261349b565b8282850101520161350b565b9061353882613a8e565b1561038f5761354682613aad565b91613550836134e0565b9060208101805161356081613b0e565b810180911161265157945f905b80821061358f5750506102e8929394613587915190612b2c565b9051146134d9565b90956135d3816135a0600193613b79565b906040516135af604082610907565b8281528160208201526135c28b8a612bd0565b526135cd8a89612bd0565b506129bc565b96019061356d565b80518015159081613611575b501561038f576135f690613c33565b90519060208110613605575090565b6020036101000a900490565b6021915011155f6135e7565b61362781516134e0565b905f5b8151811015613665578061364961364360019385612bd0565b516134b3565b6136538286612bd0565b5261365e8185612bd0565b500161362a565b505090565b60405190613679602083610907565b5f808352366020840137565b9061368f8261092a565b61369c6040519182610907565b828152601f19612b78829461092a565b9081518110156110f3570160200190565b906136c790613ca9565b5f915f6136d261349b565b508451156139ba57935f915b815183101561395b5782158080613945575b61038f571580613929575b61038f5761371261370c8484612bd0565b5161352e565b958651600281145f1461381357505061373b61373661373088612bb3565b51613ef7565b613f45565b9561375161374a888884613fb2565b80926129bc565b9651116137f5571561378857506137689051612ab6565b1161038f57511161377f576137306102e891612bc0565b506102e861366a565b9190946137958651612ab6565b821461038f57806137b36105f26137ad600194612bc0565b51613a8e565b156137d6576137c46137ca91612bc0565b51613f37565b915b01919490946136de565b6137e26137ef91612bc0565b5160208101519051902090565b916137cc565b505091509250613806915051612ab6565b1161038f576102e861366a565b601190979193979492941461382c575b506001906137cc565b959380925094929094518314155f1461390b5760ff61388661388061387a61385487876136ac565b517fff000000000000000000000000000000000000000000000000000000000000001690565b60f81c90565b946129ae565b9316601081101561038f576138a461389e8289612bd0565b51613f21565b156138c657505050506138b991925051612ab6565b0361038f576102e861366a565b866138de6105f26137ad84600196989a97999b612bd0565b156138f8576138f0916137c491612bd0565b915b90613823565b613905916137e291612bd0565b916138f2565b5050506139189051612ab6565b0361038f576137306102e891612ba2565b5061393d6139378484612bd0565b51613eba565b8614156136fb565b506139536137e28585612bd0565b8214156136f0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c6964204d50542070726f6f660000000000000000000000000000006044820152606490fd5b5090506139eb92507f56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4219150146134d9565b6102e861366a565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615613a2257565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f806102e893602081519101845af43d15613a86573d91613a6a8361092a565b92613a786040519485610907565b83523d5f602085013e614056565b606091614056565b80511561328c57602060c0910151515f1a10613aa957600190565b5f90565b80511561328c575f9060208101908151613ac681613b0e565b8101809111612651579151905181018091116126515791905b828110613aec5750905090565b613af581613b79565b810180911161265157613b089091612643565b90613adf565b515f1a6080811015613b1f57505f90565b60b881108015613b63575b15613b355750600190565b60c0811015613b54576102e890613b4f9060b75b90612b2c565b6129ae565b6102e890613b4f9060f7613b49565b5060c08110158015613b2a575060f88110613b2a565b80515f1a906080821015613b8e575050600190565b60b8821015613ba45750613b4f6102e891612af1565b60c0821015613be55760010151602082900360b7016101000a9004017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4a0190565b60f8821015613bfb5750613b4f6102e891612ac4565b60010151602082900360f7016101000a9004017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0a0190565b906020820191613c438351613b0e565b9251908382018092116126515751928303928311612651579190565b908160011b918083046002149015171561265157565b15613c7c57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b90613cd25f613cc38451613cbe8115156134d9565b613c5f565b613ccd60016134d9565b612b2c565b90613cdc82613685565b925f91825b613ceb855f6129bc565b841015613dab57613d66613880613ceb92613d068760011690565b613d6e577f0f00000000000000000000000000000000000000000000000000000000000000613d50613d4761387a613854613d418c60011c90565b8b6136ac565b60041c600f1690565b60f81b165f1a613d60828b6136ac565b536129ae565b939050613ce1565b7f0f00000000000000000000000000000000000000000000000000000000000000613d50613da561387a613854613d418c60011c90565b60ff1690565b9150925061283e9150835114613c75565b613ddc82613dd08351613cbe8115156134d9565b613ccd818311156134d9565b90613de682613685565b9383925f5b613df582876129bc565b851015613ea85790613e68613e62613df593613e118860011690565b613e71577f0f00000000000000000000000000000000000000000000000000000000000000613e52613d4761387a613854613e4c8d60011c90565b8c6136ac565b60f81b165f1a613d60828c6136ac565b956129ae565b94909150613deb565b7f0f00000000000000000000000000000000000000000000000000000000000000613e52613da561387a613854613e4c8d60011c90565b925050925061283e9150835114613c75565b80516020811015613ed2575060208101519051902090565b9060200151206040516020810191825260208152613ef1604082610907565b51902090565b80511561038f57613f0a6102e891613c33565b613f1681939293613685565b9283602001906140fe565b600181510361328c5760200151515f1a60801490565b613f4090613c33565b902090565b9081511561038f57600f613f61613d4761387a61385486612bb3565b1680613f7457506102e860025f93613dbc565b60018103613f8957506102e860015f93613dbc565b60028103613f9f57506102e86002600193613dbc565b60030361038f576102e860018093613dbc565b91905f5b83810180821161265157825181108061404c575b1561404457613ffa7fff0000000000000000000000000000000000000000000000000000000000000091846136ac565b51167fff0000000000000000000000000000000000000000000000000000000000000061402783866136ac565b5116900361403d5761403890612643565b613fb6565b9250505090565b509250505090565b5083518210613fca565b90614093575080511561406b57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b815115806140e6575b6140a4575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561409c565b601f8111612651576101000a90565b90918015614171575b6020811015614141578061411a57505050565b61412e61412961413392612b1e565b6140ef565b612ab6565b905182518216911916179052565b919080518252602081018091116126515790602081018091116126515791601f1981019081111561410757612616565b50505056 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x1A\xA2w\xAF\x14a\x02\x7FW\x80c\x1C\x80\x81\xED\x14a\x02zW\x80c\"b8\x97\x14a\x02uW\x80c(_$F\x14a\x02pW\x80c1\x98\xEB\x10\x14a\x02kW\x80c6+\x81T\x14a\x02fW\x80cJW#\xDB\x14a\x02aW\x80cN\xB4\xF9z\x14a\x02\\W\x80cO\x1E\xF2\x86\x14a\x02WW\x80cR\xD1\x90-\x14a\x02RW\x80cV3D\xB6\x14a\x02MW\x80cV\x7F;>\x14a\x02HW\x80cZc0\x80\x14a\x02CW\x80c^\x84\0\x9D\x14a\x02>W\x80c`c\x01\"\x14a\x029W\x80ckM\x17\xAD\x14a\x024W\x80ck\xA3\xD1\x7F\x14a\x02/W\x80cl\xFA\xDE\xB5\x14a\x02*W\x80cp\x9B\xA4J\x14a\x01\xDFW\x80cqP\x18\xA6\x14a\x02%W\x80c}E\x88\xB1\x14a\x02 W\x80c}\x85\xA2\x81\x14a\x02\x1BW\x80c~&\x96]\x14a\x02\x16W\x80c\x8A_~m\x14a\x02\x11W\x80c\x8D\xA5\xCB[\x14a\x02\x0CW\x80c\x90\x0C\xF0\xCF\x14a\x02\x07W\x80c\xA5R#q\x14a\x02\x02W\x80c\xA6\xE5\xE1%\x14a\x01\xFDW\x80c\xAD<\xB1\xCC\x14a\x01\xF8W\x80c\xCD\x0FE\xD2\x14a\x01\xF3W\x80c\xCES|\x9F\x14a\x01\xEEW\x80c\xDA\xAC\x1AV\x14a\x01\xE9W\x80c\xDC\x02}k\x14a\x01\xE4W\x80c\xE1\x8BM\xAE\x14a\x01\xDFW\x80c\xE4\x84e\xB7\x14a\x01\xDAW\x80c\xF2\xFD\xE3\x8B\x14a\x01\xD5W\x80c\xF4\x03\x02(\x14a\x01\xD0W\x80c\xF5\xEC:\xD0\x14a\x01\xCBWc\xFEK\x84\xDF\x14a\x01\xC6W_\x80\xFD[a\x19#V[a\x18\xF4V[a\x18\nV[a\x17\xBCV[a\x16\x95V[a\x0E\xACV[a\x16xV[a\x16@V[a\x16\nV[a\x15\xDBV[a\x15eV[a\x15%V[a\x14\xEBV[a\x14\xCFV[a\x14}V[a\x12YV[a\x11fV[a\x0F\xB9V[a\x0F\x83V[a\x0E\xC7V[a\x0E}V[a\x0EEV[a\x0E*V[a\r\xBAV[a\reV[a\r(V[a\x0C[V[a\n[V[a\t\xE4V[a\x07\xCFV[a\x06\xB1V[a\x06\x94V[a\x06DV[a\x04rV[a\x03\xC5V[a\x03\x8BV[a\x03aV[a\x02\xCBV[\x90` \x80\x83Q\x92\x83\x81R\x01\x92\x01\x90_[\x81\x81\x10a\x02\xA1WPPP\x90V[\x82Q\x84R` \x93\x84\x01\x93\x90\x92\x01\x91`\x01\x01a\x02\x94V[\x90` a\x02\xC8\x92\x81\x81R\x01\x90a\x02\x84V[\x90V[4a\x03OW_`\x03\x196\x01\x12a\x03OW`@Q\x80` `\x01T\x91\x82\x81R\x01\x90`\x01_R\x7F\xB1\x0E-Rv\x12\x07;&\xEE\xCD\xFDq~j2\x0C\xF4KJ\xFA\xC2\xB0s-\x9F\xCB\xE2\xB7\xFA\x0C\xF6\x90_[\x81\x81\x10a\x039Wa\x035\x85a\x03)\x81\x87\x03\x82a\x07?V[`@Q\x91\x82\x91\x82a\x02\xB7V[\x03\x90\xF3[\x82T\x84R` \x90\x93\x01\x92`\x01\x92\x83\x01\x92\x01a\x03\x12V[_\x80\xFD[_R`\x05` R`@_ \x90V[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x0B` R` `@_ T`@Q\x90\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `@Q\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xF3[4a\x03OW`@`\x03\x196\x01\x12a\x03OW`\x045`$5\x90a\x03\xE9_T\x82\x10a\x1B{V[_R`\r` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03OWV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03OWV[`D5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03OWV[4a\x03OW` `\x03\x196\x01\x12a\x03OWa\x04\x8Ba\x04\tV[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\x04\xB5a!\xCDV[a\x04\xD6s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a\x1B\xAAV[a\x04\xE1\x82\x15\x15a\x1B\xD9V[a\x04\xF2a\x04\xED\x83a&\x7FV[a\x1C\x08V[a\x05'a\x05#a\x05\x1C\x84a\x05\x0F_T_R`\t` R`@_ \x90V[\x90_R` R`@_ \x90V[T`\xFF\x16\x90V[\x15\x90V[a\x06,W[a\x05\x82\x81a\x05B\x84_R`\x04` R`@_ \x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[\x7FW\x15\xDD\x80\x98\xA6\xBD\x04\x98,i\x0B\x88F\x1F\xA9\xA7\xCF\x93\x19\x99/o\x99za\xFB\ng;R\xF5_T\x91a\x05\xD5a\x05\xBB\x85_R`\x05` R`@_ \x90V[Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90a\x06'a\x05\xEEa\x05\x1C\x87_R`\x06` R`@_ \x90V[`@Q\x93\x84\x93\x84\x91\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@\x92\x95\x94\x81``\x86\x01\x97\x16\x85R\x16` \x84\x01R\x15\x15\x91\x01RV[\x03\x90\xA3\0[a\x06?a\x06:`\x03Ta\x1CdV[`\x03UV[a\x05,V[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `\x03T`@Q\x90\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x05` R` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16`@Q\x90\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`@\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07:W`@RV[a\x06\xF1V[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x07:W`@RV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07:W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x92\x91\x92a\x07\x8A\x82a\x07bV[\x91a\x07\x98`@Q\x93\x84a\x07?V[\x82\x94\x81\x84R\x81\x83\x01\x11a\x03OW\x82\x81` \x93\x84_\x96\x017\x01\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x03OW\x81` a\x02\xC8\x935\x91\x01a\x07~V[`@`\x03\x196\x01\x12a\x03OWa\x07\xE3a\x04\tV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x08\x03\x906\x90`\x04\x01a\x07\xB4V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\t\xA2W[Pa\tzWa\x08Sa!\xCDV[`@Q\x91\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` \x83`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x86\x16Z\xFA_\x93\x81a\tIW[Pa\x08\xE8W\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16`\x04R`$_\xFD[\x90\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x83\x03a\t\x1CWa\t\x1A\x92Pa%\x1CV[\0[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04\x83\x90R`$_\xFD[a\tl\x91\x94P` =` \x11a\tsW[a\td\x81\x83a\x07?V[\x81\x01\x90a!\xBEV[\x92_a\x08\xA1V[P=a\tZV[\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15_a\x08FV[4a\x03OW_`\x03\x196\x01\x12a\x03OWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x160\x03a\tzW` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[4a\x03OW`\x80`\x03\x196\x01\x12a\x03OW`\x045a\nwa\x04,V[a\n\x7Fa\x04OV[`d5\x80\x15\x15\x81\x03a\x03OWa\n\x93a!\xCDV[a\n\xB4s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x15\x15a\x1B\xAAV[a\n\xBF\x84\x15\x15a\x1B\xD9V[a\n\xCBa\x04\xED\x85a&\x7FV[a\n\xE8a\x05#a\x05\x1C\x86a\x05\x0F_T_R`\t` R`@_ \x90V[a\x0B\xE9W[a\x0B\x03\x83a\x05B\x86_R`\x04` R`@_ \x90V[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84\x03a\x0BfW[PP\x7FW\x15\xDD\x80\x98\xA6\xBD\x04\x98,i\x0B\x88F\x1F\xA9\xA7\xCF\x93\x19\x99/o\x99za\xFB\ng;R\xF5_T\x91a\x05\xD5a\x05\xBB\x85_R`\x05` R`@_ \x90V[a\x0B\xA0\x82a\x0B\x8Es\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x0B\xE2\x95\x16\x15\x15a\x1B\xAAV[a\x05B\x86_R`\x05` R`@_ \x90V[a\x0B\xB2\x84_R`\x06` R`@_ \x90V[\x90`\xFF\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83T\x16\x91\x15\x15\x16\x17\x90UV[_\x80a\x0B+V[a\x0B\xF7a\x06:`\x03Ta\x1CdV[a\n\xEDV[\x91\x81`\x1F\x84\x01\x12\x15a\x03OW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03OW` \x83\x81\x86\x01\x95\x01\x01\x11a\x03OWV[\x91\x81`\x1F\x84\x01\x12\x15a\x03OW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03OW` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11a\x03OWV[4a\x03OW```\x03\x196\x01\x12a\x03OW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x0C\x8C\x906\x90`\x04\x01a\x0B\xFCV[\x90`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x0C\xAD\x906\x90`\x04\x01a\x0C*V[`D\x93\x91\x935\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03OWa\r\n\x94a\x0C\xD8a\r\x03\x936\x90`\x04\x01a\x0C*V[\x92\x90\x91\x85\x87\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a\"hV[6\x91a\x07~V[` \x81Q\x91\x01 _R`\x08` Ra\t\x1A`\xFF`@_ T\x16a\x1CrV[4a\x03OW`@`\x03\x196\x01\x12a\x03OW`\x045`$5\x90_R`\t` R`@_ \x90_R` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045`\x01T\x81\x10\x15a\r\xB5W`\x01_R\x7F\xB1\x0E-Rv\x12\x07;&\xEE\xCD\xFDq~j2\x0C\xF4KJ\xFA\xC2\xB0s-\x9F\xCB\xE2\xB7\xFA\x0C\xF6\x01T`@Q\x90\x81R` \x90\xF3[a\x1F0V[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045a\r\xDA_T\x82\x10a\x1B{V[_R`\x0C` R`@_ `@Q\x90\x81` \x82T\x91\x82\x81R\x01\x91_R` _ \x90_[\x81\x81\x10a\x0E\x14Wa\x035\x85a\x03)\x81\x87\x03\x82a\x07?V[\x82T\x84R` \x90\x93\x01\x92`\x01\x92\x83\x01\x92\x01a\r\xFDV[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `@Q`\x02\x81R\xF3[4a\x03OW`@`\x03\x196\x01\x12a\x03OW`\x045`$5\x90_R`\n` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x08` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `@Q`\x03\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OWa\x0E\xDFa!\xCDV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045a\x0F\xA3_T\x82\x10a\x1B{V[_R`\x0C` R` `@_ T`@Q\x90\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045a\x0F\xD5a!\xCDV[a\x0F\xE6a\x0F\xE1\x82a'\xCEV[a\x1C\xA1V[a\x10#a\x0F\xFB\x82_R`\x04` R`@_ \x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81T\x16\x90UV[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x03a\x11\x0FW[\x80_Ta\x10ja\x05#a\x05\x1C\x84a\x05\x0F\x85_R`\t` R`@_ \x90V[a\x10\x98W[P_T\x7FE\x1A\xCFH\r\xC8\x16\x05\xEE\x92\xFC\x82\x9CN\xFAH\x17\xDE\x96\xE1\xB5\xF0\xC0\x02F\xA5N)\xF2\x8D4\x1A_\x80\xA3\0[_\x91a\x05\x0Fa\x10\xAF\x92_R`\n` R`@_ \x90V[Ua\x10\xBEa\x06:`\x03Ta\x1C\xD0V[`\x03T\x15a\x10\xCEW[\x80_a\x10oV[a\x10\xFD_T\x80\x7Fx\xDF\x93\x81\x81\xAF\xCB(\xEA\xA7\xD0\x99#[\xBF\x98w\x83-o\xAA\xFE6\xD1\xEAp\x91o:\xCE3\xE0_\x80\xA2a\x1CdV[_Ua\x11\n`\x01T`\x03UV[a\x10\xC7V[a\x11$a\x0F\xFB\x82_R`\x05` R`@_ \x90V[a\x11aa\x119\x82_R`\x06` R`@_ \x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x81T\x16\x90UV[a\x10KV[4a\x03OWa\x01\0`\x03\x196\x01\x12a\x03OW`\x045`$5`D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x11\x9E\x906\x90`\x04\x01a\x0B\xFCV[`d\x93\x91\x935g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x11\xC1\x906\x90`\x04\x01a\x0C*V[`\x84\x92\x91\x925g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x11\xE4\x906\x90`\x04\x01a\x0C*V[`\xA4\x92\x91\x925g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x12\x07\x906\x90`\x04\x01a\x0B\xFCV[\x93\x90\x92`\xC45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x12*\x906\x90`\x04\x01a\x0C*V[\x97\x90\x96`\xE45\x9Bg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x8D\x11a\x03OWa\x12Qa\t\x1A\x9D6\x90`\x04\x01a\x0C*V[\x9C\x90\x9Ba\x1D:V[4a\x03OW```\x03\x196\x01\x12a\x03OW`\x045`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x12\x8D\x906\x90`\x04\x01a\x0C*V[\x90`D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OWa\x12\xAE\x906\x90`\x04\x01a\x0C*V[a\x13 a\x12\xEF\x86a\x05\x0F_\x97\x95\x97Ta\x12\xE1a\x12\xDCa\x05#a\x05\x1C\x86a\x05\x0F\x86_R`\t` R`@_ \x90V[a\x1EnV[_R`\n` R`@_ \x90V[T`@Q` \x81\x01\x90a\x13\x17\x81a\x13\t\x87\x8B\x8A\x8C\x88a\x1E\xDAV[\x03`\x1F\x19\x81\x01\x83R\x82a\x07?V[Q\x90 \x14a\x1F\x01V[_[\x82\x81\x10a\x13\xEFW\x85a\x13oa\x13D\x82a\x05\x0F_T_R`\t` R`@_ \x90V[`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[a\x13}a\x06:`\x03Ta\x1C\xD0V[`\x03T\x15a\x13\xAEW[_T\x7FO\xE4\x96$\x156\xA0$Oo\xD4T\x0CPg\x80\x94\x06\xEF\xAE\x92\xE0\xEB\x93&%{\xEC\xB1\xD3\x12\xA2_\x80\xA3\0[a\x13\xDD_T\x80\x7Fx\xDF\x93\x81\x81\xAF\xCB(\xEA\xA7\xD0\x99#[\xBF\x98w\x83-o\xAA\xFE6\xD1\xEAp\x91o:\xCE3\xE0_\x80\xA2a\x1CdV[_Ua\x13\xEA`\x01T`\x03UV[a\x13\x86V[\x80a\x13\xFD`\x01\x92\x84\x88a\x1F]V[5\x80a\x14\x0BW[P\x01a\x13\"V[a\x14ua\x14ma\x14\x1C\x84\x88\x8Aa\x1F]V[5a\x149\x81a\x144_T_R`\x0C` R`@_ \x90V[a&\xF9V[Pa\x14M_T_R`\x0B` R`@_ \x90V[a\x14X\x85\x82Ta\x1F{V[\x90Ua\x05\x0F_T_R`\r` R`@_ \x90V[\x91\x82Ta\x1F{V[\x90U_a\x14\x04V[4a\x03OW_`\x03\x196\x01\x12a\x03OW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` _T`@Q\x90\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `@Q\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x04` R` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16`@Q\x90\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW`@\x80Q\x90a\x15\x84\x81\x83a\x07?V[`\x05\x82R` \x82\x01\x91\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R`\x1F\x19`\x1F\x83Q\x94\x85\x93` \x85RQ\x80\x91\x81` \x87\x01R\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x81\x01\x03\x01\x90\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x06` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045a\x16*_T\x82\x10a\x1B{V[_R`\x0B` R` `@_ T`@Q\x90\x81R\xF3[4a\x03OW`@`\x03\x196\x01\x12a\x03OW`\x045`$5\x90_R`\r` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[4a\x03OW_`\x03\x196\x01\x12a\x03OW` `\x01T`@Q\x90\x81R\xF3[4a\x03OW`@`\x03\x196\x01\x12a\x03OW`\x045`$5s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x163\x03a\x17\x94W\x81\x7F\xAF\xA2\x04\x99\xE4\xD1c\xC5\xD4A&h&z\xB2\x99\x88\xC6\x9C3\x85\x0C\x82\"\x91c#\x99\x1F\x85^\x9F\x92_R`\x07` R`@_ `\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90U\x81_R`\x08` Ra\x17z`@_ `\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[`@\x80Q\x91\x82R` \x82\x01\x92\x90\x92R\x90\x81\x90\x81\x01[\x03\x90\xA1\0[\x7F$\xB2\xE7\xFD\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x03OW` `\x03\x196\x01\x12a\x03OWa\t\x1Aa\x17\xD8a\x04\tV[a\x17\xE0a!\xCDV[a\x1F\x88V[\x90\x91a\x17\xFCa\x02\xC8\x93`@\x84R`@\x84\x01\x90a\x02\x84V[\x91` \x81\x84\x03\x91\x01Ra\x02\x84V[4a\x03OW```\x03\x196\x01\x12a\x03OW`\x045`$5\x90`D5a\x181_T\x83\x10a\x1B{V[\x81_R`\x0C` R`@_ T\x83\x81\x03\x90\x81\x11a\x18\xEFW\x81\x15\x80\x15a\x18\xE6W[a\x18\xDEW[Pa\x18`\x81a!\x10V[\x91a\x18j\x82a!\x10V[\x93_[\x83\x81\x10a\x18\x83W`@Q\x80a\x035\x88\x88\x83a\x17\xE5V[`\x01\x90a\x18\xCCa\x18\xAEa\x18\x9E\x86_R`\x0C` R`@_ \x90V[a\x18\xA8\x84\x87a\x1F{V[\x90a'gV[\x80a\x18\xB9\x84\x8Aa!\x8FV[Ra\x05\x0F\x86_R`\r` R`@_ \x90V[Ta\x18\xD7\x82\x89a!\x8FV[R\x01a\x18mV[\x90P_a\x18VV[P\x80\x82\x11a\x18QV[a\x1C7V[4a\x03OW` `\x03\x196\x01\x12a\x03OW`\x045_R`\x07` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03OW` `\x03\x196\x01\x12a\x03OW\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x19|`@\x84\x90\x1C`\xFF\x16\x15\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x16\x80\x15\x90\x81a\x1BsW[`\x01\x14\x90\x81a\x1BiW[\x15\x90\x81a\x1B`W[Pa\x1B8Wa\x1A\x19\x90\x82a\x1A\x10`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a\x1A\xBDWa!\xA3V[a\x1A\x1FW\0[a\x1A\x8A\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90\x80` \x81\x01a\x17\x8FV[a\x1B3h\x01\0\0\0\0\0\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a!\xA3V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15_a\x19\x98V[0;\x15\x91Pa\x19\x90V[\x83\x91Pa\x19\x86V[\x15a\x1B\x82WV[\x7F\xC5\xB1Eq\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x1B\xB1WV[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x1B\xE0WV[\x7F\xC8H\x85\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x1C\x0FWV[\x7F\xDFe\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[_\x19\x81\x14a\x18\xEFW`\x01\x01\x90V[\x15a\x1CyWV[\x7F\xAA\xFD\xE8\xBB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x1C\xA8WV[\x7F\xEC\x07J\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x80\x15a\x18\xEFW_\x19\x01\x90V[\x15a\x1C\xE3WV[\x7F\xBE\xD9\xC2w\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a\x1D\x12WV[\x7F\xABm\x0B\x89\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93\x95\x97\x9C\x91\x9A\x89\x9C\x91\x9Aa\x1DR\x94\x96\x98\x9A\x8F\x87a\"hV[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x14a\x1ELW\x92a\x1E\x07\x95\x92a\x1E\x0F\x98\x95\x92a\x1D\xDAa\x05\xBB\x87a\x1D\xA7a\x1E\x1C\x9F\x9C\x99a\x05\x1C\x90_R`\x06` R`@_ \x90V[\x15a\x1E\x1EWa\x03Sa\x1D\xD5a\x05\x1Ca\x1D\xC06\x88\x8Fa\x07~V[` \x81Q\x91\x01 _R`\x08` R`@_ \x90V[a\x1D\x0BV[\x95`@Qa\x1D\xFE\x81a\x13\t` \x82\x01\x94\x85` `\x03\x91\x93\x92\x93`@\x81\x01\x94\x81R\x01RV[Q\x90 \x96a$\x06V[\x926\x91a\x07~V[` \x81Q\x91\x01 \x14a\x1CrV[V[a\x03Sa\x1EGa\x05\x1Ca\x1E26\x88\x8Fa\x07~V[` \x81Q\x91\x01 _R`\x07` R`@_ \x90V[a\x1C\xDCV[PPPPPPPPa\x05\x1Ca\x1D\xC0a\x1E\x1C\x93a\x1Ei\x936\x91a\x07~V[a\x1CrV[\x15a\x1EuWV[\x7F\x9F\xBF\xC5\x89\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90\x91\x82\x81R\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03OW` \x92`\x05\x1B\x80\x92\x84\x83\x017\x01\x01\x90V[\x92\x90a\x1E\xF3\x90a\x02\xC8\x95\x93`@\x86R`@\x86\x01\x91a\x1E\x9DV[\x92` \x81\x85\x03\x91\x01Ra\x1E\x9DV[\x15a\x1F\x08WV[\x7F\\\xB0E\xDB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[\x91\x90\x81\x10\x15a\r\xB5W`\x05\x1B\x01\x90V[\x90`\x01\x82\x01\x80\x92\x11a\x18\xEFWV[\x91\x90\x82\x01\x80\x92\x11a\x18\xEFWV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a IWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[\x90_\x19\x82\x01\x91\x82\x11a\x18\xEFWV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF@\x82\x01\x91\x82\x11a\x18\xEFWV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x01\x91\x82\x11a\x18\xEFWV[` \x03\x90` \x82\x11a\x18\xEFWV[\x91\x90\x82\x03\x91\x82\x11a\x18\xEFWV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x07:W`\x05\x1B` \x01\x90V[\x90a!\x1A\x82a \xF8V[a!'`@Q\x91\x82a\x07?V[\x82\x81R`\x1F\x19a!7\x82\x94a \xF8V[\x01\x90` 6\x91\x017V[\x80Q`\x03\x10\x15a\r\xB5W`\x80\x01\x90V[\x80Q`\x02\x10\x15a\r\xB5W``\x01\x90V[\x80Q`\x10\x10\x15a\r\xB5Wa\x02 \x01\x90V[\x80Q\x15a\r\xB5W` \x01\x90V[\x80Q`\x01\x10\x15a\r\xB5W`@\x01\x90V[\x80Q\x82\x10\x15a\r\xB5W` \x91`\x05\x1B\x01\x01\x90V[_Ua!\xADa-\xB7V[a!\xB5a-\xB7V[a\x1E\x1C3a\x1F\x88V[\x90\x81` \x91\x03\x12a\x03OWQ\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a\"\rWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[\x15a\"@WV[\x7F\x9A\x0C\xCES\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93\x92\x91_T\x96\x87_R`\n` R`@_ \x86_R` Ra\"\x8E`@_ T\x15a\x1EnV[\x85_R`\x02` R`@_ T\x15a#\x14Wa#\x11\x96a\x05\x0F\x95a#\x05\x95a\"\xC1a\x05\xBB\x8A_R`\x04` R`@_ \x90V[\x94\x8B`@Qa\x1D\xFE\x81a\x13\t` \x82\x01\x94\x85` \x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x91\x93\x92\x93`@\x81\x01\x94\x81R\x01RV[\x93a\x12\xE1\x85\x15\x15a\"9V[UV[\x7F\xA0LES\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x92\x91\x90a#H\x81a \xF8V[\x93a#V`@Q\x95\x86a\x07?V[` \x85\x83\x81R\x01\x91`\x05\x1B\x81\x01\x91\x83\x83\x11a\x03OW\x81\x90[\x83\x82\x10a#|WPPPPPV[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03OW` \x91a#\x9D\x87\x84\x93\x87\x01a\x07\xB4V[\x81R\x01\x91\x01\x90a#nV[\x15a#\xAFWV[\x7FTw\x06\xAF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a#\xDEWV[\x7F4w\xDC\xDA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93a$V\x95a$\xCEa$\xF1a$ea$\xECa$\xE0a$Va%\x0B\x9Da\x02\xC8\x9F\x9Ca$\xDAa$\xD5a$\xDA\x9Da$\xC0\x9Fa$\xCEa$\xD5\x9Fa$ea$`a$[a$Va$\xC0\x9Aa$k\x956\x91a\x07~V[a(wV[a(\xF2V[a!AV[Qa)\x9FV[\x96`@Qa$\xAA\x81a\x13\t` \x82\x01\x94\x85\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0`\x14\x92``\x1B\x16\x81R\x01\x90V[Q\x90 `@Q\x96\x87\x91` \x83\x01` \x91\x81R\x01\x90V[\x03`\x1F\x19\x81\x01\x87R\x86a\x07?V[6\x91a# v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\x80Q\x15a%\xDAWa%\xD7\x91a.\x0EV[PV[PP4a%\xE3WV[\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[\x80T\x82\x10\x15a\r\xB5W_R` _ \x01\x90_\x90V[\x91a&{\x91\x83T\x90_\x19\x90`\x03\x1B\x92\x83\x1B\x92\x1B\x19\x16\x17\x90V[\x90UV[_\x81\x81R`\x02` R`@\x90 Ta&\xF4W`\x01Th\x01\0\0\0\0\0\0\0\0\x81\x10\x15a\x07:W`\x01\x81\x01`\x01U`\x01T\x81\x10\x15a\r\xB5W`\x01_R\x7F\xB1\x0E-Rv\x12\x07;&\xEE\xCD\xFDq~j2\x0C\xF4KJ\xFA\xC2\xB0s-\x9F\xCB\xE2\xB7\xFA\x0C\xF6\x01\x81\x90U`\x01T\x90_R`\x02` R`@_ U`\x01\x90V[P_\x90V[_\x82\x81R`\x01\x82\x01` R`@\x90 Ta'aW\x80T\x90h\x01\0\0\0\0\0\0\0\0\x82\x10\x15a\x07:W\x82a'La'6\x84`\x01\x80\x96\x01\x85U\x84a&MV[\x81\x93\x91T\x90_\x19\x90`\x03\x1B\x92\x83\x1B\x92\x1B\x19\x16\x17\x90V[\x90U\x80T\x92_R\x01` R`@_ U`\x01\x90V[PP_\x90V[\x90a'q\x91a&MV[\x90T\x90`\x03\x1B\x1C\x90V[\x80T\x80\x15a'\xA1W_\x19\x01\x90a'\x91\x82\x82a&MV[_\x19\x82T\x91`\x03\x1B\x1B\x19\x16\x90UUV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`1`\x04R`$_\xFD[_\x81\x81R`\x02` R`@\x90 T\x90\x81\x15a'aW_\x19\x82\x01\x90\x82\x82\x11a\x18\xEFW`\x01T\x92_\x19\x84\x01\x93\x84\x11a\x18\xEFW\x83\x83_\x95a((\x95\x03a(.W[PPPa(\x19`\x01a'{V[`\x02\x90_R` R`@_ \x90V[U`\x01\x90V[a(\x19a(P\x91a(Fa'qa(V\x95`\x01a&MV[\x92\x83\x91`\x01a&MV[\x90a&bV[U_\x80\x80a(\x0CV[`@Q\x90a(l\x82a\x07\x1EV[_` \x83\x82\x81R\x01RV[a(\x7Fa(_V[P` \x81Q\x91`@Q\x92a(\x92\x84a\x07\x1EV[\x83R\x01` \x82\x01R\x90V[\x15a\x03OWV[\x90a(\xAE\x82a \xF8V[a(\xBB`@Q\x91\x82a\x07?V[\x82\x81R`\x1F\x19a(\xCB\x82\x94a \xF8V[\x01\x90_[\x82\x81\x10a(\xDBWPPPV[` \x90a(\xE6a(_V[\x82\x82\x85\x01\x01R\x01a(\xCFV[\x90a(\xFC\x82a.RV[\x15a\x03OWa)\n\x82a.qV[\x91a)\x14\x83a(\xA4V[\x90` \x81\x01\x80Qa)$\x81a.\xD2V[\x81\x01\x80\x91\x11a\x18\xEFW\x94_\x90[\x80\x82\x10a)SWPPa\x02\xC8\x92\x93\x94a)K\x91Q\x90a \xEBV[\x90Q\x14a(\x9DV[\x90\x95a)\x97\x81a)d`\x01\x93a/=V[\x90`@Qa)s`@\x82a\x07?V[\x82\x81R\x81` \x82\x01Ra)\x86\x8B\x8Aa!\x8FV[Ra)\x91\x8A\x89a!\x8FV[Pa\x1F{V[\x96\x01\x90a)1V[\x80Q\x80\x15\x15\x90\x81a)\xD5W[P\x15a\x03OWa)\xBA\x90a/\xF7V[\x90Q\x90` \x81\x10a)\xC9WP\x90V[` \x03a\x01\0\n\x90\x04\x90V[`!\x91P\x11\x15_a)\xABV[a)\xEB\x81Qa(\xA4V[\x90_[\x81Q\x81\x10\x15a*)W\x80a*\ra*\x07`\x01\x93\x85a!\x8FV[Qa(wV[a*\x17\x82\x86a!\x8FV[Ra*\"\x81\x85a!\x8FV[P\x01a)\xEEV[PP\x90V[`@Q\x90a*=` \x83a\x07?V[_\x80\x83R6` \x84\x017V[\x90a*S\x82a\x07bV[a*``@Q\x91\x82a\x07?V[\x82\x81R`\x1F\x19a!7\x82\x94a\x07bV[\x90\x81Q\x81\x10\x15a\r\xB5W\x01` \x01\x90V[\x90a*\x8B\x90a0mV[_\x91_a*\x96a(_V[P\x84Q\x15a-~W\x93_\x91[\x81Q\x83\x10\x15a-\x1FW\x82\x15\x80\x80a-\tW[a\x03OW\x15\x80a,\xEDW[a\x03OWa*\xD6a*\xD0\x84\x84a!\x8FV[Qa(\xF2V[\x95\x86Q`\x02\x81\x14_\x14a+\xD7WPPa*\xFFa*\xFAa*\xF4\x88a!rV[Qa2\xBBV[a3\tV[\x95a+\x15a+\x0E\x88\x88\x84a3vV[\x80\x92a\x1F{V[\x96Q\x11a+\xB9W\x15a+LWPa+,\x90Qa uV[\x11a\x03OWQ\x11a+CWa*\xF4a\x02\xC8\x91a!\x7FV[Pa\x02\xC8a*.V[\x91\x90\x94a+Y\x86Qa uV[\x82\x14a\x03OW\x80a+wa\x05#a+q`\x01\x94a!\x7FV[Qa.RV[\x15a+\x9AWa+\x88a+\x8E\x91a!\x7FV[Qa2\xFBV[\x91[\x01\x91\x94\x90\x94a*\xA2V[a+\xA6a+\xB3\x91a!\x7FV[Q` \x81\x01Q\x90Q\x90 \x90V[\x91a+\x90V[PP\x91P\x92Pa+\xCA\x91PQa uV[\x11a\x03OWa\x02\xC8a*.V[`\x11\x90\x97\x91\x93\x97\x94\x92\x94\x14a+\xF0W[P`\x01\x90a+\x90V[\x95\x93\x80\x92P\x94\x92\x90\x94Q\x83\x14\x15_\x14a,\xCFW`\xFFa,Ja,Da,>a,\x18\x87\x87a*pV[Q\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90V[`\xF8\x1C\x90V[\x94a\x1FmV[\x93\x16`\x10\x81\x10\x15a\x03OWa,ha,b\x82\x89a!\x8FV[Qa2\xE5V[\x15a,\x8AWPPPPa,}\x91\x92PQa uV[\x03a\x03OWa\x02\xC8a*.V[\x86a,\xA2a\x05#a+q\x84`\x01\x96\x98\x9A\x97\x99\x9Ba!\x8FV[\x15a,\xBCWa,\xB4\x91a+\x88\x91a!\x8FV[\x91[\x90a+\xE7V[a,\xC9\x91a+\xA6\x91a!\x8FV[\x91a,\xB6V[PPPa,\xDC\x90Qa uV[\x03a\x03OWa*\xF4a\x02\xC8\x91a!aV[Pa-\x01a,\xFB\x84\x84a!\x8FV[Qa2~V[\x86\x14\x15a*\xBFV[Pa-\x17a+\xA6\x85\x85a!\x8FV[\x82\x14\x15a*\xB4V[`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x11`$\x82\x01R\x7FInvalid MPT proof\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x90\xFD[P\x90Pa-\xAF\x92P\x7FV\xE8\x1F\x17\x1B\xCCU\xA6\xFF\x83E\xE6\x92\xC0\xF8n[H\xE0\x1B\x99l\xAD\xC0\x01b/\xB5\xE3c\xB4!\x91P\x14a(\x9DV[a\x02\xC8a*.V[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a-\xE6WV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80a\x02\xC8\x93` \x81Q\x91\x01\x84Z\xF4=\x15a.JW=\x91a..\x83a\x07bV[\x92a.<`@Q\x94\x85a\x07?V[\x83R=_` \x85\x01>a4\x1AV[``\x91a4\x1AV[\x80Q\x15a&\xF4W` `\xC0\x91\x01QQ_\x1A\x10a.mW`\x01\x90V[_\x90V[\x80Q\x15a&\xF4W_\x90` \x81\x01\x90\x81Qa.\x8A\x81a.\xD2V[\x81\x01\x80\x91\x11a\x18\xEFW\x91Q\x90Q\x81\x01\x80\x91\x11a\x18\xEFW\x91\x90[\x82\x81\x10a.\xB0WP\x90P\x90V[a.\xB9\x81a/=V[\x81\x01\x80\x91\x11a\x18\xEFWa.\xCC\x90\x91a\x1CdV[\x90a.\xA3V[Q_\x1A`\x80\x81\x10\x15a.\xE3WP_\x90V[`\xB8\x81\x10\x80\x15a/'W[\x15a.\xF9WP`\x01\x90V[`\xC0\x81\x10\x15a/\x18Wa\x02\xC8\x90a/\x13\x90`\xB7[\x90a \xEBV[a\x1FmV[a\x02\xC8\x90a/\x13\x90`\xF7a/\rV[P`\xC0\x81\x10\x15\x80\x15a.\xEEWP`\xF8\x81\x10a.\xEEV[\x80Q_\x1A\x90`\x80\x82\x10\x15a/RWPP`\x01\x90V[`\xB8\x82\x10\x15a/hWPa/\x13a\x02\xC8\x91a \xB0V[`\xC0\x82\x10\x15a/\xA9W`\x01\x01Q` \x82\x90\x03`\xB7\x01a\x01\0\n\x90\x04\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFJ\x01\x90V[`\xF8\x82\x10\x15a/\xBFWPa/\x13a\x02\xC8\x91a \x83V[`\x01\x01Q` \x82\x90\x03`\xF7\x01a\x01\0\n\x90\x04\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\n\x01\x90V[\x90` \x82\x01\x91a0\x07\x83Qa.\xD2V[\x92Q\x90\x83\x82\x01\x80\x92\x11a\x18\xEFWQ\x92\x83\x03\x92\x83\x11a\x18\xEFW\x91\x90V[\x90\x81`\x01\x1B\x91\x80\x83\x04`\x02\x14\x90\x15\x17\x15a\x18\xEFWV[\x15a0@WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x01`\x04R`$_\xFD[\x90a0\x96_a0\x87\x84Qa0\x82\x81\x15\x15a(\x9DV[a0#V[a0\x91`\x01a(\x9DV[a \xEBV[\x90a0\xA0\x82a*IV[\x92_\x91\x82[a0\xAF\x85_a\x1F{V[\x84\x10\x15a1oWa1*a,Da0\xAF\x92a0\xCA\x87`\x01\x16\x90V[a12W\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a1\x14a1\x0Ba,>a,\x18a1\x05\x8C`\x01\x1C\x90V[\x8Ba*pV[`\x04\x1C`\x0F\x16\x90V[`\xF8\x1B\x16_\x1Aa1$\x82\x8Ba*pV[Sa\x1FmV[\x93\x90Pa0\xA5V[\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a1\x14a1ia,>a,\x18a1\x05\x8C`\x01\x1C\x90V[`\xFF\x16\x90V[\x91P\x92Pa\x1E\x1C\x91P\x83Q\x14a09V[a1\xA0\x82a1\x94\x83Qa0\x82\x81\x15\x15a(\x9DV[a0\x91\x81\x83\x11\x15a(\x9DV[\x90a1\xAA\x82a*IV[\x93\x83\x92_[a1\xB9\x82\x87a\x1F{V[\x85\x10\x15a2lW\x90a2,a2&a1\xB9\x93a1\xD5\x88`\x01\x16\x90V[a25W\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a2\x16a1\x0Ba,>a,\x18a2\x10\x8D`\x01\x1C\x90V[\x8Ca*pV[`\xF8\x1B\x16_\x1Aa1$\x82\x8Ca*pV[\x95a\x1FmV[\x94\x90\x91Pa1\xAFV[\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a2\x16a1ia,>a,\x18a2\x10\x8D`\x01\x1C\x90V[\x92PP\x92Pa\x1E\x1C\x91P\x83Q\x14a09V[\x80Q` \x81\x10\x15a2\x96WP` \x81\x01Q\x90Q\x90 \x90V[\x90` \x01Q `@Q` \x81\x01\x91\x82R` \x81Ra2\xB5`@\x82a\x07?V[Q\x90 \x90V[\x80Q\x15a\x03OWa2\xCEa\x02\xC8\x91a/\xF7V[a2\xDA\x81\x93\x92\x93a*IV[\x92\x83` \x01\x90a4\xC2V[`\x01\x81Q\x03a&\xF4W` \x01QQ_\x1A`\x80\x14\x90V[a3\x04\x90a/\xF7V[\x90 \x90V[\x90\x81Q\x15a\x03OW`\x0Fa3%a1\x0Ba,>a,\x18\x86a!rV[\x16\x80a38WPa\x02\xC8`\x02_\x93a1\x80V[`\x01\x81\x03a3MWPa\x02\xC8`\x01_\x93a1\x80V[`\x02\x81\x03a3cWPa\x02\xC8`\x02`\x01\x93a1\x80V[`\x03\x03a\x03OWa\x02\xC8`\x01\x80\x93a1\x80V[\x91\x90_[\x83\x81\x01\x80\x82\x11a\x18\xEFW\x82Q\x81\x10\x80a4\x10W[\x15a4\x08Wa3\xBE\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x91\x84a*pV[Q\x16\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a3\xEB\x83\x86a*pV[Q\x16\x90\x03a4\x01Wa3\xFC\x90a\x1CdV[a3zV[\x92PPP\x90V[P\x92PPP\x90V[P\x83Q\x82\x10a3\x8EV[\x90a4WWP\x80Q\x15a4/W\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a4\xAAW[a4hWP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a4`V[`\x1F\x81\x11a\x18\xEFWa\x01\0\n\x90V[\x90\x91\x80\x15a55W[` \x81\x10\x15a5\x05W\x80a4\xDEWPPPV[a4\xF2a4\xEDa4\xF7\x92a \xDDV[a4\xB3V[a uV[\x90Q\x82Q\x82\x16\x91\x19\x16\x17\x90RV[\x91\x90\x80Q\x82R` \x81\x01\x80\x91\x11a\x18\xEFW\x90` \x81\x01\x80\x91\x11a\x18\xEFW\x91`\x1F\x19\x81\x01\x90\x81\x11\x15a4\xCBWa\x1C7V[PPPV", + b"`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x1A\xA2w\xAF\x14a\x02\x9FW\x80c\x1C\x80\x81\xED\x14a\x02\x9AW\x80c\"b8\x97\x14a\x02\x95W\x80c(_$F\x14a\x02\x90W\x80c1\x98\xEB\x10\x14a\x02\x8BW\x80c6+\x81T\x14a\x02\x86W\x80cJW#\xDB\x14a\x02\x81W\x80cN\xB4\xF9z\x14a\x02|W\x80cO\x1E\xF2\x86\x14a\x02wW\x80cR\xD1\x90-\x14a\x02rW\x80cV3D\xB6\x14a\x02mW\x80cV\x7F;>\x14a\x02hW\x80cZc0\x80\x14a\x02cW\x80c^\x84\0\x9D\x14a\x02^W\x80c_y\x07C\x14a\x02YW\x80c`c\x01\"\x14a\x02TW\x80ckM\x17\xAD\x14a\x02OW\x80ck\xA3\xD1\x7F\x14a\x02JW\x80cl\xFA\xDE\xB5\x14a\x02EW\x80cp\x9B\xA4J\x14a\x01\xFAW\x80cqP\x18\xA6\x14a\x02@W\x80c}E\x88\xB1\x14a\x02;W\x80c}\x85\xA2\x81\x14a\x026W\x80c~&\x96]\x14a\x021W\x80c\x8A_~m\x14a\x02,W\x80c\x8D\xA5\xCB[\x14a\x02'W\x80c\x90\x0C\xF0\xCF\x14a\x02\"W\x80c\xA5R#q\x14a\x02\x1DW\x80c\xA6\xE5\xE1%\x14a\x02\x18W\x80c\xAD<\xB1\xCC\x14a\x02\x13W\x80c\xCD\x0FE\xD2\x14a\x02\x0EW\x80c\xCES|\x9F\x14a\x02\tW\x80c\xDA\xAC\x1AV\x14a\x02\x04W\x80c\xDC\x02}k\x14a\x01\xFFW\x80c\xE1\x8BM\xAE\x14a\x01\xFAW\x80c\xE4\x84e\xB7\x14a\x01\xF5W\x80c\xF2\xFD\xE3\x8B\x14a\x01\xF0W\x80c\xF4\x03\x02(\x14a\x01\xEBW\x80c\xF5\xEC:\xD0\x14a\x01\xE6W\x80c\xFEK\x84\xDF\x14a\x01\xE1Wc\xFF\xA1\xADt\x14a\x01\xDCW_\x80\xFD[a%\x10V[a\"\xB8V[a\"jV[a!\tV[a \xBBV[a\x1FVV[a\x12\xA0V[a\x1F\x1AV[a\x1E\xC3V[a\x1ENV[a\x1E\0V[a\x1D\x8AV[a\x1D+V[a\x1C\xF1V[a\x1C\xB5V[a\x1CcV[a\x18(V[a\x175V[a\x13\xECV[a\x13wV[a\x12\xBBV[a\x12RV[a\x11\xFBV[a\x11\xE0V[a\x112V[a\x10\xF8V[a\x10eV[a\x10\tV[a\x0F\x1DV[a\x0C#V[a\x0B\xACV[a\t\x97V[a\x08ZV[a\x08\x1EV[a\x07\xCEV[a\x05\x02V[a\x04\x16V[a\x03\xDCV[a\x03\x93V[a\x02\xEBV[\x90` \x80\x83Q\x92\x83\x81R\x01\x92\x01\x90_[\x81\x81\x10a\x02\xC1WPPP\x90V[\x82Q\x84R` \x93\x84\x01\x93\x90\x92\x01\x91`\x01\x01a\x02\xB4V[\x90` a\x02\xE8\x92\x81\x81R\x01\x90a\x02\xA4V[\x90V[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW`@Q\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x80\x82R` \x82\x01\x90\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01_R` _ \x90_[\x81\x81\x10a\x03yWa\x03u\x85a\x03i\x81\x87\x03\x82a\t\x07V[`@Q\x91\x82\x91\x82a\x02\xD7V[\x03\x90\xF3[\x82T\x84R` \x90\x93\x01\x92`\x01\x92\x83\x01\x92\x01a\x03RV[_\x80\xFD[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0B` R` `@_ T`@Q\x90\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Q\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xF3[4a\x03\x8FW`@`\x03\x196\x01\x12a\x03\x8FW`\x045`$5\x90a\x04Z\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x82\x10a%ZV[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\r` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03\x8FWV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03\x8FWV[`D5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x03\x8FWV[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FWa\x05\x1Ba\x04\x99V[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90a\x05Ea,.V[a\x05fs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15\x15a%\x89V[a\x05q\x82\x15\x15a%\xB8V[a\x05\x82a\x05}\x83a1iV[a%\xE7V[a\x05\xF6a\x05\xF2a\x05\xEB\x84a\x05\xDE\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90V[\x90_R` R`@_ \x90V[T`\xFF\x16\x90V[\x15\x90V[a\x07xW[a\x06p\x81a\x060\x84_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x04` R`@_ \x90V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82T\x16\x17\x90UV[\x7FW\x15\xDD\x80\x98\xA6\xBD\x04\x98,i\x0B\x88F\x1F\xA9\xA7\xCF\x93\x19\x99/o\x99za\xFB\ng;R\xF5\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x91a\x07\x02a\x06\xE8\x85_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x05` R`@_ \x90V[Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x90a\x07sa\x07:a\x05\xEB\x87_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x06` R`@_ \x90V[`@Q\x93\x84\x93\x84\x91\x92s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@\x92\x95\x94\x81``\x86\x01\x97\x16\x85R\x16` \x84\x01R\x15\x15\x91\x01RV[\x03\x90\xA3\0[a\x07\xC9a\x07\xA5\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03Ta&CV[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03UV[a\x05\xFBV[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` \x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03T`@Q\x90\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x05` R` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16`@Q\x90\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[`@\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\t\x02W`@RV[a\x08\xB9V[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\t\x02W`@RV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\t\x02W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x92\x91\x92a\tR\x82a\t*V[\x91a\t``@Q\x93\x84a\t\x07V[\x82\x94\x81\x84R\x81\x83\x01\x11a\x03\x8FW\x82\x81` \x93\x84_\x96\x017\x01\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x03\x8FW\x81` a\x02\xE8\x935\x91\x01a\tFV[`@`\x03\x196\x01\x12a\x03\x8FWa\t\xABa\x04\x99V[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\t\xCB\x906\x90`\x04\x01a\t|V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\x0BjW[Pa\x0BBWa\n\x1Ba,.V[`@Q\x91\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` \x83`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x86\x16Z\xFA_\x93\x81a\x0B\x11W[Pa\n\xB0W\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16`\x04R`$_\xFD[\x90\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x83\x03a\n\xE4Wa\n\xE2\x92Pa0\x06V[\0[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04\x83\x90R`$_\xFD[a\x0B4\x91\x94P` =` \x11a\x0B;W[a\x0B,\x81\x83a\t\x07V[\x81\x01\x90a,\x1FV[\x92_a\niV[P=a\x0B\"V[\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15_a\n\x0EV[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x160\x03a\x0BBW` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[4a\x03\x8FW`\x80`\x03\x196\x01\x12a\x03\x8FW`\x045a\x0C?a\x04\xBCV[a\x0CGa\x04\xDFV[`d5\x80\x15\x15\x81\x03a\x03\x8FWa\x0C[a,.V[a\x0C|s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x16\x15\x15a%\x89V[a\x0C\x87\x84\x15\x15a%\xB8V[a\x0C\x93a\x05}\x85a1iV[a\x0C\xEFa\x05\xF2a\x05\xEB\x86a\x05\xDE\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90V[a\x0E\x8CW[a\r)\x83a\x060\x86_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x04` R`@_ \x90V[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84\x03a\r\xCBW[PP\x7FW\x15\xDD\x80\x98\xA6\xBD\x04\x98,i\x0B\x88F\x1F\xA9\xA7\xCF\x93\x19\x99/o\x99za\xFB\ng;R\xF5\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x91a\x07\x02a\x06\xE8\x85_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x05` R`@_ \x90V[a\x0E$\x82a\r\xF3s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x0E\x85\x95\x16\x15\x15a%\x89V[a\x060\x86_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x05` R`@_ \x90V[a\x0EU\x84_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x06` R`@_ \x90V[\x90`\xFF\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x83T\x16\x91\x15\x15\x16\x17\x90UV[_\x80a\rQV[a\x0E\xB9a\x07\xA5\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03Ta&CV[a\x0C\xF4V[\x91\x81`\x1F\x84\x01\x12\x15a\x03\x8FW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03\x8FW` \x83\x81\x86\x01\x95\x01\x01\x11a\x03\x8FWV[\x91\x81`\x1F\x84\x01\x12\x15a\x03\x8FW\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03\x8FW` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11a\x03\x8FWV[4a\x03\x8FW```\x03\x196\x01\x12a\x03\x8FW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x0FN\x906\x90`\x04\x01a\x0E\xBEV[\x90`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x0Fo\x906\x90`\x04\x01a\x0E\xECV[`D\x93\x91\x935\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x03\x8FWa\x0F\xCC\x94a\x0F\x9Aa\x0F\xC5\x936\x90`\x04\x01a\x0E\xECV[\x92\x90\x91\x85\x87\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a,\xF8V[6\x91a\tFV[` \x81Q\x91\x01 _R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x08` Ra\n\xE2`\xFF`@_ T\x16a&VV[4a\x03\x8FW`@`\x03\x196\x01\x12a\x03\x8FW`\x045`$5\x90_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90_R` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x81\x10\x15a\x10\xF3W\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01_R\x7F\xDA\xACu\xC4\x0B\xD4/\x19\x95rb9y\xCDr\xD81\xE7\x90:\x13n\xCB\x195\xE6\xFA\0eH\xC8\"\x01T`@Q\x90\x81R` \x90\xF3[a)qV[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Q\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045a\x11r\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x82\x10a%ZV[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0C` R`@_ `@Q\x90\x80T\x80\x83R` \x83\x01\x91_R` _ \x90_[\x81\x81\x10a\x11\xCAWa\x03u\x85a\x03i\x81\x87\x03\x82a\t\x07V[\x82T\x84R` \x90\x93\x01\x92`\x01\x92\x83\x01\x92\x01a\x11\xB3V[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Q`\x02\x81R\xF3[4a\x03\x8FW`@`\x03\x196\x01\x12a\x03\x8FW`\x045`$5\x90_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\n` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x08` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Q`\x03\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FWa\x12\xD3a,.V[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045a\x13\xB7\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x82\x10a%ZV[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0C` R` `@_ T`@Q\x90\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045a\x14\x08a,.V[a\x14\x19a\x14\x14\x82a3PV[a&\x85V[a\x14ua\x14M\x82_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x04` R`@_ \x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81T\x16\x90UV[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x03a\x16\xA0W[\x80\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0Ta\x14\xFBa\x05\xF2a\x05\xEB\x84a\x05\xDE\x85_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90V[a\x15IW[P\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x7FE\x1A\xCFH\r\xC8\x16\x05\xEE\x92\xFC\x82\x9CN\xFAH\x17\xDE\x96\xE1\xB5\xF0\xC0\x02F\xA5N)\xF2\x8D4\x1A_\x80\xA3\0[_\x91a\x05\xDEa\x15\x7F\x92_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\n` R`@_ \x90V[Ua\x15\xADa\x07\xA5\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03Ta&\xB4V[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03T\x15a\x15\xDCW[\x80_a\x15\0V[a\x16Ra\x16.\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x80\x7Fx\xDF\x93\x81\x81\xAF\xCB(\xEA\xA7\xD0\x99#[\xBF\x98w\x83-o\xAA\xFE6\xD1\xEAp\x91o:\xCE3\xE0_\x80\xA2a&CV[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0UV[a\x16\x9B\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03UV[a\x15\xD5V[a\x16\xD4a\x14M\x82_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x05` R`@_ \x90V[a\x170a\x17\x08\x82_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x06` R`@_ \x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x81T\x16\x90UV[a\x14\x9DV[4a\x03\x8FWa\x01\0`\x03\x196\x01\x12a\x03\x8FW`\x045`$5`D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x17m\x906\x90`\x04\x01a\x0E\xBEV[`d\x93\x91\x935g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x17\x90\x906\x90`\x04\x01a\x0E\xECV[`\x84\x92\x91\x925g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x17\xB3\x906\x90`\x04\x01a\x0E\xECV[`\xA4\x92\x91\x925g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x17\xD6\x906\x90`\x04\x01a\x0E\xBEV[\x93\x90\x92`\xC45g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x17\xF9\x906\x90`\x04\x01a\x0E\xECV[\x97\x90\x96`\xE45\x9Bg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x8D\x11a\x03\x8FWa\x18 a\n\xE2\x9D6\x90`\x04\x01a\x0E\xECV[\x9C\x90\x9Ba'\x1EV[4a\x03\x8FW```\x03\x196\x01\x12a\x03\x8FW`\x045`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x18\\\x906\x90`\x04\x01a\x0E\xECV[\x90`D5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FWa\x18}\x906\x90`\x04\x01a\x0E\xECV[a\x19Ma\x19\x1C\x86a\x05\xDE\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0\x97\x95\x97Ta\x18\xEFa\x18\xEAa\x05\xF2a\x05\xEB\x86a\x05\xDE\x86_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90V[a(\xAFV[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\n` R`@_ \x90V[T`@Q` \x81\x01\x90a\x19D\x81a\x196\x87\x8B\x8A\x8C\x88a)\x1BV[\x03`\x1F\x19\x81\x01\x83R\x82a\t\x07V[Q\x90 \x14a)BV[_[\x82\x81\x10a\x1B\x18W\x85a\x19\xDBa\x19\xB0\x82a\x05\xDE\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\t` R`@_ \x90V[`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[a\x1A\x08a\x07\xA5\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03Ta&\xB4V[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03T\x15a\x1AxW[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x7FO\xE4\x96$\x156\xA0$Oo\xD4T\x0CPg\x80\x94\x06\xEF\xAE\x92\xE0\xEB\x93&%{\xEC\xB1\xD3\x12\xA2_\x80\xA3\0[a\x1A\xCAa\x16.\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x80\x7Fx\xDF\x93\x81\x81\xAF\xCB(\xEA\xA7\xD0\x99#[\xBF\x98w\x83-o\xAA\xFE6\xD1\xEAp\x91o:\xCE3\xE0_\x80\xA2a&CV[a\x1B\x13\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x03UV[a\x1A0V[\x80a\x1B&`\x01\x92\x84\x88a)\x9EV[5\x80a\x1B4W[P\x01a\x19OV[a\x1C[a\x1CSa\x1BE\x84\x88\x8Aa)\x9EV[5a\x1B\xA1\x81a\x1B\x9C\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0C` R`@_ \x90V[a2\x91V[Pa\x1B\xF4\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0B` R`@_ \x90V[a\x1B\xFF\x85\x82Ta)\xBCV[\x90Ua\x05\xDE\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\r` R`@_ \x90V[\x91\x82Ta)\xBCV[\x90U_a\x1B-V[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` \x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T`@Q\x90\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Q\x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x04` R` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@_ T\x16`@Q\x90\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW`@\x80Q\x90a\x1D\xA9\x81\x83a\t\x07V[`\x05\x82R` \x82\x01\x91\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R`\x1F\x19`\x1F\x83Q\x94\x85\x93` \x85RQ\x80\x91\x81` \x87\x01R\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x81\x01\x03\x01\x90\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x06` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045a\x1E\x8E\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x82\x10a%ZV[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0B` R` `@_ T`@Q\x90\x81R\xF3[4a\x03\x8FW`@`\x03\x196\x01\x12a\x03\x8FW`\x045`$5\x90_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\r` R`@_ \x90_R` R` `@_ T`@Q\x90\x81R\xF3[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` \x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T`@Q\x90\x81R\xF3[4a\x03\x8FW`@`\x03\x196\x01\x12a\x03\x8FW`\x045`$5s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x163\x03a \x93W\x81\x7F\xAF\xA2\x04\x99\xE4\xD1c\xC5\xD4A&h&z\xB2\x99\x88\xC6\x9C3\x85\x0C\x82\"\x91c#\x99\x1F\x85^\x9F\x92_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x07` R`@_ `\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90U\x81_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x08` Ra y`@_ `\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\x82T\x16\x17\x90UV[`@\x80Q\x91\x82R` \x82\x01\x92\x90\x92R\x90\x81\x90\x81\x01[\x03\x90\xA1\0[\x7F$\xB2\xE7\xFD\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FWa\n\xE2a \xD7a\x04\x99V[a \xDFa,.V[a)\xC9V[\x90\x91a \xFBa\x02\xE8\x93`@\x84R`@\x84\x01\x90a\x02\xA4V[\x91` \x81\x84\x03\x91\x01Ra\x02\xA4V[4a\x03\x8FW```\x03\x196\x01\x12a\x03\x8FW`\x045`$5\x90`D5a!P\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x83\x10a%ZV[\x81_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0C` Ra!\x85\x83`@_ Ta+,V[\x81\x15\x80\x15a\"aW[a\"YW[Pa!\x9D\x81a+QV[\x91a!\xA7\x82a+QV[\x93_[\x83\x81\x10a!\xC0W`@Q\x80a\x03u\x88\x88\x83a \xE4V[`\x01\x90a\"Ga\"\na!\xFA\x86_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x0C` R`@_ \x90V[a\"\x04\x84\x87a)\xBCV[\x90a2\xE9V[\x80a\"\x15\x84\x8Aa+\xD0V[Ra\x05\xDE\x86_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\r` R`@_ \x90V[Ta\"R\x82\x89a+\xD0V[R\x01a!\xAAV[\x90P_a!\x93V[P\x80\x82\x11a!\x8EV[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW`\x045_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x07` R` `\xFF`@_ T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x03\x8FW` `\x03\x196\x01\x12a\x03\x8FW\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa#\x11`@\x84\x90\x1C`\xFF\x16\x15\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x16\x80\x15\x90\x81a%\x08W[`\x01\x14\x90\x81a$\xFEW[\x15\x90\x81a$\xF5W[Pa$\xCDWa#\xAE\x90\x82a#\xA5`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a$RWa+\xE4V[a#\xB4W\0[a$\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90\x80` \x81\x01a \x8EV[a$\xC8h\x01\0\0\0\0\0\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a+\xE4V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15_a#-V[0;\x15\x91Pa#%V[\x83\x91Pa#\x1BV[4a\x03\x8FW_`\x03\x196\x01\x12a\x03\x8FW` `@Qb\x0FB@\x81R\xF3[_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x05` R`@_ \x90V[\x15a%aWV[\x7F\xC5\xB1Eq\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a%\x90WV[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a%\xBFWV[\x7F\xC8H\x85\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a%\xEEWV[\x7F\xDFe\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[_\x19\x81\x14a&QW`\x01\x01\x90V[a&\x16V[\x15a&]WV[\x7F\xAA\xFD\xE8\xBB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a&\x8CWV[\x7F\xEC\x07J\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x80\x15a&QW_\x19\x01\x90V[\x15a&\xC7WV[\x7F\xBE\xD9\xC2w\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a&\xF6WV[\x7F\xABm\x0B\x89\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93\x95\x97\x9C\x91\x9A\x89\x9C\x91\x9Aa'6\x94\x96\x98\x9A\x8F\x87a,\xF8V[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x14a(\x8DW\x92a()\x95\x92a(1\x98\x95\x92a'\xFCa\x06\xE8\x87a'\xAAa(>\x9F\x9C\x99a\x05\xEB\x90_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x06` R`@_ \x90V[\x15a(@Wa%-a'\xF7a\x05\xEBa'\xC36\x88\x8Fa\tFV[` \x81Q\x91\x01 _R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x08` R`@_ \x90V[a&\xEFV[\x95`@Qa( \x81a\x196` \x82\x01\x94\x85` `\x03\x91\x93\x92\x93`@\x81\x01\x94\x81R\x01RV[Q\x90 \x96a.\xF0V[\x926\x91a\tFV[` \x81Q\x91\x01 \x14a&VV[V[a%-a(\x88a\x05\xEBa(T6\x88\x8Fa\tFV[` \x81Q\x91\x01 _R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x07` R`@_ \x90V[a&\xC0V[PPPPPPPPa\x05\xEBa'\xC3a(>\x93a(\xAA\x936\x91a\tFV[a&VV[\x15a(\xB6WV[\x7F\x9F\xBF\xC5\x89\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90\x91\x82\x81R\x7F\x07\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x03\x8FW` \x92`\x05\x1B\x80\x92\x84\x83\x017\x01\x01\x90V[\x92\x90a)4\x90a\x02\xE8\x95\x93`@\x86R`@\x86\x01\x91a(\xDEV[\x92` \x81\x85\x03\x91\x01Ra(\xDEV[\x15a)IWV[\x7F\\\xB0E\xDB\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[\x91\x90\x81\x10\x15a\x10\xF3W`\x05\x1B\x01\x90V[\x90`\x01\x82\x01\x80\x92\x11a&QWV[\x91\x90\x82\x01\x80\x92\x11a&QWV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a*\x8AWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[\x90_\x19\x82\x01\x91\x82\x11a&QWV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF@\x82\x01\x91\x82\x11a&QWV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x01\x91\x82\x11a&QWV[` \x03\x90` \x82\x11a&QWV[\x91\x90\x82\x03\x91\x82\x11a&QWV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\t\x02W`\x05\x1B` \x01\x90V[\x90a+[\x82a+9V[a+h`@Q\x91\x82a\t\x07V[\x82\x81R`\x1F\x19a+x\x82\x94a+9V[\x01\x90` 6\x91\x017V[\x80Q`\x03\x10\x15a\x10\xF3W`\x80\x01\x90V[\x80Q`\x02\x10\x15a\x10\xF3W``\x01\x90V[\x80Q`\x10\x10\x15a\x10\xF3Wa\x02 \x01\x90V[\x80Q\x15a\x10\xF3W` \x01\x90V[\x80Q`\x01\x10\x15a\x10\xF3W`@\x01\x90V[\x80Q\x82\x10\x15a\x10\xF3W` \x91`\x05\x1B\x01\x01\x90V[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0Ua,\x0Ea9\xF3V[a,\x16a9\xF3V[a(>3a)\xC9V[\x90\x81` \x91\x03\x12a\x03\x8FWQ\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a,nWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[\x15a,\xA1WV[\x7F\xA0LES\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a,\xD0WV[\x7F\x9A\x0C\xCES\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93\x91a\x05\xDE\x93\x96a.#\x96a.\x17\x94\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\0T\x99\x8A_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\n` R`@_ \x89_R` Ra-i`@_ T\x15a(\xAFV[\x88_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x02` Ra-\x9F`@_ T\x15\x15a,\x9AV[a-\xD3a\x06\xE8\x8A_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x04` R`@_ \x90V[\x94\x8B`@Qa( \x81a\x196` \x82\x01\x94\x85` \x7F\xB7\xDF\xB3\xBE\x9E+\xA9\xB04\x9E\x11\xA2\x1C\xD1\xBA\xEB\xDE#\xCE\x11\x1D\xD0e\x16\x19\xB6\x9An&\xAA\x06\0\x91\x93\x92\x93`@\x81\x01\x94\x81R\x01RV[\x93a\x18\xEF\x85\x15\x15a,\xC9V[UV[\x92\x91\x90a.2\x81a+9V[\x93a.@`@Q\x95\x86a\t\x07V[` \x85\x83\x81R\x01\x91`\x05\x1B\x81\x01\x91\x83\x83\x11a\x03\x8FW\x81\x90[\x83\x82\x10a.fWPPPPPV[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x03\x8FW` \x91a.\x87\x87\x84\x93\x87\x01a\t|V[\x81R\x01\x91\x01\x90a.XV[\x15a.\x99WV[\x7FTw\x06\xAF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x15a.\xC8WV[\x7F4w\xDC\xDA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x93a/@\x95a/\xB8a/\xDBa/Oa/\xD6a/\xCAa/@a/\xF5\x9Da\x02\xE8\x9F\x9Ca/\xC4a/\xBFa/\xC4\x9Da/\xAA\x9Fa/\xB8a/\xBF\x9Fa/Oa/Ja/Ea/@a/\xAA\x9Aa/U\x956\x91a\tFV[a4\xB3V[a5.V[a+\x82V[Qa5\xDBV[\x96`@Qa/\x94\x81a\x196` \x82\x01\x94\x85\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0`\x14\x92``\x1B\x16\x81R\x01\x90V[Q\x90 `@Q\x96\x87\x91` \x83\x01` \x91\x81R\x01\x90V[\x03`\x1F\x19\x81\x01\x87R\x86a\t\x07V[6\x91a.&V[a6\x1DV[\x91a6\xBDV[a/E\x81Q\x15\x15a.\x92V[a+\x92V[\x96`@Qa/\x94\x81a\x196` \x82\x01\x94\x85` \x91\x81R\x01\x90V[a0\x01\x81Q\x15\x15a.\xC1V[a5\xDBV[\x90\x81;\x15a0\xF5Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\x80Q\x15a0\xC4Wa0\xC1\x91a:JV[PV[PP4a0\xCDWV[\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[\x80T\x82\x10\x15a\x10\xF3W_R` _ \x01\x90_\x90V[\x91a1e\x91\x83T\x90_\x19\x90`\x03\x1B\x92\x83\x1B\x92\x1B\x19\x16\x17\x90V[\x90UV[_\x81\x81R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x02` R`@\x90 Ta2\x8CW\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01Th\x01\0\0\0\0\0\0\0\0\x81\x10\x15a\t\x02Wa27a2!\x82`\x01\x85\x94\x01\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01U\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01a17V[\x81\x93\x91T\x90_\x19\x90`\x03\x1B\x92\x83\x1B\x92\x1B\x19\x16\x17\x90V[\x90U\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x90_R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x02` R`@_ U`\x01\x90V[P_\x90V[_\x82\x81R`\x01\x82\x01` R`@\x90 Ta2\xE3W\x80T\x90h\x01\0\0\0\0\0\0\0\0\x82\x10\x15a\t\x02W\x82a2\xCEa2!\x84`\x01\x80\x96\x01\x85U\x84a17V[\x90U\x80T\x92_R\x01` R`@_ U`\x01\x90V[PP_\x90V[\x90a2\xF3\x91a17V[\x90T\x90`\x03\x1B\x1C\x90V[\x80T\x80\x15a3#W_\x19\x01\x90a3\x13\x82\x82a17V[_\x19\x82T\x91`\x03\x1B\x1B\x19\x16\x90UUV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`1`\x04R`$_\xFD[_\x81\x81R\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x02` R`@\x90 T\x90\x81\x15a2\xE3W_\x19\x82\x01\x90\x82\x82\x11a&QW\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01T\x92_\x19\x84\x01\x93\x84\x11a&QW\x83\x83_\x95a4&\x95\x03a4,W[PPPa3\xF8\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01a2\xFDV[\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x02\x90_R` R`@_ \x90V[U`\x01\x90V[a3\xF8a4\x8C\x91a4ca2\xF3a4\x92\x95\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01a17V[\x92\x83\x91\x7F\xD6\xF5\xD5\x93/\xF2qj\x1D\x05\x0C\\\x8F:\x1F\x05E\xE9\x80\xF5\xB0\xF5\xFF2\xA7s\xED\x08\x18\xC1\xA4\x01a17V[\x90a1LV[U_\x80\x80a3\xCCV[`@Q\x90a4\xA8\x82a\x08\xE6V[_` \x83\x82\x81R\x01RV[a4\xBBa4\x9BV[P` \x81Q\x91`@Q\x92a4\xCE\x84a\x08\xE6V[\x83R\x01` \x82\x01R\x90V[\x15a\x03\x8FWV[\x90a4\xEA\x82a+9V[a4\xF7`@Q\x91\x82a\t\x07V[\x82\x81R`\x1F\x19a5\x07\x82\x94a+9V[\x01\x90_[\x82\x81\x10a5\x17WPPPV[` \x90a5\"a4\x9BV[\x82\x82\x85\x01\x01R\x01a5\x0BV[\x90a58\x82a:\x8EV[\x15a\x03\x8FWa5F\x82a:\xADV[\x91a5P\x83a4\xE0V[\x90` \x81\x01\x80Qa5`\x81a;\x0EV[\x81\x01\x80\x91\x11a&QW\x94_\x90[\x80\x82\x10a5\x8FWPPa\x02\xE8\x92\x93\x94a5\x87\x91Q\x90a+,V[\x90Q\x14a4\xD9V[\x90\x95a5\xD3\x81a5\xA0`\x01\x93a;yV[\x90`@Qa5\xAF`@\x82a\t\x07V[\x82\x81R\x81` \x82\x01Ra5\xC2\x8B\x8Aa+\xD0V[Ra5\xCD\x8A\x89a+\xD0V[Pa)\xBCV[\x96\x01\x90a5mV[\x80Q\x80\x15\x15\x90\x81a6\x11W[P\x15a\x03\x8FWa5\xF6\x90a<3V[\x90Q\x90` \x81\x10a6\x05WP\x90V[` \x03a\x01\0\n\x90\x04\x90V[`!\x91P\x11\x15_a5\xE7V[a6'\x81Qa4\xE0V[\x90_[\x81Q\x81\x10\x15a6eW\x80a6Ia6C`\x01\x93\x85a+\xD0V[Qa4\xB3V[a6S\x82\x86a+\xD0V[Ra6^\x81\x85a+\xD0V[P\x01a6*V[PP\x90V[`@Q\x90a6y` \x83a\t\x07V[_\x80\x83R6` \x84\x017V[\x90a6\x8F\x82a\t*V[a6\x9C`@Q\x91\x82a\t\x07V[\x82\x81R`\x1F\x19a+x\x82\x94a\t*V[\x90\x81Q\x81\x10\x15a\x10\xF3W\x01` \x01\x90V[\x90a6\xC7\x90a<\xA9V[_\x91_a6\xD2a4\x9BV[P\x84Q\x15a9\xBAW\x93_\x91[\x81Q\x83\x10\x15a9[W\x82\x15\x80\x80a9EW[a\x03\x8FW\x15\x80a9)W[a\x03\x8FWa7\x12a7\x0C\x84\x84a+\xD0V[Qa5.V[\x95\x86Q`\x02\x81\x14_\x14a8\x13WPPa7;a76a70\x88a+\xB3V[Qa>\xF7V[a?EV[\x95a7Qa7J\x88\x88\x84a?\xB2V[\x80\x92a)\xBCV[\x96Q\x11a7\xF5W\x15a7\x88WPa7h\x90Qa*\xB6V[\x11a\x03\x8FWQ\x11a7\x7FWa70a\x02\xE8\x91a+\xC0V[Pa\x02\xE8a6jV[\x91\x90\x94a7\x95\x86Qa*\xB6V[\x82\x14a\x03\x8FW\x80a7\xB3a\x05\xF2a7\xAD`\x01\x94a+\xC0V[Qa:\x8EV[\x15a7\xD6Wa7\xC4a7\xCA\x91a+\xC0V[Qa?7V[\x91[\x01\x91\x94\x90\x94a6\xDEV[a7\xE2a7\xEF\x91a+\xC0V[Q` \x81\x01Q\x90Q\x90 \x90V[\x91a7\xCCV[PP\x91P\x92Pa8\x06\x91PQa*\xB6V[\x11a\x03\x8FWa\x02\xE8a6jV[`\x11\x90\x97\x91\x93\x97\x94\x92\x94\x14a8,W[P`\x01\x90a7\xCCV[\x95\x93\x80\x92P\x94\x92\x90\x94Q\x83\x14\x15_\x14a9\x0BW`\xFFa8\x86a8\x80a8za8T\x87\x87a6\xACV[Q\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90V[`\xF8\x1C\x90V[\x94a)\xAEV[\x93\x16`\x10\x81\x10\x15a\x03\x8FWa8\xA4a8\x9E\x82\x89a+\xD0V[Qa?!V[\x15a8\xC6WPPPPa8\xB9\x91\x92PQa*\xB6V[\x03a\x03\x8FWa\x02\xE8a6jV[\x86a8\xDEa\x05\xF2a7\xAD\x84`\x01\x96\x98\x9A\x97\x99\x9Ba+\xD0V[\x15a8\xF8Wa8\xF0\x91a7\xC4\x91a+\xD0V[\x91[\x90a8#V[a9\x05\x91a7\xE2\x91a+\xD0V[\x91a8\xF2V[PPPa9\x18\x90Qa*\xB6V[\x03a\x03\x8FWa70a\x02\xE8\x91a+\xA2V[Pa9=a97\x84\x84a+\xD0V[Qa>\xBAV[\x86\x14\x15a6\xFBV[Pa9Sa7\xE2\x85\x85a+\xD0V[\x82\x14\x15a6\xF0V[`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x11`$\x82\x01R\x7FInvalid MPT proof\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x90\xFD[P\x90Pa9\xEB\x92P\x7FV\xE8\x1F\x17\x1B\xCCU\xA6\xFF\x83E\xE6\x92\xC0\xF8n[H\xE0\x1B\x99l\xAD\xC0\x01b/\xB5\xE3c\xB4!\x91P\x14a4\xD9V[a\x02\xE8a6jV[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a:\"WV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80a\x02\xE8\x93` \x81Q\x91\x01\x84Z\xF4=\x15a:\x86W=\x91a:j\x83a\t*V[\x92a:x`@Q\x94\x85a\t\x07V[\x83R=_` \x85\x01>a@VV[``\x91a@VV[\x80Q\x15a2\x8CW` `\xC0\x91\x01QQ_\x1A\x10a:\xA9W`\x01\x90V[_\x90V[\x80Q\x15a2\x8CW_\x90` \x81\x01\x90\x81Qa:\xC6\x81a;\x0EV[\x81\x01\x80\x91\x11a&QW\x91Q\x90Q\x81\x01\x80\x91\x11a&QW\x91\x90[\x82\x81\x10a:\xECWP\x90P\x90V[a:\xF5\x81a;yV[\x81\x01\x80\x91\x11a&QWa;\x08\x90\x91a&CV[\x90a:\xDFV[Q_\x1A`\x80\x81\x10\x15a;\x1FWP_\x90V[`\xB8\x81\x10\x80\x15a;cW[\x15a;5WP`\x01\x90V[`\xC0\x81\x10\x15a;TWa\x02\xE8\x90a;O\x90`\xB7[\x90a+,V[a)\xAEV[a\x02\xE8\x90a;O\x90`\xF7a;IV[P`\xC0\x81\x10\x15\x80\x15a;*WP`\xF8\x81\x10a;*V[\x80Q_\x1A\x90`\x80\x82\x10\x15a;\x8EWPP`\x01\x90V[`\xB8\x82\x10\x15a;\xA4WPa;Oa\x02\xE8\x91a*\xF1V[`\xC0\x82\x10\x15a;\xE5W`\x01\x01Q` \x82\x90\x03`\xB7\x01a\x01\0\n\x90\x04\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFJ\x01\x90V[`\xF8\x82\x10\x15a;\xFBWPa;Oa\x02\xE8\x91a*\xC4V[`\x01\x01Q` \x82\x90\x03`\xF7\x01a\x01\0\n\x90\x04\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\n\x01\x90V[\x90` \x82\x01\x91a\x91P\x83Q\x14a\xA8W\x90a>ha>ba=\xF5\x93a>\x11\x88`\x01\x16\x90V[a>qW\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a>Ra=Ga8za8Ta>L\x8D`\x01\x1C\x90V[\x8Ca6\xACV[`\xF8\x1B\x16_\x1Aa=`\x82\x8Ca6\xACV[\x95a)\xAEV[\x94\x90\x91Pa=\xEBV[\x7F\x0F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a>Ra=\xA5a8za8Ta>L\x8D`\x01\x1C\x90V[\x92PP\x92Pa(>\x91P\x83Q\x14a\xD2WP` \x81\x01Q\x90Q\x90 \x90V[\x90` \x01Q `@Q` \x81\x01\x91\x82R` \x81Ra>\xF1`@\x82a\t\x07V[Q\x90 \x90V[\x80Q\x15a\x03\x8FWa?\na\x02\xE8\x91a<3V[a?\x16\x81\x93\x92\x93a6\x85V[\x92\x83` \x01\x90a@\xFEV[`\x01\x81Q\x03a2\x8CW` \x01QQ_\x1A`\x80\x14\x90V[a?@\x90a<3V[\x90 \x90V[\x90\x81Q\x15a\x03\x8FW`\x0Fa?aa=Ga8za8T\x86a+\xB3V[\x16\x80a?tWPa\x02\xE8`\x02_\x93a=\xBCV[`\x01\x81\x03a?\x89WPa\x02\xE8`\x01_\x93a=\xBCV[`\x02\x81\x03a?\x9FWPa\x02\xE8`\x02`\x01\x93a=\xBCV[`\x03\x03a\x03\x8FWa\x02\xE8`\x01\x80\x93a=\xBCV[\x91\x90_[\x83\x81\x01\x80\x82\x11a&QW\x82Q\x81\x10\x80a@LW[\x15a@DWa?\xFA\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x91\x84a6\xACV[Q\x16\x7F\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a@'\x83\x86a6\xACV[Q\x16\x90\x03a@=Wa@8\x90a&CV[a?\xB6V[\x92PPP\x90V[P\x92PPP\x90V[P\x83Q\x82\x10a?\xCAV[\x90a@\x93WP\x80Q\x15a@kW\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a@\xE6W[a@\xA4WP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a@\x9CV[`\x1F\x81\x11a&QWa\x01\0\n\x90V[\x90\x91\x80\x15aAqW[` \x81\x10\x15aAAW\x80aA\x1AWPPPV[aA.aA)aA3\x92a+\x1EV[a@\xEFV[a*\xB6V[\x90Q\x82Q\x82\x16\x91\x19\x16\x17\x90RV[\x91\x90\x80Q\x82R` \x81\x01\x80\x91\x11a&QW\x90` \x81\x01\x80\x91\x11a&QW\x91`\x1F\x19\x81\x01\x90\x81\x11\x15aA\x07Wa&\x16V[PPPV", ); #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] @@ -4177,6 +4205,153 @@ function GAS_AGGREGATOR_STORAGE_LOCATION() external view returns (bytes32); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `GAS_ARCHIVE_STORAGE_LOCATION()` and selector `0x5f790743`. +```solidity +function GAS_ARCHIVE_STORAGE_LOCATION() external view returns (bytes32); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct GAS_ARCHIVE_STORAGE_LOCATIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`GAS_ARCHIVE_STORAGE_LOCATION()`](GAS_ARCHIVE_STORAGE_LOCATIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct GAS_ARCHIVE_STORAGE_LOCATIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: GAS_ARCHIVE_STORAGE_LOCATIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for GAS_ARCHIVE_STORAGE_LOCATIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: GAS_ARCHIVE_STORAGE_LOCATIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for GAS_ARCHIVE_STORAGE_LOCATIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for GAS_ARCHIVE_STORAGE_LOCATIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "GAS_ARCHIVE_STORAGE_LOCATION()"; + const SELECTOR: [u8; 4] = [95u8, 121u8, 7u8, 67u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: GAS_ARCHIVE_STORAGE_LOCATIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: GAS_ARCHIVE_STORAGE_LOCATIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `HEADER_STATE_ROOT_INDEX()` and selector `0xe18b4dae`. ```solidity function HEADER_STATE_ROOT_INDEX() external view returns (uint256); @@ -4771,6 +4946,151 @@ function UPGRADE_INTERFACE_VERSION() external view returns (string memory); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `VERSION()` and selector `0xffa1ad74`. +```solidity +function VERSION() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct VERSIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`VERSION()`](VERSIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct VERSIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: VERSIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for VERSIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: VERSIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for VERSIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for VERSIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "VERSION()"; + const SELECTOR: [u8; 4] = [255u8, 161u8, 173u8, 116u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: VERSIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: VERSIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `addSequencingChain(uint256,address,address,bool)` and selector `0x563344b6`. ```solidity function addSequencingChain(uint256 chainID, address aggregatorAddress, address outboxAddress, bool settlesToBase) external; @@ -5107,13 +5427,13 @@ function addSettlementChainAsSequencingChain(address aggregatorAddress) external #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `appchainGasFees(uint256,uint256)` and selector `0xdaac1a56`. ```solidity -function appchainGasFees(uint256 epoch, uint256 appchainId) external view returns (uint256 tokens); +function appchainGasFees(uint256 _epoch, uint256 appchainId) external view returns (uint256); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] pub struct appchainGasFeesCall { #[allow(missing_docs)] - pub epoch: alloy::sol_types::private::primitives::aliases::U256, + pub _epoch: alloy::sol_types::private::primitives::aliases::U256, #[allow(missing_docs)] pub appchainId: alloy::sol_types::private::primitives::aliases::U256, } @@ -5124,7 +5444,7 @@ function appchainGasFees(uint256 epoch, uint256 appchainId) external view return #[derive(Clone)] pub struct appchainGasFeesReturn { #[allow(missing_docs)] - pub tokens: alloy::sol_types::private::primitives::aliases::U256, + pub _0: alloy::sol_types::private::primitives::aliases::U256, } #[allow( non_camel_case_types, @@ -5160,7 +5480,7 @@ function appchainGasFees(uint256 epoch, uint256 appchainId) external view return #[doc(hidden)] impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: appchainGasFeesCall) -> Self { - (value.epoch, value.appchainId) + (value._epoch, value.appchainId) } } #[automatically_derived] @@ -5168,7 +5488,7 @@ function appchainGasFees(uint256 epoch, uint256 appchainId) external view return impl ::core::convert::From> for appchainGasFeesCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { - epoch: tuple.0, + _epoch: tuple.0, appchainId: tuple.1, } } @@ -5197,7 +5517,7 @@ function appchainGasFees(uint256 epoch, uint256 appchainId) external view return impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: appchainGasFeesReturn) -> Self { - (value.tokens,) + (value._0,) } } #[automatically_derived] @@ -5205,7 +5525,7 @@ function appchainGasFees(uint256 epoch, uint256 appchainId) external view return impl ::core::convert::From> for appchainGasFeesReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { tokens: tuple.0 } + Self { _0: tuple.0 } } } } @@ -5236,7 +5556,7 @@ function appchainGasFees(uint256 epoch, uint256 appchainId) external view return ( as alloy_sol_types::SolType>::tokenize(&self.epoch), + > as alloy_sol_types::SolType>::tokenize(&self._epoch), as alloy_sol_types::SolType>::tokenize(&self.appchainId), @@ -5257,7 +5577,7 @@ function appchainGasFees(uint256 epoch, uint256 appchainId) external view return > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { let r: appchainGasFeesReturn = r.into(); - r.tokens + r._0 }) } #[inline] @@ -5269,7 +5589,7 @@ function appchainGasFees(uint256 epoch, uint256 appchainId) external view return > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { let r: appchainGasFeesReturn = r.into(); - r.tokens + r._0 }) } } @@ -5982,13 +6302,13 @@ function epoch() external view returns (uint256); #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `epochChainDataSubmitted(uint256,uint256)` and selector `0x5a633080`. ```solidity -function epochChainDataSubmitted(uint256 epoch, uint256 chainId) external view returns (bool submitted); +function epochChainDataSubmitted(uint256 _epoch, uint256 chainId) external view returns (bool); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] pub struct epochChainDataSubmittedCall { #[allow(missing_docs)] - pub epoch: alloy::sol_types::private::primitives::aliases::U256, + pub _epoch: alloy::sol_types::private::primitives::aliases::U256, #[allow(missing_docs)] pub chainId: alloy::sol_types::private::primitives::aliases::U256, } @@ -5999,7 +6319,7 @@ function epochChainDataSubmitted(uint256 epoch, uint256 chainId) external view r #[derive(Clone)] pub struct epochChainDataSubmittedReturn { #[allow(missing_docs)] - pub submitted: bool, + pub _0: bool, } #[allow( non_camel_case_types, @@ -6036,7 +6356,7 @@ function epochChainDataSubmitted(uint256 epoch, uint256 chainId) external view r impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: epochChainDataSubmittedCall) -> Self { - (value.epoch, value.chainId) + (value._epoch, value.chainId) } } #[automatically_derived] @@ -6045,7 +6365,7 @@ function epochChainDataSubmitted(uint256 epoch, uint256 chainId) external view r for epochChainDataSubmittedCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { - epoch: tuple.0, + _epoch: tuple.0, chainId: tuple.1, } } @@ -6072,7 +6392,7 @@ function epochChainDataSubmitted(uint256 epoch, uint256 chainId) external view r impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: epochChainDataSubmittedReturn) -> Self { - (value.submitted,) + (value._0,) } } #[automatically_derived] @@ -6080,7 +6400,7 @@ function epochChainDataSubmitted(uint256 epoch, uint256 chainId) external view r impl ::core::convert::From> for epochChainDataSubmittedReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { submitted: tuple.0 } + Self { _0: tuple.0 } } } } @@ -6111,7 +6431,7 @@ function epochChainDataSubmitted(uint256 epoch, uint256 chainId) external view r ( as alloy_sol_types::SolType>::tokenize(&self.epoch), + > as alloy_sol_types::SolType>::tokenize(&self._epoch), as alloy_sol_types::SolType>::tokenize(&self.chainId), @@ -6132,7 +6452,7 @@ function epochChainDataSubmitted(uint256 epoch, uint256 chainId) external view r > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { let r: epochChainDataSubmittedReturn = r.into(); - r.submitted + r._0 }) } #[inline] @@ -6144,7 +6464,7 @@ function epochChainDataSubmitted(uint256 epoch, uint256 chainId) external view r > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { let r: epochChainDataSubmittedReturn = r.into(); - r.submitted + r._0 }) } } @@ -6302,13 +6622,13 @@ function epochRemainingChains() external view returns (uint256); #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `epochVerifiedDataHash(uint256,uint256)` and selector `0x6ba3d17f`. ```solidity -function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view returns (bytes32 dataHash); +function epochVerifiedDataHash(uint256 _epoch, uint256 seqChainID) external view returns (bytes32); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] pub struct epochVerifiedDataHashCall { #[allow(missing_docs)] - pub epoch: alloy::sol_types::private::primitives::aliases::U256, + pub _epoch: alloy::sol_types::private::primitives::aliases::U256, #[allow(missing_docs)] pub seqChainID: alloy::sol_types::private::primitives::aliases::U256, } @@ -6319,7 +6639,7 @@ function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view #[derive(Clone)] pub struct epochVerifiedDataHashReturn { #[allow(missing_docs)] - pub dataHash: alloy::sol_types::private::FixedBytes<32>, + pub _0: alloy::sol_types::private::FixedBytes<32>, } #[allow( non_camel_case_types, @@ -6356,7 +6676,7 @@ function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: epochVerifiedDataHashCall) -> Self { - (value.epoch, value.seqChainID) + (value._epoch, value.seqChainID) } } #[automatically_derived] @@ -6365,7 +6685,7 @@ function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view for epochVerifiedDataHashCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { - epoch: tuple.0, + _epoch: tuple.0, seqChainID: tuple.1, } } @@ -6392,7 +6712,7 @@ function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: epochVerifiedDataHashReturn) -> Self { - (value.dataHash,) + (value._0,) } } #[automatically_derived] @@ -6400,7 +6720,7 @@ function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view impl ::core::convert::From> for epochVerifiedDataHashReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { dataHash: tuple.0 } + Self { _0: tuple.0 } } } } @@ -6431,7 +6751,7 @@ function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view ( as alloy_sol_types::SolType>::tokenize(&self.epoch), + > as alloy_sol_types::SolType>::tokenize(&self._epoch), as alloy_sol_types::SolType>::tokenize(&self.seqChainID), @@ -6452,7 +6772,7 @@ function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { let r: epochVerifiedDataHashReturn = r.into(); - r.dataHash + r._0 }) } #[inline] @@ -6464,7 +6784,7 @@ function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { let r: epochVerifiedDataHashReturn = r.into(); - r.dataHash + r._0 }) } } @@ -6473,7 +6793,7 @@ function epochVerifiedDataHash(uint256 epoch, uint256 seqChainID) external view #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `ethBlockHashes(bytes32)` and selector `0xf5ec3ad0`. ```solidity -function ethBlockHashes(bytes32 blockHash) external view returns (bool isPresent); +function ethBlockHashes(bytes32 blockHash) external view returns (bool); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] @@ -6488,7 +6808,7 @@ function ethBlockHashes(bytes32 blockHash) external view returns (bool isPresent #[derive(Clone)] pub struct ethBlockHashesReturn { #[allow(missing_docs)] - pub isPresent: bool, + pub _0: bool, } #[allow( non_camel_case_types, @@ -6550,7 +6870,7 @@ function ethBlockHashes(bytes32 blockHash) external view returns (bool isPresent impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: ethBlockHashesReturn) -> Self { - (value.isPresent,) + (value._0,) } } #[automatically_derived] @@ -6558,7 +6878,7 @@ function ethBlockHashes(bytes32 blockHash) external view returns (bool isPresent impl ::core::convert::From> for ethBlockHashesReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { isPresent: tuple.0 } + Self { _0: tuple.0 } } } } @@ -6604,7 +6924,7 @@ function ethBlockHashes(bytes32 blockHash) external view returns (bool isPresent > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { let r: ethBlockHashesReturn = r.into(); - r.isPresent + r._0 }) } #[inline] @@ -6616,7 +6936,7 @@ function ethBlockHashes(bytes32 blockHash) external view returns (bool isPresent > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { let r: ethBlockHashesReturn = r.into(); - r.isPresent + r._0 }) } } @@ -8521,7 +8841,7 @@ function sendBlockHashes(bytes32 ethBlockHash, bytes32 setBlockHash) external; #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `seqChainGasAggregator(uint256)` and selector `0xa6e5e125`. ```solidity -function seqChainGasAggregator(uint256 chainId) external view returns (address aggregatorAddress); +function seqChainGasAggregator(uint256 chainId) external view returns (address); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] @@ -8536,7 +8856,7 @@ function seqChainGasAggregator(uint256 chainId) external view returns (address a #[derive(Clone)] pub struct seqChainGasAggregatorReturn { #[allow(missing_docs)] - pub aggregatorAddress: alloy::sol_types::private::Address, + pub _0: alloy::sol_types::private::Address, } #[allow( non_camel_case_types, @@ -8602,7 +8922,7 @@ function seqChainGasAggregator(uint256 chainId) external view returns (address a impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: seqChainGasAggregatorReturn) -> Self { - (value.aggregatorAddress,) + (value._0,) } } #[automatically_derived] @@ -8610,7 +8930,7 @@ function seqChainGasAggregator(uint256 chainId) external view returns (address a impl ::core::convert::From> for seqChainGasAggregatorReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { aggregatorAddress: tuple.0 } + Self { _0: tuple.0 } } } } @@ -8656,7 +8976,7 @@ function seqChainGasAggregator(uint256 chainId) external view returns (address a > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { let r: seqChainGasAggregatorReturn = r.into(); - r.aggregatorAddress + r._0 }) } #[inline] @@ -8668,7 +8988,7 @@ function seqChainGasAggregator(uint256 chainId) external view returns (address a > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { let r: seqChainGasAggregatorReturn = r.into(); - r.aggregatorAddress + r._0 }) } } @@ -8677,7 +8997,7 @@ function seqChainGasAggregator(uint256 chainId) external view returns (address a #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `seqChainOutbox(uint256)` and selector `0x4eb4f97a`. ```solidity -function seqChainOutbox(uint256 chainId) external view returns (address outboxAddress); +function seqChainOutbox(uint256 chainId) external view returns (address); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] @@ -8692,7 +9012,7 @@ function seqChainOutbox(uint256 chainId) external view returns (address outboxAd #[derive(Clone)] pub struct seqChainOutboxReturn { #[allow(missing_docs)] - pub outboxAddress: alloy::sol_types::private::Address, + pub _0: alloy::sol_types::private::Address, } #[allow( non_camel_case_types, @@ -8756,7 +9076,7 @@ function seqChainOutbox(uint256 chainId) external view returns (address outboxAd impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: seqChainOutboxReturn) -> Self { - (value.outboxAddress,) + (value._0,) } } #[automatically_derived] @@ -8764,7 +9084,7 @@ function seqChainOutbox(uint256 chainId) external view returns (address outboxAd impl ::core::convert::From> for seqChainOutboxReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { outboxAddress: tuple.0 } + Self { _0: tuple.0 } } } } @@ -8810,7 +9130,7 @@ function seqChainOutbox(uint256 chainId) external view returns (address outboxAd > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { let r: seqChainOutboxReturn = r.into(); - r.outboxAddress + r._0 }) } #[inline] @@ -8822,7 +9142,7 @@ function seqChainOutbox(uint256 chainId) external view returns (address outboxAd > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { let r: seqChainOutboxReturn = r.into(); - r.outboxAddress + r._0 }) } } @@ -9294,7 +9614,7 @@ function sequencingChainId(uint256 index) external view returns (uint256); #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `setBlockHashes(bytes32)` and selector `0x6cfadeb5`. ```solidity -function setBlockHashes(bytes32 blockHash) external view returns (bool isPresent); +function setBlockHashes(bytes32 blockHash) external view returns (bool); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] @@ -9309,7 +9629,7 @@ function setBlockHashes(bytes32 blockHash) external view returns (bool isPresent #[derive(Clone)] pub struct setBlockHashesReturn { #[allow(missing_docs)] - pub isPresent: bool, + pub _0: bool, } #[allow( non_camel_case_types, @@ -9371,7 +9691,7 @@ function setBlockHashes(bytes32 blockHash) external view returns (bool isPresent impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: setBlockHashesReturn) -> Self { - (value.isPresent,) + (value._0,) } } #[automatically_derived] @@ -9379,7 +9699,7 @@ function setBlockHashes(bytes32 blockHash) external view returns (bool isPresent impl ::core::convert::From> for setBlockHashesReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { isPresent: tuple.0 } + Self { _0: tuple.0 } } } } @@ -9425,7 +9745,7 @@ function setBlockHashes(bytes32 blockHash) external view returns (bool isPresent > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { let r: setBlockHashesReturn = r.into(); - r.isPresent + r._0 }) } #[inline] @@ -9437,7 +9757,7 @@ function setBlockHashes(bytes32 blockHash) external view returns (bool isPresent > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { let r: setBlockHashesReturn = r.into(); - r.isPresent + r._0 }) } } @@ -9777,13 +10097,13 @@ function submitEpochPreImageData(uint256 seqChainID, uint256[] memory appchains, #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Function with signature `totalGasFees(uint256)` and selector `0x1c8081ed`. ```solidity -function totalGasFees(uint256 epoch) external view returns (uint256 totalTokens); +function totalGasFees(uint256 _epoch) external view returns (uint256); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] pub struct totalGasFeesCall { #[allow(missing_docs)] - pub epoch: alloy::sol_types::private::primitives::aliases::U256, + pub _epoch: alloy::sol_types::private::primitives::aliases::U256, } #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] @@ -9792,7 +10112,7 @@ function totalGasFees(uint256 epoch) external view returns (uint256 totalTokens) #[derive(Clone)] pub struct totalGasFeesReturn { #[allow(missing_docs)] - pub totalTokens: alloy::sol_types::private::primitives::aliases::U256, + pub _0: alloy::sol_types::private::primitives::aliases::U256, } #[allow( non_camel_case_types, @@ -9824,14 +10144,14 @@ function totalGasFees(uint256 epoch) external view returns (uint256 totalTokens) #[doc(hidden)] impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: totalGasFeesCall) -> Self { - (value.epoch,) + (value._epoch,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> for totalGasFeesCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { epoch: tuple.0 } + Self { _epoch: tuple.0 } } } } @@ -9857,14 +10177,14 @@ function totalGasFees(uint256 epoch) external view returns (uint256 totalTokens) #[doc(hidden)] impl ::core::convert::From for UnderlyingRustTuple<'_> { fn from(value: totalGasFeesReturn) -> Self { - (value.totalTokens,) + (value._0,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> for totalGasFeesReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { totalTokens: tuple.0 } + Self { _0: tuple.0 } } } } @@ -9892,7 +10212,7 @@ function totalGasFees(uint256 epoch) external view returns (uint256 totalTokens) ( as alloy_sol_types::SolType>::tokenize(&self.epoch), + > as alloy_sol_types::SolType>::tokenize(&self._epoch), ) } #[inline] @@ -9910,7 +10230,7 @@ function totalGasFees(uint256 epoch) external view returns (uint256 totalTokens) > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { let r: totalGasFeesReturn = r.into(); - r.totalTokens + r._0 }) } #[inline] @@ -9922,7 +10242,7 @@ function totalGasFees(uint256 epoch) external view returns (uint256 totalTokens) > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { let r: totalGasFeesReturn = r.into(); - r.totalTokens + r._0 }) } } @@ -10243,6 +10563,8 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external #[allow(missing_docs)] GAS_AGGREGATOR_STORAGE_LOCATION(GAS_AGGREGATOR_STORAGE_LOCATIONCall), #[allow(missing_docs)] + GAS_ARCHIVE_STORAGE_LOCATION(GAS_ARCHIVE_STORAGE_LOCATIONCall), + #[allow(missing_docs)] HEADER_STATE_ROOT_INDEX(HEADER_STATE_ROOT_INDEXCall), #[allow(missing_docs)] SEND_ROOT_STORAGE_SLOT(SEND_ROOT_STORAGE_SLOTCall), @@ -10251,6 +10573,8 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external #[allow(missing_docs)] UPGRADE_INTERFACE_VERSION(UPGRADE_INTERFACE_VERSIONCall), #[allow(missing_docs)] + VERSION(VERSIONCall), + #[allow(missing_docs)] addSequencingChain(addSequencingChainCall), #[allow(missing_docs)] addSettlementChainAsSequencingChain(addSettlementChainAsSequencingChainCall), @@ -10342,6 +10666,7 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external [86u8, 127u8, 59u8, 62u8], [90u8, 99u8, 48u8, 128u8], [94u8, 132u8, 0u8, 157u8], + [95u8, 121u8, 7u8, 67u8], [96u8, 99u8, 1u8, 34u8], [107u8, 77u8, 23u8, 173u8], [107u8, 163u8, 209u8, 127u8], @@ -10367,19 +10692,23 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external [244u8, 3u8, 2u8, 40u8], [245u8, 236u8, 58u8, 208u8], [254u8, 75u8, 132u8, 223u8], + [255u8, 161u8, 173u8, 116u8], ]; } #[automatically_derived] impl alloy_sol_types::SolInterface for GasArchiveCalls { const NAME: &'static str = "GasArchiveCalls"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 39usize; + const COUNT: usize = 41usize; #[inline] fn selector(&self) -> [u8; 4] { match self { Self::GAS_AGGREGATOR_STORAGE_LOCATION(_) => { ::SELECTOR } + Self::GAS_ARCHIVE_STORAGE_LOCATION(_) => { + ::SELECTOR + } Self::HEADER_STATE_ROOT_INDEX(_) => { ::SELECTOR } @@ -10392,6 +10721,7 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external Self::UPGRADE_INTERFACE_VERSION(_) => { ::SELECTOR } + Self::VERSION(_) => ::SELECTOR, Self::addSequencingChain(_) => { ::SELECTOR } @@ -10663,6 +10993,17 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external } sequencingChainId }, + { + fn GAS_ARCHIVE_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasArchiveCalls::GAS_ARCHIVE_STORAGE_LOCATION) + } + GAS_ARCHIVE_STORAGE_LOCATION + }, { fn getAppchainIds( data: &[u8], @@ -10930,6 +11271,13 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external } initialize }, + { + fn VERSION(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(GasArchiveCalls::VERSION) + } + VERSION + }, ]; let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { return Err( @@ -11104,6 +11452,17 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external } sequencingChainId }, + { + fn GAS_ARCHIVE_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasArchiveCalls::GAS_ARCHIVE_STORAGE_LOCATION) + } + GAS_ARCHIVE_STORAGE_LOCATION + }, { fn getAppchainIds( data: &[u8], @@ -11375,6 +11734,15 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external } initialize }, + { + fn VERSION(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasArchiveCalls::VERSION) + } + VERSION + }, ]; let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { return Err( @@ -11394,6 +11762,11 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external inner, ) } + Self::GAS_ARCHIVE_STORAGE_LOCATION(inner) => { + ::abi_encoded_size( + inner, + ) + } Self::HEADER_STATE_ROOT_INDEX(inner) => { ::abi_encoded_size( inner, @@ -11414,6 +11787,9 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external inner, ) } + Self::VERSION(inner) => { + ::abi_encoded_size(inner) + } Self::addSequencingChain(inner) => { ::abi_encoded_size( inner, @@ -11589,6 +11965,12 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external out, ) } + Self::GAS_ARCHIVE_STORAGE_LOCATION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } Self::HEADER_STATE_ROOT_INDEX(inner) => { ::abi_encode_raw( inner, @@ -11613,6 +11995,9 @@ function upgradeToAndCall(address newImplementation, bytes memory data) external out, ) } + Self::VERSION(inner) => { + ::abi_encode_raw(inner, out) + } Self::addSequencingChain(inner) => { ::abi_encode_raw( inner, @@ -13250,6 +13635,12 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::SolCallBuilder<&P, GAS_AGGREGATOR_STORAGE_LOCATIONCall, N> { self.call_builder(&GAS_AGGREGATOR_STORAGE_LOCATIONCall) } + ///Creates a new call builder for the [`GAS_ARCHIVE_STORAGE_LOCATION`] function. + pub fn GAS_ARCHIVE_STORAGE_LOCATION( + &self, + ) -> alloy_contract::SolCallBuilder<&P, GAS_ARCHIVE_STORAGE_LOCATIONCall, N> { + self.call_builder(&GAS_ARCHIVE_STORAGE_LOCATIONCall) + } ///Creates a new call builder for the [`HEADER_STATE_ROOT_INDEX`] function. pub fn HEADER_STATE_ROOT_INDEX( &self, @@ -13278,6 +13669,10 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::SolCallBuilder<&P, UPGRADE_INTERFACE_VERSIONCall, N> { self.call_builder(&UPGRADE_INTERFACE_VERSIONCall) } + ///Creates a new call builder for the [`VERSION`] function. + pub fn VERSION(&self) -> alloy_contract::SolCallBuilder<&P, VERSIONCall, N> { + self.call_builder(&VERSIONCall) + } ///Creates a new call builder for the [`addSequencingChain`] function. pub fn addSequencingChain( &self, @@ -13313,12 +13708,12 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ///Creates a new call builder for the [`appchainGasFees`] function. pub fn appchainGasFees( &self, - epoch: alloy::sol_types::private::primitives::aliases::U256, + _epoch: alloy::sol_types::private::primitives::aliases::U256, appchainId: alloy::sol_types::private::primitives::aliases::U256, ) -> alloy_contract::SolCallBuilder<&P, appchainGasFeesCall, N> { self.call_builder( &appchainGasFeesCall { - epoch, + _epoch, appchainId, }, ) @@ -13392,12 +13787,12 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ///Creates a new call builder for the [`epochChainDataSubmitted`] function. pub fn epochChainDataSubmitted( &self, - epoch: alloy::sol_types::private::primitives::aliases::U256, + _epoch: alloy::sol_types::private::primitives::aliases::U256, chainId: alloy::sol_types::private::primitives::aliases::U256, ) -> alloy_contract::SolCallBuilder<&P, epochChainDataSubmittedCall, N> { self.call_builder( &epochChainDataSubmittedCall { - epoch, + _epoch, chainId, }, ) @@ -13411,12 +13806,12 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ///Creates a new call builder for the [`epochVerifiedDataHash`] function. pub fn epochVerifiedDataHash( &self, - epoch: alloy::sol_types::private::primitives::aliases::U256, + _epoch: alloy::sol_types::private::primitives::aliases::U256, seqChainID: alloy::sol_types::private::primitives::aliases::U256, ) -> alloy_contract::SolCallBuilder<&P, epochVerifiedDataHashCall, N> { self.call_builder( &epochVerifiedDataHashCall { - epoch, + _epoch, seqChainID, }, ) @@ -13607,9 +14002,9 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ///Creates a new call builder for the [`totalGasFees`] function. pub fn totalGasFees( &self, - epoch: alloy::sol_types::private::primitives::aliases::U256, + _epoch: alloy::sol_types::private::primitives::aliases::U256, ) -> alloy_contract::SolCallBuilder<&P, totalGasFeesCall, N> { - self.call_builder(&totalGasFeesCall { epoch }) + self.call_builder(&totalGasFeesCall { _epoch }) } ///Creates a new call builder for the [`transferOwnership`] function. pub fn transferOwnership( diff --git a/shared/contract-bindings/src/synd/gas_meter.rs b/shared/contract-bindings/src/synd/gas_meter.rs new file mode 100644 index 000000000..7ac94d3a0 --- /dev/null +++ b/shared/contract-bindings/src/synd/gas_meter.rs @@ -0,0 +1,5732 @@ +/** + +Generated by the following Solidity interface... +```solidity +interface GasMeter { + error AddressEmptyCode(address target); + error ERC1967InvalidImplementation(address implementation); + error ERC1967NonPayable(); + error FailedCall(); + error InvalidInitialization(); + error NotInitializing(); + error OwnableInvalidOwner(address owner); + error OwnableUnauthorizedAccount(address account); + error ReentrancyGuardReentrantCall(); + error UUPSUnauthorizedCallContext(); + error UUPSUnsupportedProxiableUUID(bytes32 slot); + error ZeroEpochIndex(); + + event Initialized(uint64 version); + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + event Upgraded(address indexed implementation); + + constructor(); + + function EPOCH_DURATION() external view returns (uint256); + function GAS_METER_STORAGE_LOCATION() external view returns (bytes32); + function START_TIMESTAMP() external view returns (uint256); + function UPGRADE_INTERFACE_VERSION() external view returns (string memory); + function VERSION() external view returns (uint256); + function gasUsed(uint256 epoch, address chainAddress) external view returns (uint256); + function getCurrentEpoch() external view returns (uint256); + function getEpochEnd(uint256 epochIndex) external pure returns (uint256); + function getEpochStart(uint256 epochIndex) external pure returns (uint256); + function initialize() external; + function meterCall(bytes memory meteredCall) external; + function owner() external view returns (address); + function proxiableUUID() external view returns (bytes32); + function renounceOwnership() external; + function transferOwnership(address newOwner) external; + function upgradeToAndCall(address newImplementation, bytes memory data) external payable; +} +``` + +...which was generated by the following JSON ABI: +```json +[ + { + "type": "constructor", + "inputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "EPOCH_DURATION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "GAS_METER_STORAGE_LOCATION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "START_TIMESTAMP", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "gasUsed", + "inputs": [ + { + "name": "epoch", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "chainAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getCurrentEpoch", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getEpochEnd", + "inputs": [ + { + "name": "epochIndex", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "getEpochStart", + "inputs": [ + { + "name": "epochIndex", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "initialize", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "meterCall", + "inputs": [ + { + "name": "meteredCall", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedCall", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ReentrancyGuardReentrantCall", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { + "name": "slot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "ZeroEpochIndex", + "inputs": [] + } +] +```*/ +#[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style, + clippy::empty_structs_with_brackets +)] +pub mod GasMeter { + use super::*; + use alloy::sol_types as alloy_sol_types; + /// The creation / init bytecode of the contract. + /// + /// ```text + ///0x60a080604052346100c257306080525f5160206111f35f395f51905f525460ff8160401c166100b3576002600160401b03196001600160401b03821601610060575b60405161112c90816100c782396080518181816103660152610b350152f35b6001600160401b0319166001600160401b039081175f5160206111f35f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80610041565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630175e23b146101145780631ef750371461010f5780634f1ef2861461010a57806352d1902d14610105578063715018a614610100578063781cd99d146100fb5780638129fc1c146100f65780638da5cb5b146100f1578063a70b9f0c146100ec578063ad3cb1cc146100e7578063b2fe22d5146100e2578063b97dd9e2146100dd578063cf6acdac146100d8578063d5176d23146100d3578063f2fde38b146100ce5763ffa1ad74146100c9575f80fd5b610ab2565b610a89565b610a42565b6108bd565b61089b565b61080b565b610777565b61075a565b610708565b6104b8565b61049a565b6103de565b61033f565b6102c6565b6101bc565b346101b85760206003193601126101b8576004358015610190577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161018b5762278d0081029080820462278d00149015171561018b5763688d46f0018063688d46f01161018b57604051908152602090f35b610acf565b7fd69368d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b346101b8575f6003193601126101b85760206040517ffc98281d044415bf020b282d0d9074ae05a385f11f6d4a56281e2a89efbc89008152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101b857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761028757604052565b610219565b67ffffffffffffffff811161028757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60406003193601126101b8576102da6101f6565b6024359067ffffffffffffffff82116101b857366023830112156101b8578160040135906103078261028c565b916103156040519384610246565b80835236602482860101116101b8576020815f92602461033d97018387013784010152610b1c565b005b346101b8575f6003193601126101b85773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036103b65760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101b8575f6003193601126101b8576103f6610e5a565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101b8575f6003193601126101b857602060405163688d46f08152f35b346101b8575f6003193601126101b8577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005467ffffffffffffffff61050d60ff604084901c16159267ffffffffffffffff1690565b1680159081610700575b60011490816106f6575b1590816106ed575b506106c5578061059d60017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61064a575b6105aa610cd8565b6105b057005b61061b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b6106c0680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b6105a2565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f610529565b303b159150610521565b829150610517565b346101b8575f6003193601126101b857602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b346101b8575f6003193601126101b857602060405162278d008152f35b346101b8575f6003193601126101b85760408051906107968183610246565b6005825260208201917f352e302e3000000000000000000000000000000000000000000000000000000083527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8351948593602085525180918160208701528686015e5f85828601015201168101030190f35b346101b85760406003193601126101b85760243560043573ffffffffffffffffffffffffffffffffffffffff821682036101b857602091610892915f527ffc98281d044415bf020b282d0d9074ae05a385f11f6d4a56281e2a89efbc8900835260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b54604051908152f35b346101b8575f6003193601126101b85760206108b5610cf1565b604051908152f35b346101b85760206003193601126101b85760043567ffffffffffffffff81116101b857366023820112156101b85780600401359067ffffffffffffffff82116101b85736602483830101116101b8577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c610a1a575f6024819260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d5a94806040519384930183378101838152039082335af161097a610d2f565b9015610a1257503a3a15610a0a575b5a820391821161018b5761099c91610afc565b6109a4610cf1565b5f527ffc98281d044415bf020b282d0d9074ae05a385f11f6d4a56281e2a89efbc8900602052610a006109f83360405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b918254610b0f565b905561033d610ec6565b506001610989565b602081519101fd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101b85760206003193601126101b85760043562278d0081029080820462278d00149015171561018b5763688d46f0018063688d46f01161018b57602090604051908152f35b346101b85760206003193601126101b85761033d610aa56101f6565b610aad610e5a565b610d5e565b346101b8575f6003193601126101b8576020604051620f42408152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181029291811591840414171561018b57565b9190820180921161018b57565b909173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610c96575b506103b657610b6d610e5a565b604051927f52d1902d00000000000000000000000000000000000000000000000000000000845260208460048173ffffffffffffffffffffffffffffffffffffffff87165afa5f9481610c65575b50610c02577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff831660045260245ffd5b90917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8403610c3857610c36929350610eeb565b565b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600484905260245ffd5b610c8891955060203d602011610c8f575b610c808183610246565b810190610e4b565b935f610bbb565b503d610c76565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f610b60565b610ce061101c565b610ce861101c565b610c3633610d5e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff9772b910420142811161018b5762278d0090046001810180911161018b5790565b3d15610d59573d90610d408261028c565b91610d4e6040519384610246565b82523d5f602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015610e1f5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b908160209103126101b8575190565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303610e9a57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b90813b15610fda5773ffffffffffffffffffffffffffffffffffffffff8216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115610fa957610fa691611073565b50565b505034610fb257565b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561104b57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f8061109093602081519101845af461108a610d2f565b91611093565b90565b906110d057508051156110a857805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611123575b6110e1575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156110d956f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00 + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"`\xA0\x80`@R4a\0\xC2W0`\x80R_Q` a\x11\xF3_9_Q\x90_RT`\xFF\x81`@\x1C\x16a\0\xB3W`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01a\0`W[`@Qa\x11,\x90\x81a\0\xC7\x829`\x80Q\x81\x81\x81a\x03f\x01Ra\x0B5\x01R\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x11\xF3_9_Q\x90_RU\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_\x80a\0AV[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[_\x80\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x01u\xE2;\x14a\x01\x14W\x80c\x1E\xF7P7\x14a\x01\x0FW\x80cO\x1E\xF2\x86\x14a\x01\nW\x80cR\xD1\x90-\x14a\x01\x05W\x80cqP\x18\xA6\x14a\x01\0W\x80cx\x1C\xD9\x9D\x14a\0\xFBW\x80c\x81)\xFC\x1C\x14a\0\xF6W\x80c\x8D\xA5\xCB[\x14a\0\xF1W\x80c\xA7\x0B\x9F\x0C\x14a\0\xECW\x80c\xAD<\xB1\xCC\x14a\0\xE7W\x80c\xB2\xFE\"\xD5\x14a\0\xE2W\x80c\xB9}\xD9\xE2\x14a\0\xDDW\x80c\xCFj\xCD\xAC\x14a\0\xD8W\x80c\xD5\x17m#\x14a\0\xD3W\x80c\xF2\xFD\xE3\x8B\x14a\0\xCEWc\xFF\xA1\xADt\x14a\0\xC9W_\x80\xFD[a\n\xB2V[a\n\x89V[a\nBV[a\x08\xBDV[a\x08\x9BV[a\x08\x0BV[a\x07wV[a\x07ZV[a\x07\x08V[a\x04\xB8V[a\x04\x9AV[a\x03\xDEV[a\x03?V[a\x02\xC6V[a\x01\xBCV[4a\x01\xB8W` `\x03\x196\x01\x12a\x01\xB8W`\x045\x80\x15a\x01\x90W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x01\x90\x81\x11a\x01\x8BWb'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x01\x8BWch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x01\x8BW`@Q\x90\x81R` \x90\xF3[a\n\xCFV[\x7F\xD6\x93h\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80\xFD[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` `@Q\x7F\xFC\x98(\x1D\x04D\x15\xBF\x02\x0B(-\r\x90t\xAE\x05\xA3\x85\xF1\x1FmJV(\x1E*\x89\xEF\xBC\x89\0\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01\xB8WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x02\x87W`@RV[a\x02\x19V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\x87W`\x1F\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16` \x01\x90V[`@`\x03\x196\x01\x12a\x01\xB8Wa\x02\xDAa\x01\xF6V[`$5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01\xB8W6`#\x83\x01\x12\x15a\x01\xB8W\x81`\x04\x015\x90a\x03\x07\x82a\x02\x8CV[\x91a\x03\x15`@Q\x93\x84a\x02FV[\x80\x83R6`$\x82\x86\x01\x01\x11a\x01\xB8W` \x81_\x92`$a\x03=\x97\x01\x83\x87\x017\x84\x01\x01Ra\x0B\x1CV[\0[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x160\x03a\x03\xB6W` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8Wa\x03\xF6a\x0EZV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` `@Qch\x8DF\xF0\x81R\xF3[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x05\r`\xFF`@\x84\x90\x1C\x16\x15\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x16\x80\x15\x90\x81a\x07\0W[`\x01\x14\x90\x81a\x06\xF6W[\x15\x90\x81a\x06\xEDW[Pa\x06\xC5W\x80a\x05\x9D`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a\x06JW[a\x05\xAAa\x0C\xD8V[a\x05\xB0W\0[a\x06\x1B\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1\0[a\x06\xC0h\x01\0\0\0\0\0\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a\x05\xA2V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15_a\x05)V[0;\x15\x91Pa\x05!V[\x82\x91Pa\x05\x17V[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` `@Qb'\x8D\0\x81R\xF3[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W`@\x80Q\x90a\x07\x96\x81\x83a\x02FV[`\x05\x82R` \x82\x01\x91\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x83Q\x94\x85\x93` \x85RQ\x80\x91\x81` \x87\x01R\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x81\x01\x03\x01\x90\xF3[4a\x01\xB8W`@`\x03\x196\x01\x12a\x01\xB8W`$5`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01\xB8W` \x91a\x08\x92\x91_R\x7F\xFC\x98(\x1D\x04D\x15\xBF\x02\x0B(-\r\x90t\xAE\x05\xA3\x85\xF1\x1FmJV(\x1E*\x89\xEF\xBC\x89\0\x83R`@_ \x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_R` R`@_ \x90V[T`@Q\x90\x81R\xF3[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` a\x08\xB5a\x0C\xF1V[`@Q\x90\x81R\xF3[4a\x01\xB8W` `\x03\x196\x01\x12a\x01\xB8W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01\xB8W6`#\x82\x01\x12\x15a\x01\xB8W\x80`\x04\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01\xB8W6`$\x83\x83\x01\x01\x11a\x01\xB8W\x7F\x9Bw\x9B\x17B-\r\xF9\"#\x01\x8B2\xB4\xD1\xFAF\xE0qr=h\x17\xE2Hm\0;\xEC\xC5_\0\\a\n\x1AW_`$\x81\x92`\x01\x7F\x9Bw\x9B\x17B-\r\xF9\"#\x01\x8B2\xB4\xD1\xFAF\xE0qr=h\x17\xE2Hm\0;\xEC\xC5_\0]Z\x94\x80`@Q\x93\x84\x93\x01\x837\x81\x01\x83\x81R\x03\x90\x823Z\xF1a\tza\r/V[\x90\x15a\n\x12WP::\x15a\n\nW[Z\x82\x03\x91\x82\x11a\x01\x8BWa\t\x9C\x91a\n\xFCV[a\t\xA4a\x0C\xF1V[_R\x7F\xFC\x98(\x1D\x04D\x15\xBF\x02\x0B(-\r\x90t\xAE\x05\xA3\x85\xF1\x1FmJV(\x1E*\x89\xEF\xBC\x89\0` Ra\n\0a\t\xF83`@_ \x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_R` R`@_ \x90V[\x91\x82Ta\x0B\x0FV[\x90Ua\x03=a\x0E\xC6V[P`\x01a\t\x89V[` \x81Q\x91\x01\xFD[\x7F>\xE5\xAE\xB5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x01\xB8W` `\x03\x196\x01\x12a\x01\xB8W`\x045b'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x01\x8BWch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x01\x8BW` \x90`@Q\x90\x81R\xF3[4a\x01\xB8W` `\x03\x196\x01\x12a\x01\xB8Wa\x03=a\n\xA5a\x01\xF6V[a\n\xADa\x0EZV[a\r^V[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` `@Qb\x0FB@\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[\x81\x81\x02\x92\x91\x81\x15\x91\x84\x04\x14\x17\x15a\x01\x8BWV[\x91\x90\x82\x01\x80\x92\x11a\x01\x8BWV[\x90\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\x0C\x96W[Pa\x03\xB6Wa\x0Bma\x0EZV[`@Q\x92\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R` \x84`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x87\x16Z\xFA_\x94\x81a\x0CeW[Pa\x0C\x02W\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16`\x04R`$_\xFD[\x90\x91\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x84\x03a\x0C8Wa\x0C6\x92\x93Pa\x0E\xEBV[V[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04\x84\x90R`$_\xFD[a\x0C\x88\x91\x95P` =` \x11a\x0C\x8FW[a\x0C\x80\x81\x83a\x02FV[\x81\x01\x90a\x0EKV[\x93_a\x0B\xBBV[P=a\x0CvV[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15_a\x0B`V[a\x0C\xE0a\x10\x1CV[a\x0C\xE8a\x10\x1CV[a\x0C63a\r^V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x97r\xB9\x10B\x01B\x81\x11a\x01\x8BWb'\x8D\0\x90\x04`\x01\x81\x01\x80\x91\x11a\x01\x8BW\x90V[=\x15a\rYW=\x90a\r@\x82a\x02\x8CV[\x91a\rN`@Q\x93\x84a\x02FV[\x82R=_` \x84\x01>V[``\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a\x0E\x1FWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[\x90\x81` \x91\x03\x12a\x01\xB8WQ\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a\x0E\x9AWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[_\x7F\x9Bw\x9B\x17B-\r\xF9\"#\x01\x8B2\xB4\xD1\xFAF\xE0qr=h\x17\xE2Hm\0;\xEC\xC5_\0]V[\x90\x81;\x15a\x0F\xDAWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\x80Q\x15a\x0F\xA9Wa\x0F\xA6\x91a\x10sV[PV[PP4a\x0F\xB2WV[\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a\x10KWV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80a\x10\x90\x93` \x81Q\x91\x01\x84Z\xF4a\x10\x8Aa\r/V[\x91a\x10\x93V[\x90V[\x90a\x10\xD0WP\x80Q\x15a\x10\xA8W\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a\x11#W[a\x10\xE1WP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a\x10\xD9V\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0", + ); + /// The runtime bytecode of the contract, as deployed on the network. + /// + /// ```text + ///0x60806040526004361015610011575f80fd5b5f3560e01c80630175e23b146101145780631ef750371461010f5780634f1ef2861461010a57806352d1902d14610105578063715018a614610100578063781cd99d146100fb5780638129fc1c146100f65780638da5cb5b146100f1578063a70b9f0c146100ec578063ad3cb1cc146100e7578063b2fe22d5146100e2578063b97dd9e2146100dd578063cf6acdac146100d8578063d5176d23146100d3578063f2fde38b146100ce5763ffa1ad74146100c9575f80fd5b610ab2565b610a89565b610a42565b6108bd565b61089b565b61080b565b610777565b61075a565b610708565b6104b8565b61049a565b6103de565b61033f565b6102c6565b6101bc565b346101b85760206003193601126101b8576004358015610190577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161018b5762278d0081029080820462278d00149015171561018b5763688d46f0018063688d46f01161018b57604051908152602090f35b610acf565b7fd69368d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f80fd5b346101b8575f6003193601126101b85760206040517ffc98281d044415bf020b282d0d9074ae05a385f11f6d4a56281e2a89efbc89008152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101b857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761028757604052565b610219565b67ffffffffffffffff811161028757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b60406003193601126101b8576102da6101f6565b6024359067ffffffffffffffff82116101b857366023830112156101b8578160040135906103078261028c565b916103156040519384610246565b80835236602482860101116101b8576020815f92602461033d97018387013784010152610b1c565b005b346101b8575f6003193601126101b85773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036103b65760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101b8575f6003193601126101b8576103f6610e5a565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101b8575f6003193601126101b857602060405163688d46f08152f35b346101b8575f6003193601126101b8577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005467ffffffffffffffff61050d60ff604084901c16159267ffffffffffffffff1690565b1680159081610700575b60011490816106f6575b1590816106ed575b506106c5578061059d60017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b61064a575b6105aa610cd8565b6105b057005b61061b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b6106c0680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b6105a2565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f610529565b303b159150610521565b829150610517565b346101b8575f6003193601126101b857602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b346101b8575f6003193601126101b857602060405162278d008152f35b346101b8575f6003193601126101b85760408051906107968183610246565b6005825260208201917f352e302e3000000000000000000000000000000000000000000000000000000083527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8351948593602085525180918160208701528686015e5f85828601015201168101030190f35b346101b85760406003193601126101b85760243560043573ffffffffffffffffffffffffffffffffffffffff821682036101b857602091610892915f527ffc98281d044415bf020b282d0d9074ae05a385f11f6d4a56281e2a89efbc8900835260405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b54604051908152f35b346101b8575f6003193601126101b85760206108b5610cf1565b604051908152f35b346101b85760206003193601126101b85760043567ffffffffffffffff81116101b857366023820112156101b85780600401359067ffffffffffffffff82116101b85736602483830101116101b8577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c610a1a575f6024819260017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d5a94806040519384930183378101838152039082335af161097a610d2f565b9015610a1257503a3a15610a0a575b5a820391821161018b5761099c91610afc565b6109a4610cf1565b5f527ffc98281d044415bf020b282d0d9074ae05a385f11f6d4a56281e2a89efbc8900602052610a006109f83360405f209073ffffffffffffffffffffffffffffffffffffffff165f5260205260405f2090565b918254610b0f565b905561033d610ec6565b506001610989565b602081519101fd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101b85760206003193601126101b85760043562278d0081029080820462278d00149015171561018b5763688d46f0018063688d46f01161018b57602090604051908152f35b346101b85760206003193601126101b85761033d610aa56101f6565b610aad610e5a565b610d5e565b346101b8575f6003193601126101b8576020604051620f42408152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181029291811591840414171561018b57565b9190820180921161018b57565b909173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610c96575b506103b657610b6d610e5a565b604051927f52d1902d00000000000000000000000000000000000000000000000000000000845260208460048173ffffffffffffffffffffffffffffffffffffffff87165afa5f9481610c65575b50610c02577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff831660045260245ffd5b90917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8403610c3857610c36929350610eeb565b565b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600484905260245ffd5b610c8891955060203d602011610c8f575b610c808183610246565b810190610e4b565b935f610bbb565b503d610c76565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f610b60565b610ce061101c565b610ce861101c565b610c3633610d5e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff9772b910420142811161018b5762278d0090046001810180911161018b5790565b3d15610d59573d90610d408261028c565b91610d4e6040519384610246565b82523d5f602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015610e1f5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b908160209103126101b8575190565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303610e9a57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b90813b15610fda5773ffffffffffffffffffffffffffffffffffffffff8216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115610fa957610fa691611073565b50565b505034610fb257565b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561104b57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f8061109093602081519101845af461108a610d2f565b91611093565b90565b906110d057508051156110a857805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611123575b6110e1575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156110d956 + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[_5`\xE0\x1C\x80c\x01u\xE2;\x14a\x01\x14W\x80c\x1E\xF7P7\x14a\x01\x0FW\x80cO\x1E\xF2\x86\x14a\x01\nW\x80cR\xD1\x90-\x14a\x01\x05W\x80cqP\x18\xA6\x14a\x01\0W\x80cx\x1C\xD9\x9D\x14a\0\xFBW\x80c\x81)\xFC\x1C\x14a\0\xF6W\x80c\x8D\xA5\xCB[\x14a\0\xF1W\x80c\xA7\x0B\x9F\x0C\x14a\0\xECW\x80c\xAD<\xB1\xCC\x14a\0\xE7W\x80c\xB2\xFE\"\xD5\x14a\0\xE2W\x80c\xB9}\xD9\xE2\x14a\0\xDDW\x80c\xCFj\xCD\xAC\x14a\0\xD8W\x80c\xD5\x17m#\x14a\0\xD3W\x80c\xF2\xFD\xE3\x8B\x14a\0\xCEWc\xFF\xA1\xADt\x14a\0\xC9W_\x80\xFD[a\n\xB2V[a\n\x89V[a\nBV[a\x08\xBDV[a\x08\x9BV[a\x08\x0BV[a\x07wV[a\x07ZV[a\x07\x08V[a\x04\xB8V[a\x04\x9AV[a\x03\xDEV[a\x03?V[a\x02\xC6V[a\x01\xBCV[4a\x01\xB8W` `\x03\x196\x01\x12a\x01\xB8W`\x045\x80\x15a\x01\x90W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x01\x90\x81\x11a\x01\x8BWb'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x01\x8BWch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x01\x8BW`@Q\x90\x81R` \x90\xF3[a\n\xCFV[\x7F\xD6\x93h\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80\xFD[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` `@Q\x7F\xFC\x98(\x1D\x04D\x15\xBF\x02\x0B(-\r\x90t\xAE\x05\xA3\x85\xF1\x1FmJV(\x1E*\x89\xEF\xBC\x89\0\x81R\xF3[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01\xB8WV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x02\x87W`@RV[a\x02\x19V[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\x87W`\x1F\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16` \x01\x90V[`@`\x03\x196\x01\x12a\x01\xB8Wa\x02\xDAa\x01\xF6V[`$5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01\xB8W6`#\x83\x01\x12\x15a\x01\xB8W\x81`\x04\x015\x90a\x03\x07\x82a\x02\x8CV[\x91a\x03\x15`@Q\x93\x84a\x02FV[\x80\x83R6`$\x82\x86\x01\x01\x11a\x01\xB8W` \x81_\x92`$a\x03=\x97\x01\x83\x87\x017\x84\x01\x01Ra\x0B\x1CV[\0[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x160\x03a\x03\xB6W` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8Wa\x03\xF6a\x0EZV[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` `@Qch\x8DF\xF0\x81R\xF3[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Tg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x05\r`\xFF`@\x84\x90\x1C\x16\x15\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90V[\x16\x80\x15\x90\x81a\x07\0W[`\x01\x14\x90\x81a\x06\xF6W[\x15\x90\x81a\x06\xEDW[Pa\x06\xC5W\x80a\x05\x9D`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a\x06JW[a\x05\xAAa\x0C\xD8V[a\x05\xB0W\0[a\x06\x1B\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[`@Q`\x01\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1\0[a\x06\xC0h\x01\0\0\0\0\0\0\0\0\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0UV[a\x05\xA2V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15_a\x05)V[0;\x15\x91Pa\x05!V[\x82\x91Pa\x05\x17V[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` `@Qb'\x8D\0\x81R\xF3[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W`@\x80Q\x90a\x07\x96\x81\x83a\x02FV[`\x05\x82R` \x82\x01\x91\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x83Q\x94\x85\x93` \x85RQ\x80\x91\x81` \x87\x01R\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x81\x01\x03\x01\x90\xF3[4a\x01\xB8W`@`\x03\x196\x01\x12a\x01\xB8W`$5`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01\xB8W` \x91a\x08\x92\x91_R\x7F\xFC\x98(\x1D\x04D\x15\xBF\x02\x0B(-\r\x90t\xAE\x05\xA3\x85\xF1\x1FmJV(\x1E*\x89\xEF\xBC\x89\0\x83R`@_ \x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_R` R`@_ \x90V[T`@Q\x90\x81R\xF3[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` a\x08\xB5a\x0C\xF1V[`@Q\x90\x81R\xF3[4a\x01\xB8W` `\x03\x196\x01\x12a\x01\xB8W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01\xB8W6`#\x82\x01\x12\x15a\x01\xB8W\x80`\x04\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01\xB8W6`$\x83\x83\x01\x01\x11a\x01\xB8W\x7F\x9Bw\x9B\x17B-\r\xF9\"#\x01\x8B2\xB4\xD1\xFAF\xE0qr=h\x17\xE2Hm\0;\xEC\xC5_\0\\a\n\x1AW_`$\x81\x92`\x01\x7F\x9Bw\x9B\x17B-\r\xF9\"#\x01\x8B2\xB4\xD1\xFAF\xE0qr=h\x17\xE2Hm\0;\xEC\xC5_\0]Z\x94\x80`@Q\x93\x84\x93\x01\x837\x81\x01\x83\x81R\x03\x90\x823Z\xF1a\tza\r/V[\x90\x15a\n\x12WP::\x15a\n\nW[Z\x82\x03\x91\x82\x11a\x01\x8BWa\t\x9C\x91a\n\xFCV[a\t\xA4a\x0C\xF1V[_R\x7F\xFC\x98(\x1D\x04D\x15\xBF\x02\x0B(-\r\x90t\xAE\x05\xA3\x85\xF1\x1FmJV(\x1E*\x89\xEF\xBC\x89\0` Ra\n\0a\t\xF83`@_ \x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16_R` R`@_ \x90V[\x91\x82Ta\x0B\x0FV[\x90Ua\x03=a\x0E\xC6V[P`\x01a\t\x89V[` \x81Q\x91\x01\xFD[\x7F>\xE5\xAE\xB5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x01\xB8W` `\x03\x196\x01\x12a\x01\xB8W`\x045b'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x01\x8BWch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x01\x8BW` \x90`@Q\x90\x81R\xF3[4a\x01\xB8W` `\x03\x196\x01\x12a\x01\xB8Wa\x03=a\n\xA5a\x01\xF6V[a\n\xADa\x0EZV[a\r^V[4a\x01\xB8W_`\x03\x196\x01\x12a\x01\xB8W` `@Qb\x0FB@\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[\x81\x81\x02\x92\x91\x81\x15\x91\x84\x04\x14\x17\x15a\x01\x8BWV[\x91\x90\x82\x01\x80\x92\x11a\x01\x8BWV[\x90\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\x0C\x96W[Pa\x03\xB6Wa\x0Bma\x0EZV[`@Q\x92\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R` \x84`\x04\x81s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x87\x16Z\xFA_\x94\x81a\x0CeW[Pa\x0C\x02W\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_Rs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16`\x04R`$_\xFD[\x90\x91\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x84\x03a\x0C8Wa\x0C6\x92\x93Pa\x0E\xEBV[V[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04\x84\x90R`$_\xFD[a\x0C\x88\x91\x95P` =` \x11a\x0C\x8FW[a\x0C\x80\x81\x83a\x02FV[\x81\x01\x90a\x0EKV[\x93_a\x0B\xBBV[P=a\x0CvV[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15_a\x0B`V[a\x0C\xE0a\x10\x1CV[a\x0C\xE8a\x10\x1CV[a\x0C63a\r^V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x97r\xB9\x10B\x01B\x81\x11a\x01\x8BWb'\x8D\0\x90\x04`\x01\x81\x01\x80\x91\x11a\x01\x8BW\x90V[=\x15a\rYW=\x90a\r@\x82a\x02\x8CV[\x91a\rN`@Q\x93\x84a\x02FV[\x82R=_` \x84\x01>V[``\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a\x0E\x1FWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[\x90\x81` \x91\x03\x12a\x01\xB8WQ\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a\x0E\x9AWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[_\x7F\x9Bw\x9B\x17B-\r\xF9\"#\x01\x8B2\xB4\xD1\xFAF\xE0qr=h\x17\xE2Hm\0;\xEC\xC5_\0]V[\x90\x81;\x15a\x0F\xDAWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\x80Q\x15a\x0F\xA9Wa\x0F\xA6\x91a\x10sV[PV[PP4a\x0F\xB2WV[\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a\x10KWV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[_\x80a\x10\x90\x93` \x81Q\x91\x01\x84Z\xF4a\x10\x8Aa\r/V[\x91a\x10\x93V[\x90V[\x90a\x10\xD0WP\x80Q\x15a\x10\xA8W\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a\x11#W[a\x10\xE1WP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a\x10\xD9V", + ); + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `AddressEmptyCode(address)` and selector `0x9996b315`. +```solidity +error AddressEmptyCode(address target); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct AddressEmptyCode { + #[allow(missing_docs)] + pub target: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: AddressEmptyCode) -> Self { + (value.target,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for AddressEmptyCode { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { target: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for AddressEmptyCode { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "AddressEmptyCode(address)"; + const SELECTOR: [u8; 4] = [153u8, 150u8, 179u8, 21u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.target, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ERC1967InvalidImplementation(address)` and selector `0x4c9c8ce3`. +```solidity +error ERC1967InvalidImplementation(address implementation); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ERC1967InvalidImplementation { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: ERC1967InvalidImplementation) -> Self { + (value.implementation,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for ERC1967InvalidImplementation { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { implementation: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ERC1967InvalidImplementation { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ERC1967InvalidImplementation(address)"; + const SELECTOR: [u8; 4] = [76u8, 156u8, 140u8, 227u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.implementation, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ERC1967NonPayable()` and selector `0xb398979f`. +```solidity +error ERC1967NonPayable(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ERC1967NonPayable; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ERC1967NonPayable) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ERC1967NonPayable { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ERC1967NonPayable { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ERC1967NonPayable()"; + const SELECTOR: [u8; 4] = [179u8, 152u8, 151u8, 159u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `FailedCall()` and selector `0xd6bda275`. +```solidity +error FailedCall(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct FailedCall; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: FailedCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for FailedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for FailedCall { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "FailedCall()"; + const SELECTOR: [u8; 4] = [214u8, 189u8, 162u8, 117u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `InvalidInitialization()` and selector `0xf92ee8a9`. +```solidity +error InvalidInitialization(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct InvalidInitialization; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: InvalidInitialization) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for InvalidInitialization { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for InvalidInitialization { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "InvalidInitialization()"; + const SELECTOR: [u8; 4] = [249u8, 46u8, 232u8, 169u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `NotInitializing()` and selector `0xd7e6bcf8`. +```solidity +error NotInitializing(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct NotInitializing; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: NotInitializing) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for NotInitializing { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for NotInitializing { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "NotInitializing()"; + const SELECTOR: [u8; 4] = [215u8, 230u8, 188u8, 248u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `OwnableInvalidOwner(address)` and selector `0x1e4fbdf7`. +```solidity +error OwnableInvalidOwner(address owner); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct OwnableInvalidOwner { + #[allow(missing_docs)] + pub owner: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: OwnableInvalidOwner) -> Self { + (value.owner,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for OwnableInvalidOwner { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { owner: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for OwnableInvalidOwner { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "OwnableInvalidOwner(address)"; + const SELECTOR: [u8; 4] = [30u8, 79u8, 189u8, 247u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.owner, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `OwnableUnauthorizedAccount(address)` and selector `0x118cdaa7`. +```solidity +error OwnableUnauthorizedAccount(address account); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct OwnableUnauthorizedAccount { + #[allow(missing_docs)] + pub account: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: OwnableUnauthorizedAccount) -> Self { + (value.account,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for OwnableUnauthorizedAccount { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { account: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for OwnableUnauthorizedAccount { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "OwnableUnauthorizedAccount(address)"; + const SELECTOR: [u8; 4] = [17u8, 140u8, 218u8, 167u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.account, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ReentrancyGuardReentrantCall()` and selector `0x3ee5aeb5`. +```solidity +error ReentrancyGuardReentrantCall(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ReentrancyGuardReentrantCall; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: ReentrancyGuardReentrantCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for ReentrancyGuardReentrantCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ReentrancyGuardReentrantCall { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ReentrancyGuardReentrantCall()"; + const SELECTOR: [u8; 4] = [62u8, 229u8, 174u8, 181u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `UUPSUnauthorizedCallContext()` and selector `0xe07c8dba`. +```solidity +error UUPSUnauthorizedCallContext(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UUPSUnauthorizedCallContext; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UUPSUnauthorizedCallContext) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UUPSUnauthorizedCallContext { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for UUPSUnauthorizedCallContext { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "UUPSUnauthorizedCallContext()"; + const SELECTOR: [u8; 4] = [224u8, 124u8, 141u8, 186u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `UUPSUnsupportedProxiableUUID(bytes32)` and selector `0xaa1d49a4`. +```solidity +error UUPSUnsupportedProxiableUUID(bytes32 slot); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UUPSUnsupportedProxiableUUID { + #[allow(missing_docs)] + pub slot: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UUPSUnsupportedProxiableUUID) -> Self { + (value.slot,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UUPSUnsupportedProxiableUUID { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { slot: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for UUPSUnsupportedProxiableUUID { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "UUPSUnsupportedProxiableUUID(bytes32)"; + const SELECTOR: [u8; 4] = [170u8, 29u8, 73u8, 164u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.slot), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ZeroEpochIndex()` and selector `0xd69368d4`. +```solidity +error ZeroEpochIndex(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ZeroEpochIndex; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ZeroEpochIndex) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ZeroEpochIndex { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ZeroEpochIndex { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ZeroEpochIndex()"; + const SELECTOR: [u8; 4] = [214u8, 147u8, 104u8, 212u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `Initialized(uint64)` and selector `0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2`. +```solidity +event Initialized(uint64 version); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct Initialized { + #[allow(missing_docs)] + pub version: u64, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for Initialized { + type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<64>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "Initialized(uint64)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 199u8, 245u8, 5u8, 178u8, 243u8, 113u8, 174u8, 33u8, 117u8, 238u8, 73u8, + 19u8, 244u8, 73u8, 158u8, 31u8, 38u8, 51u8, 167u8, 181u8, 147u8, 99u8, + 33u8, 238u8, 209u8, 205u8, 174u8, 182u8, 17u8, 81u8, 129u8, 210u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { version: data.0 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.version), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Initialized { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Initialized> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Initialized) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `OwnershipTransferred(address,address)` and selector `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0`. +```solidity +event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct OwnershipTransferred { + #[allow(missing_docs)] + pub previousOwner: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub newOwner: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for OwnershipTransferred { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "OwnershipTransferred(address,address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 139u8, 224u8, 7u8, 156u8, 83u8, 22u8, 89u8, 20u8, 19u8, 68u8, 205u8, + 31u8, 208u8, 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8, + 218u8, 175u8, 227u8, 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + previousOwner: topics.1, + newOwner: topics.2, + } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + ( + Self::SIGNATURE_HASH.into(), + self.previousOwner.clone(), + self.newOwner.clone(), + ) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.previousOwner, + ); + out[2usize] = ::encode_topic( + &self.newOwner, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for OwnershipTransferred { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&OwnershipTransferred> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &OwnershipTransferred) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `Upgraded(address)` and selector `0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b`. +```solidity +event Upgraded(address indexed implementation); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct Upgraded { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for Upgraded { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "Upgraded(address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8, + 179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8, + 12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { implementation: topics.1 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.implementation.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.implementation, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Upgraded { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Upgraded> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Upgraded) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + /**Constructor`. +```solidity +constructor(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct constructorCall {} + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: constructorCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for constructorCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolConstructor for constructorCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `EPOCH_DURATION()` and selector `0xa70b9f0c`. +```solidity +function EPOCH_DURATION() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct EPOCH_DURATIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`EPOCH_DURATION()`](EPOCH_DURATIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct EPOCH_DURATIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: EPOCH_DURATIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for EPOCH_DURATIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: EPOCH_DURATIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for EPOCH_DURATIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for EPOCH_DURATIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "EPOCH_DURATION()"; + const SELECTOR: [u8; 4] = [167u8, 11u8, 159u8, 12u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: EPOCH_DURATIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: EPOCH_DURATIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `GAS_METER_STORAGE_LOCATION()` and selector `0x1ef75037`. +```solidity +function GAS_METER_STORAGE_LOCATION() external view returns (bytes32); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct GAS_METER_STORAGE_LOCATIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`GAS_METER_STORAGE_LOCATION()`](GAS_METER_STORAGE_LOCATIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct GAS_METER_STORAGE_LOCATIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: GAS_METER_STORAGE_LOCATIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for GAS_METER_STORAGE_LOCATIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: GAS_METER_STORAGE_LOCATIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for GAS_METER_STORAGE_LOCATIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for GAS_METER_STORAGE_LOCATIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "GAS_METER_STORAGE_LOCATION()"; + const SELECTOR: [u8; 4] = [30u8, 247u8, 80u8, 55u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: GAS_METER_STORAGE_LOCATIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: GAS_METER_STORAGE_LOCATIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `START_TIMESTAMP()` and selector `0x781cd99d`. +```solidity +function START_TIMESTAMP() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct START_TIMESTAMPCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`START_TIMESTAMP()`](START_TIMESTAMPCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct START_TIMESTAMPReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: START_TIMESTAMPCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for START_TIMESTAMPCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: START_TIMESTAMPReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for START_TIMESTAMPReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for START_TIMESTAMPCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "START_TIMESTAMP()"; + const SELECTOR: [u8; 4] = [120u8, 28u8, 217u8, 157u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: START_TIMESTAMPReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: START_TIMESTAMPReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `UPGRADE_INTERFACE_VERSION()` and selector `0xad3cb1cc`. +```solidity +function UPGRADE_INTERFACE_VERSION() external view returns (string memory); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UPGRADE_INTERFACE_VERSIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`UPGRADE_INTERFACE_VERSION()`](UPGRADE_INTERFACE_VERSIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UPGRADE_INTERFACE_VERSIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::String, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UPGRADE_INTERFACE_VERSIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UPGRADE_INTERFACE_VERSIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UPGRADE_INTERFACE_VERSIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UPGRADE_INTERFACE_VERSIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for UPGRADE_INTERFACE_VERSIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::String; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "UPGRADE_INTERFACE_VERSION()"; + const SELECTOR: [u8; 4] = [173u8, 60u8, 177u8, 204u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: UPGRADE_INTERFACE_VERSIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: UPGRADE_INTERFACE_VERSIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `VERSION()` and selector `0xffa1ad74`. +```solidity +function VERSION() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct VERSIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`VERSION()`](VERSIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct VERSIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: VERSIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for VERSIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: VERSIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for VERSIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for VERSIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "VERSION()"; + const SELECTOR: [u8; 4] = [255u8, 161u8, 173u8, 116u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: VERSIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: VERSIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `gasUsed(uint256,address)` and selector `0xb2fe22d5`. +```solidity +function gasUsed(uint256 epoch, address chainAddress) external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct gasUsedCall { + #[allow(missing_docs)] + pub epoch: alloy::sol_types::private::primitives::aliases::U256, + #[allow(missing_docs)] + pub chainAddress: alloy::sol_types::private::Address, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`gasUsed(uint256,address)`](gasUsedCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct gasUsedReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Address, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + alloy::sol_types::private::Address, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: gasUsedCall) -> Self { + (value.epoch, value.chainAddress) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for gasUsedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + epoch: tuple.0, + chainAddress: tuple.1, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: gasUsedReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for gasUsedReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for gasUsedCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Address, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "gasUsed(uint256,address)"; + const SELECTOR: [u8; 4] = [178u8, 254u8, 34u8, 213u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.epoch), + ::tokenize( + &self.chainAddress, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: gasUsedReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: gasUsedReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `getCurrentEpoch()` and selector `0xb97dd9e2`. +```solidity +function getCurrentEpoch() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getCurrentEpochCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`getCurrentEpoch()`](getCurrentEpochCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getCurrentEpochReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getCurrentEpochCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getCurrentEpochCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getCurrentEpochReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for getCurrentEpochReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getCurrentEpochCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getCurrentEpoch()"; + const SELECTOR: [u8; 4] = [185u8, 125u8, 217u8, 226u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: getCurrentEpochReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: getCurrentEpochReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `getEpochEnd(uint256)` and selector `0xd5176d23`. +```solidity +function getEpochEnd(uint256 epochIndex) external pure returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getEpochEndCall { + #[allow(missing_docs)] + pub epochIndex: alloy::sol_types::private::primitives::aliases::U256, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`getEpochEnd(uint256)`](getEpochEndCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getEpochEndReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getEpochEndCall) -> Self { + (value.epochIndex,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getEpochEndCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { epochIndex: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getEpochEndReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getEpochEndReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getEpochEndCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getEpochEnd(uint256)"; + const SELECTOR: [u8; 4] = [213u8, 23u8, 109u8, 35u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.epochIndex), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: getEpochEndReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: getEpochEndReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `getEpochStart(uint256)` and selector `0x0175e23b`. +```solidity +function getEpochStart(uint256 epochIndex) external pure returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getEpochStartCall { + #[allow(missing_docs)] + pub epochIndex: alloy::sol_types::private::primitives::aliases::U256, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`getEpochStart(uint256)`](getEpochStartCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getEpochStartReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getEpochStartCall) -> Self { + (value.epochIndex,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getEpochStartCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { epochIndex: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getEpochStartReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getEpochStartReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getEpochStartCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getEpochStart(uint256)"; + const SELECTOR: [u8; 4] = [1u8, 117u8, 226u8, 59u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.epochIndex), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: getEpochStartReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: getEpochStartReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `initialize()` and selector `0x8129fc1c`. +```solidity +function initialize() external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct initializeCall; + ///Container type for the return parameters of the [`initialize()`](initializeCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct initializeReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: initializeCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for initializeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: initializeReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for initializeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl initializeReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for initializeCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = initializeReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "initialize()"; + const SELECTOR: [u8; 4] = [129u8, 41u8, 252u8, 28u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + initializeReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `meterCall(bytes)` and selector `0xcf6acdac`. +```solidity +function meterCall(bytes memory meteredCall) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct meterCallCall { + #[allow(missing_docs)] + pub meteredCall: alloy::sol_types::private::Bytes, + } + ///Container type for the return parameters of the [`meterCall(bytes)`](meterCallCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct meterCallReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: meterCallCall) -> Self { + (value.meteredCall,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for meterCallCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { meteredCall: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: meterCallReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for meterCallReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl meterCallReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for meterCallCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Bytes,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = meterCallReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "meterCall(bytes)"; + const SELECTOR: [u8; 4] = [207u8, 106u8, 205u8, 172u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.meteredCall, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + meterCallReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `owner()` and selector `0x8da5cb5b`. +```solidity +function owner() external view returns (address); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ownerCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`owner()`](ownerCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ownerReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ownerCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ownerCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ownerReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ownerReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for ownerCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::Address; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "owner()"; + const SELECTOR: [u8; 4] = [141u8, 165u8, 203u8, 91u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: ownerReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: ownerReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `proxiableUUID()` and selector `0x52d1902d`. +```solidity +function proxiableUUID() external view returns (bytes32); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct proxiableUUIDCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`proxiableUUID()`](proxiableUUIDCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct proxiableUUIDReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: proxiableUUIDCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for proxiableUUIDCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: proxiableUUIDReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for proxiableUUIDReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for proxiableUUIDCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "proxiableUUID()"; + const SELECTOR: [u8; 4] = [82u8, 209u8, 144u8, 45u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: proxiableUUIDReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: proxiableUUIDReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `renounceOwnership()` and selector `0x715018a6`. +```solidity +function renounceOwnership() external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct renounceOwnershipCall; + ///Container type for the return parameters of the [`renounceOwnership()`](renounceOwnershipCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct renounceOwnershipReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: renounceOwnershipCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for renounceOwnershipCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: renounceOwnershipReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for renounceOwnershipReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl renounceOwnershipReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for renounceOwnershipCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = renounceOwnershipReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "renounceOwnership()"; + const SELECTOR: [u8; 4] = [113u8, 80u8, 24u8, 166u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + renounceOwnershipReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `transferOwnership(address)` and selector `0xf2fde38b`. +```solidity +function transferOwnership(address newOwner) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct transferOwnershipCall { + #[allow(missing_docs)] + pub newOwner: alloy::sol_types::private::Address, + } + ///Container type for the return parameters of the [`transferOwnership(address)`](transferOwnershipCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct transferOwnershipReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: transferOwnershipCall) -> Self { + (value.newOwner,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for transferOwnershipCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { newOwner: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: transferOwnershipReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for transferOwnershipReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl transferOwnershipReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for transferOwnershipCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = transferOwnershipReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "transferOwnership(address)"; + const SELECTOR: [u8; 4] = [242u8, 253u8, 227u8, 139u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.newOwner, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + transferOwnershipReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `upgradeToAndCall(address,bytes)` and selector `0x4f1ef286`. +```solidity +function upgradeToAndCall(address newImplementation, bytes memory data) external payable; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct upgradeToAndCallCall { + #[allow(missing_docs)] + pub newImplementation: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + ///Container type for the return parameters of the [`upgradeToAndCall(address,bytes)`](upgradeToAndCallCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct upgradeToAndCallReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Bytes, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: upgradeToAndCallCall) -> Self { + (value.newImplementation, value.data) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for upgradeToAndCallCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + newImplementation: tuple.0, + data: tuple.1, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: upgradeToAndCallReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for upgradeToAndCallReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl upgradeToAndCallReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for upgradeToAndCallCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = upgradeToAndCallReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "upgradeToAndCall(address,bytes)"; + const SELECTOR: [u8; 4] = [79u8, 30u8, 242u8, 134u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.newImplementation, + ), + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + upgradeToAndCallReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + ///Container for all the [`GasMeter`](self) function calls. + #[derive(serde::Serialize, serde::Deserialize)] + #[derive()] + pub enum GasMeterCalls { + #[allow(missing_docs)] + EPOCH_DURATION(EPOCH_DURATIONCall), + #[allow(missing_docs)] + GAS_METER_STORAGE_LOCATION(GAS_METER_STORAGE_LOCATIONCall), + #[allow(missing_docs)] + START_TIMESTAMP(START_TIMESTAMPCall), + #[allow(missing_docs)] + UPGRADE_INTERFACE_VERSION(UPGRADE_INTERFACE_VERSIONCall), + #[allow(missing_docs)] + VERSION(VERSIONCall), + #[allow(missing_docs)] + gasUsed(gasUsedCall), + #[allow(missing_docs)] + getCurrentEpoch(getCurrentEpochCall), + #[allow(missing_docs)] + getEpochEnd(getEpochEndCall), + #[allow(missing_docs)] + getEpochStart(getEpochStartCall), + #[allow(missing_docs)] + initialize(initializeCall), + #[allow(missing_docs)] + meterCall(meterCallCall), + #[allow(missing_docs)] + owner(ownerCall), + #[allow(missing_docs)] + proxiableUUID(proxiableUUIDCall), + #[allow(missing_docs)] + renounceOwnership(renounceOwnershipCall), + #[allow(missing_docs)] + transferOwnership(transferOwnershipCall), + #[allow(missing_docs)] + upgradeToAndCall(upgradeToAndCallCall), + } + #[automatically_derived] + impl GasMeterCalls { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 4usize]] = &[ + [1u8, 117u8, 226u8, 59u8], + [30u8, 247u8, 80u8, 55u8], + [79u8, 30u8, 242u8, 134u8], + [82u8, 209u8, 144u8, 45u8], + [113u8, 80u8, 24u8, 166u8], + [120u8, 28u8, 217u8, 157u8], + [129u8, 41u8, 252u8, 28u8], + [141u8, 165u8, 203u8, 91u8], + [167u8, 11u8, 159u8, 12u8], + [173u8, 60u8, 177u8, 204u8], + [178u8, 254u8, 34u8, 213u8], + [185u8, 125u8, 217u8, 226u8], + [207u8, 106u8, 205u8, 172u8], + [213u8, 23u8, 109u8, 35u8], + [242u8, 253u8, 227u8, 139u8], + [255u8, 161u8, 173u8, 116u8], + ]; + } + #[automatically_derived] + impl alloy_sol_types::SolInterface for GasMeterCalls { + const NAME: &'static str = "GasMeterCalls"; + const MIN_DATA_LENGTH: usize = 0usize; + const COUNT: usize = 16usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::EPOCH_DURATION(_) => { + ::SELECTOR + } + Self::GAS_METER_STORAGE_LOCATION(_) => { + ::SELECTOR + } + Self::START_TIMESTAMP(_) => { + ::SELECTOR + } + Self::UPGRADE_INTERFACE_VERSION(_) => { + ::SELECTOR + } + Self::VERSION(_) => ::SELECTOR, + Self::gasUsed(_) => ::SELECTOR, + Self::getCurrentEpoch(_) => { + ::SELECTOR + } + Self::getEpochEnd(_) => { + ::SELECTOR + } + Self::getEpochStart(_) => { + ::SELECTOR + } + Self::initialize(_) => { + ::SELECTOR + } + Self::meterCall(_) => { + ::SELECTOR + } + Self::owner(_) => ::SELECTOR, + Self::proxiableUUID(_) => { + ::SELECTOR + } + Self::renounceOwnership(_) => { + ::SELECTOR + } + Self::transferOwnership(_) => { + ::SELECTOR + } + Self::upgradeToAndCall(_) => { + ::SELECTOR + } + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn getEpochStart( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::getEpochStart) + } + getEpochStart + }, + { + fn GAS_METER_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::GAS_METER_STORAGE_LOCATION) + } + GAS_METER_STORAGE_LOCATION + }, + { + fn upgradeToAndCall( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::upgradeToAndCall) + } + upgradeToAndCall + }, + { + fn proxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::proxiableUUID) + } + proxiableUUID + }, + { + fn renounceOwnership( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::renounceOwnership) + } + renounceOwnership + }, + { + fn START_TIMESTAMP( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::START_TIMESTAMP) + } + START_TIMESTAMP + }, + { + fn initialize( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::initialize) + } + initialize + }, + { + fn owner(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(GasMeterCalls::owner) + } + owner + }, + { + fn EPOCH_DURATION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::EPOCH_DURATION) + } + EPOCH_DURATION + }, + { + fn UPGRADE_INTERFACE_VERSION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::UPGRADE_INTERFACE_VERSION) + } + UPGRADE_INTERFACE_VERSION + }, + { + fn gasUsed(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(GasMeterCalls::gasUsed) + } + gasUsed + }, + { + fn getCurrentEpoch( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::getCurrentEpoch) + } + getCurrentEpoch + }, + { + fn meterCall(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(GasMeterCalls::meterCall) + } + meterCall + }, + { + fn getEpochEnd( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::getEpochEnd) + } + getEpochEnd + }, + { + fn transferOwnership( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterCalls::transferOwnership) + } + transferOwnership + }, + { + fn VERSION(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(GasMeterCalls::VERSION) + } + VERSION + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_SHIMS[idx](data) + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw_validate( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_VALIDATE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn getEpochStart( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::getEpochStart) + } + getEpochStart + }, + { + fn GAS_METER_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::GAS_METER_STORAGE_LOCATION) + } + GAS_METER_STORAGE_LOCATION + }, + { + fn upgradeToAndCall( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::upgradeToAndCall) + } + upgradeToAndCall + }, + { + fn proxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::proxiableUUID) + } + proxiableUUID + }, + { + fn renounceOwnership( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::renounceOwnership) + } + renounceOwnership + }, + { + fn START_TIMESTAMP( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::START_TIMESTAMP) + } + START_TIMESTAMP + }, + { + fn initialize( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::initialize) + } + initialize + }, + { + fn owner(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::owner) + } + owner + }, + { + fn EPOCH_DURATION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::EPOCH_DURATION) + } + EPOCH_DURATION + }, + { + fn UPGRADE_INTERFACE_VERSION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::UPGRADE_INTERFACE_VERSION) + } + UPGRADE_INTERFACE_VERSION + }, + { + fn gasUsed(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::gasUsed) + } + gasUsed + }, + { + fn getCurrentEpoch( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::getCurrentEpoch) + } + getCurrentEpoch + }, + { + fn meterCall(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::meterCall) + } + meterCall + }, + { + fn getEpochEnd( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::getEpochEnd) + } + getEpochEnd + }, + { + fn transferOwnership( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::transferOwnership) + } + transferOwnership + }, + { + fn VERSION(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterCalls::VERSION) + } + VERSION + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_VALIDATE_SHIMS[idx](data) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::EPOCH_DURATION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::GAS_METER_STORAGE_LOCATION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::START_TIMESTAMP(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::UPGRADE_INTERFACE_VERSION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::VERSION(inner) => { + ::abi_encoded_size(inner) + } + Self::gasUsed(inner) => { + ::abi_encoded_size(inner) + } + Self::getCurrentEpoch(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::getEpochEnd(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::getEpochStart(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::initialize(inner) => { + ::abi_encoded_size(inner) + } + Self::meterCall(inner) => { + ::abi_encoded_size(inner) + } + Self::owner(inner) => { + ::abi_encoded_size(inner) + } + Self::proxiableUUID(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::renounceOwnership(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::transferOwnership(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::upgradeToAndCall(inner) => { + ::abi_encoded_size( + inner, + ) + } + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::EPOCH_DURATION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::GAS_METER_STORAGE_LOCATION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::START_TIMESTAMP(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::UPGRADE_INTERFACE_VERSION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::VERSION(inner) => { + ::abi_encode_raw(inner, out) + } + Self::gasUsed(inner) => { + ::abi_encode_raw(inner, out) + } + Self::getCurrentEpoch(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::getEpochEnd(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::getEpochStart(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::initialize(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::meterCall(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::owner(inner) => { + ::abi_encode_raw(inner, out) + } + Self::proxiableUUID(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::renounceOwnership(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::transferOwnership(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::upgradeToAndCall(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + } + } + } + ///Container for all the [`GasMeter`](self) custom errors. + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Debug, PartialEq, Eq, Hash)] + pub enum GasMeterErrors { + #[allow(missing_docs)] + AddressEmptyCode(AddressEmptyCode), + #[allow(missing_docs)] + ERC1967InvalidImplementation(ERC1967InvalidImplementation), + #[allow(missing_docs)] + ERC1967NonPayable(ERC1967NonPayable), + #[allow(missing_docs)] + FailedCall(FailedCall), + #[allow(missing_docs)] + InvalidInitialization(InvalidInitialization), + #[allow(missing_docs)] + NotInitializing(NotInitializing), + #[allow(missing_docs)] + OwnableInvalidOwner(OwnableInvalidOwner), + #[allow(missing_docs)] + OwnableUnauthorizedAccount(OwnableUnauthorizedAccount), + #[allow(missing_docs)] + ReentrancyGuardReentrantCall(ReentrancyGuardReentrantCall), + #[allow(missing_docs)] + UUPSUnauthorizedCallContext(UUPSUnauthorizedCallContext), + #[allow(missing_docs)] + UUPSUnsupportedProxiableUUID(UUPSUnsupportedProxiableUUID), + #[allow(missing_docs)] + ZeroEpochIndex(ZeroEpochIndex), + } + #[automatically_derived] + impl GasMeterErrors { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 4usize]] = &[ + [17u8, 140u8, 218u8, 167u8], + [30u8, 79u8, 189u8, 247u8], + [62u8, 229u8, 174u8, 181u8], + [76u8, 156u8, 140u8, 227u8], + [153u8, 150u8, 179u8, 21u8], + [170u8, 29u8, 73u8, 164u8], + [179u8, 152u8, 151u8, 159u8], + [214u8, 147u8, 104u8, 212u8], + [214u8, 189u8, 162u8, 117u8], + [215u8, 230u8, 188u8, 248u8], + [224u8, 124u8, 141u8, 186u8], + [249u8, 46u8, 232u8, 169u8], + ]; + } + #[automatically_derived] + impl alloy_sol_types::SolInterface for GasMeterErrors { + const NAME: &'static str = "GasMeterErrors"; + const MIN_DATA_LENGTH: usize = 0usize; + const COUNT: usize = 12usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::AddressEmptyCode(_) => { + ::SELECTOR + } + Self::ERC1967InvalidImplementation(_) => { + ::SELECTOR + } + Self::ERC1967NonPayable(_) => { + ::SELECTOR + } + Self::FailedCall(_) => { + ::SELECTOR + } + Self::InvalidInitialization(_) => { + ::SELECTOR + } + Self::NotInitializing(_) => { + ::SELECTOR + } + Self::OwnableInvalidOwner(_) => { + ::SELECTOR + } + Self::OwnableUnauthorizedAccount(_) => { + ::SELECTOR + } + Self::ReentrancyGuardReentrantCall(_) => { + ::SELECTOR + } + Self::UUPSUnauthorizedCallContext(_) => { + ::SELECTOR + } + Self::UUPSUnsupportedProxiableUUID(_) => { + ::SELECTOR + } + Self::ZeroEpochIndex(_) => { + ::SELECTOR + } + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn OwnableUnauthorizedAccount( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::OwnableUnauthorizedAccount) + } + OwnableUnauthorizedAccount + }, + { + fn OwnableInvalidOwner( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::OwnableInvalidOwner) + } + OwnableInvalidOwner + }, + { + fn ReentrancyGuardReentrantCall( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::ReentrancyGuardReentrantCall) + } + ReentrancyGuardReentrantCall + }, + { + fn ERC1967InvalidImplementation( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::ERC1967InvalidImplementation) + } + ERC1967InvalidImplementation + }, + { + fn AddressEmptyCode( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::AddressEmptyCode) + } + AddressEmptyCode + }, + { + fn UUPSUnsupportedProxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::UUPSUnsupportedProxiableUUID) + } + UUPSUnsupportedProxiableUUID + }, + { + fn ERC1967NonPayable( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::ERC1967NonPayable) + } + ERC1967NonPayable + }, + { + fn ZeroEpochIndex( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::ZeroEpochIndex) + } + ZeroEpochIndex + }, + { + fn FailedCall( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(GasMeterErrors::FailedCall) + } + FailedCall + }, + { + fn NotInitializing( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::NotInitializing) + } + NotInitializing + }, + { + fn UUPSUnauthorizedCallContext( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::UUPSUnauthorizedCallContext) + } + UUPSUnauthorizedCallContext + }, + { + fn InvalidInitialization( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(GasMeterErrors::InvalidInitialization) + } + InvalidInitialization + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_SHIMS[idx](data) + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw_validate( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_VALIDATE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn OwnableUnauthorizedAccount( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::OwnableUnauthorizedAccount) + } + OwnableUnauthorizedAccount + }, + { + fn OwnableInvalidOwner( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::OwnableInvalidOwner) + } + OwnableInvalidOwner + }, + { + fn ReentrancyGuardReentrantCall( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::ReentrancyGuardReentrantCall) + } + ReentrancyGuardReentrantCall + }, + { + fn ERC1967InvalidImplementation( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::ERC1967InvalidImplementation) + } + ERC1967InvalidImplementation + }, + { + fn AddressEmptyCode( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::AddressEmptyCode) + } + AddressEmptyCode + }, + { + fn UUPSUnsupportedProxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::UUPSUnsupportedProxiableUUID) + } + UUPSUnsupportedProxiableUUID + }, + { + fn ERC1967NonPayable( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::ERC1967NonPayable) + } + ERC1967NonPayable + }, + { + fn ZeroEpochIndex( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::ZeroEpochIndex) + } + ZeroEpochIndex + }, + { + fn FailedCall( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::FailedCall) + } + FailedCall + }, + { + fn NotInitializing( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::NotInitializing) + } + NotInitializing + }, + { + fn UUPSUnauthorizedCallContext( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::UUPSUnauthorizedCallContext) + } + UUPSUnauthorizedCallContext + }, + { + fn InvalidInitialization( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(GasMeterErrors::InvalidInitialization) + } + InvalidInitialization + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_VALIDATE_SHIMS[idx](data) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::AddressEmptyCode(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ERC1967InvalidImplementation(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ERC1967NonPayable(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::FailedCall(inner) => { + ::abi_encoded_size(inner) + } + Self::InvalidInitialization(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::NotInitializing(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::OwnableInvalidOwner(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::OwnableUnauthorizedAccount(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ReentrancyGuardReentrantCall(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::UUPSUnauthorizedCallContext(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::UUPSUnsupportedProxiableUUID(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ZeroEpochIndex(inner) => { + ::abi_encoded_size( + inner, + ) + } + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::AddressEmptyCode(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ERC1967InvalidImplementation(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ERC1967NonPayable(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::FailedCall(inner) => { + ::abi_encode_raw(inner, out) + } + Self::InvalidInitialization(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::NotInitializing(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::OwnableInvalidOwner(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::OwnableUnauthorizedAccount(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ReentrancyGuardReentrantCall(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::UUPSUnauthorizedCallContext(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::UUPSUnsupportedProxiableUUID(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ZeroEpochIndex(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + } + } + } + ///Container for all the [`GasMeter`](self) events. + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Debug, PartialEq, Eq, Hash)] + pub enum GasMeterEvents { + #[allow(missing_docs)] + Initialized(Initialized), + #[allow(missing_docs)] + OwnershipTransferred(OwnershipTransferred), + #[allow(missing_docs)] + Upgraded(Upgraded), + } + #[automatically_derived] + impl GasMeterEvents { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 32usize]] = &[ + [ + 139u8, 224u8, 7u8, 156u8, 83u8, 22u8, 89u8, 20u8, 19u8, 68u8, 205u8, + 31u8, 208u8, 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8, + 218u8, 175u8, 227u8, 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8, + ], + [ + 188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8, + 179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8, + 12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8, + ], + [ + 199u8, 245u8, 5u8, 178u8, 243u8, 113u8, 174u8, 33u8, 117u8, 238u8, 73u8, + 19u8, 244u8, 73u8, 158u8, 31u8, 38u8, 51u8, 167u8, 181u8, 147u8, 99u8, + 33u8, 238u8, 209u8, 205u8, 174u8, 182u8, 17u8, 81u8, 129u8, 210u8, + ], + ]; + } + #[automatically_derived] + impl alloy_sol_types::SolEventInterface for GasMeterEvents { + const NAME: &'static str = "GasMeterEvents"; + const COUNT: usize = 3usize; + fn decode_raw_log( + topics: &[alloy_sol_types::Word], + data: &[u8], + ) -> alloy_sol_types::Result { + match topics.first().copied() { + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::Initialized) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::OwnershipTransferred) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log(topics, data) + .map(Self::Upgraded) + } + _ => { + alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog { + name: ::NAME, + log: alloy_sol_types::private::Box::new( + alloy_sol_types::private::LogData::new_unchecked( + topics.to_vec(), + data.to_vec().into(), + ), + ), + }) + } + } + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for GasMeterEvents { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + match self { + Self::Initialized(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::OwnershipTransferred(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::Upgraded(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + } + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + match self { + Self::Initialized(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::OwnershipTransferred(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::Upgraded(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + } + } + } + use alloy::contract as alloy_contract; + /**Creates a new wrapper around an on-chain [`GasMeter`](self) contract instance. + +See the [wrapper's documentation](`GasMeterInstance`) for more details.*/ + #[inline] + pub const fn new< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + address: alloy_sol_types::private::Address, + provider: P, + ) -> GasMeterInstance { + GasMeterInstance::::new(address, provider) + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub fn deploy< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + provider: P, + ) -> impl ::core::future::Future< + Output = alloy_contract::Result>, + > { + GasMeterInstance::::deploy(provider) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >(provider: P) -> alloy_contract::RawCallBuilder { + GasMeterInstance::::deploy_builder(provider) + } + /**A [`GasMeter`](self) instance. + +Contains type-safe methods for interacting with an on-chain instance of the +[`GasMeter`](self) contract located at a given `address`, using a given +provider `P`. + +If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!) +documentation on how to provide it), the `deploy` and `deploy_builder` methods can +be used to deploy a new instance of the contract. + +See the [module-level documentation](self) for all the available methods.*/ + #[derive(Clone)] + pub struct GasMeterInstance { + address: alloy_sol_types::private::Address, + provider: P, + _network: ::core::marker::PhantomData, + } + #[automatically_derived] + impl ::core::fmt::Debug for GasMeterInstance { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple("GasMeterInstance").field(&self.address).finish() + } + } + /// Instantiation and getters/setters. + #[automatically_derived] + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > GasMeterInstance { + /**Creates a new wrapper around an on-chain [`GasMeter`](self) contract instance. + +See the [wrapper's documentation](`GasMeterInstance`) for more details.*/ + #[inline] + pub const fn new( + address: alloy_sol_types::private::Address, + provider: P, + ) -> Self { + Self { + address, + provider, + _network: ::core::marker::PhantomData, + } + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub async fn deploy( + provider: P, + ) -> alloy_contract::Result> { + let call_builder = Self::deploy_builder(provider); + let contract_address = call_builder.deploy().await?; + Ok(Self::new(contract_address, call_builder.provider)) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder(provider: P) -> alloy_contract::RawCallBuilder { + alloy_contract::RawCallBuilder::new_raw_deploy( + provider, + ::core::clone::Clone::clone(&BYTECODE), + ) + } + /// Returns a reference to the address. + #[inline] + pub const fn address(&self) -> &alloy_sol_types::private::Address { + &self.address + } + /// Sets the address. + #[inline] + pub fn set_address(&mut self, address: alloy_sol_types::private::Address) { + self.address = address; + } + /// Sets the address and returns `self`. + pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self { + self.set_address(address); + self + } + /// Returns a reference to the provider. + #[inline] + pub const fn provider(&self) -> &P { + &self.provider + } + } + impl GasMeterInstance<&P, N> { + /// Clones the provider and returns a new instance with the cloned provider. + #[inline] + pub fn with_cloned_provider(self) -> GasMeterInstance { + GasMeterInstance { + address: self.address, + provider: ::core::clone::Clone::clone(&self.provider), + _network: ::core::marker::PhantomData, + } + } + } + /// Function calls. + #[automatically_derived] + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > GasMeterInstance { + /// Creates a new call builder using this contract instance's provider and address. + /// + /// Note that the call can be any function call, not just those defined in this + /// contract. Prefer using the other methods for building type-safe contract calls. + pub fn call_builder( + &self, + call: &C, + ) -> alloy_contract::SolCallBuilder<&P, C, N> { + alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) + } + ///Creates a new call builder for the [`EPOCH_DURATION`] function. + pub fn EPOCH_DURATION( + &self, + ) -> alloy_contract::SolCallBuilder<&P, EPOCH_DURATIONCall, N> { + self.call_builder(&EPOCH_DURATIONCall) + } + ///Creates a new call builder for the [`GAS_METER_STORAGE_LOCATION`] function. + pub fn GAS_METER_STORAGE_LOCATION( + &self, + ) -> alloy_contract::SolCallBuilder<&P, GAS_METER_STORAGE_LOCATIONCall, N> { + self.call_builder(&GAS_METER_STORAGE_LOCATIONCall) + } + ///Creates a new call builder for the [`START_TIMESTAMP`] function. + pub fn START_TIMESTAMP( + &self, + ) -> alloy_contract::SolCallBuilder<&P, START_TIMESTAMPCall, N> { + self.call_builder(&START_TIMESTAMPCall) + } + ///Creates a new call builder for the [`UPGRADE_INTERFACE_VERSION`] function. + pub fn UPGRADE_INTERFACE_VERSION( + &self, + ) -> alloy_contract::SolCallBuilder<&P, UPGRADE_INTERFACE_VERSIONCall, N> { + self.call_builder(&UPGRADE_INTERFACE_VERSIONCall) + } + ///Creates a new call builder for the [`VERSION`] function. + pub fn VERSION(&self) -> alloy_contract::SolCallBuilder<&P, VERSIONCall, N> { + self.call_builder(&VERSIONCall) + } + ///Creates a new call builder for the [`gasUsed`] function. + pub fn gasUsed( + &self, + epoch: alloy::sol_types::private::primitives::aliases::U256, + chainAddress: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, gasUsedCall, N> { + self.call_builder(&gasUsedCall { epoch, chainAddress }) + } + ///Creates a new call builder for the [`getCurrentEpoch`] function. + pub fn getCurrentEpoch( + &self, + ) -> alloy_contract::SolCallBuilder<&P, getCurrentEpochCall, N> { + self.call_builder(&getCurrentEpochCall) + } + ///Creates a new call builder for the [`getEpochEnd`] function. + pub fn getEpochEnd( + &self, + epochIndex: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, getEpochEndCall, N> { + self.call_builder(&getEpochEndCall { epochIndex }) + } + ///Creates a new call builder for the [`getEpochStart`] function. + pub fn getEpochStart( + &self, + epochIndex: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, getEpochStartCall, N> { + self.call_builder(&getEpochStartCall { epochIndex }) + } + ///Creates a new call builder for the [`initialize`] function. + pub fn initialize( + &self, + ) -> alloy_contract::SolCallBuilder<&P, initializeCall, N> { + self.call_builder(&initializeCall) + } + ///Creates a new call builder for the [`meterCall`] function. + pub fn meterCall( + &self, + meteredCall: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, meterCallCall, N> { + self.call_builder(&meterCallCall { meteredCall }) + } + ///Creates a new call builder for the [`owner`] function. + pub fn owner(&self) -> alloy_contract::SolCallBuilder<&P, ownerCall, N> { + self.call_builder(&ownerCall) + } + ///Creates a new call builder for the [`proxiableUUID`] function. + pub fn proxiableUUID( + &self, + ) -> alloy_contract::SolCallBuilder<&P, proxiableUUIDCall, N> { + self.call_builder(&proxiableUUIDCall) + } + ///Creates a new call builder for the [`renounceOwnership`] function. + pub fn renounceOwnership( + &self, + ) -> alloy_contract::SolCallBuilder<&P, renounceOwnershipCall, N> { + self.call_builder(&renounceOwnershipCall) + } + ///Creates a new call builder for the [`transferOwnership`] function. + pub fn transferOwnership( + &self, + newOwner: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, transferOwnershipCall, N> { + self.call_builder(&transferOwnershipCall { newOwner }) + } + ///Creates a new call builder for the [`upgradeToAndCall`] function. + pub fn upgradeToAndCall( + &self, + newImplementation: alloy::sol_types::private::Address, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, upgradeToAndCallCall, N> { + self.call_builder( + &upgradeToAndCallCall { + newImplementation, + data, + }, + ) + } + } + /// Event filters. + #[automatically_derived] + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > GasMeterInstance { + /// Creates a new event filter using this contract instance's provider and address. + /// + /// Note that the type can be any event, not just those defined in this contract. + /// Prefer using the other methods for building type-safe event filters. + pub fn event_filter( + &self, + ) -> alloy_contract::Event<&P, E, N> { + alloy_contract::Event::new_sol(&self.provider, &self.address) + } + ///Creates a new event filter for the [`Initialized`] event. + pub fn Initialized_filter(&self) -> alloy_contract::Event<&P, Initialized, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`OwnershipTransferred`] event. + pub fn OwnershipTransferred_filter( + &self, + ) -> alloy_contract::Event<&P, OwnershipTransferred, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`Upgraded`] event. + pub fn Upgraded_filter(&self) -> alloy_contract::Event<&P, Upgraded, N> { + self.event_filter::() + } + } +} diff --git a/shared/contract-bindings/src/synd/i_gas_aggregator.rs b/shared/contract-bindings/src/synd/i_gas_aggregator.rs new file mode 100644 index 000000000..5ab826168 --- /dev/null +++ b/shared/contract-bindings/src/synd/i_gas_aggregator.rs @@ -0,0 +1,975 @@ +/** + +Generated by the following Solidity interface... +```solidity +interface IGasAggregator { + function allowedImplementations(address implementation) external view returns (bool); + function notifyChainUpgrade(uint256 chainId, address newImplementation) external; + function notifyNewImplementation(address newImplementation) external; +} +``` + +...which was generated by the following JSON ABI: +```json +[ + { + "type": "function", + "name": "allowedImplementations", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "notifyChainUpgrade", + "inputs": [ + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "notifyNewImplementation", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + } +] +```*/ +#[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style, + clippy::empty_structs_with_brackets +)] +pub mod IGasAggregator { + use super::*; + use alloy::sol_types as alloy_sol_types; + /// The creation / init bytecode of the contract. + /// + /// ```text + ///0x + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"", + ); + /// The runtime bytecode of the contract, as deployed on the network. + /// + /// ```text + ///0x + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"", + ); + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `allowedImplementations(address)` and selector `0x2c696f46`. +```solidity +function allowedImplementations(address implementation) external view returns (bool); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct allowedImplementationsCall { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`allowedImplementations(address)`](allowedImplementationsCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct allowedImplementationsReturn { + #[allow(missing_docs)] + pub _0: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: allowedImplementationsCall) -> Self { + (value.implementation,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for allowedImplementationsCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { implementation: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: allowedImplementationsReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for allowedImplementationsReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for allowedImplementationsCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = bool; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "allowedImplementations(address)"; + const SELECTOR: [u8; 4] = [44u8, 105u8, 111u8, 70u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.implementation, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: allowedImplementationsReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: allowedImplementationsReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `notifyChainUpgrade(uint256,address)` and selector `0x07a9bee7`. +```solidity +function notifyChainUpgrade(uint256 chainId, address newImplementation) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct notifyChainUpgradeCall { + #[allow(missing_docs)] + pub chainId: alloy::sol_types::private::primitives::aliases::U256, + #[allow(missing_docs)] + pub newImplementation: alloy::sol_types::private::Address, + } + ///Container type for the return parameters of the [`notifyChainUpgrade(uint256,address)`](notifyChainUpgradeCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct notifyChainUpgradeReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Address, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + alloy::sol_types::private::Address, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: notifyChainUpgradeCall) -> Self { + (value.chainId, value.newImplementation) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for notifyChainUpgradeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + chainId: tuple.0, + newImplementation: tuple.1, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: notifyChainUpgradeReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for notifyChainUpgradeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl notifyChainUpgradeReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for notifyChainUpgradeCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Address, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = notifyChainUpgradeReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "notifyChainUpgrade(uint256,address)"; + const SELECTOR: [u8; 4] = [7u8, 169u8, 190u8, 231u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.chainId), + ::tokenize( + &self.newImplementation, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + notifyChainUpgradeReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `notifyNewImplementation(address)` and selector `0x7432c9ca`. +```solidity +function notifyNewImplementation(address newImplementation) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct notifyNewImplementationCall { + #[allow(missing_docs)] + pub newImplementation: alloy::sol_types::private::Address, + } + ///Container type for the return parameters of the [`notifyNewImplementation(address)`](notifyNewImplementationCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct notifyNewImplementationReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: notifyNewImplementationCall) -> Self { + (value.newImplementation,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for notifyNewImplementationCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { newImplementation: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: notifyNewImplementationReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for notifyNewImplementationReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl notifyNewImplementationReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for notifyNewImplementationCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = notifyNewImplementationReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "notifyNewImplementation(address)"; + const SELECTOR: [u8; 4] = [116u8, 50u8, 201u8, 202u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.newImplementation, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + notifyNewImplementationReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + ///Container for all the [`IGasAggregator`](self) function calls. + #[derive(serde::Serialize, serde::Deserialize)] + #[derive()] + pub enum IGasAggregatorCalls { + #[allow(missing_docs)] + allowedImplementations(allowedImplementationsCall), + #[allow(missing_docs)] + notifyChainUpgrade(notifyChainUpgradeCall), + #[allow(missing_docs)] + notifyNewImplementation(notifyNewImplementationCall), + } + #[automatically_derived] + impl IGasAggregatorCalls { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 4usize]] = &[ + [7u8, 169u8, 190u8, 231u8], + [44u8, 105u8, 111u8, 70u8], + [116u8, 50u8, 201u8, 202u8], + ]; + } + #[automatically_derived] + impl alloy_sol_types::SolInterface for IGasAggregatorCalls { + const NAME: &'static str = "IGasAggregatorCalls"; + const MIN_DATA_LENGTH: usize = 32usize; + const COUNT: usize = 3usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::allowedImplementations(_) => { + ::SELECTOR + } + Self::notifyChainUpgrade(_) => { + ::SELECTOR + } + Self::notifyNewImplementation(_) => { + ::SELECTOR + } + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn notifyChainUpgrade( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(IGasAggregatorCalls::notifyChainUpgrade) + } + notifyChainUpgrade + }, + { + fn allowedImplementations( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(IGasAggregatorCalls::allowedImplementations) + } + allowedImplementations + }, + { + fn notifyNewImplementation( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(IGasAggregatorCalls::notifyNewImplementation) + } + notifyNewImplementation + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_SHIMS[idx](data) + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw_validate( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_VALIDATE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn notifyChainUpgrade( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(IGasAggregatorCalls::notifyChainUpgrade) + } + notifyChainUpgrade + }, + { + fn allowedImplementations( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(IGasAggregatorCalls::allowedImplementations) + } + allowedImplementations + }, + { + fn notifyNewImplementation( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(IGasAggregatorCalls::notifyNewImplementation) + } + notifyNewImplementation + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_VALIDATE_SHIMS[idx](data) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::allowedImplementations(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::notifyChainUpgrade(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::notifyNewImplementation(inner) => { + ::abi_encoded_size( + inner, + ) + } + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::allowedImplementations(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::notifyChainUpgrade(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::notifyNewImplementation(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + } + } + } + use alloy::contract as alloy_contract; + /**Creates a new wrapper around an on-chain [`IGasAggregator`](self) contract instance. + +See the [wrapper's documentation](`IGasAggregatorInstance`) for more details.*/ + #[inline] + pub const fn new< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + address: alloy_sol_types::private::Address, + provider: P, + ) -> IGasAggregatorInstance { + IGasAggregatorInstance::::new(address, provider) + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub fn deploy< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + provider: P, + ) -> impl ::core::future::Future< + Output = alloy_contract::Result>, + > { + IGasAggregatorInstance::::deploy(provider) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >(provider: P) -> alloy_contract::RawCallBuilder { + IGasAggregatorInstance::::deploy_builder(provider) + } + /**A [`IGasAggregator`](self) instance. + +Contains type-safe methods for interacting with an on-chain instance of the +[`IGasAggregator`](self) contract located at a given `address`, using a given +provider `P`. + +If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!) +documentation on how to provide it), the `deploy` and `deploy_builder` methods can +be used to deploy a new instance of the contract. + +See the [module-level documentation](self) for all the available methods.*/ + #[derive(Clone)] + pub struct IGasAggregatorInstance { + address: alloy_sol_types::private::Address, + provider: P, + _network: ::core::marker::PhantomData, + } + #[automatically_derived] + impl ::core::fmt::Debug for IGasAggregatorInstance { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple("IGasAggregatorInstance").field(&self.address).finish() + } + } + /// Instantiation and getters/setters. + #[automatically_derived] + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > IGasAggregatorInstance { + /**Creates a new wrapper around an on-chain [`IGasAggregator`](self) contract instance. + +See the [wrapper's documentation](`IGasAggregatorInstance`) for more details.*/ + #[inline] + pub const fn new( + address: alloy_sol_types::private::Address, + provider: P, + ) -> Self { + Self { + address, + provider, + _network: ::core::marker::PhantomData, + } + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub async fn deploy( + provider: P, + ) -> alloy_contract::Result> { + let call_builder = Self::deploy_builder(provider); + let contract_address = call_builder.deploy().await?; + Ok(Self::new(contract_address, call_builder.provider)) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder(provider: P) -> alloy_contract::RawCallBuilder { + alloy_contract::RawCallBuilder::new_raw_deploy( + provider, + ::core::clone::Clone::clone(&BYTECODE), + ) + } + /// Returns a reference to the address. + #[inline] + pub const fn address(&self) -> &alloy_sol_types::private::Address { + &self.address + } + /// Sets the address. + #[inline] + pub fn set_address(&mut self, address: alloy_sol_types::private::Address) { + self.address = address; + } + /// Sets the address and returns `self`. + pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self { + self.set_address(address); + self + } + /// Returns a reference to the provider. + #[inline] + pub const fn provider(&self) -> &P { + &self.provider + } + } + impl IGasAggregatorInstance<&P, N> { + /// Clones the provider and returns a new instance with the cloned provider. + #[inline] + pub fn with_cloned_provider(self) -> IGasAggregatorInstance { + IGasAggregatorInstance { + address: self.address, + provider: ::core::clone::Clone::clone(&self.provider), + _network: ::core::marker::PhantomData, + } + } + } + /// Function calls. + #[automatically_derived] + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > IGasAggregatorInstance { + /// Creates a new call builder using this contract instance's provider and address. + /// + /// Note that the call can be any function call, not just those defined in this + /// contract. Prefer using the other methods for building type-safe contract calls. + pub fn call_builder( + &self, + call: &C, + ) -> alloy_contract::SolCallBuilder<&P, C, N> { + alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) + } + ///Creates a new call builder for the [`allowedImplementations`] function. + pub fn allowedImplementations( + &self, + implementation: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, allowedImplementationsCall, N> { + self.call_builder( + &allowedImplementationsCall { + implementation, + }, + ) + } + ///Creates a new call builder for the [`notifyChainUpgrade`] function. + pub fn notifyChainUpgrade( + &self, + chainId: alloy::sol_types::private::primitives::aliases::U256, + newImplementation: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, notifyChainUpgradeCall, N> { + self.call_builder( + ¬ifyChainUpgradeCall { + chainId, + newImplementation, + }, + ) + } + ///Creates a new call builder for the [`notifyNewImplementation`] function. + pub fn notifyNewImplementation( + &self, + newImplementation: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, notifyNewImplementationCall, N> { + self.call_builder( + ¬ifyNewImplementationCall { + newImplementation, + }, + ) + } + } + /// Event filters. + #[automatically_derived] + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > IGasAggregatorInstance { + /// Creates a new event filter using this contract instance's provider and address. + /// + /// Note that the type can be any event, not just those defined in this contract. + /// Prefer using the other methods for building type-safe event filters. + pub fn event_filter( + &self, + ) -> alloy_contract::Event<&P, E, N> { + alloy_contract::Event::new_sol(&self.provider, &self.address) + } + } +} diff --git a/shared/contract-bindings/src/synd/i_gas_meter.rs b/shared/contract-bindings/src/synd/i_gas_meter.rs new file mode 100644 index 000000000..e9eef83c0 --- /dev/null +++ b/shared/contract-bindings/src/synd/i_gas_meter.rs @@ -0,0 +1,531 @@ +/** + +Generated by the following Solidity interface... +```solidity +interface IGasMeter { + function gasUsed(uint256 epoch, address chainAddress) external view returns (uint256); +} +``` + +...which was generated by the following JSON ABI: +```json +[ + { + "type": "function", + "name": "gasUsed", + "inputs": [ + { + "name": "epoch", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "chainAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + } +] +```*/ +#[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style, + clippy::empty_structs_with_brackets +)] +pub mod IGasMeter { + use super::*; + use alloy::sol_types as alloy_sol_types; + /// The creation / init bytecode of the contract. + /// + /// ```text + ///0x + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"", + ); + /// The runtime bytecode of the contract, as deployed on the network. + /// + /// ```text + ///0x + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"", + ); + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `gasUsed(uint256,address)` and selector `0xb2fe22d5`. +```solidity +function gasUsed(uint256 epoch, address chainAddress) external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct gasUsedCall { + #[allow(missing_docs)] + pub epoch: alloy::sol_types::private::primitives::aliases::U256, + #[allow(missing_docs)] + pub chainAddress: alloy::sol_types::private::Address, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`gasUsed(uint256,address)`](gasUsedCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct gasUsedReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Address, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + alloy::sol_types::private::Address, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: gasUsedCall) -> Self { + (value.epoch, value.chainAddress) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for gasUsedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + epoch: tuple.0, + chainAddress: tuple.1, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: gasUsedReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for gasUsedReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for gasUsedCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Address, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "gasUsed(uint256,address)"; + const SELECTOR: [u8; 4] = [178u8, 254u8, 34u8, 213u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.epoch), + ::tokenize( + &self.chainAddress, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: gasUsedReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: gasUsedReturn = r.into(); + r._0 + }) + } + } + }; + ///Container for all the [`IGasMeter`](self) function calls. + #[derive(serde::Serialize, serde::Deserialize)] + #[derive()] + pub enum IGasMeterCalls { + #[allow(missing_docs)] + gasUsed(gasUsedCall), + } + #[automatically_derived] + impl IGasMeterCalls { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 4usize]] = &[[178u8, 254u8, 34u8, 213u8]]; + } + #[automatically_derived] + impl alloy_sol_types::SolInterface for IGasMeterCalls { + const NAME: &'static str = "IGasMeterCalls"; + const MIN_DATA_LENGTH: usize = 64usize; + const COUNT: usize = 1usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::gasUsed(_) => ::SELECTOR, + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn gasUsed(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(IGasMeterCalls::gasUsed) + } + gasUsed + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_SHIMS[idx](data) + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw_validate( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_VALIDATE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn gasUsed(data: &[u8]) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(IGasMeterCalls::gasUsed) + } + gasUsed + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_VALIDATE_SHIMS[idx](data) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::gasUsed(inner) => { + ::abi_encoded_size(inner) + } + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::gasUsed(inner) => { + ::abi_encode_raw(inner, out) + } + } + } + } + use alloy::contract as alloy_contract; + /**Creates a new wrapper around an on-chain [`IGasMeter`](self) contract instance. + +See the [wrapper's documentation](`IGasMeterInstance`) for more details.*/ + #[inline] + pub const fn new< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + address: alloy_sol_types::private::Address, + provider: P, + ) -> IGasMeterInstance { + IGasMeterInstance::::new(address, provider) + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub fn deploy< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + provider: P, + ) -> impl ::core::future::Future< + Output = alloy_contract::Result>, + > { + IGasMeterInstance::::deploy(provider) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >(provider: P) -> alloy_contract::RawCallBuilder { + IGasMeterInstance::::deploy_builder(provider) + } + /**A [`IGasMeter`](self) instance. + +Contains type-safe methods for interacting with an on-chain instance of the +[`IGasMeter`](self) contract located at a given `address`, using a given +provider `P`. + +If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!) +documentation on how to provide it), the `deploy` and `deploy_builder` methods can +be used to deploy a new instance of the contract. + +See the [module-level documentation](self) for all the available methods.*/ + #[derive(Clone)] + pub struct IGasMeterInstance { + address: alloy_sol_types::private::Address, + provider: P, + _network: ::core::marker::PhantomData, + } + #[automatically_derived] + impl ::core::fmt::Debug for IGasMeterInstance { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple("IGasMeterInstance").field(&self.address).finish() + } + } + /// Instantiation and getters/setters. + #[automatically_derived] + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > IGasMeterInstance { + /**Creates a new wrapper around an on-chain [`IGasMeter`](self) contract instance. + +See the [wrapper's documentation](`IGasMeterInstance`) for more details.*/ + #[inline] + pub const fn new( + address: alloy_sol_types::private::Address, + provider: P, + ) -> Self { + Self { + address, + provider, + _network: ::core::marker::PhantomData, + } + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub async fn deploy( + provider: P, + ) -> alloy_contract::Result> { + let call_builder = Self::deploy_builder(provider); + let contract_address = call_builder.deploy().await?; + Ok(Self::new(contract_address, call_builder.provider)) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder(provider: P) -> alloy_contract::RawCallBuilder { + alloy_contract::RawCallBuilder::new_raw_deploy( + provider, + ::core::clone::Clone::clone(&BYTECODE), + ) + } + /// Returns a reference to the address. + #[inline] + pub const fn address(&self) -> &alloy_sol_types::private::Address { + &self.address + } + /// Sets the address. + #[inline] + pub fn set_address(&mut self, address: alloy_sol_types::private::Address) { + self.address = address; + } + /// Sets the address and returns `self`. + pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self { + self.set_address(address); + self + } + /// Returns a reference to the provider. + #[inline] + pub const fn provider(&self) -> &P { + &self.provider + } + } + impl IGasMeterInstance<&P, N> { + /// Clones the provider and returns a new instance with the cloned provider. + #[inline] + pub fn with_cloned_provider(self) -> IGasMeterInstance { + IGasMeterInstance { + address: self.address, + provider: ::core::clone::Clone::clone(&self.provider), + _network: ::core::marker::PhantomData, + } + } + } + /// Function calls. + #[automatically_derived] + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > IGasMeterInstance { + /// Creates a new call builder using this contract instance's provider and address. + /// + /// Note that the call can be any function call, not just those defined in this + /// contract. Prefer using the other methods for building type-safe contract calls. + pub fn call_builder( + &self, + call: &C, + ) -> alloy_contract::SolCallBuilder<&P, C, N> { + alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) + } + ///Creates a new call builder for the [`gasUsed`] function. + pub fn gasUsed( + &self, + epoch: alloy::sol_types::private::primitives::aliases::U256, + chainAddress: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, gasUsedCall, N> { + self.call_builder(&gasUsedCall { epoch, chainAddress }) + } + } + /// Event filters. + #[automatically_derived] + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > IGasMeterInstance { + /// Creates a new event filter using this contract instance's provider and address. + /// + /// Note that the type can be any event, not just those defined in this contract. + /// Prefer using the other methods for building type-safe event filters. + pub fn event_filter( + &self, + ) -> alloy_contract::Event<&P, E, N> { + alloy_contract::Event::new_sol(&self.provider, &self.address) + } + } +} diff --git a/shared/contract-bindings/src/synd/mod.rs b/shared/contract-bindings/src/synd/mod.rs index d5b883b81..c0bddd22a 100644 --- a/shared/contract-bindings/src/synd/mod.rs +++ b/shared/contract-bindings/src/synd/mod.rs @@ -3,6 +3,7 @@ //! This is autogenerated code. //! Do not manually edit these files. //! These files may be overwritten by the codegen system at any time. +pub mod r#always_allowed_module; pub mod r#arb_chain_config; pub mod r#arb_config_manager; pub mod r#arb_config_manager_factory; @@ -14,17 +15,21 @@ pub mod r#i_rollup; pub mod r#i_rollup_admin_extended; pub mod r#attestation_doc_verifier; pub mod r#block_hash_relayer; +pub mod r#erc1967_proxy; pub mod r#emissions_calculator; pub mod r#emissions_scheduler; pub mod r#gas_aggregator; pub mod r#gas_aggregator_utils; +pub mod r#i_gas_meter; pub mod r#gas_archive; +pub mod r#gas_meter; pub mod r#i_assertion_poster; pub mod r#i_attestation_doc_verifier; pub mod r#i_bridge; pub mod r#i_bridge_proxy; pub mod r#i_bridge_rate_limiter; pub mod r#i_delayed_message_provider; +pub mod r#i_gas_aggregator; pub mod r#i_gas_refunder; pub mod r#i_inbox; pub mod r#i_inbox_base; @@ -43,5 +48,7 @@ pub mod r#node_interface; pub mod r#refunder; pub mod r#rollup; pub mod r#syndicate_sequencing_chain; +pub mod r#syndicate_sequencing_chain_testing_upgradeability; +pub mod r#syndicate_sequencing_chain_upgrade_v2; pub mod r#tee_key_manager; pub mod r#tee_module; diff --git a/shared/contract-bindings/src/synd/syndicate_sequencing_chain.rs b/shared/contract-bindings/src/synd/syndicate_sequencing_chain.rs index f0e4e937e..6ffe58525 100644 --- a/shared/contract-bindings/src/synd/syndicate_sequencing_chain.rs +++ b/shared/contract-bindings/src/synd/syndicate_sequencing_chain.rs @@ -3,46 +3,52 @@ Generated by the following Solidity interface... ```solidity interface SyndicateSequencingChain { + error AddressEmptyCode(address target); error DataTooLarge(uint256 dataLength, uint256 maxDataLength); - error GasTrackingAlreadyDisabled(); - error GasTrackingAlreadyEnabled(); + error ERC1967InvalidImplementation(address implementation); + error ERC1967NonPayable(); + error FailedCall(); + error InvalidInitialization(); error NoTxData(); + error NotGasMeterContract(); + error NotInitializing(); error OwnableInvalidOwner(address owner); error OwnableUnauthorizedAccount(address account); error TransactionOrSenderNotAllowed(); - error ZeroEpochIndex(); + error UUPSUnauthorizedCallContext(); + error UUPSUnsupportedProxiableUUID(bytes32 slot); + error ZeroAddress(); - event EmissionsReceiverUpdated(address indexed oldReceiver, address indexed newReceiver); + event Initialized(uint64 version); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event RequirementModuleUpdated(address indexed newModule); event TransactionProcessed(address indexed sender, bytes data); + event Upgraded(address indexed implementation); - constructor(uint256 _appchainId); + constructor(address _gasMeter); - function EPOCH_DURATION() external view returns (uint256); - function START_TIMESTAMP() external view returns (uint256); + function SEQUENCING_MODULE_STORAGE_LOCATION() external view returns (bytes32); + function SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION() external view returns (bytes32); + function UPGRADE_INTERFACE_VERSION() external view returns (string memory); + function VERSION() external view returns (uint256); + function _processTransaction(address sequencer, bytes memory data) external; + function _processTransactionsBulk(address sequencer, bytes[] memory data) external; function appchainId() external view returns (uint256); - function disableGasTracking() external; - function emissionsReceiver() external view returns (address); - function enableGasTracking() external; function encodeTransaction(bytes memory data) external pure returns (bytes memory); - function gasTrackingDisabled() external view returns (bool); - function getCurrentEpoch() external view returns (uint256); - function getEmissionsReceiver() external view returns (address); - function getEpochEnd(uint256 epochIndex) external pure returns (uint256); - function getEpochStart(uint256 epochIndex) external pure returns (uint256); - function getTokensForEpoch(uint256 epochIndex) external view returns (uint256); + function gasMeter() external view returns (address); + function getInitializedVersion() external view returns (uint64); + function initialize(address admin, address _permissionRequirementModule, uint256 _appchainId) external; function isAllowed(address proposer, address originator, bytes memory data) external view returns (bool); function maxDataSize() external view returns (uint256); function owner() external view returns (address); function permissionRequirementModule() external view returns (address); function processTransaction(bytes memory data) external; function processTransactionsBulk(bytes[] memory data) external; + function proxiableUUID() external view returns (bytes32); function renounceOwnership() external; - function setEmissionsReceiver(address _emissionsReceiver) external; - function tokensUsedPerEpoch(uint256 epochIndex) external view returns (uint256 tokensUsed); function transferOwnership(address newOwner) external; function updateRequirementModule(address _newModule) external; + function upgradeToAndCall(address newImplementation, bytes memory data) external payable; } ``` @@ -53,114 +59,104 @@ interface SyndicateSequencingChain { "type": "constructor", "inputs": [ { - "name": "_appchainId", - "type": "uint256", - "internalType": "uint256" + "name": "_gasMeter", + "type": "address", + "internalType": "address" } ], "stateMutability": "nonpayable" }, { "type": "function", - "name": "EPOCH_DURATION", + "name": "SEQUENCING_MODULE_STORAGE_LOCATION", "inputs": [], "outputs": [ { "name": "", - "type": "uint256", - "internalType": "uint256" + "type": "bytes32", + "internalType": "bytes32" } ], "stateMutability": "view" }, { "type": "function", - "name": "START_TIMESTAMP", + "name": "SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION", "inputs": [], "outputs": [ { "name": "", - "type": "uint256", - "internalType": "uint256" + "type": "bytes32", + "internalType": "bytes32" } ], "stateMutability": "view" }, { "type": "function", - "name": "appchainId", + "name": "UPGRADE_INTERFACE_VERSION", "inputs": [], "outputs": [ { "name": "", - "type": "uint256", - "internalType": "uint256" + "type": "string", + "internalType": "string" } ], "stateMutability": "view" }, { "type": "function", - "name": "disableGasTracking", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "emissionsReceiver", + "name": "VERSION", "inputs": [], "outputs": [ { "name": "", - "type": "address", - "internalType": "address" + "type": "uint256", + "internalType": "uint256" } ], "stateMutability": "view" }, { "type": "function", - "name": "enableGasTracking", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "encodeTransaction", + "name": "_processTransaction", "inputs": [ { - "name": "data", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ + "name": "sequencer", + "type": "address", + "internalType": "address" + }, { - "name": "", + "name": "data", "type": "bytes", "internalType": "bytes" } ], - "stateMutability": "pure" + "outputs": [], + "stateMutability": "nonpayable" }, { "type": "function", - "name": "gasTrackingDisabled", - "inputs": [], - "outputs": [ + "name": "_processTransactionsBulk", + "inputs": [ { - "name": "", - "type": "bool", - "internalType": "bool" + "name": "sequencer", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes[]", + "internalType": "bytes[]" } ], - "stateMutability": "view" + "outputs": [], + "stateMutability": "nonpayable" }, { "type": "function", - "name": "getCurrentEpoch", + "name": "appchainId", "inputs": [], "outputs": [ { @@ -173,73 +169,71 @@ interface SyndicateSequencingChain { }, { "type": "function", - "name": "getEmissionsReceiver", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getEpochEnd", + "name": "encodeTransaction", "inputs": [ { - "name": "epochIndex", - "type": "uint256", - "internalType": "uint256" + "name": "data", + "type": "bytes", + "internalType": "bytes" } ], "outputs": [ { "name": "", - "type": "uint256", - "internalType": "uint256" + "type": "bytes", + "internalType": "bytes" } ], "stateMutability": "pure" }, { "type": "function", - "name": "getEpochStart", - "inputs": [ + "name": "gasMeter", + "inputs": [], + "outputs": [ { - "name": "epochIndex", - "type": "uint256", - "internalType": "uint256" + "name": "", + "type": "address", + "internalType": "address" } ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getInitializedVersion", + "inputs": [], "outputs": [ { "name": "", - "type": "uint256", - "internalType": "uint256" + "type": "uint64", + "internalType": "uint64" } ], - "stateMutability": "pure" + "stateMutability": "view" }, { "type": "function", - "name": "getTokensForEpoch", + "name": "initialize", "inputs": [ { - "name": "epochIndex", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ + "name": "admin", + "type": "address", + "internalType": "address" + }, { - "name": "", + "name": "_permissionRequirementModule", + "type": "address", + "internalType": "address" + }, + { + "name": "_appchainId", "type": "uint256", "internalType": "uint256" } ], - "stateMutability": "view" + "outputs": [], + "stateMutability": "nonpayable" }, { "type": "function", @@ -337,42 +331,23 @@ interface SyndicateSequencingChain { }, { "type": "function", - "name": "renounceOwnership", + "name": "proxiableUUID", "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setEmissionsReceiver", - "inputs": [ + "outputs": [ { - "name": "_emissionsReceiver", - "type": "address", - "internalType": "address" + "name": "", + "type": "bytes32", + "internalType": "bytes32" } ], - "outputs": [], - "stateMutability": "nonpayable" + "stateMutability": "view" }, { "type": "function", - "name": "tokensUsedPerEpoch", - "inputs": [ - { - "name": "epochIndex", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "tokensUsed", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" }, { "type": "function", @@ -401,20 +376,32 @@ interface SyndicateSequencingChain { "stateMutability": "nonpayable" }, { - "type": "event", - "name": "EmissionsReceiverUpdated", + "type": "function", + "name": "upgradeToAndCall", "inputs": [ { - "name": "oldReceiver", + "name": "newImplementation", "type": "address", - "indexed": true, "internalType": "address" }, { - "name": "newReceiver", - "type": "address", - "indexed": true, - "internalType": "address" + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" } ], "anonymous": false @@ -470,6 +457,30 @@ interface SyndicateSequencingChain { ], "anonymous": false }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, { "type": "error", "name": "DataTooLarge", @@ -488,12 +499,28 @@ interface SyndicateSequencingChain { }, { "type": "error", - "name": "GasTrackingAlreadyDisabled", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedCall", "inputs": [] }, { "type": "error", - "name": "GasTrackingAlreadyEnabled", + "name": "InvalidInitialization", "inputs": [] }, { @@ -501,6 +528,16 @@ interface SyndicateSequencingChain { "name": "NoTxData", "inputs": [] }, + { + "type": "error", + "name": "NotGasMeterContract", + "inputs": [] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, { "type": "error", "name": "OwnableInvalidOwner", @@ -530,7 +567,23 @@ interface SyndicateSequencingChain { }, { "type": "error", - "name": "ZeroEpochIndex", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { + "name": "slot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "ZeroAddress", "inputs": [] } ] @@ -548,36 +601,34 @@ pub mod SyndicateSequencingChain { /// The creation / init bytecode of the contract. /// /// ```text - ///0x60a03461010357601f61106a38819003918201601f19168301916001600160401b0383118484101761010757808492602094604052833981010312610103575133156100f0575f8054336001600160a01b03198216811783556040519290916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a381156100ae5750608052604051610f4e908161011c8239608051816103330152f35b62461bcd60e51b815260206004820152601860248201527f41707020636861696e2049442063616e6e6f74206265203000000000000000006044820152606490fd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c9081630175e23b14610940575080630c6723631461027c57806339698ac01461086957806346e2cc09146108525780635467cb48146107c65780635b3cd6e2146107935780635e7a7bdf14610760578063715018a6146106e4578063781cd99d146106c65780637a3979dc146105c35780637a8d41c21461055357806385074925146105215780638da5cb5b146104ef578063a70b9f0c146104d2578063b97dd9e2146104b0578063cdafb97814610451578063d4f0eb4d146103ca578063d5176d2314610356578063d87813421461031c578063de1f453e146102a6578063e03961661461027c578063e8eb1dc31461025f578063f2fde38b1461014d5763f9db709214610124575f80fd5b34610149575f60031936011261014957602060ff60015460a01c166040519015158152f35b5f80fd5b346101495760206003193601126101495773ffffffffffffffffffffffffffffffffffffffff61017b6109dc565b610183610ed4565b81600354161561022e575b610196610ed4565b1680156102025773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b815f5416828216907f16ae3179615a2815583b6566eae6f783b25419452c00599aeeb01088f13eca1a5f80a361018e565b34610149575f60031936011261014957602060405162030d408152f35b34610149576020600319360112610149576004355f526002602052602060405f2054604051908152f35b34610149575f600319360112610149576102be610ed4565b60015460ff8160a01c16156102f4577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600155005b7f7679400d000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610149575f6003193601126101495760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101495760206003193601126101495760043562278d0081029080820462278d00149015171561039d5763688d46f0018063688d46f01161039d57602090604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b346101495760206003193601126101495773ffffffffffffffffffffffffffffffffffffffff6103f86109dc565b610400610ed4565b16807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557f253580f806741c11b3d4aa60d9cacc5bef0cebb35748767fe23f11916e2f04b95f80a2005b346101495760206003193601126101495760043567ffffffffffffffff8111610149573660238201121561014957806004013567ffffffffffffffff8111610149573660248260051b840101116101495760246104ae9201610d92565b005b34610149575f6003193601126101495760206104ca610d54565b604051908152f35b34610149575f60031936011261014957602060405162278d008152f35b34610149575f60031936011261014957602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346101495761054f61053b610535366109ff565b90610ce6565b604051918291602083526020830190610a91565b0390f35b34610149575f6003193601126101495760035473ffffffffffffffffffffffffffffffffffffffff16806105bb5750602073ffffffffffffffffffffffffffffffffffffffff5f54165b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60209061059d565b34610149576060600319360112610149576105dc6109dc565b6024359073ffffffffffffffffffffffffffffffffffffffff82168203610149576044359067ffffffffffffffff821161014957366023830112156101495781600401359267ffffffffffffffff8411610699576040519161066660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8801160184610a50565b8483523660248686010111610149575f6020868197602461068f98018388013785010152610bad565b6040519015158152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b34610149575f60031936011261014957602060405163688d46f08152f35b34610149575f600319360112610149576106fc610ed4565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610149575f60031936011261014957602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b34610149575f60031936011261014957602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b34610149575f600319360112610149576107de610ed4565b60015460ff8160a01c1661082a577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017600155005b7fcd60c3ca000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610149576104ae610863366109ff565b90610ad4565b34610149576020600319360112610149577fffffffffffffffffffffffff00000000000000000000000000000000000000006108a36109dc565b6108ab610ed4565b60035473ffffffffffffffffffffffffffffffffffffffff808216921692839116176003558115155f146108ff577f16ae3179615a2815583b6566eae6f783b25419452c00599aeeb01088f13eca1a5f80a3005b905073ffffffffffffffffffffffffffffffffffffffff5f5416907f16ae3179615a2815583b6566eae6f783b25419452c00599aeeb01088f13eca1a5f80a3005b346101495760206003193601126101495760043580156109b4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161039d5762278d0081029080820462278d00149015171561039d5763688d46f001908163688d46f01161039d576020918152f35b7fd69368d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361014957565b9060206003198301126101495760043567ffffffffffffffff811161014957826023820112156101495780600401359267ffffffffffffffff84116101495760248483010111610149576024019190565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761069957604052565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9060ff60015460a01c16610afb5790610af1610af9925a92610b00565b5a9003610f20565b565b610af9915b908015610b8557610b1091610ce6565b610b1b813233610bad565b15610b5d577f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f6040516020815280610b5833946020830190610a91565b0390a2565b7fdc741458000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdc37f51d000000000000000000000000000000000000000000000000000000005f5260045ffd5b9190815162030d408111610cb4575073ffffffffffffffffffffffffffffffffffffffff6001541660018114928315610be9575b505050905090565b6020935073ffffffffffffffffffffffffffffffffffffffff94610c528692604051978896879586957f7a3979dc000000000000000000000000000000000000000000000000000000008752166004860152166024840152606060448401526064830190610a91565b03915afa908115610ca9575f91610c6e575b50805f8080610be1565b90506020813d602011610ca1575b81610c8960209383610a50565b8101031261014957518015158103610149575f610c64565b3d9150610c7c565b6040513d5f823e3d90fd5b7f4634691b000000000000000000000000000000000000000000000000000000005f5260045262030d4060245260445ffd5b6021610d5191836040519485927f040000000000000000000000000000000000000000000000000000000000000060208501528484013781015f8382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610a50565b90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff9772b910420142811161039d5762278d0090046001810180911161039d5790565b9060ff60015460a01c16610daf5790610af1610af9925a92610e45565b610af991610e45565b9190811015610e185760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561014957019081359167ffffffffffffffff8311610149576020018236038113610149579190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8115610b85575f5b828110610e5957505050565b610e64818484610db8565b905015610b855780610e7c6105356001938686610db8565b610e87813233610bad565b610e93575b5001610e4d565b7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f6040516020815280610ecb33946020830190610a91565b0390a25f610e8c565b73ffffffffffffffffffffffffffffffffffffffff5f54163303610ef457565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b610f28610d54565b3a903a15610f45575b5f52600260205260405f2091028154019055565b60019150610f3156 + ///0x60c03461014757601f611ae038819003918201601f19168301916001600160401b0383118484101761014b5780849260209460405283398101031261014757516001600160a01b0381168082036101475730608052156101385760a0525f516020611ac05f395f51905f525460ff8160401c16610129576002600160401b03196001600160401b038216016100d3575b6040516119609081610160823960805181818161090201526109c7015260a0518181816101c90152818161043101528181610d0601528181610e2201526112390152f35b6001600160401b0319166001600160401b039081175f516020611ac05f395f51905f52556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f61008f565b63f92ee8a960e01b5f5260045ffd5b63d92e233d60e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f5f3560e01c806312281983146111e85780631794bb3c14610e805780632407f0b614610e4657806343f97ae514610df657806346e2cc0914610cba5780634f1ef2861461097a57806352d1902d146108da5780635b3cd6e214610887578063715018a6146107c95780637a3979dc1461076e578063850749251461071c5780638da5cb5b146106c957806395c5bf751461068e578063ad3cb1cc14610629578063b3c65015146105e2578063cdafb978146103e6578063d4f0eb4d1461031f578063d8781342146102e2578063e4a37d7a14610177578063e8eb1dc314610159578063f2fde38b1461012c5763ffa1ad741461010c575f80fd5b346101295780600319360112610129576020604051620f42408152f35b80fd5b503461012957602060031936011261012957610156610149611351565b610151611804565b611717565b80f35b5034610129578060031936011261012957602060405162030d408152f35b503461012957604060031936011261012957610191611351565b60243567ffffffffffffffff81116102de576101b19036906004016113c8565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036102b657811561028e57906101ff916116c7565b9061020b82328361157a565b156102665773ffffffffffffffffffffffffffffffffffffffff7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f9161026060405192839260208452169460208301906114a8565b0390a280f35b6004837fdc741458000000000000000000000000000000000000000000000000000000008152fd5b6004847fdc37f51d000000000000000000000000000000000000000000000000000000008152fd5b6004847fdaf9861c000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b503461012957806003193601126101295760207fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a40054604051908152f35b50346101295760206003193601126101295773ffffffffffffffffffffffffffffffffffffffff61034e611351565b610356611804565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500557f253580f806741c11b3d4aa60d9cacc5bef0cebb35748767fe23f11916e2f04b98280a280f35b50346101295760206003193601126101295760043567ffffffffffffffff81116105de57610418903690600401611397565b919073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692604051917f12281983000000000000000000000000000000000000000000000000000000006020840152816064840133602486015260406044860152526084830160848360051b850101928286907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603015b838310610561578880898c6104e4828c03601f1981018452836113f6565b803b1561055d5761053083929183926040519485809481937fcf6acdac0000000000000000000000000000000000000000000000000000000083526020600484015260248301906114a8565b03925af18015610552576105415750f35b8161054b916113f6565b6101295780f35b6040513d84823e3d90fd5b5050fd5b9091929394957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c8882030186528635828112156105da57830160208135910167ffffffffffffffff82116105d65781360381136105d6576105c8600193602093849361155a565b9801960194930191906104c6565b8a80fd5b8980fd5b5080fd5b5034610129578060031936011261012957602067ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416604051908152f35b50346101295780600319360112610129575061068a60405161064c6040826113f6565b600581527f352e302e3000000000000000000000000000000000000000000000000000000060208201526040519182916020835260208301906114a8565b0390f35b503461012957806003193601126101295760206040517fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a4008152f35b5034610129578060031936011261012957602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b5034610129576020600319360112610129576004359067ffffffffffffffff82116101295761068a61075a61075436600486016113c8565b906116c7565b6040519182916020835260208301906114a8565b503461012957606060031936011261012957610788611351565b90610791611374565b906044359067ffffffffffffffff82116101295760206107bf85856107b93660048801611462565b9161157a565b6040519015158152f35b50346101295780600319360112610129576107e2611804565b8073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5034610129578060031936011261012957602073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416604051908152f35b503461012957806003193601126101295773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036109525760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b807fe07c8dba0000000000000000000000000000000000000000000000000000000060049252fd5b5060406003193601126101295761098f611351565b9060243567ffffffffffffffff81116105de576109b0903690600401611462565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610c78575b50610c50576109ff611804565b73ffffffffffffffffffffffffffffffffffffffff831690604051937f52d1902d000000000000000000000000000000000000000000000000000000008552602085600481865afa80958596610c18575b50610a8157602484847f4c9c8ce3000000000000000000000000000000000000000000000000000000008252600452fd5b9091847f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8103610bed5750813b15610bc257807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8480a28151839015610b8f5780836020610b8395519101845af43d15610b87573d91610b6783611446565b92610b7560405194856113f6565b83523d85602085013e6118c7565b5080f35b6060916118c7565b50505034610b9a5780f35b807fb398979f0000000000000000000000000000000000000000000000000000000060049252fd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000008452600452602483fd5b7faa1d49a4000000000000000000000000000000000000000000000000000000008552600452602484fd5b9095506020813d602011610c48575b81610c34602093836113f6565b81010312610c445751945f610a50565b8480fd5b3d9150610c27565b6004827fe07c8dba000000000000000000000000000000000000000000000000000000008152fd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f6109f2565b5034610df2576020600319360112610df25760043567ffffffffffffffff8111610df257610cec9036906004016113c8565b610d7b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691610d6d6040519485927fe4a37d7a00000000000000000000000000000000000000000000000000000000602085015233602485015260406044850152606484019161155a565b03601f1981018452836113f6565b803b15610df257610dc75f929183926040519485809481937fcf6acdac0000000000000000000000000000000000000000000000000000000083526020600484015260248301906114a8565b03925af18015610de757610dd9575080f35b610de591505f906113f6565b005b6040513d5f823e3d90fd5b5f80fd5b34610df2575f600319360112610df257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610df2575f600319360112610df25760206040517f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5008152f35b34610df2576060600319360112610df257610e99611351565b610ea1611374565b90604435907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549260ff8460401c16159367ffffffffffffffff8116801590816111e0575b60011490816111d6575b1590816111cd575b506111a5578460017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055611150575b5073ffffffffffffffffffffffffffffffffffffffff8216156111285782156110ca57610f9f73ffffffffffffffffffffffffffffffffffffffff92610f8f611870565b610f97611870565b610151611870565b167fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005561100f611870565b7fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a4005561103757005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41707020636861696e2049442063616e6e6f74206265203000000000000000006044820152fd5b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005584610f4b565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501586610ef8565b303b159150610ef0565b869150610ee6565b34610df2576040600319360112610df257611201611351565b60243567ffffffffffffffff8111610df257611221903690600401611397565b9173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303611329578215611301575f5b83811061127057005b61127b8185856114cd565b905015611301578061129361075460019387876114cd565b61129e81328661157a565b6112aa575b5001611267565b7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f60405160208152806112f873ffffffffffffffffffffffffffffffffffffffff88169460208301906114a8565b0390a2856112a3565b7fdc37f51d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdaf9861c000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff82168203610df257565b6024359073ffffffffffffffffffffffffffffffffffffffff82168203610df257565b9181601f84011215610df25782359167ffffffffffffffff8311610df2576020808501948460051b010111610df257565b9181601f84011215610df25782359167ffffffffffffffff8311610df25760208381860195010111610df257565b90601f601f19910116810190811067ffffffffffffffff82111761141957604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161141957601f01601f191660200190565b81601f82011215610df25780359061147982611446565b9261148760405194856113f6565b82845260208383010111610df257815f926020809301838601378301015290565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b919081101561152d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610df257019081359167ffffffffffffffff8311610df2576020018236038113610df2579190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b601f8260209493601f1993818652868601375f8582860101520116010190565b9190815162030d408111611695575073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416600181149283156115d5575b505050905090565b6020935073ffffffffffffffffffffffffffffffffffffffff9461163e8692604051978896879586957f7a3979dc0000000000000000000000000000000000000000000000000000000087521660048601521660248401526060604484015260648301906114a8565b03915afa908115610de7575f9161165a575b50805f80806115cd565b90506020813d60201161168d575b81611675602093836113f6565b81010312610df257518015158103610df2575f611650565b3d9150611668565b7f4634691b000000000000000000000000000000000000000000000000000000005f5260045262030d4060245260445ffd5b602161171491836040519485927f040000000000000000000000000000000000000000000000000000000000000060208501528484013781015f838201520301601f1981018352826113f6565b90565b73ffffffffffffffffffffffffffffffffffffffff1680156117d85773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361184457565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561189f57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b9061190457508051156118dc57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611957575b611915575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561190d56f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\xA04a\x01\x03W`\x1Fa\x10j8\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01\x07W\x80\x84\x92` \x94`@R\x839\x81\x01\x03\x12a\x01\x03WQ3\x15a\0\xF0W_\x80T3`\x01`\x01`\xA0\x1B\x03\x19\x82\x16\x81\x17\x83U`@Q\x92\x90\x91`\x01`\x01`\xA0\x1B\x03\x16\x90\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x90\x80\xA3\x81\x15a\0\xAEWP`\x80R`@Qa\x0FN\x90\x81a\x01\x1C\x829`\x80Q\x81a\x033\x01R\xF3[bF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FApp chain ID cannot be 0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x90\xFD[c\x1EO\xBD\xF7`\xE0\x1B_R_`\x04R`$_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD\xFE`\x80\x80`@R`\x046\x10\x15a\0\x12W_\x80\xFD[_5`\xE0\x1C\x90\x81c\x01u\xE2;\x14a\t@WP\x80c\x0Cg#c\x14a\x02|W\x80c9i\x8A\xC0\x14a\x08iW\x80cF\xE2\xCC\t\x14a\x08RW\x80cTg\xCBH\x14a\x07\xC6W\x80c[<\xD6\xE2\x14a\x07\x93W\x80c^z{\xDF\x14a\x07`W\x80cqP\x18\xA6\x14a\x06\xE4W\x80cx\x1C\xD9\x9D\x14a\x06\xC6W\x80cz9y\xDC\x14a\x05\xC3W\x80cz\x8DA\xC2\x14a\x05SW\x80c\x85\x07I%\x14a\x05!W\x80c\x8D\xA5\xCB[\x14a\x04\xEFW\x80c\xA7\x0B\x9F\x0C\x14a\x04\xD2W\x80c\xB9}\xD9\xE2\x14a\x04\xB0W\x80c\xCD\xAF\xB9x\x14a\x04QW\x80c\xD4\xF0\xEBM\x14a\x03\xCAW\x80c\xD5\x17m#\x14a\x03VW\x80c\xD8x\x13B\x14a\x03\x1CW\x80c\xDE\x1FE>\x14a\x02\xA6W\x80c\xE09af\x14a\x02|W\x80c\xE8\xEB\x1D\xC3\x14a\x02_W\x80c\xF2\xFD\xE3\x8B\x14a\x01MWc\xF9\xDBp\x92\x14a\x01$W_\x80\xFD[4a\x01IW_`\x03\x196\x01\x12a\x01IW` `\xFF`\x01T`\xA0\x1C\x16`@Q\x90\x15\x15\x81R\xF3[_\x80\xFD[4a\x01IW` `\x03\x196\x01\x12a\x01IWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01{a\t\xDCV[a\x01\x83a\x0E\xD4V[\x81`\x03T\x16\x15a\x02.W[a\x01\x96a\x0E\xD4V[\x16\x80\x15a\x02\x02Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[\x81_T\x16\x82\x82\x16\x90\x7F\x16\xAE1yaZ(\x15X;ef\xEA\xE6\xF7\x83\xB2T\x19E,\0Y\x9A\xEE\xB0\x10\x88\xF1>\xCA\x1A_\x80\xA3a\x01\x8EV[4a\x01IW_`\x03\x196\x01\x12a\x01IW` `@Qb\x03\r@\x81R\xF3[4a\x01IW` `\x03\x196\x01\x12a\x01IW`\x045_R`\x02` R` `@_ T`@Q\x90\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IWa\x02\xBEa\x0E\xD4V[`\x01T`\xFF\x81`\xA0\x1C\x16\x15a\x02\xF4W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x01U\0[\x7Fvy@\r\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x01IW_`\x03\x196\x01\x12a\x01IW` `@Q\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xF3[4a\x01IW` `\x03\x196\x01\x12a\x01IW`\x045b'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x03\x9DWch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x03\x9DW` \x90`@Q\x90\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[4a\x01IW` `\x03\x196\x01\x12a\x01IWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x03\xF8a\t\xDCV[a\x04\0a\x0E\xD4V[\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x7F%5\x80\xF8\x06t\x1C\x11\xB3\xD4\xAA`\xD9\xCA\xCC[\xEF\x0C\xEB\xB3WHv\x7F\xE2?\x11\x91n/\x04\xB9_\x80\xA2\0[4a\x01IW` `\x03\x196\x01\x12a\x01IW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01IW6`#\x82\x01\x12\x15a\x01IW\x80`\x04\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01IW6`$\x82`\x05\x1B\x84\x01\x01\x11a\x01IW`$a\x04\xAE\x92\x01a\r\x92V[\0[4a\x01IW_`\x03\x196\x01\x12a\x01IW` a\x04\xCAa\rTV[`@Q\x90\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IW` `@Qb'\x8D\0\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01IWa\x05Oa\x05;a\x0556a\t\xFFV[\x90a\x0C\xE6V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\n\x91V[\x03\x90\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IW`\x03Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80a\x05\xBBWP` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[` \x90a\x05\x9DV[4a\x01IW```\x03\x196\x01\x12a\x01IWa\x05\xDCa\t\xDCV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01IW`D5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01IW6`#\x83\x01\x12\x15a\x01IW\x81`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\x06\x99W`@Q\x91a\x06f` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x88\x01\x16\x01\x84a\nPV[\x84\x83R6`$\x86\x86\x01\x01\x11a\x01IW_` \x86\x81\x97`$a\x06\x8F\x98\x01\x83\x88\x017\x85\x01\x01Ra\x0B\xADV[`@Q\x90\x15\x15\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[4a\x01IW_`\x03\x196\x01\x12a\x01IW` `@Qch\x8DF\xF0\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IWa\x06\xFCa\x0E\xD4V[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01IW_`\x03\x196\x01\x12a\x01IW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IWa\x07\xDEa\x0E\xD4V[`\x01T`\xFF\x81`\xA0\x1C\x16a\x08*W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16t\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x17`\x01U\0[\x7F\xCD`\xC3\xCA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x01IWa\x04\xAEa\x08c6a\t\xFFV[\x90a\n\xD4V[4a\x01IW` `\x03\x196\x01\x12a\x01IW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a\x08\xA3a\t\xDCV[a\x08\xABa\x0E\xD4V[`\x03Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x16\x92\x16\x92\x83\x91\x16\x17`\x03U\x81\x15\x15_\x14a\x08\xFFW\x7F\x16\xAE1yaZ(\x15X;ef\xEA\xE6\xF7\x83\xB2T\x19E,\0Y\x9A\xEE\xB0\x10\x88\xF1>\xCA\x1A_\x80\xA3\0[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16\x90\x7F\x16\xAE1yaZ(\x15X;ef\xEA\xE6\xF7\x83\xB2T\x19E,\0Y\x9A\xEE\xB0\x10\x88\xF1>\xCA\x1A_\x80\xA3\0[4a\x01IW` `\x03\x196\x01\x12a\x01IW`\x045\x80\x15a\t\xB4W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x01\x90\x81\x11a\x03\x9DWb'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x03\x9DWch\x8DF\xF0\x01\x90\x81ch\x8DF\xF0\x11a\x03\x9DW` \x91\x81R\xF3[\x7F\xD6\x93h\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01IWV[\x90` `\x03\x19\x83\x01\x12a\x01IW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01IW\x82`#\x82\x01\x12\x15a\x01IW\x80`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\x01IW`$\x84\x83\x01\x01\x11a\x01IW`$\x01\x91\x90V[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06\x99W`@RV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x90`\xFF`\x01T`\xA0\x1C\x16a\n\xFBW\x90a\n\xF1a\n\xF9\x92Z\x92a\x0B\0V[Z\x90\x03a\x0F V[V[a\n\xF9\x91[\x90\x80\x15a\x0B\x85Wa\x0B\x10\x91a\x0C\xE6V[a\x0B\x1B\x8123a\x0B\xADV[\x15a\x0B]W\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F`@Q` \x81R\x80a\x0BX3\x94` \x83\x01\x90a\n\x91V[\x03\x90\xA2V[\x7F\xDCt\x14X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x91\x90\x81Qb\x03\r@\x81\x11a\x0C\xB4WPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`\x01\x81\x14\x92\x83\x15a\x0B\xE9W[PPP\x90P\x90V[` \x93Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94a\x0CR\x86\x92`@Q\x97\x88\x96\x87\x95\x86\x95\x7Fz9y\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R\x16`\x04\x86\x01R\x16`$\x84\x01R```D\x84\x01R`d\x83\x01\x90a\n\x91V[\x03\x91Z\xFA\x90\x81\x15a\x0C\xA9W_\x91a\x0CnW[P\x80_\x80\x80a\x0B\xE1V[\x90P` \x81=` \x11a\x0C\xA1W[\x81a\x0C\x89` \x93\x83a\nPV[\x81\x01\x03\x12a\x01IWQ\x80\x15\x15\x81\x03a\x01IW_a\x0CdV[=\x91Pa\x0C|V[`@Q=_\x82>=\x90\xFD[\x7FF4i\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04Rb\x03\r@`$R`D_\xFD[`!a\rQ\x91\x83`@Q\x94\x85\x92\x7F\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01R\x84\x84\x017\x81\x01_\x83\x82\x01R\x03\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\nPV[\x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x97r\xB9\x10B\x01B\x81\x11a\x03\x9DWb'\x8D\0\x90\x04`\x01\x81\x01\x80\x91\x11a\x03\x9DW\x90V[\x90`\xFF`\x01T`\xA0\x1C\x16a\r\xAFW\x90a\n\xF1a\n\xF9\x92Z\x92a\x0EEV[a\n\xF9\x91a\x0EEV[\x91\x90\x81\x10\x15a\x0E\x18W`\x05\x1B\x81\x015\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x01IW\x01\x90\x815\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x01IW` \x01\x826\x03\x81\x13a\x01IW\x91\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[\x81\x15a\x0B\x85W_[\x82\x81\x10a\x0EYWPPPV[a\x0Ed\x81\x84\x84a\r\xB8V[\x90P\x15a\x0B\x85W\x80a\x0E|a\x055`\x01\x93\x86\x86a\r\xB8V[a\x0E\x87\x8123a\x0B\xADV[a\x0E\x93W[P\x01a\x0EMV[\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F`@Q` \x81R\x80a\x0E\xCB3\x94` \x83\x01\x90a\n\x91V[\x03\x90\xA2_a\x0E\x8CV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x0E\xF4WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[a\x0F(a\rTV[:\x90:\x15a\x0FEW[_R`\x02` R`@_ \x91\x02\x81T\x01\x90UV[`\x01\x91Pa\x0F1V", + b"`\xC04a\x01GW`\x1Fa\x1A\xE08\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01KW\x80\x84\x92` \x94`@R\x839\x81\x01\x03\x12a\x01GWQ`\x01`\x01`\xA0\x1B\x03\x81\x16\x80\x82\x03a\x01GW0`\x80R\x15a\x018W`\xA0R_Q` a\x1A\xC0_9_Q\x90_RT`\xFF\x81`@\x1C\x16a\x01)W`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01a\0\xD3W[`@Qa\x19`\x90\x81a\x01`\x829`\x80Q\x81\x81\x81a\t\x02\x01Ra\t\xC7\x01R`\xA0Q\x81\x81\x81a\x01\xC9\x01R\x81\x81a\x041\x01R\x81\x81a\r\x06\x01R\x81\x81a\x0E\"\x01Ra\x129\x01R\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x1A\xC0_9_Q\x90_RU`@Q\x90\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_a\0\x8FV[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[c\xD9.#=`\xE0\x1B_R`\x04_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[__5`\xE0\x1C\x80c\x12(\x19\x83\x14a\x11\xE8W\x80c\x17\x94\xBB<\x14a\x0E\x80W\x80c$\x07\xF0\xB6\x14a\x0EFW\x80cC\xF9z\xE5\x14a\r\xF6W\x80cF\xE2\xCC\t\x14a\x0C\xBAW\x80cO\x1E\xF2\x86\x14a\tzW\x80cR\xD1\x90-\x14a\x08\xDAW\x80c[<\xD6\xE2\x14a\x08\x87W\x80cqP\x18\xA6\x14a\x07\xC9W\x80cz9y\xDC\x14a\x07nW\x80c\x85\x07I%\x14a\x07\x1CW\x80c\x8D\xA5\xCB[\x14a\x06\xC9W\x80c\x95\xC5\xBFu\x14a\x06\x8EW\x80c\xAD<\xB1\xCC\x14a\x06)W\x80c\xB3\xC6P\x15\x14a\x05\xE2W\x80c\xCD\xAF\xB9x\x14a\x03\xE6W\x80c\xD4\xF0\xEBM\x14a\x03\x1FW\x80c\xD8x\x13B\x14a\x02\xE2W\x80c\xE4\xA3}z\x14a\x01wW\x80c\xE8\xEB\x1D\xC3\x14a\x01YW\x80c\xF2\xFD\xE3\x8B\x14a\x01,Wc\xFF\xA1\xADt\x14a\x01\x0CW_\x80\xFD[4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` `@Qb\x0FB@\x81R\xF3[\x80\xFD[P4a\x01)W` `\x03\x196\x01\x12a\x01)Wa\x01Va\x01Ia\x13QV[a\x01Qa\x18\x04V[a\x17\x17V[\x80\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` `@Qb\x03\r@\x81R\xF3[P4a\x01)W`@`\x03\x196\x01\x12a\x01)Wa\x01\x91a\x13QV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xDEWa\x01\xB1\x906\x90`\x04\x01a\x13\xC8V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x163\x03a\x02\xB6W\x81\x15a\x02\x8EW\x90a\x01\xFF\x91a\x16\xC7V[\x90a\x02\x0B\x822\x83a\x15zV[\x15a\x02fWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F\x91a\x02``@Q\x92\x83\x92` \x84R\x16\x94` \x83\x01\x90a\x14\xA8V[\x03\x90\xA2\x80\xF3[`\x04\x83\x7F\xDCt\x14X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x84\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x84\x7F\xDA\xF9\x86\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x82\x80\xFD[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` \x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0T`@Q\x90\x81R\xF3[P4a\x01)W` `\x03\x196\x01\x12a\x01)Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x03Na\x13QV[a\x03Va\x18\x04V[\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0U\x7F%5\x80\xF8\x06t\x1C\x11\xB3\xD4\xAA`\xD9\xCA\xCC[\xEF\x0C\xEB\xB3WHv\x7F\xE2?\x11\x91n/\x04\xB9\x82\x80\xA2\x80\xF3[P4a\x01)W` `\x03\x196\x01\x12a\x01)W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\xDEWa\x04\x18\x906\x90`\x04\x01a\x13\x97V[\x91\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x92`@Q\x91\x7F\x12(\x19\x83\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x84\x01R\x81`d\x84\x013`$\x86\x01R`@`D\x86\x01RR`\x84\x83\x01`\x84\x83`\x05\x1B\x85\x01\x01\x92\x82\x86\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01[\x83\x83\x10a\x05aW\x88\x80\x89\x8Ca\x04\xE4\x82\x8C\x03`\x1F\x19\x81\x01\x84R\x83a\x13\xF6V[\x80;\x15a\x05]Wa\x050\x83\x92\x91\x83\x92`@Q\x94\x85\x80\x94\x81\x93\x7F\xCFj\xCD\xAC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` `\x04\x84\x01R`$\x83\x01\x90a\x14\xA8V[\x03\x92Z\xF1\x80\x15a\x05RWa\x05AWP\xF3[\x81a\x05K\x91a\x13\xF6V[a\x01)W\x80\xF3[`@Q=\x84\x82>=\x90\xFD[PP\xFD[\x90\x91\x92\x93\x94\x95\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF|\x88\x82\x03\x01\x86R\x865\x82\x81\x12\x15a\x05\xDAW\x83\x01` \x815\x91\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\xD6W\x816\x03\x81\x13a\x05\xD6Wa\x05\xC8`\x01\x93` \x93\x84\x93a\x15ZV[\x98\x01\x96\x01\x94\x93\x01\x91\x90a\x04\xC6V[\x8A\x80\xFD[\x89\x80\xFD[P\x80\xFD[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16`@Q\x90\x81R\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)WPa\x06\x8A`@Qa\x06L`@\x82a\x13\xF6V[`\x05\x81R\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x14\xA8V[\x03\x90\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` `@Q\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0\x81R\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[P4a\x01)W` `\x03\x196\x01\x12a\x01)W`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01)Wa\x06\x8Aa\x07Za\x07T6`\x04\x86\x01a\x13\xC8V[\x90a\x16\xC7V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x14\xA8V[P4a\x01)W```\x03\x196\x01\x12a\x01)Wa\x07\x88a\x13QV[\x90a\x07\x91a\x13tV[\x90`D5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01)W` a\x07\xBF\x85\x85a\x07\xB96`\x04\x88\x01a\x14bV[\x91a\x15zV[`@Q\x90\x15\x15\x81R\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)Wa\x07\xE2a\x18\x04V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`@Q\x90\x81R\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x160\x03a\tRW` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[\x80\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04\x92R\xFD[P`@`\x03\x196\x01\x12a\x01)Wa\t\x8Fa\x13QV[\x90`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\xDEWa\t\xB0\x906\x90`\x04\x01a\x14bV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\x0CxW[Pa\x0CPWa\t\xFFa\x18\x04V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x90`@Q\x93\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R` \x85`\x04\x81\x86Z\xFA\x80\x95\x85\x96a\x0C\x18W[Pa\n\x81W`$\x84\x84\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R`\x04R\xFD[\x90\x91\x84\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81\x03a\x0B\xEDWP\x81;\x15a\x0B\xC2W\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;\x84\x80\xA2\x81Q\x83\x90\x15a\x0B\x8FW\x80\x83` a\x0B\x83\x95Q\x91\x01\x84Z\xF4=\x15a\x0B\x87W=\x91a\x0Bg\x83a\x14FV[\x92a\x0Bu`@Q\x94\x85a\x13\xF6V[\x83R=\x85` \x85\x01>a\x18\xC7V[P\x80\xF3[``\x91a\x18\xC7V[PPP4a\x0B\x9AW\x80\xF3[\x80\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04\x92R\xFD[\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R`\x04R`$\x83\xFD[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R`\x04R`$\x84\xFD[\x90\x95P` \x81=` \x11a\x0CHW[\x81a\x0C4` \x93\x83a\x13\xF6V[\x81\x01\x03\x12a\x0CDWQ\x94_a\nPV[\x84\x80\xFD[=\x91Pa\x0C'V[`\x04\x82\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15_a\t\xF2V[P4a\r\xF2W` `\x03\x196\x01\x12a\r\xF2W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\r\xF2Wa\x0C\xEC\x906\x90`\x04\x01a\x13\xC8V[a\r{s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x91a\rm`@Q\x94\x85\x92\x7F\xE4\xA3}z\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01R3`$\x85\x01R`@`D\x85\x01R`d\x84\x01\x91a\x15ZV[\x03`\x1F\x19\x81\x01\x84R\x83a\x13\xF6V[\x80;\x15a\r\xF2Wa\r\xC7_\x92\x91\x83\x92`@Q\x94\x85\x80\x94\x81\x93\x7F\xCFj\xCD\xAC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` `\x04\x84\x01R`$\x83\x01\x90a\x14\xA8V[\x03\x92Z\xF1\x80\x15a\r\xE7Wa\r\xD9WP\x80\xF3[a\r\xE5\x91P_\x90a\x13\xF6V[\0[`@Q=_\x82>=\x90\xFD[_\x80\xFD[4a\r\xF2W_`\x03\x196\x01\x12a\r\xF2W` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\r\xF2W_`\x03\x196\x01\x12a\r\xF2W` `@Q\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0\x81R\xF3[4a\r\xF2W```\x03\x196\x01\x12a\r\xF2Wa\x0E\x99a\x13QV[a\x0E\xA1a\x13tV[\x90`D5\x90\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x92`\xFF\x84`@\x1C\x16\x15\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x11\xE0W[`\x01\x14\x90\x81a\x11\xD6W[\x15\x90\x81a\x11\xCDW[Pa\x11\xA5W\x84`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x11PW[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15a\x11(W\x82\x15a\x10\xCAWa\x0F\x9Fs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92a\x0F\x8Fa\x18pV[a\x0F\x97a\x18pV[a\x01Qa\x18pV[\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0Ua\x10\x0Fa\x18pV[\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0Ua\x107W\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FApp chain ID cannot be 0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x84a\x0FKV[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x86a\x0E\xF8V[0;\x15\x91Pa\x0E\xF0V[\x86\x91Pa\x0E\xE6V[4a\r\xF2W`@`\x03\x196\x01\x12a\r\xF2Wa\x12\x01a\x13QV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\r\xF2Wa\x12!\x906\x90`\x04\x01a\x13\x97V[\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x163\x03a\x13)W\x82\x15a\x13\x01W_[\x83\x81\x10a\x12pW\0[a\x12{\x81\x85\x85a\x14\xCDV[\x90P\x15a\x13\x01W\x80a\x12\x93a\x07T`\x01\x93\x87\x87a\x14\xCDV[a\x12\x9E\x812\x86a\x15zV[a\x12\xAAW[P\x01a\x12gV[\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F`@Q` \x81R\x80a\x12\xF8s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x94` \x83\x01\x90a\x14\xA8V[\x03\x90\xA2\x85a\x12\xA3V[\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\xDA\xF9\x86\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\r\xF2WV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\r\xF2WV[\x91\x81`\x1F\x84\x01\x12\x15a\r\xF2W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\r\xF2W` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11a\r\xF2WV[\x91\x81`\x1F\x84\x01\x12\x15a\r\xF2W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\r\xF2W` \x83\x81\x86\x01\x95\x01\x01\x11a\r\xF2WV[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x14\x19W`@RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x14\x19W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x81`\x1F\x82\x01\x12\x15a\r\xF2W\x805\x90a\x14y\x82a\x14FV[\x92a\x14\x87`@Q\x94\x85a\x13\xF6V[\x82\x84R` \x83\x83\x01\x01\x11a\r\xF2W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x90`\x1F\x19`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x81\x10\x15a\x15-W`\x05\x1B\x81\x015\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\r\xF2W\x01\x90\x815\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\r\xF2W` \x01\x826\x03\x81\x13a\r\xF2W\x91\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[`\x1F\x82` \x94\x93`\x1F\x19\x93\x81\x86R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x81Qb\x03\r@\x81\x11a\x16\x95WPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`\x01\x81\x14\x92\x83\x15a\x15\xD5W[PPP\x90P\x90V[` \x93Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94a\x16>\x86\x92`@Q\x97\x88\x96\x87\x95\x86\x95\x7Fz9y\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R\x16`\x04\x86\x01R\x16`$\x84\x01R```D\x84\x01R`d\x83\x01\x90a\x14\xA8V[\x03\x91Z\xFA\x90\x81\x15a\r\xE7W_\x91a\x16ZW[P\x80_\x80\x80a\x15\xCDV[\x90P` \x81=` \x11a\x16\x8DW[\x81a\x16u` \x93\x83a\x13\xF6V[\x81\x01\x03\x12a\r\xF2WQ\x80\x15\x15\x81\x03a\r\xF2W_a\x16PV[=\x91Pa\x16hV[\x7FF4i\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04Rb\x03\r@`$R`D_\xFD[`!a\x17\x14\x91\x83`@Q\x94\x85\x92\x7F\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01R\x84\x84\x017\x81\x01_\x83\x82\x01R\x03\x01`\x1F\x19\x81\x01\x83R\x82a\x13\xF6V[\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a\x17\xD8Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a\x18DWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a\x18\x9FWV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90a\x19\x04WP\x80Q\x15a\x18\xDCW\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a\x19WW[a\x19\x15WP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a\x19\rV\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0", ); /// The runtime bytecode of the contract, as deployed on the network. /// /// ```text - ///0x6080806040526004361015610012575f80fd5b5f3560e01c9081630175e23b14610940575080630c6723631461027c57806339698ac01461086957806346e2cc09146108525780635467cb48146107c65780635b3cd6e2146107935780635e7a7bdf14610760578063715018a6146106e4578063781cd99d146106c65780637a3979dc146105c35780637a8d41c21461055357806385074925146105215780638da5cb5b146104ef578063a70b9f0c146104d2578063b97dd9e2146104b0578063cdafb97814610451578063d4f0eb4d146103ca578063d5176d2314610356578063d87813421461031c578063de1f453e146102a6578063e03961661461027c578063e8eb1dc31461025f578063f2fde38b1461014d5763f9db709214610124575f80fd5b34610149575f60031936011261014957602060ff60015460a01c166040519015158152f35b5f80fd5b346101495760206003193601126101495773ffffffffffffffffffffffffffffffffffffffff61017b6109dc565b610183610ed4565b81600354161561022e575b610196610ed4565b1680156102025773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b815f5416828216907f16ae3179615a2815583b6566eae6f783b25419452c00599aeeb01088f13eca1a5f80a361018e565b34610149575f60031936011261014957602060405162030d408152f35b34610149576020600319360112610149576004355f526002602052602060405f2054604051908152f35b34610149575f600319360112610149576102be610ed4565b60015460ff8160a01c16156102f4577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600155005b7f7679400d000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610149575f6003193601126101495760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101495760206003193601126101495760043562278d0081029080820462278d00149015171561039d5763688d46f0018063688d46f01161039d57602090604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b346101495760206003193601126101495773ffffffffffffffffffffffffffffffffffffffff6103f86109dc565b610400610ed4565b16807fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001557f253580f806741c11b3d4aa60d9cacc5bef0cebb35748767fe23f11916e2f04b95f80a2005b346101495760206003193601126101495760043567ffffffffffffffff8111610149573660238201121561014957806004013567ffffffffffffffff8111610149573660248260051b840101116101495760246104ae9201610d92565b005b34610149575f6003193601126101495760206104ca610d54565b604051908152f35b34610149575f60031936011261014957602060405162278d008152f35b34610149575f60031936011261014957602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346101495761054f61053b610535366109ff565b90610ce6565b604051918291602083526020830190610a91565b0390f35b34610149575f6003193601126101495760035473ffffffffffffffffffffffffffffffffffffffff16806105bb5750602073ffffffffffffffffffffffffffffffffffffffff5f54165b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b60209061059d565b34610149576060600319360112610149576105dc6109dc565b6024359073ffffffffffffffffffffffffffffffffffffffff82168203610149576044359067ffffffffffffffff821161014957366023830112156101495781600401359267ffffffffffffffff8411610699576040519161066660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8801160184610a50565b8483523660248686010111610149575f6020868197602461068f98018388013785010152610bad565b6040519015158152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b34610149575f60031936011261014957602060405163688d46f08152f35b34610149575f600319360112610149576106fc610ed4565b5f73ffffffffffffffffffffffffffffffffffffffff81547fffffffffffffffffffffffff000000000000000000000000000000000000000081168355167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610149575f60031936011261014957602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b34610149575f60031936011261014957602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b34610149575f600319360112610149576107de610ed4565b60015460ff8160a01c1661082a577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017600155005b7fcd60c3ca000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610149576104ae610863366109ff565b90610ad4565b34610149576020600319360112610149577fffffffffffffffffffffffff00000000000000000000000000000000000000006108a36109dc565b6108ab610ed4565b60035473ffffffffffffffffffffffffffffffffffffffff808216921692839116176003558115155f146108ff577f16ae3179615a2815583b6566eae6f783b25419452c00599aeeb01088f13eca1a5f80a3005b905073ffffffffffffffffffffffffffffffffffffffff5f5416907f16ae3179615a2815583b6566eae6f783b25419452c00599aeeb01088f13eca1a5f80a3005b346101495760206003193601126101495760043580156109b4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810190811161039d5762278d0081029080820462278d00149015171561039d5763688d46f001908163688d46f01161039d576020918152f35b7fd69368d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361014957565b9060206003198301126101495760043567ffffffffffffffff811161014957826023820112156101495780600401359267ffffffffffffffff84116101495760248483010111610149576024019190565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761069957604052565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9060ff60015460a01c16610afb5790610af1610af9925a92610b00565b5a9003610f20565b565b610af9915b908015610b8557610b1091610ce6565b610b1b813233610bad565b15610b5d577f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f6040516020815280610b5833946020830190610a91565b0390a2565b7fdc741458000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdc37f51d000000000000000000000000000000000000000000000000000000005f5260045ffd5b9190815162030d408111610cb4575073ffffffffffffffffffffffffffffffffffffffff6001541660018114928315610be9575b505050905090565b6020935073ffffffffffffffffffffffffffffffffffffffff94610c528692604051978896879586957f7a3979dc000000000000000000000000000000000000000000000000000000008752166004860152166024840152606060448401526064830190610a91565b03915afa908115610ca9575f91610c6e575b50805f8080610be1565b90506020813d602011610ca1575b81610c8960209383610a50565b8101031261014957518015158103610149575f610c64565b3d9150610c7c565b6040513d5f823e3d90fd5b7f4634691b000000000000000000000000000000000000000000000000000000005f5260045262030d4060245260445ffd5b6021610d5191836040519485927f040000000000000000000000000000000000000000000000000000000000000060208501528484013781015f8382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610a50565b90565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff9772b910420142811161039d5762278d0090046001810180911161039d5790565b9060ff60015460a01c16610daf5790610af1610af9925a92610e45565b610af991610e45565b9190811015610e185760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561014957019081359167ffffffffffffffff8311610149576020018236038113610149579190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8115610b85575f5b828110610e5957505050565b610e64818484610db8565b905015610b855780610e7c6105356001938686610db8565b610e87813233610bad565b610e93575b5001610e4d565b7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f6040516020815280610ecb33946020830190610a91565b0390a25f610e8c565b73ffffffffffffffffffffffffffffffffffffffff5f54163303610ef457565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b610f28610d54565b3a903a15610f45575b5f52600260205260405f2091028154019055565b60019150610f3156 + ///0x60806040526004361015610011575f80fd5b5f5f3560e01c806312281983146111e85780631794bb3c14610e805780632407f0b614610e4657806343f97ae514610df657806346e2cc0914610cba5780634f1ef2861461097a57806352d1902d146108da5780635b3cd6e214610887578063715018a6146107c95780637a3979dc1461076e578063850749251461071c5780638da5cb5b146106c957806395c5bf751461068e578063ad3cb1cc14610629578063b3c65015146105e2578063cdafb978146103e6578063d4f0eb4d1461031f578063d8781342146102e2578063e4a37d7a14610177578063e8eb1dc314610159578063f2fde38b1461012c5763ffa1ad741461010c575f80fd5b346101295780600319360112610129576020604051620f42408152f35b80fd5b503461012957602060031936011261012957610156610149611351565b610151611804565b611717565b80f35b5034610129578060031936011261012957602060405162030d408152f35b503461012957604060031936011261012957610191611351565b60243567ffffffffffffffff81116102de576101b19036906004016113c8565b9073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036102b657811561028e57906101ff916116c7565b9061020b82328361157a565b156102665773ffffffffffffffffffffffffffffffffffffffff7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f9161026060405192839260208452169460208301906114a8565b0390a280f35b6004837fdc741458000000000000000000000000000000000000000000000000000000008152fd5b6004847fdc37f51d000000000000000000000000000000000000000000000000000000008152fd5b6004847fdaf9861c000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b503461012957806003193601126101295760207fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a40054604051908152f35b50346101295760206003193601126101295773ffffffffffffffffffffffffffffffffffffffff61034e611351565b610356611804565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500557f253580f806741c11b3d4aa60d9cacc5bef0cebb35748767fe23f11916e2f04b98280a280f35b50346101295760206003193601126101295760043567ffffffffffffffff81116105de57610418903690600401611397565b919073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692604051917f12281983000000000000000000000000000000000000000000000000000000006020840152816064840133602486015260406044860152526084830160848360051b850101928286907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603015b838310610561578880898c6104e4828c03601f1981018452836113f6565b803b1561055d5761053083929183926040519485809481937fcf6acdac0000000000000000000000000000000000000000000000000000000083526020600484015260248301906114a8565b03925af18015610552576105415750f35b8161054b916113f6565b6101295780f35b6040513d84823e3d90fd5b5050fd5b9091929394957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c8882030186528635828112156105da57830160208135910167ffffffffffffffff82116105d65781360381136105d6576105c8600193602093849361155a565b9801960194930191906104c6565b8a80fd5b8980fd5b5080fd5b5034610129578060031936011261012957602067ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416604051908152f35b50346101295780600319360112610129575061068a60405161064c6040826113f6565b600581527f352e302e3000000000000000000000000000000000000000000000000000000060208201526040519182916020835260208301906114a8565b0390f35b503461012957806003193601126101295760206040517fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a4008152f35b5034610129578060031936011261012957602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b5034610129576020600319360112610129576004359067ffffffffffffffff82116101295761068a61075a61075436600486016113c8565b906116c7565b6040519182916020835260208301906114a8565b503461012957606060031936011261012957610788611351565b90610791611374565b906044359067ffffffffffffffff82116101295760206107bf85856107b93660048801611462565b9161157a565b6040519015158152f35b50346101295780600319360112610129576107e2611804565b8073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5034610129578060031936011261012957602073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416604051908152f35b503461012957806003193601126101295773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036109525760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b807fe07c8dba0000000000000000000000000000000000000000000000000000000060049252fd5b5060406003193601126101295761098f611351565b9060243567ffffffffffffffff81116105de576109b0903690600401611462565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610c78575b50610c50576109ff611804565b73ffffffffffffffffffffffffffffffffffffffff831690604051937f52d1902d000000000000000000000000000000000000000000000000000000008552602085600481865afa80958596610c18575b50610a8157602484847f4c9c8ce3000000000000000000000000000000000000000000000000000000008252600452fd5b9091847f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8103610bed5750813b15610bc257807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8480a28151839015610b8f5780836020610b8395519101845af43d15610b87573d91610b6783611446565b92610b7560405194856113f6565b83523d85602085013e6118c7565b5080f35b6060916118c7565b50505034610b9a5780f35b807fb398979f0000000000000000000000000000000000000000000000000000000060049252fd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000008452600452602483fd5b7faa1d49a4000000000000000000000000000000000000000000000000000000008552600452602484fd5b9095506020813d602011610c48575b81610c34602093836113f6565b81010312610c445751945f610a50565b8480fd5b3d9150610c27565b6004827fe07c8dba000000000000000000000000000000000000000000000000000000008152fd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f6109f2565b5034610df2576020600319360112610df25760043567ffffffffffffffff8111610df257610cec9036906004016113c8565b610d7b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691610d6d6040519485927fe4a37d7a00000000000000000000000000000000000000000000000000000000602085015233602485015260406044850152606484019161155a565b03601f1981018452836113f6565b803b15610df257610dc75f929183926040519485809481937fcf6acdac0000000000000000000000000000000000000000000000000000000083526020600484015260248301906114a8565b03925af18015610de757610dd9575080f35b610de591505f906113f6565b005b6040513d5f823e3d90fd5b5f80fd5b34610df2575f600319360112610df257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610df2575f600319360112610df25760206040517f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5008152f35b34610df2576060600319360112610df257610e99611351565b610ea1611374565b90604435907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549260ff8460401c16159367ffffffffffffffff8116801590816111e0575b60011490816111d6575b1590816111cd575b506111a5578460017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055611150575b5073ffffffffffffffffffffffffffffffffffffffff8216156111285782156110ca57610f9f73ffffffffffffffffffffffffffffffffffffffff92610f8f611870565b610f97611870565b610151611870565b167fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005561100f611870565b7fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a4005561103757005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41707020636861696e2049442063616e6e6f74206265203000000000000000006044820152fd5b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005584610f4b565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501586610ef8565b303b159150610ef0565b869150610ee6565b34610df2576040600319360112610df257611201611351565b60243567ffffffffffffffff8111610df257611221903690600401611397565b9173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303611329578215611301575f5b83811061127057005b61127b8185856114cd565b905015611301578061129361075460019387876114cd565b61129e81328661157a565b6112aa575b5001611267565b7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f60405160208152806112f873ffffffffffffffffffffffffffffffffffffffff88169460208301906114a8565b0390a2856112a3565b7fdc37f51d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdaf9861c000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff82168203610df257565b6024359073ffffffffffffffffffffffffffffffffffffffff82168203610df257565b9181601f84011215610df25782359167ffffffffffffffff8311610df2576020808501948460051b010111610df257565b9181601f84011215610df25782359167ffffffffffffffff8311610df25760208381860195010111610df257565b90601f601f19910116810190811067ffffffffffffffff82111761141957604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161141957601f01601f191660200190565b81601f82011215610df25780359061147982611446565b9261148760405194856113f6565b82845260208383010111610df257815f926020809301838601378301015290565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b919081101561152d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610df257019081359167ffffffffffffffff8311610df2576020018236038113610df2579190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b601f8260209493601f1993818652868601375f8582860101520116010190565b9190815162030d408111611695575073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416600181149283156115d5575b505050905090565b6020935073ffffffffffffffffffffffffffffffffffffffff9461163e8692604051978896879586957f7a3979dc0000000000000000000000000000000000000000000000000000000087521660048601521660248401526060604484015260648301906114a8565b03915afa908115610de7575f9161165a575b50805f80806115cd565b90506020813d60201161168d575b81611675602093836113f6565b81010312610df257518015158103610df2575f611650565b3d9150611668565b7f4634691b000000000000000000000000000000000000000000000000000000005f5260045262030d4060245260445ffd5b602161171491836040519485927f040000000000000000000000000000000000000000000000000000000000000060208501528484013781015f838201520301601f1981018352826113f6565b90565b73ffffffffffffffffffffffffffffffffffffffff1680156117d85773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361184457565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561189f57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b9061190457508051156118dc57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611957575b611915575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561190d56 /// ``` #[rustfmt::skip] #[allow(clippy::all)] pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( - b"`\x80\x80`@R`\x046\x10\x15a\0\x12W_\x80\xFD[_5`\xE0\x1C\x90\x81c\x01u\xE2;\x14a\t@WP\x80c\x0Cg#c\x14a\x02|W\x80c9i\x8A\xC0\x14a\x08iW\x80cF\xE2\xCC\t\x14a\x08RW\x80cTg\xCBH\x14a\x07\xC6W\x80c[<\xD6\xE2\x14a\x07\x93W\x80c^z{\xDF\x14a\x07`W\x80cqP\x18\xA6\x14a\x06\xE4W\x80cx\x1C\xD9\x9D\x14a\x06\xC6W\x80cz9y\xDC\x14a\x05\xC3W\x80cz\x8DA\xC2\x14a\x05SW\x80c\x85\x07I%\x14a\x05!W\x80c\x8D\xA5\xCB[\x14a\x04\xEFW\x80c\xA7\x0B\x9F\x0C\x14a\x04\xD2W\x80c\xB9}\xD9\xE2\x14a\x04\xB0W\x80c\xCD\xAF\xB9x\x14a\x04QW\x80c\xD4\xF0\xEBM\x14a\x03\xCAW\x80c\xD5\x17m#\x14a\x03VW\x80c\xD8x\x13B\x14a\x03\x1CW\x80c\xDE\x1FE>\x14a\x02\xA6W\x80c\xE09af\x14a\x02|W\x80c\xE8\xEB\x1D\xC3\x14a\x02_W\x80c\xF2\xFD\xE3\x8B\x14a\x01MWc\xF9\xDBp\x92\x14a\x01$W_\x80\xFD[4a\x01IW_`\x03\x196\x01\x12a\x01IW` `\xFF`\x01T`\xA0\x1C\x16`@Q\x90\x15\x15\x81R\xF3[_\x80\xFD[4a\x01IW` `\x03\x196\x01\x12a\x01IWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x01{a\t\xDCV[a\x01\x83a\x0E\xD4V[\x81`\x03T\x16\x15a\x02.W[a\x01\x96a\x0E\xD4V[\x16\x80\x15a\x02\x02Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17_U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3\0[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[\x81_T\x16\x82\x82\x16\x90\x7F\x16\xAE1yaZ(\x15X;ef\xEA\xE6\xF7\x83\xB2T\x19E,\0Y\x9A\xEE\xB0\x10\x88\xF1>\xCA\x1A_\x80\xA3a\x01\x8EV[4a\x01IW_`\x03\x196\x01\x12a\x01IW` `@Qb\x03\r@\x81R\xF3[4a\x01IW` `\x03\x196\x01\x12a\x01IW`\x045_R`\x02` R` `@_ T`@Q\x90\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IWa\x02\xBEa\x0E\xD4V[`\x01T`\xFF\x81`\xA0\x1C\x16\x15a\x02\xF4W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x01U\0[\x7Fvy@\r\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x01IW_`\x03\x196\x01\x12a\x01IW` `@Q\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xF3[4a\x01IW` `\x03\x196\x01\x12a\x01IW`\x045b'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x03\x9DWch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x03\x9DW` \x90`@Q\x90\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[4a\x01IW` `\x03\x196\x01\x12a\x01IWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x03\xF8a\t\xDCV[a\x04\0a\x0E\xD4V[\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01T\x16\x17`\x01U\x7F%5\x80\xF8\x06t\x1C\x11\xB3\xD4\xAA`\xD9\xCA\xCC[\xEF\x0C\xEB\xB3WHv\x7F\xE2?\x11\x91n/\x04\xB9_\x80\xA2\0[4a\x01IW` `\x03\x196\x01\x12a\x01IW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01IW6`#\x82\x01\x12\x15a\x01IW\x80`\x04\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01IW6`$\x82`\x05\x1B\x84\x01\x01\x11a\x01IW`$a\x04\xAE\x92\x01a\r\x92V[\0[4a\x01IW_`\x03\x196\x01\x12a\x01IW` a\x04\xCAa\rTV[`@Q\x90\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IW` `@Qb'\x8D\0\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16`@Q\x90\x81R\xF3[4a\x01IWa\x05Oa\x05;a\x0556a\t\xFFV[\x90a\x0C\xE6V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\n\x91V[\x03\x90\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IW`\x03Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80a\x05\xBBWP` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`@Q\x91\x16\x81R\xF3[` \x90a\x05\x9DV[4a\x01IW```\x03\x196\x01\x12a\x01IWa\x05\xDCa\t\xDCV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01IW`D5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01IW6`#\x83\x01\x12\x15a\x01IW\x81`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\x06\x99W`@Q\x91a\x06f` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F\x88\x01\x16\x01\x84a\nPV[\x84\x83R6`$\x86\x86\x01\x01\x11a\x01IW_` \x86\x81\x97`$a\x06\x8F\x98\x01\x83\x88\x017\x85\x01\x01Ra\x0B\xADV[`@Q\x90\x15\x15\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[4a\x01IW_`\x03\x196\x01\x12a\x01IW` `@Qch\x8DF\xF0\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IWa\x06\xFCa\x0E\xD4V[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x83U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x01IW_`\x03\x196\x01\x12a\x01IW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x03T\x16`@Q\x90\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`@Q\x90\x81R\xF3[4a\x01IW_`\x03\x196\x01\x12a\x01IWa\x07\xDEa\x0E\xD4V[`\x01T`\xFF\x81`\xA0\x1C\x16a\x08*W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16t\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x17`\x01U\0[\x7F\xCD`\xC3\xCA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x01IWa\x04\xAEa\x08c6a\t\xFFV[\x90a\n\xD4V[4a\x01IW` `\x03\x196\x01\x12a\x01IW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0a\x08\xA3a\t\xDCV[a\x08\xABa\x0E\xD4V[`\x03Ts\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x16\x92\x16\x92\x83\x91\x16\x17`\x03U\x81\x15\x15_\x14a\x08\xFFW\x7F\x16\xAE1yaZ(\x15X;ef\xEA\xE6\xF7\x83\xB2T\x19E,\0Y\x9A\xEE\xB0\x10\x88\xF1>\xCA\x1A_\x80\xA3\0[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x16\x90\x7F\x16\xAE1yaZ(\x15X;ef\xEA\xE6\xF7\x83\xB2T\x19E,\0Y\x9A\xEE\xB0\x10\x88\xF1>\xCA\x1A_\x80\xA3\0[4a\x01IW` `\x03\x196\x01\x12a\x01IW`\x045\x80\x15a\t\xB4W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x01\x90\x81\x11a\x03\x9DWb'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x03\x9DWch\x8DF\xF0\x01\x90\x81ch\x8DF\xF0\x11a\x03\x9DW` \x91\x81R\xF3[\x7F\xD6\x93h\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x01IWV[\x90` `\x03\x19\x83\x01\x12a\x01IW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x01IW\x82`#\x82\x01\x12\x15a\x01IW\x80`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\x01IW`$\x84\x83\x01\x01\x11a\x01IW`$\x01\x91\x90V[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x06\x99W`@RV[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x90`\xFF`\x01T`\xA0\x1C\x16a\n\xFBW\x90a\n\xF1a\n\xF9\x92Z\x92a\x0B\0V[Z\x90\x03a\x0F V[V[a\n\xF9\x91[\x90\x80\x15a\x0B\x85Wa\x0B\x10\x91a\x0C\xE6V[a\x0B\x1B\x8123a\x0B\xADV[\x15a\x0B]W\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F`@Q` \x81R\x80a\x0BX3\x94` \x83\x01\x90a\n\x91V[\x03\x90\xA2V[\x7F\xDCt\x14X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x91\x90\x81Qb\x03\r@\x81\x11a\x0C\xB4WPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF`\x01T\x16`\x01\x81\x14\x92\x83\x15a\x0B\xE9W[PPP\x90P\x90V[` \x93Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94a\x0CR\x86\x92`@Q\x97\x88\x96\x87\x95\x86\x95\x7Fz9y\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R\x16`\x04\x86\x01R\x16`$\x84\x01R```D\x84\x01R`d\x83\x01\x90a\n\x91V[\x03\x91Z\xFA\x90\x81\x15a\x0C\xA9W_\x91a\x0CnW[P\x80_\x80\x80a\x0B\xE1V[\x90P` \x81=` \x11a\x0C\xA1W[\x81a\x0C\x89` \x93\x83a\nPV[\x81\x01\x03\x12a\x01IWQ\x80\x15\x15\x81\x03a\x01IW_a\x0CdV[=\x91Pa\x0C|V[`@Q=_\x82>=\x90\xFD[\x7FF4i\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04Rb\x03\r@`$R`D_\xFD[`!a\rQ\x91\x83`@Q\x94\x85\x92\x7F\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01R\x84\x84\x017\x81\x01_\x83\x82\x01R\x03\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\nPV[\x90V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x97r\xB9\x10B\x01B\x81\x11a\x03\x9DWb'\x8D\0\x90\x04`\x01\x81\x01\x80\x91\x11a\x03\x9DW\x90V[\x90`\xFF`\x01T`\xA0\x1C\x16a\r\xAFW\x90a\n\xF1a\n\xF9\x92Z\x92a\x0EEV[a\n\xF9\x91a\x0EEV[\x91\x90\x81\x10\x15a\x0E\x18W`\x05\x1B\x81\x015\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x01IW\x01\x90\x815\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x01IW` \x01\x826\x03\x81\x13a\x01IW\x91\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[\x81\x15a\x0B\x85W_[\x82\x81\x10a\x0EYWPPPV[a\x0Ed\x81\x84\x84a\r\xB8V[\x90P\x15a\x0B\x85W\x80a\x0E|a\x055`\x01\x93\x86\x86a\r\xB8V[a\x0E\x87\x8123a\x0B\xADV[a\x0E\x93W[P\x01a\x0EMV[\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F`@Q` \x81R\x80a\x0E\xCB3\x94` \x83\x01\x90a\n\x91V[\x03\x90\xA2_a\x0E\x8CV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF_T\x163\x03a\x0E\xF4WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[a\x0F(a\rTV[:\x90:\x15a\x0FEW[_R`\x02` R`@_ \x91\x02\x81T\x01\x90UV[`\x01\x91Pa\x0F1V", + b"`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[__5`\xE0\x1C\x80c\x12(\x19\x83\x14a\x11\xE8W\x80c\x17\x94\xBB<\x14a\x0E\x80W\x80c$\x07\xF0\xB6\x14a\x0EFW\x80cC\xF9z\xE5\x14a\r\xF6W\x80cF\xE2\xCC\t\x14a\x0C\xBAW\x80cO\x1E\xF2\x86\x14a\tzW\x80cR\xD1\x90-\x14a\x08\xDAW\x80c[<\xD6\xE2\x14a\x08\x87W\x80cqP\x18\xA6\x14a\x07\xC9W\x80cz9y\xDC\x14a\x07nW\x80c\x85\x07I%\x14a\x07\x1CW\x80c\x8D\xA5\xCB[\x14a\x06\xC9W\x80c\x95\xC5\xBFu\x14a\x06\x8EW\x80c\xAD<\xB1\xCC\x14a\x06)W\x80c\xB3\xC6P\x15\x14a\x05\xE2W\x80c\xCD\xAF\xB9x\x14a\x03\xE6W\x80c\xD4\xF0\xEBM\x14a\x03\x1FW\x80c\xD8x\x13B\x14a\x02\xE2W\x80c\xE4\xA3}z\x14a\x01wW\x80c\xE8\xEB\x1D\xC3\x14a\x01YW\x80c\xF2\xFD\xE3\x8B\x14a\x01,Wc\xFF\xA1\xADt\x14a\x01\x0CW_\x80\xFD[4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` `@Qb\x0FB@\x81R\xF3[\x80\xFD[P4a\x01)W` `\x03\x196\x01\x12a\x01)Wa\x01Va\x01Ia\x13QV[a\x01Qa\x18\x04V[a\x17\x17V[\x80\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` `@Qb\x03\r@\x81R\xF3[P4a\x01)W`@`\x03\x196\x01\x12a\x01)Wa\x01\x91a\x13QV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x02\xDEWa\x01\xB1\x906\x90`\x04\x01a\x13\xC8V[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x163\x03a\x02\xB6W\x81\x15a\x02\x8EW\x90a\x01\xFF\x91a\x16\xC7V[\x90a\x02\x0B\x822\x83a\x15zV[\x15a\x02fWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F\x91a\x02``@Q\x92\x83\x92` \x84R\x16\x94` \x83\x01\x90a\x14\xA8V[\x03\x90\xA2\x80\xF3[`\x04\x83\x7F\xDCt\x14X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x84\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x84\x7F\xDA\xF9\x86\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x82\x80\xFD[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` \x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0T`@Q\x90\x81R\xF3[P4a\x01)W` `\x03\x196\x01\x12a\x01)Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x03Na\x13QV[a\x03Va\x18\x04V[\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0U\x7F%5\x80\xF8\x06t\x1C\x11\xB3\xD4\xAA`\xD9\xCA\xCC[\xEF\x0C\xEB\xB3WHv\x7F\xE2?\x11\x91n/\x04\xB9\x82\x80\xA2\x80\xF3[P4a\x01)W` `\x03\x196\x01\x12a\x01)W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\xDEWa\x04\x18\x906\x90`\x04\x01a\x13\x97V[\x91\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x92`@Q\x91\x7F\x12(\x19\x83\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x84\x01R\x81`d\x84\x013`$\x86\x01R`@`D\x86\x01RR`\x84\x83\x01`\x84\x83`\x05\x1B\x85\x01\x01\x92\x82\x86\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01[\x83\x83\x10a\x05aW\x88\x80\x89\x8Ca\x04\xE4\x82\x8C\x03`\x1F\x19\x81\x01\x84R\x83a\x13\xF6V[\x80;\x15a\x05]Wa\x050\x83\x92\x91\x83\x92`@Q\x94\x85\x80\x94\x81\x93\x7F\xCFj\xCD\xAC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` `\x04\x84\x01R`$\x83\x01\x90a\x14\xA8V[\x03\x92Z\xF1\x80\x15a\x05RWa\x05AWP\xF3[\x81a\x05K\x91a\x13\xF6V[a\x01)W\x80\xF3[`@Q=\x84\x82>=\x90\xFD[PP\xFD[\x90\x91\x92\x93\x94\x95\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF|\x88\x82\x03\x01\x86R\x865\x82\x81\x12\x15a\x05\xDAW\x83\x01` \x815\x91\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\xD6W\x816\x03\x81\x13a\x05\xD6Wa\x05\xC8`\x01\x93` \x93\x84\x93a\x15ZV[\x98\x01\x96\x01\x94\x93\x01\x91\x90a\x04\xC6V[\x8A\x80\xFD[\x89\x80\xFD[P\x80\xFD[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16`@Q\x90\x81R\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)WPa\x06\x8A`@Qa\x06L`@\x82a\x13\xF6V[`\x05\x81R\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x14\xA8V[\x03\x90\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` `@Q\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0\x81R\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[P4a\x01)W` `\x03\x196\x01\x12a\x01)W`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01)Wa\x06\x8Aa\x07Za\x07T6`\x04\x86\x01a\x13\xC8V[\x90a\x16\xC7V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x14\xA8V[P4a\x01)W```\x03\x196\x01\x12a\x01)Wa\x07\x88a\x13QV[\x90a\x07\x91a\x13tV[\x90`D5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01)W` a\x07\xBF\x85\x85a\x07\xB96`\x04\x88\x01a\x14bV[\x91a\x15zV[`@Q\x90\x15\x15\x81R\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)Wa\x07\xE2a\x18\x04V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`@Q\x90\x81R\xF3[P4a\x01)W\x80`\x03\x196\x01\x12a\x01)Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x160\x03a\tRW` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[\x80\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04\x92R\xFD[P`@`\x03\x196\x01\x12a\x01)Wa\t\x8Fa\x13QV[\x90`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\xDEWa\t\xB0\x906\x90`\x04\x01a\x14bV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\x0CxW[Pa\x0CPWa\t\xFFa\x18\x04V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x90`@Q\x93\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R` \x85`\x04\x81\x86Z\xFA\x80\x95\x85\x96a\x0C\x18W[Pa\n\x81W`$\x84\x84\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R`\x04R\xFD[\x90\x91\x84\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81\x03a\x0B\xEDWP\x81;\x15a\x0B\xC2W\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;\x84\x80\xA2\x81Q\x83\x90\x15a\x0B\x8FW\x80\x83` a\x0B\x83\x95Q\x91\x01\x84Z\xF4=\x15a\x0B\x87W=\x91a\x0Bg\x83a\x14FV[\x92a\x0Bu`@Q\x94\x85a\x13\xF6V[\x83R=\x85` \x85\x01>a\x18\xC7V[P\x80\xF3[``\x91a\x18\xC7V[PPP4a\x0B\x9AW\x80\xF3[\x80\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04\x92R\xFD[\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R`\x04R`$\x83\xFD[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R`\x04R`$\x84\xFD[\x90\x95P` \x81=` \x11a\x0CHW[\x81a\x0C4` \x93\x83a\x13\xF6V[\x81\x01\x03\x12a\x0CDWQ\x94_a\nPV[\x84\x80\xFD[=\x91Pa\x0C'V[`\x04\x82\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15_a\t\xF2V[P4a\r\xF2W` `\x03\x196\x01\x12a\r\xF2W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\r\xF2Wa\x0C\xEC\x906\x90`\x04\x01a\x13\xC8V[a\r{s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x91a\rm`@Q\x94\x85\x92\x7F\xE4\xA3}z\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01R3`$\x85\x01R`@`D\x85\x01R`d\x84\x01\x91a\x15ZV[\x03`\x1F\x19\x81\x01\x84R\x83a\x13\xF6V[\x80;\x15a\r\xF2Wa\r\xC7_\x92\x91\x83\x92`@Q\x94\x85\x80\x94\x81\x93\x7F\xCFj\xCD\xAC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` `\x04\x84\x01R`$\x83\x01\x90a\x14\xA8V[\x03\x92Z\xF1\x80\x15a\r\xE7Wa\r\xD9WP\x80\xF3[a\r\xE5\x91P_\x90a\x13\xF6V[\0[`@Q=_\x82>=\x90\xFD[_\x80\xFD[4a\r\xF2W_`\x03\x196\x01\x12a\r\xF2W` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\r\xF2W_`\x03\x196\x01\x12a\r\xF2W` `@Q\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0\x81R\xF3[4a\r\xF2W```\x03\x196\x01\x12a\r\xF2Wa\x0E\x99a\x13QV[a\x0E\xA1a\x13tV[\x90`D5\x90\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x92`\xFF\x84`@\x1C\x16\x15\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x11\xE0W[`\x01\x14\x90\x81a\x11\xD6W[\x15\x90\x81a\x11\xCDW[Pa\x11\xA5W\x84`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x11PW[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15a\x11(W\x82\x15a\x10\xCAWa\x0F\x9Fs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92a\x0F\x8Fa\x18pV[a\x0F\x97a\x18pV[a\x01Qa\x18pV[\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0Ua\x10\x0Fa\x18pV[\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0Ua\x107W\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FApp chain ID cannot be 0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x84a\x0FKV[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x86a\x0E\xF8V[0;\x15\x91Pa\x0E\xF0V[\x86\x91Pa\x0E\xE6V[4a\r\xF2W`@`\x03\x196\x01\x12a\r\xF2Wa\x12\x01a\x13QV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\r\xF2Wa\x12!\x906\x90`\x04\x01a\x13\x97V[\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x163\x03a\x13)W\x82\x15a\x13\x01W_[\x83\x81\x10a\x12pW\0[a\x12{\x81\x85\x85a\x14\xCDV[\x90P\x15a\x13\x01W\x80a\x12\x93a\x07T`\x01\x93\x87\x87a\x14\xCDV[a\x12\x9E\x812\x86a\x15zV[a\x12\xAAW[P\x01a\x12gV[\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F`@Q` \x81R\x80a\x12\xF8s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x94` \x83\x01\x90a\x14\xA8V[\x03\x90\xA2\x85a\x12\xA3V[\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\xDA\xF9\x86\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\r\xF2WV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\r\xF2WV[\x91\x81`\x1F\x84\x01\x12\x15a\r\xF2W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\r\xF2W` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11a\r\xF2WV[\x91\x81`\x1F\x84\x01\x12\x15a\r\xF2W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\r\xF2W` \x83\x81\x86\x01\x95\x01\x01\x11a\r\xF2WV[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x14\x19W`@RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x14\x19W`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x81`\x1F\x82\x01\x12\x15a\r\xF2W\x805\x90a\x14y\x82a\x14FV[\x92a\x14\x87`@Q\x94\x85a\x13\xF6V[\x82\x84R` \x83\x83\x01\x01\x11a\r\xF2W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x90`\x1F\x19`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x81\x10\x15a\x15-W`\x05\x1B\x81\x015\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\r\xF2W\x01\x90\x815\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\r\xF2W` \x01\x826\x03\x81\x13a\r\xF2W\x91\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[`\x1F\x82` \x94\x93`\x1F\x19\x93\x81\x86R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x81Qb\x03\r@\x81\x11a\x16\x95WPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`\x01\x81\x14\x92\x83\x15a\x15\xD5W[PPP\x90P\x90V[` \x93Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94a\x16>\x86\x92`@Q\x97\x88\x96\x87\x95\x86\x95\x7Fz9y\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R\x16`\x04\x86\x01R\x16`$\x84\x01R```D\x84\x01R`d\x83\x01\x90a\x14\xA8V[\x03\x91Z\xFA\x90\x81\x15a\r\xE7W_\x91a\x16ZW[P\x80_\x80\x80a\x15\xCDV[\x90P` \x81=` \x11a\x16\x8DW[\x81a\x16u` \x93\x83a\x13\xF6V[\x81\x01\x03\x12a\r\xF2WQ\x80\x15\x15\x81\x03a\r\xF2W_a\x16PV[=\x91Pa\x16hV[\x7FF4i\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04Rb\x03\r@`$R`D_\xFD[`!a\x17\x14\x91\x83`@Q\x94\x85\x92\x7F\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01R\x84\x84\x017\x81\x01_\x83\x82\x01R\x03\x01`\x1F\x19\x81\x01\x83R\x82a\x13\xF6V[\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a\x17\xD8Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a\x18DWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a\x18\x9FWV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90a\x19\x04WP\x80Q\x15a\x18\xDCW\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a\x19WW[a\x19\x15WP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a\x19\rV", ); #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `DataTooLarge(uint256,uint256)` and selector `0x4634691b`. + /**Custom error with signature `AddressEmptyCode(address)` and selector `0x9996b315`. ```solidity -error DataTooLarge(uint256 dataLength, uint256 maxDataLength); +error AddressEmptyCode(address target); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct DataTooLarge { + pub struct AddressEmptyCode { #[allow(missing_docs)] - pub dataLength: alloy::sol_types::private::primitives::aliases::U256, - #[allow(missing_docs)] - pub maxDataLength: alloy::sol_types::private::primitives::aliases::U256, + pub target: alloy::sol_types::private::Address, } #[allow( non_camel_case_types, @@ -588,15 +639,9 @@ error DataTooLarge(uint256 dataLength, uint256 maxDataLength); const _: () = { use alloy::sol_types as alloy_sol_types; #[doc(hidden)] - type UnderlyingSolTuple<'a> = ( - alloy::sol_types::sol_data::Uint<256>, - alloy::sol_types::sol_data::Uint<256>, - ); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - alloy::sol_types::private::primitives::aliases::U256, - ); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -610,29 +655,26 @@ error DataTooLarge(uint256 dataLength, uint256 maxDataLength); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: DataTooLarge) -> Self { - (value.dataLength, value.maxDataLength) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: AddressEmptyCode) -> Self { + (value.target,) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for DataTooLarge { + impl ::core::convert::From> for AddressEmptyCode { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - dataLength: tuple.0, - maxDataLength: tuple.1, - } + Self { target: tuple.0 } } } #[automatically_derived] - impl alloy_sol_types::SolError for DataTooLarge { + impl alloy_sol_types::SolError for AddressEmptyCode { type Parameters<'a> = UnderlyingSolTuple<'a>; type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "DataTooLarge(uint256,uint256)"; - const SELECTOR: [u8; 4] = [70u8, 52u8, 105u8, 27u8]; + const SIGNATURE: &'static str = "AddressEmptyCode(address)"; + const SELECTOR: [u8; 4] = [153u8, 150u8, 179u8, 21u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -642,12 +684,9 @@ error DataTooLarge(uint256 dataLength, uint256 maxDataLength); #[inline] fn tokenize(&self) -> Self::Token<'_> { ( - as alloy_sol_types::SolType>::tokenize(&self.dataLength), - as alloy_sol_types::SolType>::tokenize(&self.maxDataLength), + ::tokenize( + &self.target, + ), ) } #[inline] @@ -661,15 +700,191 @@ error DataTooLarge(uint256 dataLength, uint256 maxDataLength); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `GasTrackingAlreadyDisabled()` and selector `0xcd60c3ca`. + /**Custom error with signature `DataTooLarge(uint256,uint256)` and selector `0x4634691b`. ```solidity -error GasTrackingAlreadyDisabled(); +error DataTooLarge(uint256 dataLength, uint256 maxDataLength); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct GasTrackingAlreadyDisabled; - #[allow( - non_camel_case_types, + pub struct DataTooLarge { + #[allow(missing_docs)] + pub dataLength: alloy::sol_types::private::primitives::aliases::U256, + #[allow(missing_docs)] + pub maxDataLength: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Uint<256>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: DataTooLarge) -> Self { + (value.dataLength, value.maxDataLength) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for DataTooLarge { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + dataLength: tuple.0, + maxDataLength: tuple.1, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for DataTooLarge { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "DataTooLarge(uint256,uint256)"; + const SELECTOR: [u8; 4] = [70u8, 52u8, 105u8, 27u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.dataLength), + as alloy_sol_types::SolType>::tokenize(&self.maxDataLength), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ERC1967InvalidImplementation(address)` and selector `0x4c9c8ce3`. +```solidity +error ERC1967InvalidImplementation(address implementation); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ERC1967InvalidImplementation { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: ERC1967InvalidImplementation) -> Self { + (value.implementation,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for ERC1967InvalidImplementation { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { implementation: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ERC1967InvalidImplementation { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ERC1967InvalidImplementation(address)"; + const SELECTOR: [u8; 4] = [76u8, 156u8, 140u8, 227u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.implementation, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ERC1967NonPayable()` and selector `0xb398979f`. +```solidity +error ERC1967NonPayable(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ERC1967NonPayable; + #[allow( + non_camel_case_types, non_snake_case, clippy::pub_underscore_fields, clippy::style @@ -693,28 +908,26 @@ error GasTrackingAlreadyDisabled(); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: GasTrackingAlreadyDisabled) -> Self { + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ERC1967NonPayable) -> Self { () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for GasTrackingAlreadyDisabled { + impl ::core::convert::From> for ERC1967NonPayable { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self } } #[automatically_derived] - impl alloy_sol_types::SolError for GasTrackingAlreadyDisabled { + impl alloy_sol_types::SolError for ERC1967NonPayable { type Parameters<'a> = UnderlyingSolTuple<'a>; type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "GasTrackingAlreadyDisabled()"; - const SELECTOR: [u8; 4] = [205u8, 96u8, 195u8, 202u8]; + const SIGNATURE: &'static str = "ERC1967NonPayable()"; + const SELECTOR: [u8; 4] = [179u8, 152u8, 151u8, 159u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -736,13 +949,13 @@ error GasTrackingAlreadyDisabled(); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `GasTrackingAlreadyEnabled()` and selector `0x7679400d`. + /**Custom error with signature `FailedCall()` and selector `0xd6bda275`. ```solidity -error GasTrackingAlreadyEnabled(); +error FailedCall(); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct GasTrackingAlreadyEnabled; + pub struct FailedCall; #[allow( non_camel_case_types, non_snake_case, @@ -768,28 +981,99 @@ error GasTrackingAlreadyEnabled(); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: GasTrackingAlreadyEnabled) -> Self { + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: FailedCall) -> Self { () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for GasTrackingAlreadyEnabled { + impl ::core::convert::From> for FailedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for FailedCall { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "FailedCall()"; + const SELECTOR: [u8; 4] = [214u8, 189u8, 162u8, 117u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `InvalidInitialization()` and selector `0xf92ee8a9`. +```solidity +error InvalidInitialization(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct InvalidInitialization; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: InvalidInitialization) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for InvalidInitialization { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self } } #[automatically_derived] - impl alloy_sol_types::SolError for GasTrackingAlreadyEnabled { + impl alloy_sol_types::SolError for InvalidInitialization { type Parameters<'a> = UnderlyingSolTuple<'a>; type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "GasTrackingAlreadyEnabled()"; - const SELECTOR: [u8; 4] = [118u8, 121u8, 64u8, 13u8]; + const SIGNATURE: &'static str = "InvalidInitialization()"; + const SELECTOR: [u8; 4] = [249u8, 46u8, 232u8, 169u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -884,6 +1168,152 @@ error NoTxData(); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `NotGasMeterContract()` and selector `0xdaf9861c`. +```solidity +error NotGasMeterContract(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct NotGasMeterContract; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: NotGasMeterContract) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for NotGasMeterContract { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for NotGasMeterContract { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "NotGasMeterContract()"; + const SELECTOR: [u8; 4] = [218u8, 249u8, 134u8, 28u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `NotInitializing()` and selector `0xd7e6bcf8`. +```solidity +error NotInitializing(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct NotInitializing; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: NotInitializing) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for NotInitializing { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for NotInitializing { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "NotInitializing()"; + const SELECTOR: [u8; 4] = [215u8, 230u8, 188u8, 248u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] /**Custom error with signature `OwnableInvalidOwner(address)` and selector `0x1e4fbdf7`. ```solidity error OwnableInvalidOwner(address owner); @@ -964,16 +1394,170 @@ error OwnableInvalidOwner(address owner); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `OwnableUnauthorizedAccount(address)` and selector `0x118cdaa7`. + /**Custom error with signature `OwnableUnauthorizedAccount(address)` and selector `0x118cdaa7`. +```solidity +error OwnableUnauthorizedAccount(address account); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct OwnableUnauthorizedAccount { + #[allow(missing_docs)] + pub account: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: OwnableUnauthorizedAccount) -> Self { + (value.account,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for OwnableUnauthorizedAccount { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { account: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for OwnableUnauthorizedAccount { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "OwnableUnauthorizedAccount(address)"; + const SELECTOR: [u8; 4] = [17u8, 140u8, 218u8, 167u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.account, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `TransactionOrSenderNotAllowed()` and selector `0xdc741458`. +```solidity +error TransactionOrSenderNotAllowed(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct TransactionOrSenderNotAllowed; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: TransactionOrSenderNotAllowed) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for TransactionOrSenderNotAllowed { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for TransactionOrSenderNotAllowed { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "TransactionOrSenderNotAllowed()"; + const SELECTOR: [u8; 4] = [220u8, 116u8, 20u8, 88u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `UUPSUnauthorizedCallContext()` and selector `0xe07c8dba`. ```solidity -error OwnableUnauthorizedAccount(address account); +error UUPSUnauthorizedCallContext(); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct OwnableUnauthorizedAccount { - #[allow(missing_docs)] - pub account: alloy::sol_types::private::Address, - } + pub struct UUPSUnauthorizedCallContext; #[allow( non_camel_case_types, non_snake_case, @@ -983,9 +1567,9 @@ error OwnableUnauthorizedAccount(address account); const _: () = { use alloy::sol_types as alloy_sol_types; #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -999,28 +1583,28 @@ error OwnableUnauthorizedAccount(address account); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: OwnableUnauthorizedAccount) -> Self { - (value.account,) + fn from(value: UUPSUnauthorizedCallContext) -> Self { + () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for OwnableUnauthorizedAccount { + for UUPSUnauthorizedCallContext { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { account: tuple.0 } + Self } } #[automatically_derived] - impl alloy_sol_types::SolError for OwnableUnauthorizedAccount { + impl alloy_sol_types::SolError for UUPSUnauthorizedCallContext { type Parameters<'a> = UnderlyingSolTuple<'a>; type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "OwnableUnauthorizedAccount(address)"; - const SELECTOR: [u8; 4] = [17u8, 140u8, 218u8, 167u8]; + const SIGNATURE: &'static str = "UUPSUnauthorizedCallContext()"; + const SELECTOR: [u8; 4] = [224u8, 124u8, 141u8, 186u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -1029,11 +1613,7 @@ error OwnableUnauthorizedAccount(address account); } #[inline] fn tokenize(&self) -> Self::Token<'_> { - ( - ::tokenize( - &self.account, - ), - ) + () } #[inline] fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { @@ -1046,13 +1626,16 @@ error OwnableUnauthorizedAccount(address account); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `TransactionOrSenderNotAllowed()` and selector `0xdc741458`. + /**Custom error with signature `UUPSUnsupportedProxiableUUID(bytes32)` and selector `0xaa1d49a4`. ```solidity -error TransactionOrSenderNotAllowed(); +error UUPSUnsupportedProxiableUUID(bytes32 slot); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct TransactionOrSenderNotAllowed; + pub struct UUPSUnsupportedProxiableUUID { + #[allow(missing_docs)] + pub slot: alloy::sol_types::private::FixedBytes<32>, + } #[allow( non_camel_case_types, non_snake_case, @@ -1062,9 +1645,9 @@ error TransactionOrSenderNotAllowed(); const _: () = { use alloy::sol_types as alloy_sol_types; #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -1078,28 +1661,28 @@ error TransactionOrSenderNotAllowed(); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: TransactionOrSenderNotAllowed) -> Self { - () + fn from(value: UUPSUnsupportedProxiableUUID) -> Self { + (value.slot,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for TransactionOrSenderNotAllowed { + for UUPSUnsupportedProxiableUUID { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self + Self { slot: tuple.0 } } } #[automatically_derived] - impl alloy_sol_types::SolError for TransactionOrSenderNotAllowed { + impl alloy_sol_types::SolError for UUPSUnsupportedProxiableUUID { type Parameters<'a> = UnderlyingSolTuple<'a>; type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "TransactionOrSenderNotAllowed()"; - const SELECTOR: [u8; 4] = [220u8, 116u8, 20u8, 88u8]; + const SIGNATURE: &'static str = "UUPSUnsupportedProxiableUUID(bytes32)"; + const SELECTOR: [u8; 4] = [170u8, 29u8, 73u8, 164u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -1108,7 +1691,11 @@ error TransactionOrSenderNotAllowed(); } #[inline] fn tokenize(&self) -> Self::Token<'_> { - () + ( + as alloy_sol_types::SolType>::tokenize(&self.slot), + ) } #[inline] fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { @@ -1121,13 +1708,13 @@ error TransactionOrSenderNotAllowed(); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Custom error with signature `ZeroEpochIndex()` and selector `0xd69368d4`. + /**Custom error with signature `ZeroAddress()` and selector `0xd92e233d`. ```solidity -error ZeroEpochIndex(); +error ZeroAddress(); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct ZeroEpochIndex; + pub struct ZeroAddress; #[allow( non_camel_case_types, non_snake_case, @@ -1153,26 +1740,26 @@ error ZeroEpochIndex(); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: ZeroEpochIndex) -> Self { + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ZeroAddress) -> Self { () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for ZeroEpochIndex { + impl ::core::convert::From> for ZeroAddress { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self } } #[automatically_derived] - impl alloy_sol_types::SolError for ZeroEpochIndex { + impl alloy_sol_types::SolError for ZeroAddress { type Parameters<'a> = UnderlyingSolTuple<'a>; type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "ZeroEpochIndex()"; - const SELECTOR: [u8; 4] = [214u8, 147u8, 104u8, 212u8]; + const SIGNATURE: &'static str = "ZeroAddress()"; + const SELECTOR: [u8; 4] = [217u8, 46u8, 35u8, 61u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -1194,9 +1781,9 @@ error ZeroEpochIndex(); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Event with signature `EmissionsReceiverUpdated(address,address)` and selector `0x16ae3179615a2815583b6566eae6f783b25419452c00599aeeb01088f13eca1a`. + /**Event with signature `Initialized(uint64)` and selector `0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2`. ```solidity -event EmissionsReceiverUpdated(address indexed oldReceiver, address indexed newReceiver); +event Initialized(uint64 version); ```*/ #[allow( non_camel_case_types, @@ -1205,11 +1792,9 @@ event EmissionsReceiverUpdated(address indexed oldReceiver, address indexed newR clippy::style )] #[derive(Clone)] - pub struct EmissionsReceiverUpdated { - #[allow(missing_docs)] - pub oldReceiver: alloy::sol_types::private::Address, + pub struct Initialized { #[allow(missing_docs)] - pub newReceiver: alloy::sol_types::private::Address, + pub version: u64, } #[allow( non_camel_case_types, @@ -1220,21 +1805,17 @@ event EmissionsReceiverUpdated(address indexed oldReceiver, address indexed newR const _: () = { use alloy::sol_types as alloy_sol_types; #[automatically_derived] - impl alloy_sol_types::SolEvent for EmissionsReceiverUpdated { - type DataTuple<'a> = (); + impl alloy_sol_types::SolEvent for Initialized { + type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<64>,); type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - type TopicList = ( - alloy_sol_types::sol_data::FixedBytes<32>, - alloy::sol_types::sol_data::Address, - alloy::sol_types::sol_data::Address, - ); - const SIGNATURE: &'static str = "EmissionsReceiverUpdated(address,address)"; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "Initialized(uint64)"; const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ - 22u8, 174u8, 49u8, 121u8, 97u8, 90u8, 40u8, 21u8, 88u8, 59u8, 101u8, - 102u8, 234u8, 230u8, 247u8, 131u8, 178u8, 84u8, 25u8, 69u8, 44u8, 0u8, - 89u8, 154u8, 238u8, 176u8, 16u8, 136u8, 241u8, 62u8, 202u8, 26u8, + 199u8, 245u8, 5u8, 178u8, 243u8, 113u8, 174u8, 33u8, 117u8, 238u8, 73u8, + 19u8, 244u8, 73u8, 158u8, 31u8, 38u8, 51u8, 167u8, 181u8, 147u8, 99u8, + 33u8, 238u8, 209u8, 205u8, 174u8, 182u8, 17u8, 81u8, 129u8, 210u8, ]); const ANONYMOUS: bool = false; #[allow(unused_variables)] @@ -1243,10 +1824,7 @@ event EmissionsReceiverUpdated(address indexed oldReceiver, address indexed newR topics: ::RustType, data: as alloy_sol_types::SolType>::RustType, ) -> Self { - Self { - oldReceiver: topics.1, - newReceiver: topics.2, - } + Self { version: data.0 } } #[inline] fn check_signature( @@ -1265,15 +1843,15 @@ event EmissionsReceiverUpdated(address indexed oldReceiver, address indexed newR } #[inline] fn tokenize_body(&self) -> Self::DataToken<'_> { - () + ( + as alloy_sol_types::SolType>::tokenize(&self.version), + ) } #[inline] fn topics(&self) -> ::RustType { - ( - Self::SIGNATURE_HASH.into(), - self.oldReceiver.clone(), - self.newReceiver.clone(), - ) + (Self::SIGNATURE_HASH.into(),) } #[inline] fn encode_topics_raw( @@ -1286,17 +1864,11 @@ event EmissionsReceiverUpdated(address indexed oldReceiver, address indexed newR out[0usize] = alloy_sol_types::abi::token::WordToken( Self::SIGNATURE_HASH, ); - out[1usize] = ::encode_topic( - &self.oldReceiver, - ); - out[2usize] = ::encode_topic( - &self.newReceiver, - ); Ok(()) } } #[automatically_derived] - impl alloy_sol_types::private::IntoLogData for EmissionsReceiverUpdated { + impl alloy_sol_types::private::IntoLogData for Initialized { fn to_log_data(&self) -> alloy_sol_types::private::LogData { From::from(self) } @@ -1305,11 +1877,9 @@ event EmissionsReceiverUpdated(address indexed oldReceiver, address indexed newR } } #[automatically_derived] - impl From<&EmissionsReceiverUpdated> for alloy_sol_types::private::LogData { + impl From<&Initialized> for alloy_sol_types::private::LogData { #[inline] - fn from( - this: &EmissionsReceiverUpdated, - ) -> alloy_sol_types::private::LogData { + fn from(this: &Initialized) -> alloy_sol_types::private::LogData { alloy_sol_types::SolEvent::encode_log_data(this) } } @@ -1645,251 +2215,36 @@ event TransactionProcessed(address indexed sender, bytes data); #[automatically_derived] impl alloy_sol_types::private::IntoLogData for TransactionProcessed { fn to_log_data(&self) -> alloy_sol_types::private::LogData { - From::from(self) - } - fn into_log_data(self) -> alloy_sol_types::private::LogData { - From::from(&self) - } - } - #[automatically_derived] - impl From<&TransactionProcessed> for alloy_sol_types::private::LogData { - #[inline] - fn from(this: &TransactionProcessed) -> alloy_sol_types::private::LogData { - alloy_sol_types::SolEvent::encode_log_data(this) - } - } - }; - /**Constructor`. -```solidity -constructor(uint256 _appchainId); -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct constructorCall { - #[allow(missing_docs)] - pub _appchainId: alloy::sol_types::private::primitives::aliases::U256, - } - const _: () = { - use alloy::sol_types as alloy_sol_types; - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: constructorCall) -> Self { - (value._appchainId,) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for constructorCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _appchainId: tuple.0 } - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolConstructor for constructorCall { - type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self._appchainId), - ) - } - } - }; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `EPOCH_DURATION()` and selector `0xa70b9f0c`. -```solidity -function EPOCH_DURATION() external view returns (uint256); -```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct EPOCH_DURATIONCall; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`EPOCH_DURATION()`](EPOCH_DURATIONCall) function. - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct EPOCH_DURATIONReturn { - #[allow(missing_docs)] - pub _0: alloy::sol_types::private::primitives::aliases::U256, - } - #[allow( - non_camel_case_types, - non_snake_case, - clippy::pub_underscore_fields, - clippy::style - )] - const _: () = { - use alloy::sol_types as alloy_sol_types; - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: EPOCH_DURATIONCall) -> Self { - () - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for EPOCH_DURATIONCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self - } - } - } - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: EPOCH_DURATIONReturn) -> Self { - (value._0,) - } - } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> - for EPOCH_DURATIONReturn { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } - } - } - } - #[automatically_derived] - impl alloy_sol_types::SolCall for EPOCH_DURATIONCall { - type Parameters<'a> = (); - type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::primitives::aliases::U256; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); - type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "EPOCH_DURATION()"; - const SELECTOR: [u8; 4] = [167u8, 11u8, 159u8, 12u8]; - #[inline] - fn new<'a>( - tuple: as alloy_sol_types::SolType>::RustType, - ) -> Self { - tuple.into() - } - #[inline] - fn tokenize(&self) -> Self::Token<'_> { - () - } - #[inline] - fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - ( - as alloy_sol_types::SolType>::tokenize(ret), - ) + From::from(self) } - #[inline] - fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(|r| { - let r: EPOCH_DURATIONReturn = r.into(); - r._0 - }) + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) } + } + #[automatically_derived] + impl From<&TransactionProcessed> for alloy_sol_types::private::LogData { #[inline] - fn abi_decode_returns_validate( - data: &[u8], - ) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(|r| { - let r: EPOCH_DURATIONReturn = r.into(); - r._0 - }) + fn from(this: &TransactionProcessed) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) } } }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `START_TIMESTAMP()` and selector `0x781cd99d`. + /**Event with signature `Upgraded(address)` and selector `0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b`. ```solidity -function START_TIMESTAMP() external view returns (uint256); +event Upgraded(address indexed implementation); ```*/ - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct START_TIMESTAMPCall; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`START_TIMESTAMP()`](START_TIMESTAMPCall) function. - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] #[derive(Clone)] - pub struct START_TIMESTAMPReturn { + pub struct Upgraded { #[allow(missing_docs)] - pub _0: alloy::sol_types::private::primitives::aliases::U256, + pub implementation: alloy::sol_types::private::Address, } #[allow( non_camel_case_types, @@ -1899,44 +2254,105 @@ function START_TIMESTAMP() external view returns (uint256); )] const _: () = { use alloy::sol_types as alloy_sol_types; - { - #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); - #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); - #[cfg(test)] - #[allow(dead_code, unreachable_patterns)] - fn _type_assertion( - _t: alloy_sol_types::private::AssertTypeEq, - ) { - match _t { - alloy_sol_types::private::AssertTypeEq::< - ::RustType, - >(_) => {} - } + #[automatically_derived] + impl alloy_sol_types::SolEvent for Upgraded { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "Upgraded(address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8, + 179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8, + 12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { implementation: topics.1 } } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: START_TIMESTAMPCall) -> Self { - () + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); } + Ok(()) } - #[automatically_derived] - #[doc(hidden)] - impl ::core::convert::From> for START_TIMESTAMPCall { - fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.implementation.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.implementation, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Upgraded { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Upgraded> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Upgraded) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) } } + }; + /**Constructor`. +```solidity +constructor(address _gasMeter); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct constructorCall { + #[allow(missing_docs)] + pub _gasMeter: alloy::sol_types::private::Address, + } + const _: () = { + use alloy::sol_types as alloy_sol_types; { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -1950,34 +2366,25 @@ function START_TIMESTAMP() external view returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: START_TIMESTAMPReturn) -> Self { - (value._0,) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: constructorCall) -> Self { + (value._gasMeter,) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for START_TIMESTAMPReturn { + impl ::core::convert::From> for constructorCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } + Self { _gasMeter: tuple.0 } } } } #[automatically_derived] - impl alloy_sol_types::SolCall for START_TIMESTAMPCall { - type Parameters<'a> = (); + impl alloy_sol_types::SolConstructor for constructorCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::primitives::aliases::U256; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); - type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "START_TIMESTAMP()"; - const SELECTOR: [u8; 4] = [120u8, 28u8, 217u8, 157u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -1986,57 +2393,31 @@ function START_TIMESTAMP() external view returns (uint256); } #[inline] fn tokenize(&self) -> Self::Token<'_> { - () - } - #[inline] - fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { ( - as alloy_sol_types::SolType>::tokenize(ret), + ::tokenize( + &self._gasMeter, + ), ) } - #[inline] - fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(|r| { - let r: START_TIMESTAMPReturn = r.into(); - r._0 - }) - } - #[inline] - fn abi_decode_returns_validate( - data: &[u8], - ) -> alloy_sol_types::Result { - as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(|r| { - let r: START_TIMESTAMPReturn = r.into(); - r._0 - }) - } } }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `appchainId()` and selector `0xd8781342`. + /**Function with signature `SEQUENCING_MODULE_STORAGE_LOCATION()` and selector `0x2407f0b6`. ```solidity -function appchainId() external view returns (uint256); +function SEQUENCING_MODULE_STORAGE_LOCATION() external view returns (bytes32); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct appchainIdCall; + pub struct SEQUENCING_MODULE_STORAGE_LOCATIONCall; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`appchainId()`](appchainIdCall) function. + ///Container type for the return parameters of the [`SEQUENCING_MODULE_STORAGE_LOCATION()`](SEQUENCING_MODULE_STORAGE_LOCATIONCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct appchainIdReturn { + pub struct SEQUENCING_MODULE_STORAGE_LOCATIONReturn { #[allow(missing_docs)] - pub _0: alloy::sol_types::private::primitives::aliases::U256, + pub _0: alloy::sol_types::private::FixedBytes<32>, } #[allow( non_camel_case_types, @@ -2064,14 +2445,16 @@ function appchainId() external view returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: appchainIdCall) -> Self { + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: SEQUENCING_MODULE_STORAGE_LOCATIONCall) -> Self { () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for appchainIdCall { + impl ::core::convert::From> + for SEQUENCING_MODULE_STORAGE_LOCATIONCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self } @@ -2079,11 +2462,9 @@ function appchainId() external view returns (uint256); } { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -2097,32 +2478,34 @@ function appchainId() external view returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: appchainIdReturn) -> Self { + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: SEQUENCING_MODULE_STORAGE_LOCATIONReturn) -> Self { (value._0,) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for appchainIdReturn { + impl ::core::convert::From> + for SEQUENCING_MODULE_STORAGE_LOCATIONReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { _0: tuple.0 } } } } #[automatically_derived] - impl alloy_sol_types::SolCall for appchainIdCall { + impl alloy_sol_types::SolCall for SEQUENCING_MODULE_STORAGE_LOCATIONCall { type Parameters<'a> = (); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::primitives::aliases::U256; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "appchainId()"; - const SELECTOR: [u8; 4] = [216u8, 120u8, 19u8, 66u8]; + const SIGNATURE: &'static str = "SEQUENCING_MODULE_STORAGE_LOCATION()"; + const SELECTOR: [u8; 4] = [36u8, 7u8, 240u8, 182u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -2136,8 +2519,8 @@ function appchainId() external view returns (uint256); #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { ( - as alloy_sol_types::SolType>::tokenize(ret), ) } @@ -2147,7 +2530,7 @@ function appchainId() external view returns (uint256); '_, > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { - let r: appchainIdReturn = r.into(); + let r: SEQUENCING_MODULE_STORAGE_LOCATIONReturn = r.into(); r._0 }) } @@ -2159,7 +2542,7 @@ function appchainId() external view returns (uint256); '_, > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { - let r: appchainIdReturn = r.into(); + let r: SEQUENCING_MODULE_STORAGE_LOCATIONReturn = r.into(); r._0 }) } @@ -2167,17 +2550,22 @@ function appchainId() external view returns (uint256); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `disableGasTracking()` and selector `0x5467cb48`. + /**Function with signature `SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION()` and selector `0x95c5bf75`. ```solidity -function disableGasTracking() external; +function SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION() external view returns (bytes32); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct disableGasTrackingCall; - ///Container type for the return parameters of the [`disableGasTracking()`](disableGasTrackingCall) function. + pub struct SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION()`](SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct disableGasTrackingReturn {} + pub struct SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } #[allow( non_camel_case_types, non_snake_case, @@ -2204,16 +2592,16 @@ function disableGasTracking() external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: disableGasTrackingCall) -> Self { + fn from(value: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall) -> Self { () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for disableGasTrackingCall { + for SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self } @@ -2221,9 +2609,9 @@ function disableGasTracking() external; } { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -2237,41 +2625,37 @@ function disableGasTracking() external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: disableGasTrackingReturn) -> Self { - () + fn from( + value: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn, + ) -> Self { + (value._0,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for disableGasTrackingReturn { + for SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self {} + Self { _0: tuple.0 } } } } - impl disableGasTrackingReturn { - fn _tokenize( - &self, - ) -> ::ReturnToken<'_> { - () - } - } #[automatically_derived] - impl alloy_sol_types::SolCall for disableGasTrackingCall { + impl alloy_sol_types::SolCall + for SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall { type Parameters<'a> = (); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = disableGasTrackingReturn; - type ReturnTuple<'a> = (); + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "disableGasTracking()"; - const SELECTOR: [u8; 4] = [84u8, 103u8, 203u8, 72u8]; + const SIGNATURE: &'static str = "SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION()"; + const SELECTOR: [u8; 4] = [149u8, 197u8, 191u8, 117u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -2284,14 +2668,22 @@ function disableGasTracking() external; } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - disableGasTrackingReturn::_tokenize(ret) + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(Into::into) + .map(|r| { + let r: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn = r + .into(); + r._0 + }) } #[inline] fn abi_decode_returns_validate( @@ -2300,27 +2692,31 @@ function disableGasTracking() external; as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(Into::into) + .map(|r| { + let r: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn = r + .into(); + r._0 + }) } } }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `emissionsReceiver()` and selector `0x5e7a7bdf`. + /**Function with signature `UPGRADE_INTERFACE_VERSION()` and selector `0xad3cb1cc`. ```solidity -function emissionsReceiver() external view returns (address); +function UPGRADE_INTERFACE_VERSION() external view returns (string memory); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct emissionsReceiverCall; + pub struct UPGRADE_INTERFACE_VERSIONCall; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`emissionsReceiver()`](emissionsReceiverCall) function. + ///Container type for the return parameters of the [`UPGRADE_INTERFACE_VERSION()`](UPGRADE_INTERFACE_VERSIONCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct emissionsReceiverReturn { + pub struct UPGRADE_INTERFACE_VERSIONReturn { #[allow(missing_docs)] - pub _0: alloy::sol_types::private::Address, + pub _0: alloy::sol_types::private::String, } #[allow( non_camel_case_types, @@ -2348,16 +2744,16 @@ function emissionsReceiver() external view returns (address); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: emissionsReceiverCall) -> Self { + fn from(value: UPGRADE_INTERFACE_VERSIONCall) -> Self { () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for emissionsReceiverCall { + for UPGRADE_INTERFACE_VERSIONCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self } @@ -2365,9 +2761,9 @@ function emissionsReceiver() external view returns (address); } { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -2381,34 +2777,34 @@ function emissionsReceiver() external view returns (address); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: emissionsReceiverReturn) -> Self { + fn from(value: UPGRADE_INTERFACE_VERSIONReturn) -> Self { (value._0,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for emissionsReceiverReturn { + for UPGRADE_INTERFACE_VERSIONReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { _0: tuple.0 } } } } #[automatically_derived] - impl alloy_sol_types::SolCall for emissionsReceiverCall { + impl alloy_sol_types::SolCall for UPGRADE_INTERFACE_VERSIONCall { type Parameters<'a> = (); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::Address; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,); + type Return = alloy::sol_types::private::String; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "emissionsReceiver()"; - const SELECTOR: [u8; 4] = [94u8, 122u8, 123u8, 223u8]; + const SIGNATURE: &'static str = "UPGRADE_INTERFACE_VERSION()"; + const SELECTOR: [u8; 4] = [173u8, 60u8, 177u8, 204u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -2422,7 +2818,7 @@ function emissionsReceiver() external view returns (address); #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { ( - ::tokenize( + ::tokenize( ret, ), ) @@ -2433,7 +2829,7 @@ function emissionsReceiver() external view returns (address); '_, > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { - let r: emissionsReceiverReturn = r.into(); + let r: UPGRADE_INTERFACE_VERSIONReturn = r.into(); r._0 }) } @@ -2445,7 +2841,7 @@ function emissionsReceiver() external view returns (address); '_, > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { - let r: emissionsReceiverReturn = r.into(); + let r: UPGRADE_INTERFACE_VERSIONReturn = r.into(); r._0 }) } @@ -2453,17 +2849,22 @@ function emissionsReceiver() external view returns (address); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `enableGasTracking()` and selector `0xde1f453e`. + /**Function with signature `VERSION()` and selector `0xffa1ad74`. ```solidity -function enableGasTracking() external; +function VERSION() external view returns (uint256); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct enableGasTrackingCall; - ///Container type for the return parameters of the [`enableGasTracking()`](enableGasTrackingCall) function. + pub struct VERSIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`VERSION()`](VERSIONCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct enableGasTrackingReturn {} + pub struct VERSIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } #[allow( non_camel_case_types, non_snake_case, @@ -2490,16 +2891,14 @@ function enableGasTracking() external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: enableGasTrackingCall) -> Self { + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: VERSIONCall) -> Self { () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for enableGasTrackingCall { + impl ::core::convert::From> for VERSIONCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self } @@ -2507,9 +2906,11 @@ function enableGasTracking() external; } { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -2523,41 +2924,32 @@ function enableGasTracking() external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: enableGasTrackingReturn) -> Self { - () + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: VERSIONReturn) -> Self { + (value._0,) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for enableGasTrackingReturn { + impl ::core::convert::From> for VERSIONReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self {} + Self { _0: tuple.0 } } } } - impl enableGasTrackingReturn { - fn _tokenize( - &self, - ) -> ::ReturnToken<'_> { - () - } - } #[automatically_derived] - impl alloy_sol_types::SolCall for enableGasTrackingCall { + impl alloy_sol_types::SolCall for VERSIONCall { type Parameters<'a> = (); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = enableGasTrackingReturn; - type ReturnTuple<'a> = (); + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "enableGasTracking()"; - const SELECTOR: [u8; 4] = [222u8, 31u8, 69u8, 62u8]; + const SIGNATURE: &'static str = "VERSION()"; + const SELECTOR: [u8; 4] = [255u8, 161u8, 173u8, 116u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -2570,14 +2962,21 @@ function enableGasTracking() external; } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - enableGasTrackingReturn::_tokenize(ret) + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(Into::into) + .map(|r| { + let r: VERSIONReturn = r.into(); + r._0 + }) } #[inline] fn abi_decode_returns_validate( @@ -2586,31 +2985,31 @@ function enableGasTracking() external; as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(Into::into) + .map(|r| { + let r: VERSIONReturn = r.into(); + r._0 + }) } } }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `encodeTransaction(bytes)` and selector `0x85074925`. + /**Function with signature `_processTransaction(address,bytes)` and selector `0xe4a37d7a`. ```solidity -function encodeTransaction(bytes memory data) external pure returns (bytes memory); +function _processTransaction(address sequencer, bytes memory data) external; ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct encodeTransactionCall { + pub struct _processTransactionCall { + #[allow(missing_docs)] + pub sequencer: alloy::sol_types::private::Address, #[allow(missing_docs)] pub data: alloy::sol_types::private::Bytes, } - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`encodeTransaction(bytes)`](encodeTransactionCall) function. + ///Container type for the return parameters of the [`_processTransaction(address,bytes)`](_processTransactionCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct encodeTransactionReturn { - #[allow(missing_docs)] - pub _0: alloy::sol_types::private::Bytes, - } + pub struct _processTransactionReturn {} #[allow( non_camel_case_types, non_snake_case, @@ -2621,9 +3020,15 @@ function encodeTransaction(bytes memory data) external pure returns (bytes memor use alloy::sol_types as alloy_sol_types; { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Bytes, + ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -2637,26 +3042,29 @@ function encodeTransaction(bytes memory data) external pure returns (bytes memor } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From<_processTransactionCall> for UnderlyingRustTuple<'_> { - fn from(value: encodeTransactionCall) -> Self { - (value.data,) + fn from(value: _processTransactionCall) -> Self { + (value.sequencer, value.data) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for encodeTransactionCall { + for _processTransactionCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { data: tuple.0 } + Self { + sequencer: tuple.0, + data: tuple.1, + } } } } { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -2670,34 +3078,44 @@ function encodeTransaction(bytes memory data) external pure returns (bytes memor } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From<_processTransactionReturn> for UnderlyingRustTuple<'_> { - fn from(value: encodeTransactionReturn) -> Self { - (value._0,) + fn from(value: _processTransactionReturn) -> Self { + () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for encodeTransactionReturn { + for _processTransactionReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } + Self {} } } } + impl _processTransactionReturn { + fn _tokenize( + &self, + ) -> <_processTransactionCall as alloy_sol_types::SolCall>::ReturnToken<'_> { + () + } + } #[automatically_derived] - impl alloy_sol_types::SolCall for encodeTransactionCall { - type Parameters<'a> = (alloy::sol_types::sol_data::Bytes,); + impl alloy_sol_types::SolCall for _processTransactionCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::Bytes; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + type Return = _processTransactionReturn; + type ReturnTuple<'a> = (); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "encodeTransaction(bytes)"; - const SELECTOR: [u8; 4] = [133u8, 7u8, 73u8, 37u8]; + const SIGNATURE: &'static str = "_processTransaction(address,bytes)"; + const SELECTOR: [u8; 4] = [228u8, 163u8, 125u8, 122u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -2707,6 +3125,9 @@ function encodeTransaction(bytes memory data) external pure returns (bytes memor #[inline] fn tokenize(&self) -> Self::Token<'_> { ( + ::tokenize( + &self.sequencer, + ), ::tokenize( &self.data, ), @@ -2714,21 +3135,14 @@ function encodeTransaction(bytes memory data) external pure returns (bytes memor } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - ( - ::tokenize( - ret, - ), - ) + _processTransactionReturn::_tokenize(ret) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(|r| { - let r: encodeTransactionReturn = r.into(); - r._0 - }) + .map(Into::into) } #[inline] fn abi_decode_returns_validate( @@ -2737,31 +3151,28 @@ function encodeTransaction(bytes memory data) external pure returns (bytes memor as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(|r| { - let r: encodeTransactionReturn = r.into(); - r._0 - }) + .map(Into::into) } } }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `gasTrackingDisabled()` and selector `0xf9db7092`. + /**Function with signature `_processTransactionsBulk(address,bytes[])` and selector `0x12281983`. ```solidity -function gasTrackingDisabled() external view returns (bool); +function _processTransactionsBulk(address sequencer, bytes[] memory data) external; ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct gasTrackingDisabledCall; - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`gasTrackingDisabled()`](gasTrackingDisabledCall) function. - #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] - #[derive(Clone)] - pub struct gasTrackingDisabledReturn { + pub struct _processTransactionsBulkCall { #[allow(missing_docs)] - pub _0: bool, + pub sequencer: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Vec, } + ///Container type for the return parameters of the [`_processTransactionsBulk(address,bytes[])`](_processTransactionsBulkCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct _processTransactionsBulkReturn {} #[allow( non_camel_case_types, non_snake_case, @@ -2772,9 +3183,15 @@ function gasTrackingDisabled() external view returns (bool); use alloy::sol_types as alloy_sol_types; { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Array, + ); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Vec, + ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -2788,26 +3205,29 @@ function gasTrackingDisabled() external view returns (bool); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From<_processTransactionsBulkCall> for UnderlyingRustTuple<'_> { - fn from(value: gasTrackingDisabledCall) -> Self { - () + fn from(value: _processTransactionsBulkCall) -> Self { + (value.sequencer, value.data) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for gasTrackingDisabledCall { + for _processTransactionsBulkCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self + Self { + sequencer: tuple.0, + data: tuple.1, + } } } } { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (bool,); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -2821,34 +3241,46 @@ function gasTrackingDisabled() external view returns (bool); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From<_processTransactionsBulkReturn> for UnderlyingRustTuple<'_> { - fn from(value: gasTrackingDisabledReturn) -> Self { - (value._0,) + fn from(value: _processTransactionsBulkReturn) -> Self { + () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for gasTrackingDisabledReturn { + for _processTransactionsBulkReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } + Self {} } } } + impl _processTransactionsBulkReturn { + fn _tokenize( + &self, + ) -> <_processTransactionsBulkCall as alloy_sol_types::SolCall>::ReturnToken< + '_, + > { + () + } + } #[automatically_derived] - impl alloy_sol_types::SolCall for gasTrackingDisabledCall { - type Parameters<'a> = (); + impl alloy_sol_types::SolCall for _processTransactionsBulkCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Array, + ); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = bool; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type Return = _processTransactionsBulkReturn; + type ReturnTuple<'a> = (); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "gasTrackingDisabled()"; - const SELECTOR: [u8; 4] = [249u8, 219u8, 112u8, 146u8]; + const SIGNATURE: &'static str = "_processTransactionsBulk(address,bytes[])"; + const SELECTOR: [u8; 4] = [18u8, 40u8, 25u8, 131u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -2857,25 +3289,25 @@ function gasTrackingDisabled() external view returns (bool); } #[inline] fn tokenize(&self) -> Self::Token<'_> { - () - } - #[inline] - fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { ( - ::tokenize( - ret, + ::tokenize( + &self.sequencer, ), + as alloy_sol_types::SolType>::tokenize(&self.data), ) } #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + _processTransactionsBulkReturn::_tokenize(ret) + } + #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(|r| { - let r: gasTrackingDisabledReturn = r.into(); - r._0 - }) + .map(Into::into) } #[inline] fn abi_decode_returns_validate( @@ -2884,28 +3316,25 @@ function gasTrackingDisabled() external view returns (bool); as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(|r| { - let r: gasTrackingDisabledReturn = r.into(); - r._0 - }) + .map(Into::into) } } }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `getCurrentEpoch()` and selector `0xb97dd9e2`. + /**Function with signature `appchainId()` and selector `0xd8781342`. ```solidity -function getCurrentEpoch() external view returns (uint256); +function appchainId() external view returns (uint256); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct getCurrentEpochCall; + pub struct appchainIdCall; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`getCurrentEpoch()`](getCurrentEpochCall) function. + ///Container type for the return parameters of the [`appchainId()`](appchainIdCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct getCurrentEpochReturn { + pub struct appchainIdReturn { #[allow(missing_docs)] pub _0: alloy::sol_types::private::primitives::aliases::U256, } @@ -2935,14 +3364,14 @@ function getCurrentEpoch() external view returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: getCurrentEpochCall) -> Self { + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: appchainIdCall) -> Self { () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for getCurrentEpochCall { + impl ::core::convert::From> for appchainIdCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self } @@ -2968,23 +3397,21 @@ function getCurrentEpoch() external view returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: getCurrentEpochReturn) -> Self { + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: appchainIdReturn) -> Self { (value._0,) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for getCurrentEpochReturn { + impl ::core::convert::From> for appchainIdReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { _0: tuple.0 } } } } #[automatically_derived] - impl alloy_sol_types::SolCall for getCurrentEpochCall { + impl alloy_sol_types::SolCall for appchainIdCall { type Parameters<'a> = (); type Token<'a> = = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "getCurrentEpoch()"; - const SELECTOR: [u8; 4] = [185u8, 125u8, 217u8, 226u8]; + const SIGNATURE: &'static str = "appchainId()"; + const SELECTOR: [u8; 4] = [216u8, 120u8, 19u8, 66u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -3020,7 +3447,7 @@ function getCurrentEpoch() external view returns (uint256); '_, > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { - let r: getCurrentEpochReturn = r.into(); + let r: appchainIdReturn = r.into(); r._0 }) } @@ -3032,7 +3459,7 @@ function getCurrentEpoch() external view returns (uint256); '_, > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { - let r: getCurrentEpochReturn = r.into(); + let r: appchainIdReturn = r.into(); r._0 }) } @@ -3040,21 +3467,24 @@ function getCurrentEpoch() external view returns (uint256); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `getEmissionsReceiver()` and selector `0x7a8d41c2`. + /**Function with signature `encodeTransaction(bytes)` and selector `0x85074925`. ```solidity -function getEmissionsReceiver() external view returns (address); +function encodeTransaction(bytes memory data) external pure returns (bytes memory); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct getEmissionsReceiverCall; + pub struct encodeTransactionCall { + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`getEmissionsReceiver()`](getEmissionsReceiverCall) function. + ///Container type for the return parameters of the [`encodeTransaction(bytes)`](encodeTransactionCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct getEmissionsReceiverReturn { + pub struct encodeTransactionReturn { #[allow(missing_docs)] - pub _0: alloy::sol_types::private::Address, + pub _0: alloy::sol_types::private::Bytes, } #[allow( non_camel_case_types, @@ -3066,9 +3496,9 @@ function getEmissionsReceiver() external view returns (address); use alloy::sol_types as alloy_sol_types; { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -3082,26 +3512,26 @@ function getEmissionsReceiver() external view returns (address); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: getEmissionsReceiverCall) -> Self { - () + fn from(value: encodeTransactionCall) -> Self { + (value.data,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for getEmissionsReceiverCall { + for encodeTransactionCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self + Self { data: tuple.0 } } } } { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -3115,34 +3545,34 @@ function getEmissionsReceiver() external view returns (address); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: getEmissionsReceiverReturn) -> Self { + fn from(value: encodeTransactionReturn) -> Self { (value._0,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for getEmissionsReceiverReturn { + for encodeTransactionReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { _0: tuple.0 } } } } #[automatically_derived] - impl alloy_sol_types::SolCall for getEmissionsReceiverCall { - type Parameters<'a> = (); + impl alloy_sol_types::SolCall for encodeTransactionCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Bytes,); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::Address; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,); + type Return = alloy::sol_types::private::Bytes; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bytes,); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "getEmissionsReceiver()"; - const SELECTOR: [u8; 4] = [122u8, 141u8, 65u8, 194u8]; + const SIGNATURE: &'static str = "encodeTransaction(bytes)"; + const SELECTOR: [u8; 4] = [133u8, 7u8, 73u8, 37u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -3151,12 +3581,16 @@ function getEmissionsReceiver() external view returns (address); } #[inline] fn tokenize(&self) -> Self::Token<'_> { - () + ( + ::tokenize( + &self.data, + ), + ) } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { ( - ::tokenize( + ::tokenize( ret, ), ) @@ -3167,7 +3601,7 @@ function getEmissionsReceiver() external view returns (address); '_, > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { - let r: getEmissionsReceiverReturn = r.into(); + let r: encodeTransactionReturn = r.into(); r._0 }) } @@ -3179,7 +3613,7 @@ function getEmissionsReceiver() external view returns (address); '_, > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { - let r: getEmissionsReceiverReturn = r.into(); + let r: encodeTransactionReturn = r.into(); r._0 }) } @@ -3187,24 +3621,21 @@ function getEmissionsReceiver() external view returns (address); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `getEpochEnd(uint256)` and selector `0xd5176d23`. + /**Function with signature `gasMeter()` and selector `0x43f97ae5`. ```solidity -function getEpochEnd(uint256 epochIndex) external pure returns (uint256); +function gasMeter() external view returns (address); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct getEpochEndCall { - #[allow(missing_docs)] - pub epochIndex: alloy::sol_types::private::primitives::aliases::U256, - } + pub struct gasMeterCall; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`getEpochEnd(uint256)`](getEpochEndCall) function. + ///Container type for the return parameters of the [`gasMeter()`](gasMeterCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct getEpochEndReturn { + pub struct gasMeterReturn { #[allow(missing_docs)] - pub _0: alloy::sol_types::private::primitives::aliases::U256, + pub _0: alloy::sol_types::private::Address, } #[allow( non_camel_case_types, @@ -3216,11 +3647,9 @@ function getEpochEnd(uint256 epochIndex) external pure returns (uint256); use alloy::sol_types as alloy_sol_types; { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -3234,26 +3663,24 @@ function getEpochEnd(uint256 epochIndex) external pure returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: getEpochEndCall) -> Self { - (value.epochIndex,) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: gasMeterCall) -> Self { + () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for getEpochEndCall { + impl ::core::convert::From> for gasMeterCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { epochIndex: tuple.0 } + Self } } } { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -3267,32 +3694,32 @@ function getEpochEnd(uint256 epochIndex) external pure returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: getEpochEndReturn) -> Self { + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: gasMeterReturn) -> Self { (value._0,) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for getEpochEndReturn { + impl ::core::convert::From> for gasMeterReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { _0: tuple.0 } } } } #[automatically_derived] - impl alloy_sol_types::SolCall for getEpochEndCall { - type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + impl alloy_sol_types::SolCall for gasMeterCall { + type Parameters<'a> = (); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::primitives::aliases::U256; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Return = alloy::sol_types::private::Address; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "getEpochEnd(uint256)"; - const SELECTOR: [u8; 4] = [213u8, 23u8, 109u8, 35u8]; + const SIGNATURE: &'static str = "gasMeter()"; + const SELECTOR: [u8; 4] = [67u8, 249u8, 122u8, 229u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -3301,18 +3728,14 @@ function getEpochEnd(uint256 epochIndex) external pure returns (uint256); } #[inline] fn tokenize(&self) -> Self::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self.epochIndex), - ) + () } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { ( - as alloy_sol_types::SolType>::tokenize(ret), + ::tokenize( + ret, + ), ) } #[inline] @@ -3321,7 +3744,7 @@ function getEpochEnd(uint256 epochIndex) external pure returns (uint256); '_, > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { - let r: getEpochEndReturn = r.into(); + let r: gasMeterReturn = r.into(); r._0 }) } @@ -3333,7 +3756,7 @@ function getEpochEnd(uint256 epochIndex) external pure returns (uint256); '_, > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { - let r: getEpochEndReturn = r.into(); + let r: gasMeterReturn = r.into(); r._0 }) } @@ -3341,24 +3764,21 @@ function getEpochEnd(uint256 epochIndex) external pure returns (uint256); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `getEpochStart(uint256)` and selector `0x0175e23b`. + /**Function with signature `getInitializedVersion()` and selector `0xb3c65015`. ```solidity -function getEpochStart(uint256 epochIndex) external pure returns (uint256); +function getInitializedVersion() external view returns (uint64); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct getEpochStartCall { - #[allow(missing_docs)] - pub epochIndex: alloy::sol_types::private::primitives::aliases::U256, - } + pub struct getInitializedVersionCall; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`getEpochStart(uint256)`](getEpochStartCall) function. + ///Container type for the return parameters of the [`getInitializedVersion()`](getInitializedVersionCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct getEpochStartReturn { + pub struct getInitializedVersionReturn { #[allow(missing_docs)] - pub _0: alloy::sol_types::private::primitives::aliases::U256, + pub _0: u64, } #[allow( non_camel_case_types, @@ -3370,11 +3790,9 @@ function getEpochStart(uint256 epochIndex) external pure returns (uint256); use alloy::sol_types as alloy_sol_types; { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -3388,26 +3806,26 @@ function getEpochStart(uint256 epochIndex) external pure returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: getEpochStartCall) -> Self { - (value.epochIndex,) + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getInitializedVersionCall) -> Self { + () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for getEpochStartCall { + impl ::core::convert::From> + for getInitializedVersionCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { epochIndex: tuple.0 } + Self } } } { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<64>,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); + type UnderlyingRustTuple<'a> = (u64,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -3421,32 +3839,34 @@ function getEpochStart(uint256 epochIndex) external pure returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: getEpochStartReturn) -> Self { + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getInitializedVersionReturn) -> Self { (value._0,) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> for getEpochStartReturn { + impl ::core::convert::From> + for getInitializedVersionReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self { _0: tuple.0 } } } } #[automatically_derived] - impl alloy_sol_types::SolCall for getEpochStartCall { - type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + impl alloy_sol_types::SolCall for getInitializedVersionCall { + type Parameters<'a> = (); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::primitives::aliases::U256; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Return = u64; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<64>,); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "getEpochStart(uint256)"; - const SELECTOR: [u8; 4] = [1u8, 117u8, 226u8, 59u8]; + const SIGNATURE: &'static str = "getInitializedVersion()"; + const SELECTOR: [u8; 4] = [179u8, 198u8, 80u8, 21u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -3455,17 +3875,13 @@ function getEpochStart(uint256 epochIndex) external pure returns (uint256); } #[inline] fn tokenize(&self) -> Self::Token<'_> { - ( - as alloy_sol_types::SolType>::tokenize(&self.epochIndex), - ) + () } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { ( as alloy_sol_types::SolType>::tokenize(ret), ) } @@ -3475,7 +3891,7 @@ function getEpochStart(uint256 epochIndex) external pure returns (uint256); '_, > as alloy_sol_types::SolType>::abi_decode_sequence(data) .map(|r| { - let r: getEpochStartReturn = r.into(); + let r: getInitializedVersionReturn = r.into(); r._0 }) } @@ -3487,7 +3903,7 @@ function getEpochStart(uint256 epochIndex) external pure returns (uint256); '_, > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) .map(|r| { - let r: getEpochStartReturn = r.into(); + let r: getInitializedVersionReturn = r.into(); r._0 }) } @@ -3495,25 +3911,24 @@ function getEpochStart(uint256 epochIndex) external pure returns (uint256); }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `getTokensForEpoch(uint256)` and selector `0xe0396166`. + /**Function with signature `initialize(address,address,uint256)` and selector `0x1794bb3c`. ```solidity -function getTokensForEpoch(uint256 epochIndex) external view returns (uint256); +function initialize(address admin, address _permissionRequirementModule, uint256 _appchainId) external; ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct getTokensForEpochCall { + pub struct initializeCall { #[allow(missing_docs)] - pub epochIndex: alloy::sol_types::private::primitives::aliases::U256, + pub admin: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _permissionRequirementModule: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _appchainId: alloy::sol_types::private::primitives::aliases::U256, } - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`getTokensForEpoch(uint256)`](getTokensForEpochCall) function. + ///Container type for the return parameters of the [`initialize(address,address,uint256)`](initializeCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct getTokensForEpochReturn { - #[allow(missing_docs)] - pub _0: alloy::sol_types::private::primitives::aliases::U256, - } + pub struct initializeReturn {} #[allow( non_camel_case_types, non_snake_case, @@ -3524,9 +3939,15 @@ function getTokensForEpoch(uint256 epochIndex) external view returns (uint256); use alloy::sol_types as alloy_sol_types; { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Uint<256>, + ); #[doc(hidden)] type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Address, alloy::sol_types::private::primitives::aliases::U256, ); #[cfg(test)] @@ -3542,28 +3963,28 @@ function getTokensForEpoch(uint256 epochIndex) external view returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: getTokensForEpochCall) -> Self { - (value.epochIndex,) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: initializeCall) -> Self { + (value.admin, value._permissionRequirementModule, value._appchainId) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for getTokensForEpochCall { + impl ::core::convert::From> for initializeCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { epochIndex: tuple.0 } + Self { + admin: tuple.0, + _permissionRequirementModule: tuple.1, + _appchainId: tuple.2, + } } } } { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -3577,34 +3998,43 @@ function getTokensForEpoch(uint256 epochIndex) external view returns (uint256); } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: getTokensForEpochReturn) -> Self { - (value._0,) + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: initializeReturn) -> Self { + () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for getTokensForEpochReturn { + impl ::core::convert::From> for initializeReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _0: tuple.0 } + Self {} } } } + impl initializeReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } #[automatically_derived] - impl alloy_sol_types::SolCall for getTokensForEpochCall { - type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + impl alloy_sol_types::SolCall for initializeCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Uint<256>, + ); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::primitives::aliases::U256; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Return = initializeReturn; + type ReturnTuple<'a> = (); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "getTokensForEpoch(uint256)"; - const SELECTOR: [u8; 4] = [224u8, 57u8, 97u8, 102u8]; + const SIGNATURE: &'static str = "initialize(address,address,uint256)"; + const SELECTOR: [u8; 4] = [23u8, 148u8, 187u8, 60u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -3614,28 +4044,27 @@ function getTokensForEpoch(uint256 epochIndex) external view returns (uint256); #[inline] fn tokenize(&self) -> Self::Token<'_> { ( + ::tokenize( + &self.admin, + ), + ::tokenize( + &self._permissionRequirementModule, + ), as alloy_sol_types::SolType>::tokenize(&self.epochIndex), + > as alloy_sol_types::SolType>::tokenize(&self._appchainId), ) } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - ( - as alloy_sol_types::SolType>::tokenize(ret), - ) + initializeReturn::_tokenize(ret) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(|r| { - let r: getTokensForEpochReturn = r.into(); - r._0 - }) + .map(Into::into) } #[inline] fn abi_decode_returns_validate( @@ -3644,10 +4073,7 @@ function getTokensForEpoch(uint256 epochIndex) external view returns (uint256); as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(|r| { - let r: getTokensForEpochReturn = r.into(); - r._0 - }) + .map(Into::into) } } }; @@ -4564,17 +4990,22 @@ function processTransactionsBulk(bytes[] memory data) external; }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `renounceOwnership()` and selector `0x715018a6`. + /**Function with signature `proxiableUUID()` and selector `0x52d1902d`. ```solidity -function renounceOwnership() external; +function proxiableUUID() external view returns (bytes32); ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct renounceOwnershipCall; - ///Container type for the return parameters of the [`renounceOwnership()`](renounceOwnershipCall) function. + pub struct proxiableUUIDCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`proxiableUUID()`](proxiableUUIDCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct renounceOwnershipReturn {} + pub struct proxiableUUIDReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } #[allow( non_camel_case_types, non_snake_case, @@ -4601,16 +5032,14 @@ function renounceOwnership() external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: renounceOwnershipCall) -> Self { + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: proxiableUUIDCall) -> Self { () } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for renounceOwnershipCall { + impl ::core::convert::From> for proxiableUUIDCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self } @@ -4618,9 +5047,9 @@ function renounceOwnership() external; } { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -4634,41 +5063,32 @@ function renounceOwnership() external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From - for UnderlyingRustTuple<'_> { - fn from(value: renounceOwnershipReturn) -> Self { - () + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: proxiableUUIDReturn) -> Self { + (value._0,) } } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From> - for renounceOwnershipReturn { + impl ::core::convert::From> for proxiableUUIDReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self {} + Self { _0: tuple.0 } } } } - impl renounceOwnershipReturn { - fn _tokenize( - &self, - ) -> ::ReturnToken<'_> { - () - } - } #[automatically_derived] - impl alloy_sol_types::SolCall for renounceOwnershipCall { + impl alloy_sol_types::SolCall for proxiableUUIDCall { type Parameters<'a> = (); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = renounceOwnershipReturn; - type ReturnTuple<'a> = (); + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "renounceOwnership()"; - const SELECTOR: [u8; 4] = [113u8, 80u8, 24u8, 166u8]; + const SIGNATURE: &'static str = "proxiableUUID()"; + const SELECTOR: [u8; 4] = [82u8, 209u8, 144u8, 45u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -4681,14 +5101,21 @@ function renounceOwnership() external; } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - renounceOwnershipReturn::_tokenize(ret) + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(Into::into) + .map(|r| { + let r: proxiableUUIDReturn = r.into(); + r._0 + }) } #[inline] fn abi_decode_returns_validate( @@ -4697,26 +5124,26 @@ function renounceOwnership() external; as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(Into::into) + .map(|r| { + let r: proxiableUUIDReturn = r.into(); + r._0 + }) } } }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `setEmissionsReceiver(address)` and selector `0x39698ac0`. + /**Function with signature `renounceOwnership()` and selector `0x715018a6`. ```solidity -function setEmissionsReceiver(address _emissionsReceiver) external; +function renounceOwnership() external; ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct setEmissionsReceiverCall { - #[allow(missing_docs)] - pub _emissionsReceiver: alloy::sol_types::private::Address, - } - ///Container type for the return parameters of the [`setEmissionsReceiver(address)`](setEmissionsReceiverCall) function. + pub struct renounceOwnershipCall; + ///Container type for the return parameters of the [`renounceOwnership()`](renounceOwnershipCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct setEmissionsReceiverReturn {} + pub struct renounceOwnershipReturn {} #[allow( non_camel_case_types, non_snake_case, @@ -4727,9 +5154,9 @@ function setEmissionsReceiver(address _emissionsReceiver) external; use alloy::sol_types as alloy_sol_types; { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -4743,20 +5170,18 @@ function setEmissionsReceiver(address _emissionsReceiver) external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: setEmissionsReceiverCall) -> Self { - (value._emissionsReceiver,) + fn from(value: renounceOwnershipCall) -> Self { + () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for setEmissionsReceiverCall { + for renounceOwnershipCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { - _emissionsReceiver: tuple.0, - } + Self } } } @@ -4778,43 +5203,41 @@ function setEmissionsReceiver(address _emissionsReceiver) external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: setEmissionsReceiverReturn) -> Self { + fn from(value: renounceOwnershipReturn) -> Self { () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for setEmissionsReceiverReturn { + for renounceOwnershipReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self {} } } } - impl setEmissionsReceiverReturn { + impl renounceOwnershipReturn { fn _tokenize( &self, - ) -> ::ReturnToken< - '_, - > { + ) -> ::ReturnToken<'_> { () } } #[automatically_derived] - impl alloy_sol_types::SolCall for setEmissionsReceiverCall { - type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + impl alloy_sol_types::SolCall for renounceOwnershipCall { + type Parameters<'a> = (); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = setEmissionsReceiverReturn; + type Return = renounceOwnershipReturn; type ReturnTuple<'a> = (); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "setEmissionsReceiver(address)"; - const SELECTOR: [u8; 4] = [57u8, 105u8, 138u8, 192u8]; + const SIGNATURE: &'static str = "renounceOwnership()"; + const SELECTOR: [u8; 4] = [113u8, 80u8, 24u8, 166u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -4823,15 +5246,11 @@ function setEmissionsReceiver(address _emissionsReceiver) external; } #[inline] fn tokenize(&self) -> Self::Token<'_> { - ( - ::tokenize( - &self._emissionsReceiver, - ), - ) + () } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - setEmissionsReceiverReturn::_tokenize(ret) + renounceOwnershipReturn::_tokenize(ret) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { @@ -4853,25 +5272,20 @@ function setEmissionsReceiver(address _emissionsReceiver) external; }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `tokensUsedPerEpoch(uint256)` and selector `0x0c672363`. + /**Function with signature `transferOwnership(address)` and selector `0xf2fde38b`. ```solidity -function tokensUsedPerEpoch(uint256 epochIndex) external view returns (uint256 tokensUsed); +function transferOwnership(address newOwner) external; ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct tokensUsedPerEpochCall { + pub struct transferOwnershipCall { #[allow(missing_docs)] - pub epochIndex: alloy::sol_types::private::primitives::aliases::U256, + pub newOwner: alloy::sol_types::private::Address, } - #[derive(serde::Serialize, serde::Deserialize)] - #[derive(Default, Debug, PartialEq, Eq, Hash)] - ///Container type for the return parameters of the [`tokensUsedPerEpoch(uint256)`](tokensUsedPerEpochCall) function. + ///Container type for the return parameters of the [`transferOwnership(address)`](transferOwnershipCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct tokensUsedPerEpochReturn { - #[allow(missing_docs)] - pub tokensUsed: alloy::sol_types::private::primitives::aliases::U256, - } + pub struct transferOwnershipReturn {} #[allow( non_camel_case_types, non_snake_case, @@ -4882,11 +5296,9 @@ function tokensUsedPerEpoch(uint256 epochIndex) external view returns (uint256 t use alloy::sol_types as alloy_sol_types; { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -4900,28 +5312,26 @@ function tokensUsedPerEpoch(uint256 epochIndex) external view returns (uint256 t } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: tokensUsedPerEpochCall) -> Self { - (value.epochIndex,) + fn from(value: transferOwnershipCall) -> Self { + (value.newOwner,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for tokensUsedPerEpochCall { + for transferOwnershipCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { epochIndex: tuple.0 } + Self { newOwner: tuple.0 } } } } { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type UnderlyingSolTuple<'a> = (); #[doc(hidden)] - type UnderlyingRustTuple<'a> = ( - alloy::sol_types::private::primitives::aliases::U256, - ); + type UnderlyingRustTuple<'a> = (); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -4935,34 +5345,41 @@ function tokensUsedPerEpoch(uint256 epochIndex) external view returns (uint256 t } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: tokensUsedPerEpochReturn) -> Self { - (value.tokensUsed,) + fn from(value: transferOwnershipReturn) -> Self { + () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for tokensUsedPerEpochReturn { + for transferOwnershipReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { tokensUsed: tuple.0 } + Self {} } } } + impl transferOwnershipReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } #[automatically_derived] - impl alloy_sol_types::SolCall for tokensUsedPerEpochCall { - type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + impl alloy_sol_types::SolCall for transferOwnershipCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = alloy::sol_types::private::primitives::aliases::U256; - type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Return = transferOwnershipReturn; + type ReturnTuple<'a> = (); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "tokensUsedPerEpoch(uint256)"; - const SELECTOR: [u8; 4] = [12u8, 103u8, 35u8, 99u8]; + const SIGNATURE: &'static str = "transferOwnership(address)"; + const SELECTOR: [u8; 4] = [242u8, 253u8, 227u8, 139u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -4972,28 +5389,21 @@ function tokensUsedPerEpoch(uint256 epochIndex) external view returns (uint256 t #[inline] fn tokenize(&self) -> Self::Token<'_> { ( - as alloy_sol_types::SolType>::tokenize(&self.epochIndex), + ::tokenize( + &self.newOwner, + ), ) } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - ( - as alloy_sol_types::SolType>::tokenize(ret), - ) + transferOwnershipReturn::_tokenize(ret) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { as alloy_sol_types::SolType>::abi_decode_sequence(data) - .map(|r| { - let r: tokensUsedPerEpochReturn = r.into(); - r.tokensUsed - }) + .map(Into::into) } #[inline] fn abi_decode_returns_validate( @@ -5002,29 +5412,26 @@ function tokensUsedPerEpoch(uint256 epochIndex) external view returns (uint256 t as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) - .map(|r| { - let r: tokensUsedPerEpochReturn = r.into(); - r.tokensUsed - }) + .map(Into::into) } } }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `transferOwnership(address)` and selector `0xf2fde38b`. + /**Function with signature `updateRequirementModule(address)` and selector `0xd4f0eb4d`. ```solidity -function transferOwnership(address newOwner) external; +function updateRequirementModule(address _newModule) external; ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct transferOwnershipCall { + pub struct updateRequirementModuleCall { #[allow(missing_docs)] - pub newOwner: alloy::sol_types::private::Address, + pub _newModule: alloy::sol_types::private::Address, } - ///Container type for the return parameters of the [`transferOwnership(address)`](transferOwnershipCall) function. + ///Container type for the return parameters of the [`updateRequirementModule(address)`](updateRequirementModuleCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct transferOwnershipReturn {} + pub struct updateRequirementModuleReturn {} #[allow( non_camel_case_types, non_snake_case, @@ -5051,18 +5458,18 @@ function transferOwnership(address newOwner) external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: transferOwnershipCall) -> Self { - (value.newOwner,) + fn from(value: updateRequirementModuleCall) -> Self { + (value._newModule,) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for transferOwnershipCall { + for updateRequirementModuleCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { newOwner: tuple.0 } + Self { _newModule: tuple.0 } } } } @@ -5084,41 +5491,43 @@ function transferOwnership(address newOwner) external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: transferOwnershipReturn) -> Self { + fn from(value: updateRequirementModuleReturn) -> Self { () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for transferOwnershipReturn { + for updateRequirementModuleReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self {} } } } - impl transferOwnershipReturn { + impl updateRequirementModuleReturn { fn _tokenize( &self, - ) -> ::ReturnToken<'_> { + ) -> ::ReturnToken< + '_, + > { () } } #[automatically_derived] - impl alloy_sol_types::SolCall for transferOwnershipCall { + impl alloy_sol_types::SolCall for updateRequirementModuleCall { type Parameters<'a> = (alloy::sol_types::sol_data::Address,); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = transferOwnershipReturn; + type Return = updateRequirementModuleReturn; type ReturnTuple<'a> = (); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "transferOwnership(address)"; - const SELECTOR: [u8; 4] = [242u8, 253u8, 227u8, 139u8]; + const SIGNATURE: &'static str = "updateRequirementModule(address)"; + const SELECTOR: [u8; 4] = [212u8, 240u8, 235u8, 77u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -5129,13 +5538,13 @@ function transferOwnership(address newOwner) external; fn tokenize(&self) -> Self::Token<'_> { ( ::tokenize( - &self.newOwner, + &self._newModule, ), ) } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - transferOwnershipReturn::_tokenize(ret) + updateRequirementModuleReturn::_tokenize(ret) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { @@ -5157,20 +5566,22 @@ function transferOwnership(address newOwner) external; }; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Default, Debug, PartialEq, Eq, Hash)] - /**Function with signature `updateRequirementModule(address)` and selector `0xd4f0eb4d`. + /**Function with signature `upgradeToAndCall(address,bytes)` and selector `0x4f1ef286`. ```solidity -function updateRequirementModule(address _newModule) external; +function upgradeToAndCall(address newImplementation, bytes memory data) external payable; ```*/ #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct updateRequirementModuleCall { + pub struct upgradeToAndCallCall { #[allow(missing_docs)] - pub _newModule: alloy::sol_types::private::Address, + pub newImplementation: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, } - ///Container type for the return parameters of the [`updateRequirementModule(address)`](updateRequirementModuleCall) function. + ///Container type for the return parameters of the [`upgradeToAndCall(address,bytes)`](upgradeToAndCallCall) function. #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] #[derive(Clone)] - pub struct updateRequirementModuleReturn {} + pub struct upgradeToAndCallReturn {} #[allow( non_camel_case_types, non_snake_case, @@ -5181,9 +5592,15 @@ function updateRequirementModule(address _newModule) external; use alloy::sol_types as alloy_sol_types; { #[doc(hidden)] - type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); #[doc(hidden)] - type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Bytes, + ); #[cfg(test)] #[allow(dead_code, unreachable_patterns)] fn _type_assertion( @@ -5197,18 +5614,21 @@ function updateRequirementModule(address _newModule) external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: updateRequirementModuleCall) -> Self { - (value._newModule,) + fn from(value: upgradeToAndCallCall) -> Self { + (value.newImplementation, value.data) } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for updateRequirementModuleCall { + for upgradeToAndCallCall { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { - Self { _newModule: tuple.0 } + Self { + newImplementation: tuple.0, + data: tuple.1, + } } } } @@ -5230,43 +5650,44 @@ function updateRequirementModule(address _newModule) external; } #[automatically_derived] #[doc(hidden)] - impl ::core::convert::From + impl ::core::convert::From for UnderlyingRustTuple<'_> { - fn from(value: updateRequirementModuleReturn) -> Self { + fn from(value: upgradeToAndCallReturn) -> Self { () } } #[automatically_derived] #[doc(hidden)] impl ::core::convert::From> - for updateRequirementModuleReturn { + for upgradeToAndCallReturn { fn from(tuple: UnderlyingRustTuple<'_>) -> Self { Self {} } } } - impl updateRequirementModuleReturn { + impl upgradeToAndCallReturn { fn _tokenize( &self, - ) -> ::ReturnToken< - '_, - > { + ) -> ::ReturnToken<'_> { () } } #[automatically_derived] - impl alloy_sol_types::SolCall for updateRequirementModuleCall { - type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + impl alloy_sol_types::SolCall for upgradeToAndCallCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; - type Return = updateRequirementModuleReturn; + type Return = upgradeToAndCallReturn; type ReturnTuple<'a> = (); type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; - const SIGNATURE: &'static str = "updateRequirementModule(address)"; - const SELECTOR: [u8; 4] = [212u8, 240u8, 235u8, 77u8]; + const SIGNATURE: &'static str = "upgradeToAndCall(address,bytes)"; + const SELECTOR: [u8; 4] = [79u8, 30u8, 242u8, 134u8]; #[inline] fn new<'a>( tuple: as alloy_sol_types::SolType>::RustType, @@ -5277,13 +5698,16 @@ function updateRequirementModule(address _newModule) external; fn tokenize(&self) -> Self::Token<'_> { ( ::tokenize( - &self._newModule, + &self.newImplementation, + ), + ::tokenize( + &self.data, ), ) } #[inline] fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { - updateRequirementModuleReturn::_tokenize(ret) + upgradeToAndCallReturn::_tokenize(ret) } #[inline] fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { @@ -5308,31 +5732,29 @@ function updateRequirementModule(address _newModule) external; #[derive()] pub enum SyndicateSequencingChainCalls { #[allow(missing_docs)] - EPOCH_DURATION(EPOCH_DURATIONCall), - #[allow(missing_docs)] - START_TIMESTAMP(START_TIMESTAMPCall), + SEQUENCING_MODULE_STORAGE_LOCATION(SEQUENCING_MODULE_STORAGE_LOCATIONCall), #[allow(missing_docs)] - appchainId(appchainIdCall), - #[allow(missing_docs)] - disableGasTracking(disableGasTrackingCall), + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall, + ), #[allow(missing_docs)] - emissionsReceiver(emissionsReceiverCall), + UPGRADE_INTERFACE_VERSION(UPGRADE_INTERFACE_VERSIONCall), #[allow(missing_docs)] - enableGasTracking(enableGasTrackingCall), + VERSION(VERSIONCall), #[allow(missing_docs)] - encodeTransaction(encodeTransactionCall), + _processTransaction(_processTransactionCall), #[allow(missing_docs)] - gasTrackingDisabled(gasTrackingDisabledCall), + _processTransactionsBulk(_processTransactionsBulkCall), #[allow(missing_docs)] - getCurrentEpoch(getCurrentEpochCall), + appchainId(appchainIdCall), #[allow(missing_docs)] - getEmissionsReceiver(getEmissionsReceiverCall), + encodeTransaction(encodeTransactionCall), #[allow(missing_docs)] - getEpochEnd(getEpochEndCall), + gasMeter(gasMeterCall), #[allow(missing_docs)] - getEpochStart(getEpochStartCall), + getInitializedVersion(getInitializedVersionCall), #[allow(missing_docs)] - getTokensForEpoch(getTokensForEpochCall), + initialize(initializeCall), #[allow(missing_docs)] isAllowed(isAllowedCall), #[allow(missing_docs)] @@ -5346,15 +5768,15 @@ function updateRequirementModule(address _newModule) external; #[allow(missing_docs)] processTransactionsBulk(processTransactionsBulkCall), #[allow(missing_docs)] - renounceOwnership(renounceOwnershipCall), - #[allow(missing_docs)] - setEmissionsReceiver(setEmissionsReceiverCall), + proxiableUUID(proxiableUUIDCall), #[allow(missing_docs)] - tokensUsedPerEpoch(tokensUsedPerEpochCall), + renounceOwnership(renounceOwnershipCall), #[allow(missing_docs)] transferOwnership(transferOwnershipCall), #[allow(missing_docs)] updateRequirementModule(updateRequirementModuleCall), + #[allow(missing_docs)] + upgradeToAndCall(upgradeToAndCallCall), } #[automatically_derived] impl SyndicateSequencingChainCalls { @@ -5365,78 +5787,66 @@ function updateRequirementModule(address _newModule) external; /// /// Prefer using `SolInterface` methods instead. pub const SELECTORS: &'static [[u8; 4usize]] = &[ - [1u8, 117u8, 226u8, 59u8], - [12u8, 103u8, 35u8, 99u8], - [57u8, 105u8, 138u8, 192u8], + [18u8, 40u8, 25u8, 131u8], + [23u8, 148u8, 187u8, 60u8], + [36u8, 7u8, 240u8, 182u8], + [67u8, 249u8, 122u8, 229u8], [70u8, 226u8, 204u8, 9u8], - [84u8, 103u8, 203u8, 72u8], + [79u8, 30u8, 242u8, 134u8], + [82u8, 209u8, 144u8, 45u8], [91u8, 60u8, 214u8, 226u8], - [94u8, 122u8, 123u8, 223u8], [113u8, 80u8, 24u8, 166u8], - [120u8, 28u8, 217u8, 157u8], [122u8, 57u8, 121u8, 220u8], - [122u8, 141u8, 65u8, 194u8], [133u8, 7u8, 73u8, 37u8], [141u8, 165u8, 203u8, 91u8], - [167u8, 11u8, 159u8, 12u8], - [185u8, 125u8, 217u8, 226u8], + [149u8, 197u8, 191u8, 117u8], + [173u8, 60u8, 177u8, 204u8], + [179u8, 198u8, 80u8, 21u8], [205u8, 175u8, 185u8, 120u8], [212u8, 240u8, 235u8, 77u8], - [213u8, 23u8, 109u8, 35u8], [216u8, 120u8, 19u8, 66u8], - [222u8, 31u8, 69u8, 62u8], - [224u8, 57u8, 97u8, 102u8], + [228u8, 163u8, 125u8, 122u8], [232u8, 235u8, 29u8, 195u8], [242u8, 253u8, 227u8, 139u8], - [249u8, 219u8, 112u8, 146u8], + [255u8, 161u8, 173u8, 116u8], ]; } #[automatically_derived] impl alloy_sol_types::SolInterface for SyndicateSequencingChainCalls { const NAME: &'static str = "SyndicateSequencingChainCalls"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 24usize; + const COUNT: usize = 22usize; #[inline] fn selector(&self) -> [u8; 4] { match self { - Self::EPOCH_DURATION(_) => { - ::SELECTOR + Self::SEQUENCING_MODULE_STORAGE_LOCATION(_) => { + ::SELECTOR } - Self::START_TIMESTAMP(_) => { - ::SELECTOR + Self::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION(_) => { + ::SELECTOR } - Self::appchainId(_) => { - ::SELECTOR + Self::UPGRADE_INTERFACE_VERSION(_) => { + ::SELECTOR } - Self::disableGasTracking(_) => { - ::SELECTOR + Self::VERSION(_) => ::SELECTOR, + Self::_processTransaction(_) => { + <_processTransactionCall as alloy_sol_types::SolCall>::SELECTOR } - Self::emissionsReceiver(_) => { - ::SELECTOR + Self::_processTransactionsBulk(_) => { + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::SELECTOR } - Self::enableGasTracking(_) => { - ::SELECTOR + Self::appchainId(_) => { + ::SELECTOR } Self::encodeTransaction(_) => { ::SELECTOR } - Self::gasTrackingDisabled(_) => { - ::SELECTOR - } - Self::getCurrentEpoch(_) => { - ::SELECTOR - } - Self::getEmissionsReceiver(_) => { - ::SELECTOR - } - Self::getEpochEnd(_) => { - ::SELECTOR + Self::gasMeter(_) => ::SELECTOR, + Self::getInitializedVersion(_) => { + ::SELECTOR } - Self::getEpochStart(_) => { - ::SELECTOR - } - Self::getTokensForEpoch(_) => { - ::SELECTOR + Self::initialize(_) => { + ::SELECTOR } Self::isAllowed(_) => { ::SELECTOR @@ -5454,21 +5864,21 @@ function updateRequirementModule(address _newModule) external; Self::processTransactionsBulk(_) => { ::SELECTOR } + Self::proxiableUUID(_) => { + ::SELECTOR + } Self::renounceOwnership(_) => { ::SELECTOR } - Self::setEmissionsReceiver(_) => { - ::SELECTOR - } - Self::tokensUsedPerEpoch(_) => { - ::SELECTOR - } Self::transferOwnership(_) => { ::SELECTOR } Self::updateRequirementModule(_) => { ::SELECTOR } + Self::upgradeToAndCall(_) => { + ::SELECTOR + } } } #[inline] @@ -5489,37 +5899,48 @@ function updateRequirementModule(address _newModule) external; &[u8], ) -> alloy_sol_types::Result] = &[ { - fn getEpochStart( + fn _processTransactionsBulk( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::abi_decode_raw( data, ) - .map(SyndicateSequencingChainCalls::getEpochStart) + .map(SyndicateSequencingChainCalls::_processTransactionsBulk) } - getEpochStart + _processTransactionsBulk }, { - fn tokensUsedPerEpoch( + fn initialize( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) - .map(SyndicateSequencingChainCalls::tokensUsedPerEpoch) + .map(SyndicateSequencingChainCalls::initialize) } - tokensUsedPerEpoch + initialize }, { - fn setEmissionsReceiver( + fn SEQUENCING_MODULE_STORAGE_LOCATION( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) - .map(SyndicateSequencingChainCalls::setEmissionsReceiver) + .map( + SyndicateSequencingChainCalls::SEQUENCING_MODULE_STORAGE_LOCATION, + ) + } + SEQUENCING_MODULE_STORAGE_LOCATION + }, + { + fn gasMeter( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(SyndicateSequencingChainCalls::gasMeter) } - setEmissionsReceiver + gasMeter }, { fn processTransaction( @@ -5533,39 +5954,39 @@ function updateRequirementModule(address _newModule) external; processTransaction }, { - fn disableGasTracking( + fn upgradeToAndCall( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) - .map(SyndicateSequencingChainCalls::disableGasTracking) + .map(SyndicateSequencingChainCalls::upgradeToAndCall) } - disableGasTracking + upgradeToAndCall }, { - fn permissionRequirementModule( + fn proxiableUUID( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) - .map( - SyndicateSequencingChainCalls::permissionRequirementModule, - ) + .map(SyndicateSequencingChainCalls::proxiableUUID) } - permissionRequirementModule + proxiableUUID }, { - fn emissionsReceiver( + fn permissionRequirementModule( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) - .map(SyndicateSequencingChainCalls::emissionsReceiver) + .map( + SyndicateSequencingChainCalls::permissionRequirementModule, + ) } - emissionsReceiver + permissionRequirementModule }, { fn renounceOwnership( @@ -5578,17 +5999,6 @@ function updateRequirementModule(address _newModule) external; } renounceOwnership }, - { - fn START_TIMESTAMP( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(SyndicateSequencingChainCalls::START_TIMESTAMP) - } - START_TIMESTAMP - }, { fn isAllowed( data: &[u8], @@ -5598,17 +6008,6 @@ function updateRequirementModule(address _newModule) external; } isAllowed }, - { - fn getEmissionsReceiver( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(SyndicateSequencingChainCalls::getEmissionsReceiver) - } - getEmissionsReceiver - }, { fn encodeTransaction( data: &[u8], @@ -5630,26 +6029,41 @@ function updateRequirementModule(address _newModule) external; owner }, { - fn EPOCH_DURATION( + fn SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainCalls::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION, + ) + } + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION + }, + { + fn UPGRADE_INTERFACE_VERSION( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) - .map(SyndicateSequencingChainCalls::EPOCH_DURATION) + .map( + SyndicateSequencingChainCalls::UPGRADE_INTERFACE_VERSION, + ) } - EPOCH_DURATION + UPGRADE_INTERFACE_VERSION }, { - fn getCurrentEpoch( + fn getInitializedVersion( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) - .map(SyndicateSequencingChainCalls::getCurrentEpoch) + .map(SyndicateSequencingChainCalls::getInitializedVersion) } - getCurrentEpoch + getInitializedVersion }, { fn processTransactionsBulk( @@ -5673,17 +6087,6 @@ function updateRequirementModule(address _newModule) external; } updateRequirementModule }, - { - fn getEpochEnd( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(SyndicateSequencingChainCalls::getEpochEnd) - } - getEpochEnd - }, { fn appchainId( data: &[u8], @@ -5696,26 +6099,15 @@ function updateRequirementModule(address _newModule) external; appchainId }, { - fn enableGasTracking( + fn _processTransaction( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + <_processTransactionCall as alloy_sol_types::SolCall>::abi_decode_raw( data, ) - .map(SyndicateSequencingChainCalls::enableGasTracking) + .map(SyndicateSequencingChainCalls::_processTransaction) } - enableGasTracking - }, - { - fn getTokensForEpoch( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(SyndicateSequencingChainCalls::getTokensForEpoch) - } - getTokensForEpoch + _processTransaction }, { fn maxDataSize( @@ -5740,15 +6132,13 @@ function updateRequirementModule(address _newModule) external; transferOwnership }, { - fn gasTrackingDisabled( + fn VERSION( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( - data, - ) - .map(SyndicateSequencingChainCalls::gasTrackingDisabled) + ::abi_decode_raw(data) + .map(SyndicateSequencingChainCalls::VERSION) } - gasTrackingDisabled + VERSION }, ]; let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { @@ -5771,37 +6161,50 @@ function updateRequirementModule(address _newModule) external; &[u8], ) -> alloy_sol_types::Result] = &[ { - fn getEpochStart( + fn _processTransactionsBulk( + data: &[u8], + ) -> alloy_sol_types::Result { + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainCalls::_processTransactionsBulk) + } + _processTransactionsBulk + }, + { + fn initialize( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(SyndicateSequencingChainCalls::getEpochStart) + .map(SyndicateSequencingChainCalls::initialize) } - getEpochStart + initialize }, { - fn tokensUsedPerEpoch( + fn SEQUENCING_MODULE_STORAGE_LOCATION( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(SyndicateSequencingChainCalls::tokensUsedPerEpoch) + .map( + SyndicateSequencingChainCalls::SEQUENCING_MODULE_STORAGE_LOCATION, + ) } - tokensUsedPerEpoch + SEQUENCING_MODULE_STORAGE_LOCATION }, { - fn setEmissionsReceiver( + fn gasMeter( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(SyndicateSequencingChainCalls::setEmissionsReceiver) + .map(SyndicateSequencingChainCalls::gasMeter) } - setEmissionsReceiver + gasMeter }, { fn processTransaction( @@ -5815,39 +6218,39 @@ function updateRequirementModule(address _newModule) external; processTransaction }, { - fn disableGasTracking( + fn upgradeToAndCall( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(SyndicateSequencingChainCalls::disableGasTracking) + .map(SyndicateSequencingChainCalls::upgradeToAndCall) } - disableGasTracking + upgradeToAndCall }, { - fn permissionRequirementModule( + fn proxiableUUID( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map( - SyndicateSequencingChainCalls::permissionRequirementModule, - ) + .map(SyndicateSequencingChainCalls::proxiableUUID) } - permissionRequirementModule + proxiableUUID }, { - fn emissionsReceiver( + fn permissionRequirementModule( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(SyndicateSequencingChainCalls::emissionsReceiver) + .map( + SyndicateSequencingChainCalls::permissionRequirementModule, + ) } - emissionsReceiver + permissionRequirementModule }, { fn renounceOwnership( @@ -5860,17 +6263,6 @@ function updateRequirementModule(address _newModule) external; } renounceOwnership }, - { - fn START_TIMESTAMP( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map(SyndicateSequencingChainCalls::START_TIMESTAMP) - } - START_TIMESTAMP - }, { fn isAllowed( data: &[u8], @@ -5882,17 +6274,6 @@ function updateRequirementModule(address _newModule) external; } isAllowed }, - { - fn getEmissionsReceiver( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map(SyndicateSequencingChainCalls::getEmissionsReceiver) - } - getEmissionsReceiver - }, { fn encodeTransaction( data: &[u8], @@ -5916,26 +6297,41 @@ function updateRequirementModule(address _newModule) external; owner }, { - fn EPOCH_DURATION( + fn SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainCalls::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION, + ) + } + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION + }, + { + fn UPGRADE_INTERFACE_VERSION( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(SyndicateSequencingChainCalls::EPOCH_DURATION) + .map( + SyndicateSequencingChainCalls::UPGRADE_INTERFACE_VERSION, + ) } - EPOCH_DURATION + UPGRADE_INTERFACE_VERSION }, { - fn getCurrentEpoch( + fn getInitializedVersion( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(SyndicateSequencingChainCalls::getCurrentEpoch) + .map(SyndicateSequencingChainCalls::getInitializedVersion) } - getCurrentEpoch + getInitializedVersion }, { fn processTransactionsBulk( @@ -5959,17 +6355,6 @@ function updateRequirementModule(address _newModule) external; } updateRequirementModule }, - { - fn getEpochEnd( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map(SyndicateSequencingChainCalls::getEpochEnd) - } - getEpochEnd - }, { fn appchainId( data: &[u8], @@ -5982,26 +6367,15 @@ function updateRequirementModule(address _newModule) external; appchainId }, { - fn enableGasTracking( - data: &[u8], - ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( - data, - ) - .map(SyndicateSequencingChainCalls::enableGasTracking) - } - enableGasTracking - }, - { - fn getTokensForEpoch( + fn _processTransaction( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + <_processTransactionCall as alloy_sol_types::SolCall>::abi_decode_raw_validate( data, ) - .map(SyndicateSequencingChainCalls::getTokensForEpoch) + .map(SyndicateSequencingChainCalls::_processTransaction) } - getTokensForEpoch + _processTransaction }, { fn maxDataSize( @@ -6026,15 +6400,15 @@ function updateRequirementModule(address _newModule) external; transferOwnership }, { - fn gasTrackingDisabled( + fn VERSION( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(SyndicateSequencingChainCalls::gasTrackingDisabled) + .map(SyndicateSequencingChainCalls::VERSION) } - gasTrackingDisabled + VERSION }, ]; let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { @@ -6050,68 +6424,52 @@ function updateRequirementModule(address _newModule) external; #[inline] fn abi_encoded_size(&self) -> usize { match self { - Self::EPOCH_DURATION(inner) => { - ::abi_encoded_size( - inner, - ) - } - Self::START_TIMESTAMP(inner) => { - ::abi_encoded_size( + Self::SEQUENCING_MODULE_STORAGE_LOCATION(inner) => { + ::abi_encoded_size( inner, ) } - Self::appchainId(inner) => { - ::abi_encoded_size(inner) - } - Self::disableGasTracking(inner) => { - ::abi_encoded_size( + Self::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION(inner) => { + ::abi_encoded_size( inner, ) } - Self::emissionsReceiver(inner) => { - ::abi_encoded_size( + Self::UPGRADE_INTERFACE_VERSION(inner) => { + ::abi_encoded_size( inner, ) } - Self::enableGasTracking(inner) => { - ::abi_encoded_size( - inner, - ) + Self::VERSION(inner) => { + ::abi_encoded_size(inner) } - Self::encodeTransaction(inner) => { - ::abi_encoded_size( + Self::_processTransaction(inner) => { + <_processTransactionCall as alloy_sol_types::SolCall>::abi_encoded_size( inner, ) } - Self::gasTrackingDisabled(inner) => { - ::abi_encoded_size( + Self::_processTransactionsBulk(inner) => { + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::abi_encoded_size( inner, ) } - Self::getCurrentEpoch(inner) => { - ::abi_encoded_size( - inner, - ) + Self::appchainId(inner) => { + ::abi_encoded_size(inner) } - Self::getEmissionsReceiver(inner) => { - ::abi_encoded_size( + Self::encodeTransaction(inner) => { + ::abi_encoded_size( inner, ) } - Self::getEpochEnd(inner) => { - ::abi_encoded_size( - inner, - ) + Self::gasMeter(inner) => { + ::abi_encoded_size(inner) } - Self::getEpochStart(inner) => { - ::abi_encoded_size( + Self::getInitializedVersion(inner) => { + ::abi_encoded_size( inner, ) } - Self::getTokensForEpoch(inner) => { - ::abi_encoded_size( - inner, - ) + Self::initialize(inner) => { + ::abi_encoded_size(inner) } Self::isAllowed(inner) => { ::abi_encoded_size(inner) @@ -6134,23 +6492,18 @@ function updateRequirementModule(address _newModule) external; inner, ) } - Self::processTransactionsBulk(inner) => { - ::abi_encoded_size( - inner, - ) - } - Self::renounceOwnership(inner) => { - ::abi_encoded_size( + Self::processTransactionsBulk(inner) => { + ::abi_encoded_size( inner, ) } - Self::setEmissionsReceiver(inner) => { - ::abi_encoded_size( + Self::proxiableUUID(inner) => { + ::abi_encoded_size( inner, ) } - Self::tokensUsedPerEpoch(inner) => { - ::abi_encoded_size( + Self::renounceOwnership(inner) => { + ::abi_encoded_size( inner, ) } @@ -6164,43 +6517,51 @@ function updateRequirementModule(address _newModule) external; inner, ) } + Self::upgradeToAndCall(inner) => { + ::abi_encoded_size( + inner, + ) + } } } #[inline] fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { match self { - Self::EPOCH_DURATION(inner) => { - ::abi_encode_raw( + Self::SEQUENCING_MODULE_STORAGE_LOCATION(inner) => { + ::abi_encode_raw( inner, out, ) } - Self::START_TIMESTAMP(inner) => { - ::abi_encode_raw( + Self::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION(inner) => { + ::abi_encode_raw( inner, out, ) } - Self::appchainId(inner) => { - ::abi_encode_raw( + Self::UPGRADE_INTERFACE_VERSION(inner) => { + ::abi_encode_raw( inner, out, ) } - Self::disableGasTracking(inner) => { - ::abi_encode_raw( + Self::VERSION(inner) => { + ::abi_encode_raw(inner, out) + } + Self::_processTransaction(inner) => { + <_processTransactionCall as alloy_sol_types::SolCall>::abi_encode_raw( inner, out, ) } - Self::emissionsReceiver(inner) => { - ::abi_encode_raw( + Self::_processTransactionsBulk(inner) => { + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::abi_encode_raw( inner, out, ) } - Self::enableGasTracking(inner) => { - ::abi_encode_raw( + Self::appchainId(inner) => { + ::abi_encode_raw( inner, out, ) @@ -6211,38 +6572,20 @@ function updateRequirementModule(address _newModule) external; out, ) } - Self::gasTrackingDisabled(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } - Self::getCurrentEpoch(inner) => { - ::abi_encode_raw( + Self::gasMeter(inner) => { + ::abi_encode_raw( inner, out, ) } - Self::getEmissionsReceiver(inner) => { - ::abi_encode_raw( + Self::getInitializedVersion(inner) => { + ::abi_encode_raw( inner, out, ) } - Self::getEpochEnd(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } - Self::getEpochStart(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } - Self::getTokensForEpoch(inner) => { - ::abi_encode_raw( + Self::initialize(inner) => { + ::abi_encode_raw( inner, out, ) @@ -6280,20 +6623,14 @@ function updateRequirementModule(address _newModule) external; out, ) } - Self::renounceOwnership(inner) => { - ::abi_encode_raw( - inner, - out, - ) - } - Self::setEmissionsReceiver(inner) => { - ::abi_encode_raw( + Self::proxiableUUID(inner) => { + ::abi_encode_raw( inner, out, ) } - Self::tokensUsedPerEpoch(inner) => { - ::abi_encode_raw( + Self::renounceOwnership(inner) => { + ::abi_encode_raw( inner, out, ) @@ -6310,6 +6647,12 @@ function updateRequirementModule(address _newModule) external; out, ) } + Self::upgradeToAndCall(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } } } } @@ -6317,22 +6660,36 @@ function updateRequirementModule(address _newModule) external; #[derive(serde::Serialize, serde::Deserialize)] #[derive(Debug, PartialEq, Eq, Hash)] pub enum SyndicateSequencingChainErrors { + #[allow(missing_docs)] + AddressEmptyCode(AddressEmptyCode), #[allow(missing_docs)] DataTooLarge(DataTooLarge), #[allow(missing_docs)] - GasTrackingAlreadyDisabled(GasTrackingAlreadyDisabled), + ERC1967InvalidImplementation(ERC1967InvalidImplementation), + #[allow(missing_docs)] + ERC1967NonPayable(ERC1967NonPayable), #[allow(missing_docs)] - GasTrackingAlreadyEnabled(GasTrackingAlreadyEnabled), + FailedCall(FailedCall), + #[allow(missing_docs)] + InvalidInitialization(InvalidInitialization), #[allow(missing_docs)] NoTxData(NoTxData), #[allow(missing_docs)] + NotGasMeterContract(NotGasMeterContract), + #[allow(missing_docs)] + NotInitializing(NotInitializing), + #[allow(missing_docs)] OwnableInvalidOwner(OwnableInvalidOwner), #[allow(missing_docs)] OwnableUnauthorizedAccount(OwnableUnauthorizedAccount), #[allow(missing_docs)] TransactionOrSenderNotAllowed(TransactionOrSenderNotAllowed), #[allow(missing_docs)] - ZeroEpochIndex(ZeroEpochIndex), + UUPSUnauthorizedCallContext(UUPSUnauthorizedCallContext), + #[allow(missing_docs)] + UUPSUnsupportedProxiableUUID(UUPSUnsupportedProxiableUUID), + #[allow(missing_docs)] + ZeroAddress(ZeroAddress), } #[automatically_derived] impl SyndicateSequencingChainErrors { @@ -6346,31 +6703,53 @@ function updateRequirementModule(address _newModule) external; [17u8, 140u8, 218u8, 167u8], [30u8, 79u8, 189u8, 247u8], [70u8, 52u8, 105u8, 27u8], - [118u8, 121u8, 64u8, 13u8], - [205u8, 96u8, 195u8, 202u8], - [214u8, 147u8, 104u8, 212u8], + [76u8, 156u8, 140u8, 227u8], + [153u8, 150u8, 179u8, 21u8], + [170u8, 29u8, 73u8, 164u8], + [179u8, 152u8, 151u8, 159u8], + [214u8, 189u8, 162u8, 117u8], + [215u8, 230u8, 188u8, 248u8], + [217u8, 46u8, 35u8, 61u8], + [218u8, 249u8, 134u8, 28u8], [220u8, 55u8, 245u8, 29u8], [220u8, 116u8, 20u8, 88u8], + [224u8, 124u8, 141u8, 186u8], + [249u8, 46u8, 232u8, 169u8], ]; } #[automatically_derived] impl alloy_sol_types::SolInterface for SyndicateSequencingChainErrors { const NAME: &'static str = "SyndicateSequencingChainErrors"; const MIN_DATA_LENGTH: usize = 0usize; - const COUNT: usize = 8usize; + const COUNT: usize = 15usize; #[inline] fn selector(&self) -> [u8; 4] { match self { + Self::AddressEmptyCode(_) => { + ::SELECTOR + } Self::DataTooLarge(_) => { ::SELECTOR } - Self::GasTrackingAlreadyDisabled(_) => { - ::SELECTOR + Self::ERC1967InvalidImplementation(_) => { + ::SELECTOR } - Self::GasTrackingAlreadyEnabled(_) => { - ::SELECTOR + Self::ERC1967NonPayable(_) => { + ::SELECTOR + } + Self::FailedCall(_) => { + ::SELECTOR + } + Self::InvalidInitialization(_) => { + ::SELECTOR } Self::NoTxData(_) => ::SELECTOR, + Self::NotGasMeterContract(_) => { + ::SELECTOR + } + Self::NotInitializing(_) => { + ::SELECTOR + } Self::OwnableInvalidOwner(_) => { ::SELECTOR } @@ -6380,8 +6759,14 @@ function updateRequirementModule(address _newModule) external; Self::TransactionOrSenderNotAllowed(_) => { ::SELECTOR } - Self::ZeroEpochIndex(_) => { - ::SELECTOR + Self::UUPSUnauthorizedCallContext(_) => { + ::SELECTOR + } + Self::UUPSUnsupportedProxiableUUID(_) => { + ::SELECTOR + } + Self::ZeroAddress(_) => { + ::SELECTOR } } } @@ -6436,41 +6821,92 @@ function updateRequirementModule(address _newModule) external; DataTooLarge }, { - fn GasTrackingAlreadyEnabled( + fn ERC1967InvalidImplementation( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) .map( - SyndicateSequencingChainErrors::GasTrackingAlreadyEnabled, + SyndicateSequencingChainErrors::ERC1967InvalidImplementation, + ) + } + ERC1967InvalidImplementation + }, + { + fn AddressEmptyCode( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, ) + .map(SyndicateSequencingChainErrors::AddressEmptyCode) } - GasTrackingAlreadyEnabled + AddressEmptyCode }, { - fn GasTrackingAlreadyDisabled( + fn UUPSUnsupportedProxiableUUID( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw( data, ) .map( - SyndicateSequencingChainErrors::GasTrackingAlreadyDisabled, + SyndicateSequencingChainErrors::UUPSUnsupportedProxiableUUID, + ) + } + UUPSUnsupportedProxiableUUID + }, + { + fn ERC1967NonPayable( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, ) + .map(SyndicateSequencingChainErrors::ERC1967NonPayable) } - GasTrackingAlreadyDisabled + ERC1967NonPayable }, { - fn ZeroEpochIndex( + fn FailedCall( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw( + ::abi_decode_raw(data) + .map(SyndicateSequencingChainErrors::FailedCall) + } + FailedCall + }, + { + fn NotInitializing( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(SyndicateSequencingChainErrors::NotInitializing) + } + NotInitializing + }, + { + fn ZeroAddress( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw(data) + .map(SyndicateSequencingChainErrors::ZeroAddress) + } + ZeroAddress + }, + { + fn NotGasMeterContract( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( data, ) - .map(SyndicateSequencingChainErrors::ZeroEpochIndex) + .map(SyndicateSequencingChainErrors::NotGasMeterContract) } - ZeroEpochIndex + NotGasMeterContract }, { fn NoTxData( @@ -6494,6 +6930,30 @@ function updateRequirementModule(address _newModule) external; } TransactionOrSenderNotAllowed }, + { + fn UUPSUnauthorizedCallContext( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainErrors::UUPSUnauthorizedCallContext, + ) + } + UUPSUnauthorizedCallContext + }, + { + fn InvalidInitialization( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw( + data, + ) + .map(SyndicateSequencingChainErrors::InvalidInitialization) + } + InvalidInitialization + }, ]; let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { return Err( @@ -6550,41 +7010,96 @@ function updateRequirementModule(address _newModule) external; DataTooLarge }, { - fn GasTrackingAlreadyEnabled( + fn ERC1967InvalidImplementation( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) .map( - SyndicateSequencingChainErrors::GasTrackingAlreadyEnabled, + SyndicateSequencingChainErrors::ERC1967InvalidImplementation, + ) + } + ERC1967InvalidImplementation + }, + { + fn AddressEmptyCode( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, ) + .map(SyndicateSequencingChainErrors::AddressEmptyCode) } - GasTrackingAlreadyEnabled + AddressEmptyCode }, { - fn GasTrackingAlreadyDisabled( + fn UUPSUnsupportedProxiableUUID( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) .map( - SyndicateSequencingChainErrors::GasTrackingAlreadyDisabled, + SyndicateSequencingChainErrors::UUPSUnsupportedProxiableUUID, + ) + } + UUPSUnsupportedProxiableUUID + }, + { + fn ERC1967NonPayable( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainErrors::ERC1967NonPayable) + } + ERC1967NonPayable + }, + { + fn FailedCall( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainErrors::FailedCall) + } + FailedCall + }, + { + fn NotInitializing( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainErrors::NotInitializing) + } + NotInitializing + }, + { + fn ZeroAddress( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, ) + .map(SyndicateSequencingChainErrors::ZeroAddress) } - GasTrackingAlreadyDisabled + ZeroAddress }, { - fn ZeroEpochIndex( + fn NotGasMeterContract( data: &[u8], ) -> alloy_sol_types::Result { - ::abi_decode_raw_validate( + ::abi_decode_raw_validate( data, ) - .map(SyndicateSequencingChainErrors::ZeroEpochIndex) + .map(SyndicateSequencingChainErrors::NotGasMeterContract) } - ZeroEpochIndex + NotGasMeterContract }, { fn NoTxData( @@ -6610,6 +7125,30 @@ function updateRequirementModule(address _newModule) external; } TransactionOrSenderNotAllowed }, + { + fn UUPSUnauthorizedCallContext( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainErrors::UUPSUnauthorizedCallContext, + ) + } + UUPSUnauthorizedCallContext + }, + { + fn InvalidInitialization( + data: &[u8], + ) -> alloy_sol_types::Result { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainErrors::InvalidInitialization) + } + InvalidInitialization + }, ]; let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { return Err( @@ -6624,22 +7163,45 @@ function updateRequirementModule(address _newModule) external; #[inline] fn abi_encoded_size(&self) -> usize { match self { + Self::AddressEmptyCode(inner) => { + ::abi_encoded_size( + inner, + ) + } Self::DataTooLarge(inner) => { ::abi_encoded_size(inner) } - Self::GasTrackingAlreadyDisabled(inner) => { - ::abi_encoded_size( + Self::ERC1967InvalidImplementation(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ERC1967NonPayable(inner) => { + ::abi_encoded_size( inner, ) } - Self::GasTrackingAlreadyEnabled(inner) => { - ::abi_encoded_size( + Self::FailedCall(inner) => { + ::abi_encoded_size(inner) + } + Self::InvalidInitialization(inner) => { + ::abi_encoded_size( inner, ) } Self::NoTxData(inner) => { ::abi_encoded_size(inner) } + Self::NotGasMeterContract(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::NotInitializing(inner) => { + ::abi_encoded_size( + inner, + ) + } Self::OwnableInvalidOwner(inner) => { ::abi_encoded_size( inner, @@ -6655,30 +7217,53 @@ function updateRequirementModule(address _newModule) external; inner, ) } - Self::ZeroEpochIndex(inner) => { - ::abi_encoded_size( + Self::UUPSUnauthorizedCallContext(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::UUPSUnsupportedProxiableUUID(inner) => { + ::abi_encoded_size( inner, ) } + Self::ZeroAddress(inner) => { + ::abi_encoded_size(inner) + } } } #[inline] fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { match self { + Self::AddressEmptyCode(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } Self::DataTooLarge(inner) => { ::abi_encode_raw( inner, out, ) } - Self::GasTrackingAlreadyDisabled(inner) => { - ::abi_encode_raw( + Self::ERC1967InvalidImplementation(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ERC1967NonPayable(inner) => { + ::abi_encode_raw( inner, out, ) } - Self::GasTrackingAlreadyEnabled(inner) => { - ::abi_encode_raw( + Self::FailedCall(inner) => { + ::abi_encode_raw(inner, out) + } + Self::InvalidInitialization(inner) => { + ::abi_encode_raw( inner, out, ) @@ -6686,6 +7271,18 @@ function updateRequirementModule(address _newModule) external; Self::NoTxData(inner) => { ::abi_encode_raw(inner, out) } + Self::NotGasMeterContract(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::NotInitializing(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } Self::OwnableInvalidOwner(inner) => { ::abi_encode_raw( inner, @@ -6704,8 +7301,20 @@ function updateRequirementModule(address _newModule) external; out, ) } - Self::ZeroEpochIndex(inner) => { - ::abi_encode_raw( + Self::UUPSUnauthorizedCallContext(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::UUPSUnsupportedProxiableUUID(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ZeroAddress(inner) => { + ::abi_encode_raw( inner, out, ) @@ -6718,13 +7327,15 @@ function updateRequirementModule(address _newModule) external; #[derive(Debug, PartialEq, Eq, Hash)] pub enum SyndicateSequencingChainEvents { #[allow(missing_docs)] - EmissionsReceiverUpdated(EmissionsReceiverUpdated), + Initialized(Initialized), #[allow(missing_docs)] OwnershipTransferred(OwnershipTransferred), #[allow(missing_docs)] RequirementModuleUpdated(RequirementModuleUpdated), #[allow(missing_docs)] TransactionProcessed(TransactionProcessed), + #[allow(missing_docs)] + Upgraded(Upgraded), } #[automatically_derived] impl SyndicateSequencingChainEvents { @@ -6735,11 +7346,6 @@ function updateRequirementModule(address _newModule) external; /// /// Prefer using `SolInterface` methods instead. pub const SELECTORS: &'static [[u8; 32usize]] = &[ - [ - 22u8, 174u8, 49u8, 121u8, 97u8, 90u8, 40u8, 21u8, 88u8, 59u8, 101u8, - 102u8, 234u8, 230u8, 247u8, 131u8, 178u8, 84u8, 25u8, 69u8, 44u8, 0u8, - 89u8, 154u8, 238u8, 176u8, 16u8, 136u8, 241u8, 62u8, 202u8, 26u8, - ], [ 37u8, 53u8, 128u8, 248u8, 6u8, 116u8, 28u8, 17u8, 179u8, 212u8, 170u8, 96u8, 217u8, 202u8, 204u8, 91u8, 239u8, 12u8, 235u8, 179u8, 87u8, 72u8, @@ -6755,25 +7361,33 @@ function updateRequirementModule(address _newModule) external; 31u8, 208u8, 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8, 218u8, 175u8, 227u8, 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8, ], + [ + 188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8, + 179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8, + 12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8, + ], + [ + 199u8, 245u8, 5u8, 178u8, 243u8, 113u8, 174u8, 33u8, 117u8, 238u8, 73u8, + 19u8, 244u8, 73u8, 158u8, 31u8, 38u8, 51u8, 167u8, 181u8, 147u8, 99u8, + 33u8, 238u8, 209u8, 205u8, 174u8, 182u8, 17u8, 81u8, 129u8, 210u8, + ], ]; } #[automatically_derived] impl alloy_sol_types::SolEventInterface for SyndicateSequencingChainEvents { const NAME: &'static str = "SyndicateSequencingChainEvents"; - const COUNT: usize = 4usize; + const COUNT: usize = 5usize; fn decode_raw_log( topics: &[alloy_sol_types::Word], data: &[u8], ) -> alloy_sol_types::Result { match topics.first().copied() { - Some( - ::SIGNATURE_HASH, - ) => { - ::decode_raw_log( + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( topics, data, ) - .map(Self::EmissionsReceiverUpdated) + .map(Self::Initialized) } Some( ::SIGNATURE_HASH, @@ -6802,6 +7416,10 @@ function updateRequirementModule(address _newModule) external; ) .map(Self::TransactionProcessed) } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log(topics, data) + .map(Self::Upgraded) + } _ => { alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog { name: ::NAME, @@ -6820,7 +7438,7 @@ function updateRequirementModule(address _newModule) external; impl alloy_sol_types::private::IntoLogData for SyndicateSequencingChainEvents { fn to_log_data(&self) -> alloy_sol_types::private::LogData { match self { - Self::EmissionsReceiverUpdated(inner) => { + Self::Initialized(inner) => { alloy_sol_types::private::IntoLogData::to_log_data(inner) } Self::OwnershipTransferred(inner) => { @@ -6832,11 +7450,14 @@ function updateRequirementModule(address _newModule) external; Self::TransactionProcessed(inner) => { alloy_sol_types::private::IntoLogData::to_log_data(inner) } + Self::Upgraded(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } } } fn into_log_data(self) -> alloy_sol_types::private::LogData { match self { - Self::EmissionsReceiverUpdated(inner) => { + Self::Initialized(inner) => { alloy_sol_types::private::IntoLogData::into_log_data(inner) } Self::OwnershipTransferred(inner) => { @@ -6848,6 +7469,9 @@ function updateRequirementModule(address _newModule) external; Self::TransactionProcessed(inner) => { alloy_sol_types::private::IntoLogData::into_log_data(inner) } + Self::Upgraded(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } } } } @@ -6876,11 +7500,11 @@ For more fine-grained control over the deployment process, use [`deploy_builder` N: alloy_contract::private::Network, >( provider: P, - _appchainId: alloy::sol_types::private::primitives::aliases::U256, + _gasMeter: alloy::sol_types::private::Address, ) -> impl ::core::future::Future< Output = alloy_contract::Result>, > { - SyndicateSequencingChainInstance::::deploy(provider, _appchainId) + SyndicateSequencingChainInstance::::deploy(provider, _gasMeter) } /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` and constructor arguments, if any. @@ -6893,9 +7517,9 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ N: alloy_contract::private::Network, >( provider: P, - _appchainId: alloy::sol_types::private::primitives::aliases::U256, + _gasMeter: alloy::sol_types::private::Address, ) -> alloy_contract::RawCallBuilder { - SyndicateSequencingChainInstance::::deploy_builder(provider, _appchainId) + SyndicateSequencingChainInstance::::deploy_builder(provider, _gasMeter) } /**A [`SyndicateSequencingChain`](self) instance. @@ -6954,9 +7578,9 @@ For more fine-grained control over the deployment process, use [`deploy_builder` #[inline] pub async fn deploy( provider: P, - _appchainId: alloy::sol_types::private::primitives::aliases::U256, + _gasMeter: alloy::sol_types::private::Address, ) -> alloy_contract::Result> { - let call_builder = Self::deploy_builder(provider, _appchainId); + let call_builder = Self::deploy_builder(provider, _gasMeter); let contract_address = call_builder.deploy().await?; Ok(Self::new(contract_address, call_builder.provider)) } @@ -6968,14 +7592,14 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ #[inline] pub fn deploy_builder( provider: P, - _appchainId: alloy::sol_types::private::primitives::aliases::U256, + _gasMeter: alloy::sol_types::private::Address, ) -> alloy_contract::RawCallBuilder { alloy_contract::RawCallBuilder::new_raw_deploy( provider, [ &BYTECODE[..], &alloy_sol_types::SolConstructor::abi_encode( - &constructorCall { _appchainId }, + &constructorCall { _gasMeter }, )[..], ] .concat() @@ -7030,41 +7654,67 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::SolCallBuilder<&P, C, N> { alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) } - ///Creates a new call builder for the [`EPOCH_DURATION`] function. - pub fn EPOCH_DURATION( + ///Creates a new call builder for the [`SEQUENCING_MODULE_STORAGE_LOCATION`] function. + pub fn SEQUENCING_MODULE_STORAGE_LOCATION( &self, - ) -> alloy_contract::SolCallBuilder<&P, EPOCH_DURATIONCall, N> { - self.call_builder(&EPOCH_DURATIONCall) - } - ///Creates a new call builder for the [`START_TIMESTAMP`] function. - pub fn START_TIMESTAMP( + ) -> alloy_contract::SolCallBuilder< + &P, + SEQUENCING_MODULE_STORAGE_LOCATIONCall, + N, + > { + self.call_builder(&SEQUENCING_MODULE_STORAGE_LOCATIONCall) + } + ///Creates a new call builder for the [`SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION`] function. + pub fn SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( &self, - ) -> alloy_contract::SolCallBuilder<&P, START_TIMESTAMPCall, N> { - self.call_builder(&START_TIMESTAMPCall) - } - ///Creates a new call builder for the [`appchainId`] function. - pub fn appchainId( + ) -> alloy_contract::SolCallBuilder< + &P, + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall, + N, + > { + self.call_builder(&SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall) + } + ///Creates a new call builder for the [`UPGRADE_INTERFACE_VERSION`] function. + pub fn UPGRADE_INTERFACE_VERSION( &self, - ) -> alloy_contract::SolCallBuilder<&P, appchainIdCall, N> { - self.call_builder(&appchainIdCall) + ) -> alloy_contract::SolCallBuilder<&P, UPGRADE_INTERFACE_VERSIONCall, N> { + self.call_builder(&UPGRADE_INTERFACE_VERSIONCall) } - ///Creates a new call builder for the [`disableGasTracking`] function. - pub fn disableGasTracking( + ///Creates a new call builder for the [`VERSION`] function. + pub fn VERSION(&self) -> alloy_contract::SolCallBuilder<&P, VERSIONCall, N> { + self.call_builder(&VERSIONCall) + } + ///Creates a new call builder for the [`_processTransaction`] function. + pub fn _processTransaction( &self, - ) -> alloy_contract::SolCallBuilder<&P, disableGasTrackingCall, N> { - self.call_builder(&disableGasTrackingCall) + sequencer: alloy::sol_types::private::Address, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, _processTransactionCall, N> { + self.call_builder( + &_processTransactionCall { + sequencer, + data, + }, + ) } - ///Creates a new call builder for the [`emissionsReceiver`] function. - pub fn emissionsReceiver( + ///Creates a new call builder for the [`_processTransactionsBulk`] function. + pub fn _processTransactionsBulk( &self, - ) -> alloy_contract::SolCallBuilder<&P, emissionsReceiverCall, N> { - self.call_builder(&emissionsReceiverCall) + sequencer: alloy::sol_types::private::Address, + data: alloy::sol_types::private::Vec, + ) -> alloy_contract::SolCallBuilder<&P, _processTransactionsBulkCall, N> { + self.call_builder( + &_processTransactionsBulkCall { + sequencer, + data, + }, + ) } - ///Creates a new call builder for the [`enableGasTracking`] function. - pub fn enableGasTracking( + ///Creates a new call builder for the [`appchainId`] function. + pub fn appchainId( &self, - ) -> alloy_contract::SolCallBuilder<&P, enableGasTrackingCall, N> { - self.call_builder(&enableGasTrackingCall) + ) -> alloy_contract::SolCallBuilder<&P, appchainIdCall, N> { + self.call_builder(&appchainIdCall) } ///Creates a new call builder for the [`encodeTransaction`] function. pub fn encodeTransaction( @@ -7073,46 +7723,28 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::SolCallBuilder<&P, encodeTransactionCall, N> { self.call_builder(&encodeTransactionCall { data }) } - ///Creates a new call builder for the [`gasTrackingDisabled`] function. - pub fn gasTrackingDisabled( - &self, - ) -> alloy_contract::SolCallBuilder<&P, gasTrackingDisabledCall, N> { - self.call_builder(&gasTrackingDisabledCall) - } - ///Creates a new call builder for the [`getCurrentEpoch`] function. - pub fn getCurrentEpoch( - &self, - ) -> alloy_contract::SolCallBuilder<&P, getCurrentEpochCall, N> { - self.call_builder(&getCurrentEpochCall) - } - ///Creates a new call builder for the [`getEmissionsReceiver`] function. - pub fn getEmissionsReceiver( - &self, - ) -> alloy_contract::SolCallBuilder<&P, getEmissionsReceiverCall, N> { - self.call_builder(&getEmissionsReceiverCall) - } - ///Creates a new call builder for the [`getEpochEnd`] function. - pub fn getEpochEnd( - &self, - epochIndex: alloy::sol_types::private::primitives::aliases::U256, - ) -> alloy_contract::SolCallBuilder<&P, getEpochEndCall, N> { - self.call_builder(&getEpochEndCall { epochIndex }) + ///Creates a new call builder for the [`gasMeter`] function. + pub fn gasMeter(&self) -> alloy_contract::SolCallBuilder<&P, gasMeterCall, N> { + self.call_builder(&gasMeterCall) } - ///Creates a new call builder for the [`getEpochStart`] function. - pub fn getEpochStart( + ///Creates a new call builder for the [`getInitializedVersion`] function. + pub fn getInitializedVersion( &self, - epochIndex: alloy::sol_types::private::primitives::aliases::U256, - ) -> alloy_contract::SolCallBuilder<&P, getEpochStartCall, N> { - self.call_builder(&getEpochStartCall { epochIndex }) + ) -> alloy_contract::SolCallBuilder<&P, getInitializedVersionCall, N> { + self.call_builder(&getInitializedVersionCall) } - ///Creates a new call builder for the [`getTokensForEpoch`] function. - pub fn getTokensForEpoch( + ///Creates a new call builder for the [`initialize`] function. + pub fn initialize( &self, - epochIndex: alloy::sol_types::private::primitives::aliases::U256, - ) -> alloy_contract::SolCallBuilder<&P, getTokensForEpochCall, N> { + admin: alloy::sol_types::private::Address, + _permissionRequirementModule: alloy::sol_types::private::Address, + _appchainId: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, initializeCall, N> { self.call_builder( - &getTokensForEpochCall { - epochIndex, + &initializeCall { + admin, + _permissionRequirementModule, + _appchainId, }, ) } @@ -7165,34 +7797,18 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ }, ) } + ///Creates a new call builder for the [`proxiableUUID`] function. + pub fn proxiableUUID( + &self, + ) -> alloy_contract::SolCallBuilder<&P, proxiableUUIDCall, N> { + self.call_builder(&proxiableUUIDCall) + } ///Creates a new call builder for the [`renounceOwnership`] function. pub fn renounceOwnership( &self, ) -> alloy_contract::SolCallBuilder<&P, renounceOwnershipCall, N> { self.call_builder(&renounceOwnershipCall) } - ///Creates a new call builder for the [`setEmissionsReceiver`] function. - pub fn setEmissionsReceiver( - &self, - _emissionsReceiver: alloy::sol_types::private::Address, - ) -> alloy_contract::SolCallBuilder<&P, setEmissionsReceiverCall, N> { - self.call_builder( - &setEmissionsReceiverCall { - _emissionsReceiver, - }, - ) - } - ///Creates a new call builder for the [`tokensUsedPerEpoch`] function. - pub fn tokensUsedPerEpoch( - &self, - epochIndex: alloy::sol_types::private::primitives::aliases::U256, - ) -> alloy_contract::SolCallBuilder<&P, tokensUsedPerEpochCall, N> { - self.call_builder( - &tokensUsedPerEpochCall { - epochIndex, - }, - ) - } ///Creates a new call builder for the [`transferOwnership`] function. pub fn transferOwnership( &self, @@ -7211,6 +7827,19 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ }, ) } + ///Creates a new call builder for the [`upgradeToAndCall`] function. + pub fn upgradeToAndCall( + &self, + newImplementation: alloy::sol_types::private::Address, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, upgradeToAndCallCall, N> { + self.call_builder( + &upgradeToAndCallCall { + newImplementation, + data, + }, + ) + } } /// Event filters. #[automatically_derived] @@ -7227,11 +7856,9 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::Event<&P, E, N> { alloy_contract::Event::new_sol(&self.provider, &self.address) } - ///Creates a new event filter for the [`EmissionsReceiverUpdated`] event. - pub fn EmissionsReceiverUpdated_filter( - &self, - ) -> alloy_contract::Event<&P, EmissionsReceiverUpdated, N> { - self.event_filter::() + ///Creates a new event filter for the [`Initialized`] event. + pub fn Initialized_filter(&self) -> alloy_contract::Event<&P, Initialized, N> { + self.event_filter::() } ///Creates a new event filter for the [`OwnershipTransferred`] event. pub fn OwnershipTransferred_filter( @@ -7251,5 +7878,9 @@ the bytecode concatenated with the constructor's ABI-encoded arguments.*/ ) -> alloy_contract::Event<&P, TransactionProcessed, N> { self.event_filter::() } + ///Creates a new event filter for the [`Upgraded`] event. + pub fn Upgraded_filter(&self) -> alloy_contract::Event<&P, Upgraded, N> { + self.event_filter::() + } } } diff --git a/shared/contract-bindings/src/synd/syndicate_sequencing_chain_testing_upgradeability.rs b/shared/contract-bindings/src/synd/syndicate_sequencing_chain_testing_upgradeability.rs new file mode 100644 index 000000000..6952f1079 --- /dev/null +++ b/shared/contract-bindings/src/synd/syndicate_sequencing_chain_testing_upgradeability.rs @@ -0,0 +1,13074 @@ +/** + +Generated by the following Solidity interface... +```solidity +interface SyndicateSequencingChainTestingUpgradeability { + error AddressEmptyCode(address target); + error DataTooLarge(uint256 dataLength, uint256 maxDataLength); + error ERC1967InvalidImplementation(address implementation); + error ERC1967NonPayable(); + error FailedCall(); + error GasTrackingAlreadyDisabled(); + error GasTrackingAlreadyEnabled(); + error InvalidInitialization(); + error NoTxData(); + error NotInitializing(); + error OwnableInvalidOwner(address owner); + error OwnableUnauthorizedAccount(address account); + error TransactionOrSenderNotAllowed(); + error UUPSUnauthorizedCallContext(); + error UUPSUnsupportedProxiableUUID(bytes32 slot); + error ZeroEpochIndex(); + + event BatchProcessingToggled(bool enabled); + event Initialized(uint64 version); + event MaxGasPerTransactionUpdated(uint256 newMax); + event MaxTransactionsPerBatchUpdated(uint256 newMax); + event MinTimeBetweenTxsUpdated(uint256 newMin); + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + event ReplayProtectionToggled(bool enabled); + event RequirementModuleUpdated(address indexed newModule); + event TransactionProcessed(address indexed sender, bytes data); + event Upgraded(address indexed implementation); + + function EPOCH_DURATION() external view returns (uint256); + function GAS_COUNTER_STORAGE_LOCATION() external view returns (bytes32); + function SEQUENCING_MODULE_STORAGE_LOCATION() external view returns (bytes32); + function START_TIMESTAMP() external view returns (uint256); + function SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION() external view returns (bytes32); + function UPGRADE_INTERFACE_VERSION() external view returns (string memory); + function appchainId() external view returns (uint256); + function batchProcessingEnabled() external view returns (bool); + function disableGasTracking() external; + function enableGasTracking() external; + function encodeTransaction(bytes memory data) external pure returns (bytes memory); + function gasTrackingEnabled() external view returns (bool); + function getCurrentEpoch() external view returns (uint256); + function getEpochEnd(uint256 epochIndex) external pure returns (uint256); + function getEpochStart(uint256 epochIndex) external pure returns (uint256); + function getTokensForEpoch(uint256 epoch) external view returns (uint256); + function initialize(address admin, address, address _permissionRequirementModule, address, uint256 _appchainId) external; + function isAllowed(address proposer, address originator, bytes memory data) external view returns (bool); + function lastPermissionUpdate() external view returns (uint256); + function lastTransactionTime(address) external view returns (uint256); + function maxDataSize() external view returns (uint256); + function maxGasPerTransaction() external view returns (uint256); + function maxTransactionsPerBatch() external view returns (uint256); + function minTimeBetweenTxs() external view returns (uint256); + function owner() external view returns (address); + function permissionRequirementModule() external view returns (address); + function processTransaction(bytes memory data) external; + function processTransactionsBulk(bytes[] memory data) external; + function proxiableUUID() external view returns (bytes32); + function renounceOwnership() external; + function replayProtectionEnabled() external view returns (bool); + function setMaxGasPerTransaction(uint256 _maxGas) external; + function setMaxTransactionsPerBatch(uint256 _max) external; + function setMinTimeBetweenTxs(uint256 _minTime) external; + function toggleBatchProcessing() external; + function toggleReplayProtection() external; + function tokensUsedPerEpoch(uint256 epoch) external view returns (uint256); + function transferOwnership(address newOwner) external; + function updateRequirementModule(address _newModule) external; + function upgradeToAndCall(address newImplementation, bytes memory data) external payable; + function version() external view returns (uint256); +} +``` + +...which was generated by the following JSON ABI: +```json +[ + { + "type": "function", + "name": "EPOCH_DURATION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "GAS_COUNTER_STORAGE_LOCATION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "SEQUENCING_MODULE_STORAGE_LOCATION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "START_TIMESTAMP", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "appchainId", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "batchProcessingEnabled", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "disableGasTracking", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "enableGasTracking", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "encodeTransaction", + "inputs": [ + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "gasTrackingEnabled", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getCurrentEpoch", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getEpochEnd", + "inputs": [ + { + "name": "epochIndex", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "getEpochStart", + "inputs": [ + { + "name": "epochIndex", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "getTokensForEpoch", + "inputs": [ + { + "name": "epoch", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "admin", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "_permissionRequirementModule", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "_appchainId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isAllowed", + "inputs": [ + { + "name": "proposer", + "type": "address", + "internalType": "address" + }, + { + "name": "originator", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "lastPermissionUpdate", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "lastTransactionTime", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "maxDataSize", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "maxGasPerTransaction", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "maxTransactionsPerBatch", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "minTimeBetweenTxs", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "permissionRequirementModule", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IPermissionModule" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "processTransaction", + "inputs": [ + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "processTransactionsBulk", + "inputs": [ + { + "name": "data", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "replayProtectionEnabled", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setMaxGasPerTransaction", + "inputs": [ + { + "name": "_maxGas", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setMaxTransactionsPerBatch", + "inputs": [ + { + "name": "_max", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setMinTimeBetweenTxs", + "inputs": [ + { + "name": "_minTime", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "toggleBatchProcessing", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "toggleReplayProtection", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "tokensUsedPerEpoch", + "inputs": [ + { + "name": "epoch", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateRequirementModule", + "inputs": [ + { + "name": "_newModule", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "version", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "BatchProcessingToggled", + "inputs": [ + { + "name": "enabled", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MaxGasPerTransactionUpdated", + "inputs": [ + { + "name": "newMax", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MaxTransactionsPerBatchUpdated", + "inputs": [ + { + "name": "newMax", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MinTimeBetweenTxsUpdated", + "inputs": [ + { + "name": "newMin", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ReplayProtectionToggled", + "inputs": [ + { + "name": "enabled", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RequirementModuleUpdated", + "inputs": [ + { + "name": "newModule", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TransactionProcessed", + "inputs": [ + { + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "DataTooLarge", + "inputs": [ + { + "name": "dataLength", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxDataLength", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedCall", + "inputs": [] + }, + { + "type": "error", + "name": "GasTrackingAlreadyDisabled", + "inputs": [] + }, + { + "type": "error", + "name": "GasTrackingAlreadyEnabled", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] + }, + { + "type": "error", + "name": "NoTxData", + "inputs": [] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "TransactionOrSenderNotAllowed", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { + "name": "slot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "ZeroEpochIndex", + "inputs": [] + } +] +```*/ +#[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style, + clippy::empty_structs_with_brackets +)] +pub mod SyndicateSequencingChainTestingUpgradeability { + use super::*; + use alloy::sol_types as alloy_sol_types; + /// The creation / init bytecode of the contract. + /// + /// ```text + ///0x60a080604052346029573060805261219e908161002e823960805181818161128f01526113520152f35b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c9081630175e23b14611983575080630c6723631461065957806317cb741f146118d35780631a8b91e8146118b15780632407f0b6146118775780632bff3d4c146117995780633b8308891461175d57806346e2cc091461160f5780634f1ef2861461130757806352d1902d146112685780635467cb48146111d557806354fd4d5014611199578063598c8be6146110c95780635b3cd6e214611077578063715018a614610fbb578063781cd99d14610f9d5780637a3979dc14610f4457806384fab62b14610f035780638507492514610ed45780638da5cb5b14610e825780638e6ae22914610e365780638e99f92914610e1a57806395c5bf7514610de05780639a6c01bf14610d85578063a70b9f0c14610d68578063ad3cb1cc14610d05578063b747b70b14610ce8578063b97dd9e214610c92578063b9f7f26014610c58578063ca600aa814610c1c578063cdafb9781461085a578063d4f0eb4d14610772578063d5176d23146106fe578063d8781342146106c2578063de1f453e146106a2578063e039616614610659578063e057fd0814610618578063e75b2073146105d3578063e8eb1dc3146105b6578063f2fde38b146105905763f7013ef6146101df575f80fd5b3461058c5760a060031936011261058c576101f8611a70565b610200611a93565b5060443573ffffffffffffffffffffffffffffffffffffffff811680910361058c5761022a611ab6565b507ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159267ffffffffffffffff821680159081610584575b600114908161057a575b159081610571575b5061054957818460017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006102f19516177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556104f4575b506102dc6120ae565b6102e46120ae565b6102ec6120ae565b611ed3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005560647f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50155600160ff197f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5025416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50255427f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d503556103f26120ae565b6084357fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a40055620f42407fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a4015561044561202c565b620f42405f55600160ff19815416176001555f60025561046157005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00555f6102d3565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f61027c565b303b159150610274565b85915061026a565b5f80fd5b3461058c57602060031936011261058c576105b46105ac611a70565b6102ec611fc0565b005b3461058c575f60031936011261058c57602060405162030d408152f35b3461058c57602060031936011261058c5773ffffffffffffffffffffffffffffffffffffffff610601611a70565b165f526003602052602060405f2054604051908152f35b3461058c575f60031936011261058c57602060ff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50254166040519015158152f35b3461058c57602060031936011261058c576004355f527f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b14801602052602060405f2054604051908152f35b3461058c575f60031936011261058c576106ba611fc0565b6105b461202c565b3461058c575f60031936011261058c5760207fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a40054604051908152f35b3461058c57602060031936011261058c5760043562278d0081029080820462278d0014901517156107455763688d46f0018063688d46f01161074557602090604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b3461058c57602060031936011261058c5773ffffffffffffffffffffffffffffffffffffffff6107a0611a70565b6107a8611fc0565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50055427f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d503557f253580f806741c11b3d4aa60d9cacc5bef0cebb35748767fe23f11916e2f04b95f80a2005b3461058c57602060031936011261058c5760043567ffffffffffffffff811161058c573660238201121561058c5780600401359067ffffffffffffffff821161058c5760248101908260051b90366024838301011161058c5760ff6001541680610c11575b610bda575b90604051918460408401602080860152526060808401928401019184915f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbd82360301915b888210610b6257888861094e89610947818b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611ad9565b3233611cee565b15610b3a5760ff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d502541615610adc578115610a7e577f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d501548211610a20575f5b8281106109b657005b806109c46001928585611e46565b90506109d1575b016109ad565b610a187f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f610a00838787611e46565b92906040519182916020835233956020840191611cb0565b0390a26109cb565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f546f6f206d616e79207472616e73616374696f6e7320696e20626174636800006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4e6f207472616e73616374696f6e732070726f766964656400000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f42617463682070726f63657373696e672069732064697361626c6564000000006044820152fd5b7fdc741458000000000000000000000000000000000000000000000000000000005f5260045ffd5b90919293947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087820301855285358481121561058c578201906044602483013592019167ffffffffffffffff811161058c57803603831361058c57610bcd6020928392600195611cb0565b9701950193920190610909565b335f526003602052610bfe610bf660405f205460025490611c18565b421015611c25565b335f5260036020524260405f20556108c4565b5060025415156108bf565b3461058c575f60031936011261058c5760207f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50154604051908152f35b3461058c575f60031936011261058c5760206040517f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b148008152f35b3461058c575f60031936011261058c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff9772b91042014281116107455762278d0090046001810180911161074557602090604051908152f35b3461058c575f60031936011261058c576020600254604051908152f35b3461058c575f60031936011261058c57610d64604051610d26604082611ad9565b600581527f352e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190611bd5565b0390f35b3461058c575f60031936011261058c57602060405162278d008152f35b3461058c575f60031936011261058c57610d9d611fc0565b7f359ed1295f5093274b6ca6a37945b86cac4f0e2def43afd3a2c8a1290923f242602060ff1960015460ff808216151691829116176001556040519015158152a1005b3461058c575f60031936011261058c5760206040517fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a4008152f35b3461058c575f60031936011261058c5760205f54604051908152f35b3461058c57602060031936011261058c577f388cac5665b362f381dd96c7c6cde0499ff225b776c3bd646b1fe04ebfd903a56020600435610e75611fc0565b80600255604051908152a1005b3461058c575f60031936011261058c57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461058c57610d64610eef610ee836611a1f565b3691611b81565b604051918291602083526020830190611bd5565b3461058c575f60031936011261058c57602060ff7f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b1480054166040519015158152f35b3461058c57606060031936011261058c57610f5d611a70565b610f65611a93565b906044359067ffffffffffffffff821161058c57602092610f8d610f93933690600401611bb7565b91611cee565b6040519015158152f35b3461058c575f60031936011261058c57602060405163688d46f08152f35b3461058c575f60031936011261058c57610fd3611fc0565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461058c575f60031936011261058c57602073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416604051908152f35b3461058c57602060031936011261058c576004356110e5611fc0565b801561113b576020817ff01ac6cf9d7e78a809ecb6d0a29ea0813dd23067a630105fceb96df27e923fe1927f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50155604051908152a1005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d6178206d7573742062652067726561746572207468616e20300000000000006044820152fd5b3461058c575f60031936011261058c5760207fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a40154604051908152f35b3461058c575f60031936011261058c576111ed611fc0565b7f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b148005460ff8116156112405760ff19167f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b1480055005b7fcd60c3ca000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461058c575f60031936011261058c5773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036112df5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b604060031936011261058c5761131b611a70565b60243567ffffffffffffffff811161058c5761133b903690600401611bb7565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168030149081156115cd575b506112df5761138a611fc0565b73ffffffffffffffffffffffffffffffffffffffff8216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa5f9181611599575b5061140a57837f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc85920361156e5750813b1561154357807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115611512575f808360206105b495519101845af43d1561150a573d916114ee83611b47565b926114fc6040519485611ad9565b83523d5f602085013e612105565b606091612105565b50503461151b57005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d6020116115c5575b816115b560209383611ad9565b8101031261058c575190856113d9565b3d91506115a8565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614158361137d565b3461058c5761161d36611a1f565b9061162c610947368484611b81565b15610b3a5760ff6001541680611752575b611723575b81156116fb575f5480611691575b5061168c7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f916040519182916020835233956020840191611cb0565b0390a2005b5a1161169d5782611650565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5472616e73616374696f6e206578636565647320676173206c696d69740000006044820152fd5b7fdc37f51d000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600360205261173f610bf660405f205460025490611c18565b335f5260036020524260405f2055611642565b50600254151561163d565b3461058c575f60031936011261058c5760207f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50354604051908152f35b3461058c575f60031936011261058c576117b1611fc0565b60ff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50254161560ff60ff197f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50254169116177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d502557fce2dc796d081c9c190146a304ec3b75ad6ace03c37c87c8d8f88c8b15dd8184c602060ff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50254166040519015158152a1005b3461058c575f60031936011261058c5760206040517f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5008152f35b3461058c575f60031936011261058c57602060ff600154166040519015158152f35b3461058c57602060031936011261058c576004356118ef611fc0565b8015611925576020817f75fb1dcaa01cb4ae892a3f40a33cbbb2473f434a8319c52d2d185fe13caa135d925f55604051908152a1005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4d617820676173206d7573742062652067726561746572207468616e203000006044820152fd5b3461058c57602060031936011261058c5760043580156119f7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116107455762278d0081029080820462278d0014901517156107455763688d46f001908163688d46f011610745576020918152f35b7fd69368d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b90602060031983011261058c5760043567ffffffffffffffff811161058c578260238201121561058c5780600401359267ffffffffffffffff841161058c576024848301011161058c576024019190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361058c57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361058c57565b6064359073ffffffffffffffffffffffffffffffffffffffff8216820361058c57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611b1a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111611b1a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192611b8d82611b47565b91611b9b6040519384611ad9565b82948184528183011161058c578281602093845f960137010152565b9080601f8301121561058c57816020611bd293359101611b81565b90565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9190820180921161074557565b15611c2c57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5472616e73616374696f6e20746f6f20736f6f6e20616674657220707265766960448201527f6f757300000000000000000000000000000000000000000000000000000000006064820152fd5b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b9190815162030d408111611e14575073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500541660018114928315611d49575b505050905090565b6020935073ffffffffffffffffffffffffffffffffffffffff94611db28692604051978896879586957f7a3979dc000000000000000000000000000000000000000000000000000000008752166004860152166024840152606060448401526064830190611bd5565b03915afa908115611e09575f91611dce575b50805f8080611d41565b90506020813d602011611e01575b81611de960209383611ad9565b8101031261058c5751801515810361058c575f611dc4565b3d9150611ddc565b6040513d5f823e3d90fd5b7f4634691b000000000000000000000000000000000000000000000000000000005f5260045262030d4060245260445ffd5b9190811015611ea65760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561058c57019081359167ffffffffffffffff831161058c57602001823603811361058c579190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff168015611f945773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361200057565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b1480054600160ff82161515146120865760ff19166001177f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b1480055565b7f7679400d000000000000000000000000000000000000000000000000000000005f5260045ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c16156120dd57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90612142575080511561211a57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580612195575b612153575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561214b56 + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"`\xA0\x80`@R4`)W0`\x80Ra!\x9E\x90\x81a\0.\x829`\x80Q\x81\x81\x81a\x12\x8F\x01Ra\x13R\x01R\xF3[_\x80\xFD\xFE`\x80\x80`@R`\x046\x10\x15a\0\x12W_\x80\xFD[_5`\xE0\x1C\x90\x81c\x01u\xE2;\x14a\x19\x83WP\x80c\x0Cg#c\x14a\x06YW\x80c\x17\xCBt\x1F\x14a\x18\xD3W\x80c\x1A\x8B\x91\xE8\x14a\x18\xB1W\x80c$\x07\xF0\xB6\x14a\x18wW\x80c+\xFF=L\x14a\x17\x99W\x80c;\x83\x08\x89\x14a\x17]W\x80cF\xE2\xCC\t\x14a\x16\x0FW\x80cO\x1E\xF2\x86\x14a\x13\x07W\x80cR\xD1\x90-\x14a\x12hW\x80cTg\xCBH\x14a\x11\xD5W\x80cT\xFDMP\x14a\x11\x99W\x80cY\x8C\x8B\xE6\x14a\x10\xC9W\x80c[<\xD6\xE2\x14a\x10wW\x80cqP\x18\xA6\x14a\x0F\xBBW\x80cx\x1C\xD9\x9D\x14a\x0F\x9DW\x80cz9y\xDC\x14a\x0FDW\x80c\x84\xFA\xB6+\x14a\x0F\x03W\x80c\x85\x07I%\x14a\x0E\xD4W\x80c\x8D\xA5\xCB[\x14a\x0E\x82W\x80c\x8Ej\xE2)\x14a\x0E6W\x80c\x8E\x99\xF9)\x14a\x0E\x1AW\x80c\x95\xC5\xBFu\x14a\r\xE0W\x80c\x9Al\x01\xBF\x14a\r\x85W\x80c\xA7\x0B\x9F\x0C\x14a\rhW\x80c\xAD<\xB1\xCC\x14a\r\x05W\x80c\xB7G\xB7\x0B\x14a\x0C\xE8W\x80c\xB9}\xD9\xE2\x14a\x0C\x92W\x80c\xB9\xF7\xF2`\x14a\x0CXW\x80c\xCA`\n\xA8\x14a\x0C\x1CW\x80c\xCD\xAF\xB9x\x14a\x08ZW\x80c\xD4\xF0\xEBM\x14a\x07rW\x80c\xD5\x17m#\x14a\x06\xFEW\x80c\xD8x\x13B\x14a\x06\xC2W\x80c\xDE\x1FE>\x14a\x06\xA2W\x80c\xE09af\x14a\x06YW\x80c\xE0W\xFD\x08\x14a\x06\x18W\x80c\xE7[ s\x14a\x05\xD3W\x80c\xE8\xEB\x1D\xC3\x14a\x05\xB6W\x80c\xF2\xFD\xE3\x8B\x14a\x05\x90Wc\xF7\x01>\xF6\x14a\x01\xDFW_\x80\xFD[4a\x05\x8CW`\xA0`\x03\x196\x01\x12a\x05\x8CWa\x01\xF8a\x1ApV[a\x02\0a\x1A\x93V[P`D5s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x05\x8CWa\x02*a\x1A\xB6V[P\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`\xFF\x81`@\x1C\x16\x15\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x15\x90\x81a\x05\x84W[`\x01\x14\x90\x81a\x05zW[\x15\x90\x81a\x05qW[Pa\x05IW\x81\x84`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0a\x02\xF1\x95\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x04\xF4W[Pa\x02\xDCa \xAEV[a\x02\xE4a \xAEV[a\x02\xECa \xAEV[a\x1E\xD3V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0U`d\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x01U`\x01`\xFF\x19\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02UB\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x03Ua\x03\xF2a \xAEV[`\x845\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0Ub\x0FB@\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\x01Ua\x04Ea ,V[b\x0FB@_U`\x01`\xFF\x19\x81T\x16\x17`\x01U_`\x02Ua\x04aW\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U_a\x02\xD3V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15_a\x02|V[0;\x15\x91Pa\x02tV[\x85\x91Pa\x02jV[_\x80\xFD[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CWa\x05\xB4a\x05\xACa\x1ApV[a\x02\xECa\x1F\xC0V[\0[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Qb\x03\r@\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x06\x01a\x1ApV[\x16_R`\x03` R` `@_ T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045_R\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\x01` R` `@_ T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\x06\xBAa\x1F\xC0V[a\x05\xB4a ,V[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` \x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0T`@Q\x90\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045b'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x07EWch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x07EW` \x90`@Q\x90\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x07\xA0a\x1ApV[a\x07\xA8a\x1F\xC0V[\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0UB\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x03U\x7F%5\x80\xF8\x06t\x1C\x11\xB3\xD4\xAA`\xD9\xCA\xCC[\xEF\x0C\xEB\xB3WHv\x7F\xE2?\x11\x91n/\x04\xB9_\x80\xA2\0[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x8CW6`#\x82\x01\x12\x15a\x05\x8CW\x80`\x04\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\x8CW`$\x81\x01\x90\x82`\x05\x1B\x906`$\x83\x83\x01\x01\x11a\x05\x8CW`\xFF`\x01T\x16\x80a\x0C\x11W[a\x0B\xDAW[\x90`@Q\x91\x84`@\x84\x01` \x80\x86\x01RR``\x80\x84\x01\x92\x84\x01\x01\x91\x84\x91_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBD\x826\x03\x01\x91[\x88\x82\x10a\x0BbW\x88\x88a\tN\x89a\tG\x81\x8B\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x1A\xD9V[23a\x1C\xEEV[\x15a\x0B:W`\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16\x15a\n\xDCW\x81\x15a\n~W\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x01T\x82\x11a\n W_[\x82\x81\x10a\t\xB6W\0[\x80a\t\xC4`\x01\x92\x85\x85a\x1EFV[\x90Pa\t\xD1W[\x01a\t\xADV[a\n\x18\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7Fa\n\0\x83\x87\x87a\x1EFV[\x92\x90`@Q\x91\x82\x91` \x83R3\x95` \x84\x01\x91a\x1C\xB0V[\x03\x90\xA2a\t\xCBV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1E`$\x82\x01R\x7FToo many transactions in batch\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FNo transactions provided\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBatch processing is disabled\0\0\0\0`D\x82\x01R\xFD[\x7F\xDCt\x14X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90\x91\x92\x93\x94\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA0\x87\x82\x03\x01\x85R\x855\x84\x81\x12\x15a\x05\x8CW\x82\x01\x90`D`$\x83\x015\x92\x01\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x8CW\x806\x03\x83\x13a\x05\x8CWa\x0B\xCD` \x92\x83\x92`\x01\x95a\x1C\xB0V[\x97\x01\x95\x01\x93\x92\x01\x90a\t\tV[3_R`\x03` Ra\x0B\xFEa\x0B\xF6`@_ T`\x02T\x90a\x1C\x18V[B\x10\x15a\x1C%V[3_R`\x03` RB`@_ Ua\x08\xC4V[P`\x02T\x15\x15a\x08\xBFV[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` \x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x01T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Q\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x97r\xB9\x10B\x01B\x81\x11a\x07EWb'\x8D\0\x90\x04`\x01\x81\x01\x80\x91\x11a\x07EW` \x90`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `\x02T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\rd`@Qa\r&`@\x82a\x1A\xD9V[`\x05\x81R\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x1B\xD5V[\x03\x90\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Qb'\x8D\0\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\r\x9Da\x1F\xC0V[\x7F5\x9E\xD1)_P\x93'Kl\xA6\xA3yE\xB8l\xACO\x0E-\xEFC\xAF\xD3\xA2\xC8\xA1)\t#\xF2B` `\xFF\x19`\x01T`\xFF\x80\x82\x16\x15\x16\x91\x82\x91\x16\x17`\x01U`@Q\x90\x15\x15\x81R\xA1\0[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Q\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` _T`@Q\x90\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW\x7F8\x8C\xACVe\xB3b\xF3\x81\xDD\x96\xC7\xC6\xCD\xE0I\x9F\xF2%\xB7v\xC3\xBDdk\x1F\xE0N\xBF\xD9\x03\xA5` `\x045a\x0Eua\x1F\xC0V[\x80`\x02U`@Q\x90\x81R\xA1\0[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[4a\x05\x8CWa\rda\x0E\xEFa\x0E\xE86a\x1A\x1FV[6\x91a\x1B\x81V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x1B\xD5V[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `\xFF\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x05\x8CW```\x03\x196\x01\x12a\x05\x8CWa\x0F]a\x1ApV[a\x0Fea\x1A\x93V[\x90`D5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\x8CW` \x92a\x0F\x8Da\x0F\x93\x936\x90`\x04\x01a\x1B\xB7V[\x91a\x1C\xEEV[`@Q\x90\x15\x15\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Qch\x8DF\xF0\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\x0F\xD3a\x1F\xC0V[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`@Q\x90\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045a\x10\xE5a\x1F\xC0V[\x80\x15a\x11;W` \x81\x7F\xF0\x1A\xC6\xCF\x9D~x\xA8\t\xEC\xB6\xD0\xA2\x9E\xA0\x81=\xD20g\xA60\x10_\xCE\xB9m\xF2~\x92?\xE1\x92\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x01U`@Q\x90\x81R\xA1\0[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1A`$\x82\x01R\x7FMax must be greater than 0\0\0\0\0\0\0`D\x82\x01R\xFD[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` \x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\x01T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\x11\xEDa\x1F\xC0V[\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0T`\xFF\x81\x16\x15a\x12@W`\xFF\x19\x16\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0U\0[\x7F\xCD`\xC3\xCA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x160\x03a\x12\xDFW` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[`@`\x03\x196\x01\x12a\x05\x8CWa\x13\x1Ba\x1ApV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x8CWa\x13;\x906\x90`\x04\x01a\x1B\xB7V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\x15\xCDW[Pa\x12\xDFWa\x13\x8Aa\x1F\xC0V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x91`@Q\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` \x81`\x04\x81\x87Z\xFA_\x91\x81a\x15\x99W[Pa\x14\nW\x83\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x80\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x85\x92\x03a\x15nWP\x81;\x15a\x15CW\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\x81Q\x15a\x15\x12W_\x80\x83` a\x05\xB4\x95Q\x91\x01\x84Z\xF4=\x15a\x15\nW=\x91a\x14\xEE\x83a\x1BGV[\x92a\x14\xFC`@Q\x94\x85a\x1A\xD9V[\x83R=_` \x85\x01>a!\x05V[``\x91a!\x05V[PP4a\x15\x1BW\0[\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x90\x91P` \x81=` \x11a\x15\xC5W[\x81a\x15\xB5` \x93\x83a\x1A\xD9V[\x81\x01\x03\x12a\x05\x8CWQ\x90\x85a\x13\xD9V[=\x91Pa\x15\xA8V[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15\x83a\x13}V[4a\x05\x8CWa\x16\x1D6a\x1A\x1FV[\x90a\x16,a\tG6\x84\x84a\x1B\x81V[\x15a\x0B:W`\xFF`\x01T\x16\x80a\x17RW[a\x17#W[\x81\x15a\x16\xFBW_T\x80a\x16\x91W[Pa\x16\x8C\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F\x91`@Q\x91\x82\x91` \x83R3\x95` \x84\x01\x91a\x1C\xB0V[\x03\x90\xA2\0[Z\x11a\x16\x9DW\x82a\x16PV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FTransaction exceeds gas limit\0\0\0`D\x82\x01R\xFD[\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[3_R`\x03` Ra\x17?a\x0B\xF6`@_ T`\x02T\x90a\x1C\x18V[3_R`\x03` RB`@_ Ua\x16BV[P`\x02T\x15\x15a\x16=V[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` \x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x03T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\x17\xB1a\x1F\xC0V[`\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16\x15`\xFF`\xFF\x19\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16\x91\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02U\x7F\xCE-\xC7\x96\xD0\x81\xC9\xC1\x90\x14j0N\xC3\xB7Z\xD6\xAC\xE0<7\xC8|\x8D\x8F\x88\xC8\xB1]\xD8\x18L` `\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16`@Q\x90\x15\x15\x81R\xA1\0[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Q\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `\xFF`\x01T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045a\x18\xEFa\x1F\xC0V[\x80\x15a\x19%W` \x81\x7Fu\xFB\x1D\xCA\xA0\x1C\xB4\xAE\x89*?@\xA3<\xBB\xB2G?CJ\x83\x19\xC5--\x18_\xE1<\xAA\x13]\x92_U`@Q\x90\x81R\xA1\0[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1E`$\x82\x01R\x7FMax gas must be greater than 0\0\0`D\x82\x01R\xFD[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045\x80\x15a\x19\xF7W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x01\x90\x81\x11a\x07EWb'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x07EWch\x8DF\xF0\x01\x90\x81ch\x8DF\xF0\x11a\x07EW` \x91\x81R\xF3[\x7F\xD6\x93h\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90` `\x03\x19\x83\x01\x12a\x05\x8CW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x8CW\x82`#\x82\x01\x12\x15a\x05\x8CW\x80`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\x05\x8CW`$\x84\x83\x01\x01\x11a\x05\x8CW`$\x01\x91\x90V[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x05\x8CWV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x05\x8CWV[`d5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x05\x8CWV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x1B\x1AW`@RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x1B\x1AW`\x1F\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16` \x01\x90V[\x92\x91\x92a\x1B\x8D\x82a\x1BGV[\x91a\x1B\x9B`@Q\x93\x84a\x1A\xD9V[\x82\x94\x81\x84R\x81\x83\x01\x11a\x05\x8CW\x82\x81` \x93\x84_\x96\x017\x01\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x05\x8CW\x81` a\x1B\xD2\x935\x91\x01a\x1B\x81V[\x90V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x82\x01\x80\x92\x11a\x07EWV[\x15a\x1C,WV[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`#`$\x82\x01R\x7FTransaction too soon after previ`D\x82\x01R\x7Fous\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x1F\x82` \x94\x93\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x93\x81\x86R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x81Qb\x03\r@\x81\x11a\x1E\x14WPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`\x01\x81\x14\x92\x83\x15a\x1DIW[PPP\x90P\x90V[` \x93Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94a\x1D\xB2\x86\x92`@Q\x97\x88\x96\x87\x95\x86\x95\x7Fz9y\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R\x16`\x04\x86\x01R\x16`$\x84\x01R```D\x84\x01R`d\x83\x01\x90a\x1B\xD5V[\x03\x91Z\xFA\x90\x81\x15a\x1E\tW_\x91a\x1D\xCEW[P\x80_\x80\x80a\x1DAV[\x90P` \x81=` \x11a\x1E\x01W[\x81a\x1D\xE9` \x93\x83a\x1A\xD9V[\x81\x01\x03\x12a\x05\x8CWQ\x80\x15\x15\x81\x03a\x05\x8CW_a\x1D\xC4V[=\x91Pa\x1D\xDCV[`@Q=_\x82>=\x90\xFD[\x7FF4i\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04Rb\x03\r@`$R`D_\xFD[\x91\x90\x81\x10\x15a\x1E\xA6W`\x05\x1B\x81\x015\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x05\x8CW\x01\x90\x815\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x05\x8CW` \x01\x826\x03\x81\x13a\x05\x8CW\x91\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a\x1F\x94Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a \0WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0T`\x01`\xFF\x82\x16\x15\x15\x14a \x86W`\xFF\x19\x16`\x01\x17\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0UV[\x7Fvy@\r\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a \xDDWV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90a!BWP\x80Q\x15a!\x1AW\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a!\x95W[a!SWP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a!KV", + ); + /// The runtime bytecode of the contract, as deployed on the network. + /// + /// ```text + ///0x6080806040526004361015610012575f80fd5b5f3560e01c9081630175e23b14611983575080630c6723631461065957806317cb741f146118d35780631a8b91e8146118b15780632407f0b6146118775780632bff3d4c146117995780633b8308891461175d57806346e2cc091461160f5780634f1ef2861461130757806352d1902d146112685780635467cb48146111d557806354fd4d5014611199578063598c8be6146110c95780635b3cd6e214611077578063715018a614610fbb578063781cd99d14610f9d5780637a3979dc14610f4457806384fab62b14610f035780638507492514610ed45780638da5cb5b14610e825780638e6ae22914610e365780638e99f92914610e1a57806395c5bf7514610de05780639a6c01bf14610d85578063a70b9f0c14610d68578063ad3cb1cc14610d05578063b747b70b14610ce8578063b97dd9e214610c92578063b9f7f26014610c58578063ca600aa814610c1c578063cdafb9781461085a578063d4f0eb4d14610772578063d5176d23146106fe578063d8781342146106c2578063de1f453e146106a2578063e039616614610659578063e057fd0814610618578063e75b2073146105d3578063e8eb1dc3146105b6578063f2fde38b146105905763f7013ef6146101df575f80fd5b3461058c5760a060031936011261058c576101f8611a70565b610200611a93565b5060443573ffffffffffffffffffffffffffffffffffffffff811680910361058c5761022a611ab6565b507ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159267ffffffffffffffff821680159081610584575b600114908161057a575b159081610571575b5061054957818460017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006102f19516177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556104f4575b506102dc6120ae565b6102e46120ae565b6102ec6120ae565b611ed3565b7fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005560647f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50155600160ff197f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5025416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50255427f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d503556103f26120ae565b6084357fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a40055620f42407fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a4015561044561202c565b620f42405f55600160ff19815416176001555f60025561046157005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00555f6102d3565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f61027c565b303b159150610274565b85915061026a565b5f80fd5b3461058c57602060031936011261058c576105b46105ac611a70565b6102ec611fc0565b005b3461058c575f60031936011261058c57602060405162030d408152f35b3461058c57602060031936011261058c5773ffffffffffffffffffffffffffffffffffffffff610601611a70565b165f526003602052602060405f2054604051908152f35b3461058c575f60031936011261058c57602060ff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50254166040519015158152f35b3461058c57602060031936011261058c576004355f527f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b14801602052602060405f2054604051908152f35b3461058c575f60031936011261058c576106ba611fc0565b6105b461202c565b3461058c575f60031936011261058c5760207fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a40054604051908152f35b3461058c57602060031936011261058c5760043562278d0081029080820462278d0014901517156107455763688d46f0018063688d46f01161074557602090604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b3461058c57602060031936011261058c5773ffffffffffffffffffffffffffffffffffffffff6107a0611a70565b6107a8611fc0565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50055427f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d503557f253580f806741c11b3d4aa60d9cacc5bef0cebb35748767fe23f11916e2f04b95f80a2005b3461058c57602060031936011261058c5760043567ffffffffffffffff811161058c573660238201121561058c5780600401359067ffffffffffffffff821161058c5760248101908260051b90366024838301011161058c5760ff6001541680610c11575b610bda575b90604051918460408401602080860152526060808401928401019184915f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbd82360301915b888210610b6257888861094e89610947818b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611ad9565b3233611cee565b15610b3a5760ff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d502541615610adc578115610a7e577f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d501548211610a20575f5b8281106109b657005b806109c46001928585611e46565b90506109d1575b016109ad565b610a187f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f610a00838787611e46565b92906040519182916020835233956020840191611cb0565b0390a26109cb565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f546f6f206d616e79207472616e73616374696f6e7320696e20626174636800006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4e6f207472616e73616374696f6e732070726f766964656400000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f42617463682070726f63657373696e672069732064697361626c6564000000006044820152fd5b7fdc741458000000000000000000000000000000000000000000000000000000005f5260045ffd5b90919293947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087820301855285358481121561058c578201906044602483013592019167ffffffffffffffff811161058c57803603831361058c57610bcd6020928392600195611cb0565b9701950193920190610909565b335f526003602052610bfe610bf660405f205460025490611c18565b421015611c25565b335f5260036020524260405f20556108c4565b5060025415156108bf565b3461058c575f60031936011261058c5760207f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50154604051908152f35b3461058c575f60031936011261058c5760206040517f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b148008152f35b3461058c575f60031936011261058c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff9772b91042014281116107455762278d0090046001810180911161074557602090604051908152f35b3461058c575f60031936011261058c576020600254604051908152f35b3461058c575f60031936011261058c57610d64604051610d26604082611ad9565b600581527f352e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190611bd5565b0390f35b3461058c575f60031936011261058c57602060405162278d008152f35b3461058c575f60031936011261058c57610d9d611fc0565b7f359ed1295f5093274b6ca6a37945b86cac4f0e2def43afd3a2c8a1290923f242602060ff1960015460ff808216151691829116176001556040519015158152a1005b3461058c575f60031936011261058c5760206040517fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a4008152f35b3461058c575f60031936011261058c5760205f54604051908152f35b3461058c57602060031936011261058c577f388cac5665b362f381dd96c7c6cde0499ff225b776c3bd646b1fe04ebfd903a56020600435610e75611fc0565b80600255604051908152a1005b3461058c575f60031936011261058c57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b3461058c57610d64610eef610ee836611a1f565b3691611b81565b604051918291602083526020830190611bd5565b3461058c575f60031936011261058c57602060ff7f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b1480054166040519015158152f35b3461058c57606060031936011261058c57610f5d611a70565b610f65611a93565b906044359067ffffffffffffffff821161058c57602092610f8d610f93933690600401611bb7565b91611cee565b6040519015158152f35b3461058c575f60031936011261058c57602060405163688d46f08152f35b3461058c575f60031936011261058c57610fd3611fc0565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461058c575f60031936011261058c57602073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416604051908152f35b3461058c57602060031936011261058c576004356110e5611fc0565b801561113b576020817ff01ac6cf9d7e78a809ecb6d0a29ea0813dd23067a630105fceb96df27e923fe1927f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50155604051908152a1005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d6178206d7573742062652067726561746572207468616e20300000000000006044820152fd5b3461058c575f60031936011261058c5760207fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a40154604051908152f35b3461058c575f60031936011261058c576111ed611fc0565b7f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b148005460ff8116156112405760ff19167f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b1480055005b7fcd60c3ca000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461058c575f60031936011261058c5773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036112df5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b604060031936011261058c5761131b611a70565b60243567ffffffffffffffff811161058c5761133b903690600401611bb7565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168030149081156115cd575b506112df5761138a611fc0565b73ffffffffffffffffffffffffffffffffffffffff8216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa5f9181611599575b5061140a57837f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc85920361156e5750813b1561154357807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2815115611512575f808360206105b495519101845af43d1561150a573d916114ee83611b47565b926114fc6040519485611ad9565b83523d5f602085013e612105565b606091612105565b50503461151b57005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d6020116115c5575b816115b560209383611ad9565b8101031261058c575190856113d9565b3d91506115a8565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614158361137d565b3461058c5761161d36611a1f565b9061162c610947368484611b81565b15610b3a5760ff6001541680611752575b611723575b81156116fb575f5480611691575b5061168c7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f916040519182916020835233956020840191611cb0565b0390a2005b5a1161169d5782611650565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f5472616e73616374696f6e206578636565647320676173206c696d69740000006044820152fd5b7fdc37f51d000000000000000000000000000000000000000000000000000000005f5260045ffd5b335f52600360205261173f610bf660405f205460025490611c18565b335f5260036020524260405f2055611642565b50600254151561163d565b3461058c575f60031936011261058c5760207f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50354604051908152f35b3461058c575f60031936011261058c576117b1611fc0565b60ff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50254161560ff60ff197f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50254169116177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d502557fce2dc796d081c9c190146a304ec3b75ad6ace03c37c87c8d8f88c8b15dd8184c602060ff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50254166040519015158152a1005b3461058c575f60031936011261058c5760206040517f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5008152f35b3461058c575f60031936011261058c57602060ff600154166040519015158152f35b3461058c57602060031936011261058c576004356118ef611fc0565b8015611925576020817f75fb1dcaa01cb4ae892a3f40a33cbbb2473f434a8319c52d2d185fe13caa135d925f55604051908152a1005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4d617820676173206d7573742062652067726561746572207468616e203000006044820152fd5b3461058c57602060031936011261058c5760043580156119f7577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81019081116107455762278d0081029080820462278d0014901517156107455763688d46f001908163688d46f011610745576020918152f35b7fd69368d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b90602060031983011261058c5760043567ffffffffffffffff811161058c578260238201121561058c5780600401359267ffffffffffffffff841161058c576024848301011161058c576024019190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361058c57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361058c57565b6064359073ffffffffffffffffffffffffffffffffffffffff8216820361058c57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611b1a57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111611b1a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192611b8d82611b47565b91611b9b6040519384611ad9565b82948184528183011161058c578281602093845f960137010152565b9080601f8301121561058c57816020611bd293359101611b81565b90565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9190820180921161074557565b15611c2c57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5472616e73616374696f6e20746f6f20736f6f6e20616674657220707265766960448201527f6f757300000000000000000000000000000000000000000000000000000000006064820152fd5b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b9190815162030d408111611e14575073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500541660018114928315611d49575b505050905090565b6020935073ffffffffffffffffffffffffffffffffffffffff94611db28692604051978896879586957f7a3979dc000000000000000000000000000000000000000000000000000000008752166004860152166024840152606060448401526064830190611bd5565b03915afa908115611e09575f91611dce575b50805f8080611d41565b90506020813d602011611e01575b81611de960209383611ad9565b8101031261058c5751801515810361058c575f611dc4565b3d9150611ddc565b6040513d5f823e3d90fd5b7f4634691b000000000000000000000000000000000000000000000000000000005f5260045262030d4060245260445ffd5b9190811015611ea65760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561058c57019081359167ffffffffffffffff831161058c57602001823603811361058c579190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff168015611f945773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361200057565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b7f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b1480054600160ff82161515146120865760ff19166001177f119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b1480055565b7f7679400d000000000000000000000000000000000000000000000000000000005f5260045ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c16156120dd57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90612142575080511561211a57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580612195575b612153575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561214b56 + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"`\x80\x80`@R`\x046\x10\x15a\0\x12W_\x80\xFD[_5`\xE0\x1C\x90\x81c\x01u\xE2;\x14a\x19\x83WP\x80c\x0Cg#c\x14a\x06YW\x80c\x17\xCBt\x1F\x14a\x18\xD3W\x80c\x1A\x8B\x91\xE8\x14a\x18\xB1W\x80c$\x07\xF0\xB6\x14a\x18wW\x80c+\xFF=L\x14a\x17\x99W\x80c;\x83\x08\x89\x14a\x17]W\x80cF\xE2\xCC\t\x14a\x16\x0FW\x80cO\x1E\xF2\x86\x14a\x13\x07W\x80cR\xD1\x90-\x14a\x12hW\x80cTg\xCBH\x14a\x11\xD5W\x80cT\xFDMP\x14a\x11\x99W\x80cY\x8C\x8B\xE6\x14a\x10\xC9W\x80c[<\xD6\xE2\x14a\x10wW\x80cqP\x18\xA6\x14a\x0F\xBBW\x80cx\x1C\xD9\x9D\x14a\x0F\x9DW\x80cz9y\xDC\x14a\x0FDW\x80c\x84\xFA\xB6+\x14a\x0F\x03W\x80c\x85\x07I%\x14a\x0E\xD4W\x80c\x8D\xA5\xCB[\x14a\x0E\x82W\x80c\x8Ej\xE2)\x14a\x0E6W\x80c\x8E\x99\xF9)\x14a\x0E\x1AW\x80c\x95\xC5\xBFu\x14a\r\xE0W\x80c\x9Al\x01\xBF\x14a\r\x85W\x80c\xA7\x0B\x9F\x0C\x14a\rhW\x80c\xAD<\xB1\xCC\x14a\r\x05W\x80c\xB7G\xB7\x0B\x14a\x0C\xE8W\x80c\xB9}\xD9\xE2\x14a\x0C\x92W\x80c\xB9\xF7\xF2`\x14a\x0CXW\x80c\xCA`\n\xA8\x14a\x0C\x1CW\x80c\xCD\xAF\xB9x\x14a\x08ZW\x80c\xD4\xF0\xEBM\x14a\x07rW\x80c\xD5\x17m#\x14a\x06\xFEW\x80c\xD8x\x13B\x14a\x06\xC2W\x80c\xDE\x1FE>\x14a\x06\xA2W\x80c\xE09af\x14a\x06YW\x80c\xE0W\xFD\x08\x14a\x06\x18W\x80c\xE7[ s\x14a\x05\xD3W\x80c\xE8\xEB\x1D\xC3\x14a\x05\xB6W\x80c\xF2\xFD\xE3\x8B\x14a\x05\x90Wc\xF7\x01>\xF6\x14a\x01\xDFW_\x80\xFD[4a\x05\x8CW`\xA0`\x03\x196\x01\x12a\x05\x8CWa\x01\xF8a\x1ApV[a\x02\0a\x1A\x93V[P`D5s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x05\x8CWa\x02*a\x1A\xB6V[P\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`\xFF\x81`@\x1C\x16\x15\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x80\x15\x90\x81a\x05\x84W[`\x01\x14\x90\x81a\x05zW[\x15\x90\x81a\x05qW[Pa\x05IW\x81\x84`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0a\x02\xF1\x95\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x04\xF4W[Pa\x02\xDCa \xAEV[a\x02\xE4a \xAEV[a\x02\xECa \xAEV[a\x1E\xD3V[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0U`d\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x01U`\x01`\xFF\x19\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02UB\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x03Ua\x03\xF2a \xAEV[`\x845\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0Ub\x0FB@\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\x01Ua\x04Ea ,V[b\x0FB@_U`\x01`\xFF\x19\x81T\x16\x17`\x01U_`\x02Ua\x04aW\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U_a\x02\xD3V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15_a\x02|V[0;\x15\x91Pa\x02tV[\x85\x91Pa\x02jV[_\x80\xFD[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CWa\x05\xB4a\x05\xACa\x1ApV[a\x02\xECa\x1F\xC0V[\0[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Qb\x03\r@\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x06\x01a\x1ApV[\x16_R`\x03` R` `@_ T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045_R\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\x01` R` `@_ T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\x06\xBAa\x1F\xC0V[a\x05\xB4a ,V[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` \x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0T`@Q\x90\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045b'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x07EWch\x8DF\xF0\x01\x80ch\x8DF\xF0\x11a\x07EW` \x90`@Q\x90\x81R\xF3[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x11`\x04R`$_\xFD[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x07\xA0a\x1ApV[a\x07\xA8a\x1F\xC0V[\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0UB\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x03U\x7F%5\x80\xF8\x06t\x1C\x11\xB3\xD4\xAA`\xD9\xCA\xCC[\xEF\x0C\xEB\xB3WHv\x7F\xE2?\x11\x91n/\x04\xB9_\x80\xA2\0[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x8CW6`#\x82\x01\x12\x15a\x05\x8CW\x80`\x04\x015\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\x8CW`$\x81\x01\x90\x82`\x05\x1B\x906`$\x83\x83\x01\x01\x11a\x05\x8CW`\xFF`\x01T\x16\x80a\x0C\x11W[a\x0B\xDAW[\x90`@Q\x91\x84`@\x84\x01` \x80\x86\x01RR``\x80\x84\x01\x92\x84\x01\x01\x91\x84\x91_\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xBD\x826\x03\x01\x91[\x88\x82\x10a\x0BbW\x88\x88a\tN\x89a\tG\x81\x8B\x03\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x81\x01\x83R\x82a\x1A\xD9V[23a\x1C\xEEV[\x15a\x0B:W`\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16\x15a\n\xDCW\x81\x15a\n~W\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x01T\x82\x11a\n W_[\x82\x81\x10a\t\xB6W\0[\x80a\t\xC4`\x01\x92\x85\x85a\x1EFV[\x90Pa\t\xD1W[\x01a\t\xADV[a\n\x18\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7Fa\n\0\x83\x87\x87a\x1EFV[\x92\x90`@Q\x91\x82\x91` \x83R3\x95` \x84\x01\x91a\x1C\xB0V[\x03\x90\xA2a\t\xCBV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1E`$\x82\x01R\x7FToo many transactions in batch\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FNo transactions provided\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1C`$\x82\x01R\x7FBatch processing is disabled\0\0\0\0`D\x82\x01R\xFD[\x7F\xDCt\x14X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90\x91\x92\x93\x94\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xA0\x87\x82\x03\x01\x85R\x855\x84\x81\x12\x15a\x05\x8CW\x82\x01\x90`D`$\x83\x015\x92\x01\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x8CW\x806\x03\x83\x13a\x05\x8CWa\x0B\xCD` \x92\x83\x92`\x01\x95a\x1C\xB0V[\x97\x01\x95\x01\x93\x92\x01\x90a\t\tV[3_R`\x03` Ra\x0B\xFEa\x0B\xF6`@_ T`\x02T\x90a\x1C\x18V[B\x10\x15a\x1C%V[3_R`\x03` RB`@_ Ua\x08\xC4V[P`\x02T\x15\x15a\x08\xBFV[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` \x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x01T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Q\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x97r\xB9\x10B\x01B\x81\x11a\x07EWb'\x8D\0\x90\x04`\x01\x81\x01\x80\x91\x11a\x07EW` \x90`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `\x02T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\rd`@Qa\r&`@\x82a\x1A\xD9V[`\x05\x81R\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x1B\xD5V[\x03\x90\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Qb'\x8D\0\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\r\x9Da\x1F\xC0V[\x7F5\x9E\xD1)_P\x93'Kl\xA6\xA3yE\xB8l\xACO\x0E-\xEFC\xAF\xD3\xA2\xC8\xA1)\t#\xF2B` `\xFF\x19`\x01T`\xFF\x80\x82\x16\x15\x16\x91\x82\x91\x16\x17`\x01U`@Q\x90\x15\x15\x81R\xA1\0[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Q\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` _T`@Q\x90\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW\x7F8\x8C\xACVe\xB3b\xF3\x81\xDD\x96\xC7\xC6\xCD\xE0I\x9F\xF2%\xB7v\xC3\xBDdk\x1F\xE0N\xBF\xD9\x03\xA5` `\x045a\x0Eua\x1F\xC0V[\x80`\x02U`@Q\x90\x81R\xA1\0[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[4a\x05\x8CWa\rda\x0E\xEFa\x0E\xE86a\x1A\x1FV[6\x91a\x1B\x81V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x1B\xD5V[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `\xFF\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x05\x8CW```\x03\x196\x01\x12a\x05\x8CWa\x0F]a\x1ApV[a\x0Fea\x1A\x93V[\x90`D5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x05\x8CW` \x92a\x0F\x8Da\x0F\x93\x936\x90`\x04\x01a\x1B\xB7V[\x91a\x1C\xEEV[`@Q\x90\x15\x15\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Qch\x8DF\xF0\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\x0F\xD3a\x1F\xC0V[_s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\0[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`@Q\x90\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045a\x10\xE5a\x1F\xC0V[\x80\x15a\x11;W` \x81\x7F\xF0\x1A\xC6\xCF\x9D~x\xA8\t\xEC\xB6\xD0\xA2\x9E\xA0\x81=\xD20g\xA60\x10_\xCE\xB9m\xF2~\x92?\xE1\x92\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x01U`@Q\x90\x81R\xA1\0[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1A`$\x82\x01R\x7FMax must be greater than 0\0\0\0\0\0\0`D\x82\x01R\xFD[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` \x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\x01T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\x11\xEDa\x1F\xC0V[\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0T`\xFF\x81\x16\x15a\x12@W`\xFF\x19\x16\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0U\0[\x7F\xCD`\xC3\xCA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x160\x03a\x12\xDFW` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[`@`\x03\x196\x01\x12a\x05\x8CWa\x13\x1Ba\x1ApV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x8CWa\x13;\x906\x90`\x04\x01a\x1B\xB7V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\x15\xCDW[Pa\x12\xDFWa\x13\x8Aa\x1F\xC0V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x91`@Q\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` \x81`\x04\x81\x87Z\xFA_\x91\x81a\x15\x99W[Pa\x14\nW\x83\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x80\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x85\x92\x03a\x15nWP\x81;\x15a\x15CW\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;_\x80\xA2\x81Q\x15a\x15\x12W_\x80\x83` a\x05\xB4\x95Q\x91\x01\x84Z\xF4=\x15a\x15\nW=\x91a\x14\xEE\x83a\x1BGV[\x92a\x14\xFC`@Q\x94\x85a\x1A\xD9V[\x83R=_` \x85\x01>a!\x05V[``\x91a!\x05V[PP4a\x15\x1BW\0[\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04R`$_\xFD[\x90\x91P` \x81=` \x11a\x15\xC5W[\x81a\x15\xB5` \x93\x83a\x1A\xD9V[\x81\x01\x03\x12a\x05\x8CWQ\x90\x85a\x13\xD9V[=\x91Pa\x15\xA8V[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15\x83a\x13}V[4a\x05\x8CWa\x16\x1D6a\x1A\x1FV[\x90a\x16,a\tG6\x84\x84a\x1B\x81V[\x15a\x0B:W`\xFF`\x01T\x16\x80a\x17RW[a\x17#W[\x81\x15a\x16\xFBW_T\x80a\x16\x91W[Pa\x16\x8C\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F\x91`@Q\x91\x82\x91` \x83R3\x95` \x84\x01\x91a\x1C\xB0V[\x03\x90\xA2\0[Z\x11a\x16\x9DW\x82a\x16PV[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FTransaction exceeds gas limit\0\0\0`D\x82\x01R\xFD[\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[3_R`\x03` Ra\x17?a\x0B\xF6`@_ T`\x02T\x90a\x1C\x18V[3_R`\x03` RB`@_ Ua\x16BV[P`\x02T\x15\x15a\x16=V[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` \x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x03T`@Q\x90\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CWa\x17\xB1a\x1F\xC0V[`\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16\x15`\xFF`\xFF\x19\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16\x91\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02U\x7F\xCE-\xC7\x96\xD0\x81\xC9\xC1\x90\x14j0N\xC3\xB7Z\xD6\xAC\xE0<7\xC8|\x8D\x8F\x88\xC8\xB1]\xD8\x18L` `\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\x02T\x16`@Q\x90\x15\x15\x81R\xA1\0[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `@Q\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0\x81R\xF3[4a\x05\x8CW_`\x03\x196\x01\x12a\x05\x8CW` `\xFF`\x01T\x16`@Q\x90\x15\x15\x81R\xF3[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045a\x18\xEFa\x1F\xC0V[\x80\x15a\x19%W` \x81\x7Fu\xFB\x1D\xCA\xA0\x1C\xB4\xAE\x89*?@\xA3<\xBB\xB2G?CJ\x83\x19\xC5--\x18_\xE1<\xAA\x13]\x92_U`@Q\x90\x81R\xA1\0[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x1E`$\x82\x01R\x7FMax gas must be greater than 0\0\0`D\x82\x01R\xFD[4a\x05\x8CW` `\x03\x196\x01\x12a\x05\x8CW`\x045\x80\x15a\x19\xF7W\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x01\x90\x81\x11a\x07EWb'\x8D\0\x81\x02\x90\x80\x82\x04b'\x8D\0\x14\x90\x15\x17\x15a\x07EWch\x8DF\xF0\x01\x90\x81ch\x8DF\xF0\x11a\x07EW` \x91\x81R\xF3[\x7F\xD6\x93h\xD4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90` `\x03\x19\x83\x01\x12a\x05\x8CW`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x05\x8CW\x82`#\x82\x01\x12\x15a\x05\x8CW\x80`\x04\x015\x92g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x84\x11a\x05\x8CW`$\x84\x83\x01\x01\x11a\x05\x8CW`$\x01\x91\x90V[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x05\x8CWV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x05\x8CWV[`d5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x05\x8CWV[\x90`\x1F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x1B\x1AW`@RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x1B\x1AW`\x1F\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x16` \x01\x90V[\x92\x91\x92a\x1B\x8D\x82a\x1BGV[\x91a\x1B\x9B`@Q\x93\x84a\x1A\xD9V[\x82\x94\x81\x84R\x81\x83\x01\x11a\x05\x8CW\x82\x81` \x93\x84_\x96\x017\x01\x01RV[\x90\x80`\x1F\x83\x01\x12\x15a\x05\x8CW\x81` a\x1B\xD2\x935\x91\x01a\x1B\x81V[\x90V[\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x82\x01\x80\x92\x11a\x07EWV[\x15a\x1C,WV[`\x84`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`#`$\x82\x01R\x7FTransaction too soon after previ`D\x82\x01R\x7Fous\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`d\x82\x01R\xFD[`\x1F\x82` \x94\x93\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE0\x93\x81\x86R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x81Qb\x03\r@\x81\x11a\x1E\x14WPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`\x01\x81\x14\x92\x83\x15a\x1DIW[PPP\x90P\x90V[` \x93Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94a\x1D\xB2\x86\x92`@Q\x97\x88\x96\x87\x95\x86\x95\x7Fz9y\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R\x16`\x04\x86\x01R\x16`$\x84\x01R```D\x84\x01R`d\x83\x01\x90a\x1B\xD5V[\x03\x91Z\xFA\x90\x81\x15a\x1E\tW_\x91a\x1D\xCEW[P\x80_\x80\x80a\x1DAV[\x90P` \x81=` \x11a\x1E\x01W[\x81a\x1D\xE9` \x93\x83a\x1A\xD9V[\x81\x01\x03\x12a\x05\x8CWQ\x80\x15\x15\x81\x03a\x05\x8CW_a\x1D\xC4V[=\x91Pa\x1D\xDCV[`@Q=_\x82>=\x90\xFD[\x7FF4i\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04Rb\x03\r@`$R`D_\xFD[\x91\x90\x81\x10\x15a\x1E\xA6W`\x05\x1B\x81\x015\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x05\x8CW\x01\x90\x815\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x05\x8CW` \x01\x826\x03\x81\x13a\x05\x8CW\x91\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a\x1F\x94Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a \0WV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0T`\x01`\xFF\x82\x16\x15\x15\x14a \x86W`\xFF\x19\x16`\x01\x17\x7F\x11\x94\x94\xE4|$&\xA6\x07/\xC6\x07.\xC5\xC5\xD5\xAE\x86Z3r\xFD\x10,d<\x18\xE9x\xB1H\0UV[\x7Fvy@\r\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a \xDDWV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90a!BWP\x80Q\x15a!\x1AW\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a!\x95W[a!SWP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a!KV", + ); + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `AddressEmptyCode(address)` and selector `0x9996b315`. +```solidity +error AddressEmptyCode(address target); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct AddressEmptyCode { + #[allow(missing_docs)] + pub target: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: AddressEmptyCode) -> Self { + (value.target,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for AddressEmptyCode { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { target: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for AddressEmptyCode { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "AddressEmptyCode(address)"; + const SELECTOR: [u8; 4] = [153u8, 150u8, 179u8, 21u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.target, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `DataTooLarge(uint256,uint256)` and selector `0x4634691b`. +```solidity +error DataTooLarge(uint256 dataLength, uint256 maxDataLength); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct DataTooLarge { + #[allow(missing_docs)] + pub dataLength: alloy::sol_types::private::primitives::aliases::U256, + #[allow(missing_docs)] + pub maxDataLength: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Uint<256>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: DataTooLarge) -> Self { + (value.dataLength, value.maxDataLength) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for DataTooLarge { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + dataLength: tuple.0, + maxDataLength: tuple.1, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for DataTooLarge { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "DataTooLarge(uint256,uint256)"; + const SELECTOR: [u8; 4] = [70u8, 52u8, 105u8, 27u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.dataLength), + as alloy_sol_types::SolType>::tokenize(&self.maxDataLength), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ERC1967InvalidImplementation(address)` and selector `0x4c9c8ce3`. +```solidity +error ERC1967InvalidImplementation(address implementation); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ERC1967InvalidImplementation { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: ERC1967InvalidImplementation) -> Self { + (value.implementation,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for ERC1967InvalidImplementation { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { implementation: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ERC1967InvalidImplementation { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ERC1967InvalidImplementation(address)"; + const SELECTOR: [u8; 4] = [76u8, 156u8, 140u8, 227u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.implementation, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ERC1967NonPayable()` and selector `0xb398979f`. +```solidity +error ERC1967NonPayable(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ERC1967NonPayable; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ERC1967NonPayable) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ERC1967NonPayable { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ERC1967NonPayable { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ERC1967NonPayable()"; + const SELECTOR: [u8; 4] = [179u8, 152u8, 151u8, 159u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `FailedCall()` and selector `0xd6bda275`. +```solidity +error FailedCall(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct FailedCall; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: FailedCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for FailedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for FailedCall { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "FailedCall()"; + const SELECTOR: [u8; 4] = [214u8, 189u8, 162u8, 117u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `GasTrackingAlreadyDisabled()` and selector `0xcd60c3ca`. +```solidity +error GasTrackingAlreadyDisabled(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct GasTrackingAlreadyDisabled; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: GasTrackingAlreadyDisabled) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for GasTrackingAlreadyDisabled { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for GasTrackingAlreadyDisabled { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "GasTrackingAlreadyDisabled()"; + const SELECTOR: [u8; 4] = [205u8, 96u8, 195u8, 202u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `GasTrackingAlreadyEnabled()` and selector `0x7679400d`. +```solidity +error GasTrackingAlreadyEnabled(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct GasTrackingAlreadyEnabled; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: GasTrackingAlreadyEnabled) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for GasTrackingAlreadyEnabled { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for GasTrackingAlreadyEnabled { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "GasTrackingAlreadyEnabled()"; + const SELECTOR: [u8; 4] = [118u8, 121u8, 64u8, 13u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `InvalidInitialization()` and selector `0xf92ee8a9`. +```solidity +error InvalidInitialization(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct InvalidInitialization; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: InvalidInitialization) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for InvalidInitialization { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for InvalidInitialization { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "InvalidInitialization()"; + const SELECTOR: [u8; 4] = [249u8, 46u8, 232u8, 169u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `NoTxData()` and selector `0xdc37f51d`. +```solidity +error NoTxData(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct NoTxData; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: NoTxData) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for NoTxData { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for NoTxData { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "NoTxData()"; + const SELECTOR: [u8; 4] = [220u8, 55u8, 245u8, 29u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `NotInitializing()` and selector `0xd7e6bcf8`. +```solidity +error NotInitializing(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct NotInitializing; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: NotInitializing) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for NotInitializing { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for NotInitializing { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "NotInitializing()"; + const SELECTOR: [u8; 4] = [215u8, 230u8, 188u8, 248u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `OwnableInvalidOwner(address)` and selector `0x1e4fbdf7`. +```solidity +error OwnableInvalidOwner(address owner); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct OwnableInvalidOwner { + #[allow(missing_docs)] + pub owner: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: OwnableInvalidOwner) -> Self { + (value.owner,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for OwnableInvalidOwner { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { owner: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for OwnableInvalidOwner { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "OwnableInvalidOwner(address)"; + const SELECTOR: [u8; 4] = [30u8, 79u8, 189u8, 247u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.owner, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `OwnableUnauthorizedAccount(address)` and selector `0x118cdaa7`. +```solidity +error OwnableUnauthorizedAccount(address account); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct OwnableUnauthorizedAccount { + #[allow(missing_docs)] + pub account: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: OwnableUnauthorizedAccount) -> Self { + (value.account,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for OwnableUnauthorizedAccount { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { account: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for OwnableUnauthorizedAccount { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "OwnableUnauthorizedAccount(address)"; + const SELECTOR: [u8; 4] = [17u8, 140u8, 218u8, 167u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.account, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `TransactionOrSenderNotAllowed()` and selector `0xdc741458`. +```solidity +error TransactionOrSenderNotAllowed(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct TransactionOrSenderNotAllowed; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: TransactionOrSenderNotAllowed) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for TransactionOrSenderNotAllowed { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for TransactionOrSenderNotAllowed { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "TransactionOrSenderNotAllowed()"; + const SELECTOR: [u8; 4] = [220u8, 116u8, 20u8, 88u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `UUPSUnauthorizedCallContext()` and selector `0xe07c8dba`. +```solidity +error UUPSUnauthorizedCallContext(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UUPSUnauthorizedCallContext; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UUPSUnauthorizedCallContext) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UUPSUnauthorizedCallContext { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for UUPSUnauthorizedCallContext { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "UUPSUnauthorizedCallContext()"; + const SELECTOR: [u8; 4] = [224u8, 124u8, 141u8, 186u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `UUPSUnsupportedProxiableUUID(bytes32)` and selector `0xaa1d49a4`. +```solidity +error UUPSUnsupportedProxiableUUID(bytes32 slot); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UUPSUnsupportedProxiableUUID { + #[allow(missing_docs)] + pub slot: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UUPSUnsupportedProxiableUUID) -> Self { + (value.slot,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UUPSUnsupportedProxiableUUID { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { slot: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for UUPSUnsupportedProxiableUUID { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "UUPSUnsupportedProxiableUUID(bytes32)"; + const SELECTOR: [u8; 4] = [170u8, 29u8, 73u8, 164u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.slot), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ZeroEpochIndex()` and selector `0xd69368d4`. +```solidity +error ZeroEpochIndex(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ZeroEpochIndex; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ZeroEpochIndex) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ZeroEpochIndex { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ZeroEpochIndex { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ZeroEpochIndex()"; + const SELECTOR: [u8; 4] = [214u8, 147u8, 104u8, 212u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `BatchProcessingToggled(bool)` and selector `0xce2dc796d081c9c190146a304ec3b75ad6ace03c37c87c8d8f88c8b15dd8184c`. +```solidity +event BatchProcessingToggled(bool enabled); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct BatchProcessingToggled { + #[allow(missing_docs)] + pub enabled: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for BatchProcessingToggled { + type DataTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "BatchProcessingToggled(bool)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 206u8, 45u8, 199u8, 150u8, 208u8, 129u8, 201u8, 193u8, 144u8, 20u8, + 106u8, 48u8, 78u8, 195u8, 183u8, 90u8, 214u8, 172u8, 224u8, 60u8, 55u8, + 200u8, 124u8, 141u8, 143u8, 136u8, 200u8, 177u8, 93u8, 216u8, 24u8, 76u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { enabled: data.0 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + ::tokenize( + &self.enabled, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for BatchProcessingToggled { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&BatchProcessingToggled> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &BatchProcessingToggled) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `Initialized(uint64)` and selector `0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2`. +```solidity +event Initialized(uint64 version); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct Initialized { + #[allow(missing_docs)] + pub version: u64, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for Initialized { + type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<64>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "Initialized(uint64)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 199u8, 245u8, 5u8, 178u8, 243u8, 113u8, 174u8, 33u8, 117u8, 238u8, 73u8, + 19u8, 244u8, 73u8, 158u8, 31u8, 38u8, 51u8, 167u8, 181u8, 147u8, 99u8, + 33u8, 238u8, 209u8, 205u8, 174u8, 182u8, 17u8, 81u8, 129u8, 210u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { version: data.0 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.version), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Initialized { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Initialized> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Initialized) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `MaxGasPerTransactionUpdated(uint256)` and selector `0x75fb1dcaa01cb4ae892a3f40a33cbbb2473f434a8319c52d2d185fe13caa135d`. +```solidity +event MaxGasPerTransactionUpdated(uint256 newMax); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct MaxGasPerTransactionUpdated { + #[allow(missing_docs)] + pub newMax: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for MaxGasPerTransactionUpdated { + type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "MaxGasPerTransactionUpdated(uint256)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 117u8, 251u8, 29u8, 202u8, 160u8, 28u8, 180u8, 174u8, 137u8, 42u8, 63u8, + 64u8, 163u8, 60u8, 187u8, 178u8, 71u8, 63u8, 67u8, 74u8, 131u8, 25u8, + 197u8, 45u8, 45u8, 24u8, 95u8, 225u8, 60u8, 170u8, 19u8, 93u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { newMax: data.0 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.newMax), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for MaxGasPerTransactionUpdated { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&MaxGasPerTransactionUpdated> for alloy_sol_types::private::LogData { + #[inline] + fn from( + this: &MaxGasPerTransactionUpdated, + ) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `MaxTransactionsPerBatchUpdated(uint256)` and selector `0xf01ac6cf9d7e78a809ecb6d0a29ea0813dd23067a630105fceb96df27e923fe1`. +```solidity +event MaxTransactionsPerBatchUpdated(uint256 newMax); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct MaxTransactionsPerBatchUpdated { + #[allow(missing_docs)] + pub newMax: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for MaxTransactionsPerBatchUpdated { + type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "MaxTransactionsPerBatchUpdated(uint256)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 240u8, 26u8, 198u8, 207u8, 157u8, 126u8, 120u8, 168u8, 9u8, 236u8, 182u8, + 208u8, 162u8, 158u8, 160u8, 129u8, 61u8, 210u8, 48u8, 103u8, 166u8, 48u8, + 16u8, 95u8, 206u8, 185u8, 109u8, 242u8, 126u8, 146u8, 63u8, 225u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { newMax: data.0 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.newMax), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for MaxTransactionsPerBatchUpdated { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&MaxTransactionsPerBatchUpdated> + for alloy_sol_types::private::LogData { + #[inline] + fn from( + this: &MaxTransactionsPerBatchUpdated, + ) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `MinTimeBetweenTxsUpdated(uint256)` and selector `0x388cac5665b362f381dd96c7c6cde0499ff225b776c3bd646b1fe04ebfd903a5`. +```solidity +event MinTimeBetweenTxsUpdated(uint256 newMin); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct MinTimeBetweenTxsUpdated { + #[allow(missing_docs)] + pub newMin: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for MinTimeBetweenTxsUpdated { + type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "MinTimeBetweenTxsUpdated(uint256)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 56u8, 140u8, 172u8, 86u8, 101u8, 179u8, 98u8, 243u8, 129u8, 221u8, 150u8, + 199u8, 198u8, 205u8, 224u8, 73u8, 159u8, 242u8, 37u8, 183u8, 118u8, + 195u8, 189u8, 100u8, 107u8, 31u8, 224u8, 78u8, 191u8, 217u8, 3u8, 165u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { newMin: data.0 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.newMin), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for MinTimeBetweenTxsUpdated { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&MinTimeBetweenTxsUpdated> for alloy_sol_types::private::LogData { + #[inline] + fn from( + this: &MinTimeBetweenTxsUpdated, + ) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `OwnershipTransferred(address,address)` and selector `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0`. +```solidity +event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct OwnershipTransferred { + #[allow(missing_docs)] + pub previousOwner: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub newOwner: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for OwnershipTransferred { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "OwnershipTransferred(address,address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 139u8, 224u8, 7u8, 156u8, 83u8, 22u8, 89u8, 20u8, 19u8, 68u8, 205u8, + 31u8, 208u8, 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8, + 218u8, 175u8, 227u8, 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + previousOwner: topics.1, + newOwner: topics.2, + } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + ( + Self::SIGNATURE_HASH.into(), + self.previousOwner.clone(), + self.newOwner.clone(), + ) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.previousOwner, + ); + out[2usize] = ::encode_topic( + &self.newOwner, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for OwnershipTransferred { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&OwnershipTransferred> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &OwnershipTransferred) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `ReplayProtectionToggled(bool)` and selector `0x359ed1295f5093274b6ca6a37945b86cac4f0e2def43afd3a2c8a1290923f242`. +```solidity +event ReplayProtectionToggled(bool enabled); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct ReplayProtectionToggled { + #[allow(missing_docs)] + pub enabled: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for ReplayProtectionToggled { + type DataTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "ReplayProtectionToggled(bool)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 53u8, 158u8, 209u8, 41u8, 95u8, 80u8, 147u8, 39u8, 75u8, 108u8, 166u8, + 163u8, 121u8, 69u8, 184u8, 108u8, 172u8, 79u8, 14u8, 45u8, 239u8, 67u8, + 175u8, 211u8, 162u8, 200u8, 161u8, 41u8, 9u8, 35u8, 242u8, 66u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { enabled: data.0 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + ::tokenize( + &self.enabled, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for ReplayProtectionToggled { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&ReplayProtectionToggled> for alloy_sol_types::private::LogData { + #[inline] + fn from( + this: &ReplayProtectionToggled, + ) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `RequirementModuleUpdated(address)` and selector `0x253580f806741c11b3d4aa60d9cacc5bef0cebb35748767fe23f11916e2f04b9`. +```solidity +event RequirementModuleUpdated(address indexed newModule); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct RequirementModuleUpdated { + #[allow(missing_docs)] + pub newModule: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for RequirementModuleUpdated { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "RequirementModuleUpdated(address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 37u8, 53u8, 128u8, 248u8, 6u8, 116u8, 28u8, 17u8, 179u8, 212u8, 170u8, + 96u8, 217u8, 202u8, 204u8, 91u8, 239u8, 12u8, 235u8, 179u8, 87u8, 72u8, + 118u8, 127u8, 226u8, 63u8, 17u8, 145u8, 110u8, 47u8, 4u8, 185u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { newModule: topics.1 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.newModule.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.newModule, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for RequirementModuleUpdated { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&RequirementModuleUpdated> for alloy_sol_types::private::LogData { + #[inline] + fn from( + this: &RequirementModuleUpdated, + ) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `TransactionProcessed(address,bytes)` and selector `0x83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f`. +```solidity +event TransactionProcessed(address indexed sender, bytes data); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct TransactionProcessed { + #[allow(missing_docs)] + pub sender: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for TransactionProcessed { + type DataTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "TransactionProcessed(address,bytes)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 131u8, 54u8, 59u8, 120u8, 189u8, 251u8, 178u8, 62u8, 42u8, 97u8, 219u8, + 122u8, 204u8, 195u8, 192u8, 31u8, 218u8, 41u8, 197u8, 197u8, 236u8, + 129u8, 136u8, 128u8, 3u8, 203u8, 150u8, 41u8, 18u8, 97u8, 138u8, 127u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + sender: topics.1, + data: data.0, + } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.sender.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.sender, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for TransactionProcessed { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&TransactionProcessed> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &TransactionProcessed) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `Upgraded(address)` and selector `0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b`. +```solidity +event Upgraded(address indexed implementation); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct Upgraded { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for Upgraded { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "Upgraded(address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8, + 179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8, + 12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { implementation: topics.1 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.implementation.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.implementation, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Upgraded { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Upgraded> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Upgraded) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `EPOCH_DURATION()` and selector `0xa70b9f0c`. +```solidity +function EPOCH_DURATION() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct EPOCH_DURATIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`EPOCH_DURATION()`](EPOCH_DURATIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct EPOCH_DURATIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: EPOCH_DURATIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for EPOCH_DURATIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: EPOCH_DURATIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for EPOCH_DURATIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for EPOCH_DURATIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "EPOCH_DURATION()"; + const SELECTOR: [u8; 4] = [167u8, 11u8, 159u8, 12u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: EPOCH_DURATIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: EPOCH_DURATIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `GAS_COUNTER_STORAGE_LOCATION()` and selector `0xb9f7f260`. +```solidity +function GAS_COUNTER_STORAGE_LOCATION() external view returns (bytes32); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct GAS_COUNTER_STORAGE_LOCATIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`GAS_COUNTER_STORAGE_LOCATION()`](GAS_COUNTER_STORAGE_LOCATIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct GAS_COUNTER_STORAGE_LOCATIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: GAS_COUNTER_STORAGE_LOCATIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for GAS_COUNTER_STORAGE_LOCATIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: GAS_COUNTER_STORAGE_LOCATIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for GAS_COUNTER_STORAGE_LOCATIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for GAS_COUNTER_STORAGE_LOCATIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "GAS_COUNTER_STORAGE_LOCATION()"; + const SELECTOR: [u8; 4] = [185u8, 247u8, 242u8, 96u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: GAS_COUNTER_STORAGE_LOCATIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: GAS_COUNTER_STORAGE_LOCATIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `SEQUENCING_MODULE_STORAGE_LOCATION()` and selector `0x2407f0b6`. +```solidity +function SEQUENCING_MODULE_STORAGE_LOCATION() external view returns (bytes32); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct SEQUENCING_MODULE_STORAGE_LOCATIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`SEQUENCING_MODULE_STORAGE_LOCATION()`](SEQUENCING_MODULE_STORAGE_LOCATIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct SEQUENCING_MODULE_STORAGE_LOCATIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: SEQUENCING_MODULE_STORAGE_LOCATIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for SEQUENCING_MODULE_STORAGE_LOCATIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: SEQUENCING_MODULE_STORAGE_LOCATIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for SEQUENCING_MODULE_STORAGE_LOCATIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for SEQUENCING_MODULE_STORAGE_LOCATIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "SEQUENCING_MODULE_STORAGE_LOCATION()"; + const SELECTOR: [u8; 4] = [36u8, 7u8, 240u8, 182u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: SEQUENCING_MODULE_STORAGE_LOCATIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: SEQUENCING_MODULE_STORAGE_LOCATIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `START_TIMESTAMP()` and selector `0x781cd99d`. +```solidity +function START_TIMESTAMP() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct START_TIMESTAMPCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`START_TIMESTAMP()`](START_TIMESTAMPCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct START_TIMESTAMPReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: START_TIMESTAMPCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for START_TIMESTAMPCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: START_TIMESTAMPReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for START_TIMESTAMPReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for START_TIMESTAMPCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "START_TIMESTAMP()"; + const SELECTOR: [u8; 4] = [120u8, 28u8, 217u8, 157u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: START_TIMESTAMPReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: START_TIMESTAMPReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION()` and selector `0x95c5bf75`. +```solidity +function SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION() external view returns (bytes32); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION()`](SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from( + value: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn, + ) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall + for SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION()"; + const SELECTOR: [u8; 4] = [149u8, 197u8, 191u8, 117u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn = r + .into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn = r + .into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `UPGRADE_INTERFACE_VERSION()` and selector `0xad3cb1cc`. +```solidity +function UPGRADE_INTERFACE_VERSION() external view returns (string memory); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UPGRADE_INTERFACE_VERSIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`UPGRADE_INTERFACE_VERSION()`](UPGRADE_INTERFACE_VERSIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UPGRADE_INTERFACE_VERSIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::String, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UPGRADE_INTERFACE_VERSIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UPGRADE_INTERFACE_VERSIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UPGRADE_INTERFACE_VERSIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UPGRADE_INTERFACE_VERSIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for UPGRADE_INTERFACE_VERSIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::String; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "UPGRADE_INTERFACE_VERSION()"; + const SELECTOR: [u8; 4] = [173u8, 60u8, 177u8, 204u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: UPGRADE_INTERFACE_VERSIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: UPGRADE_INTERFACE_VERSIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `appchainId()` and selector `0xd8781342`. +```solidity +function appchainId() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct appchainIdCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`appchainId()`](appchainIdCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct appchainIdReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: appchainIdCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for appchainIdCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: appchainIdReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for appchainIdReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for appchainIdCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "appchainId()"; + const SELECTOR: [u8; 4] = [216u8, 120u8, 19u8, 66u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: appchainIdReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: appchainIdReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `batchProcessingEnabled()` and selector `0xe057fd08`. +```solidity +function batchProcessingEnabled() external view returns (bool); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct batchProcessingEnabledCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`batchProcessingEnabled()`](batchProcessingEnabledCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct batchProcessingEnabledReturn { + #[allow(missing_docs)] + pub _0: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: batchProcessingEnabledCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for batchProcessingEnabledCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: batchProcessingEnabledReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for batchProcessingEnabledReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for batchProcessingEnabledCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = bool; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "batchProcessingEnabled()"; + const SELECTOR: [u8; 4] = [224u8, 87u8, 253u8, 8u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: batchProcessingEnabledReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: batchProcessingEnabledReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `disableGasTracking()` and selector `0x5467cb48`. +```solidity +function disableGasTracking() external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct disableGasTrackingCall; + ///Container type for the return parameters of the [`disableGasTracking()`](disableGasTrackingCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct disableGasTrackingReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: disableGasTrackingCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for disableGasTrackingCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: disableGasTrackingReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for disableGasTrackingReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl disableGasTrackingReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for disableGasTrackingCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = disableGasTrackingReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "disableGasTracking()"; + const SELECTOR: [u8; 4] = [84u8, 103u8, 203u8, 72u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + disableGasTrackingReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `enableGasTracking()` and selector `0xde1f453e`. +```solidity +function enableGasTracking() external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct enableGasTrackingCall; + ///Container type for the return parameters of the [`enableGasTracking()`](enableGasTrackingCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct enableGasTrackingReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: enableGasTrackingCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for enableGasTrackingCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: enableGasTrackingReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for enableGasTrackingReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl enableGasTrackingReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for enableGasTrackingCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = enableGasTrackingReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "enableGasTracking()"; + const SELECTOR: [u8; 4] = [222u8, 31u8, 69u8, 62u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + enableGasTrackingReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `encodeTransaction(bytes)` and selector `0x85074925`. +```solidity +function encodeTransaction(bytes memory data) external pure returns (bytes memory); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct encodeTransactionCall { + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`encodeTransaction(bytes)`](encodeTransactionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct encodeTransactionReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Bytes, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: encodeTransactionCall) -> Self { + (value.data,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for encodeTransactionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { data: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: encodeTransactionReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for encodeTransactionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for encodeTransactionCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Bytes,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::Bytes; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "encodeTransaction(bytes)"; + const SELECTOR: [u8; 4] = [133u8, 7u8, 73u8, 37u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: encodeTransactionReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: encodeTransactionReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `gasTrackingEnabled()` and selector `0x84fab62b`. +```solidity +function gasTrackingEnabled() external view returns (bool); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct gasTrackingEnabledCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`gasTrackingEnabled()`](gasTrackingEnabledCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct gasTrackingEnabledReturn { + #[allow(missing_docs)] + pub _0: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: gasTrackingEnabledCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for gasTrackingEnabledCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: gasTrackingEnabledReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for gasTrackingEnabledReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for gasTrackingEnabledCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = bool; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "gasTrackingEnabled()"; + const SELECTOR: [u8; 4] = [132u8, 250u8, 182u8, 43u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: gasTrackingEnabledReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: gasTrackingEnabledReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `getCurrentEpoch()` and selector `0xb97dd9e2`. +```solidity +function getCurrentEpoch() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getCurrentEpochCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`getCurrentEpoch()`](getCurrentEpochCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getCurrentEpochReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getCurrentEpochCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getCurrentEpochCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getCurrentEpochReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for getCurrentEpochReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getCurrentEpochCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getCurrentEpoch()"; + const SELECTOR: [u8; 4] = [185u8, 125u8, 217u8, 226u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: getCurrentEpochReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: getCurrentEpochReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `getEpochEnd(uint256)` and selector `0xd5176d23`. +```solidity +function getEpochEnd(uint256 epochIndex) external pure returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getEpochEndCall { + #[allow(missing_docs)] + pub epochIndex: alloy::sol_types::private::primitives::aliases::U256, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`getEpochEnd(uint256)`](getEpochEndCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getEpochEndReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getEpochEndCall) -> Self { + (value.epochIndex,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getEpochEndCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { epochIndex: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getEpochEndReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getEpochEndReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getEpochEndCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getEpochEnd(uint256)"; + const SELECTOR: [u8; 4] = [213u8, 23u8, 109u8, 35u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.epochIndex), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: getEpochEndReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: getEpochEndReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `getEpochStart(uint256)` and selector `0x0175e23b`. +```solidity +function getEpochStart(uint256 epochIndex) external pure returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getEpochStartCall { + #[allow(missing_docs)] + pub epochIndex: alloy::sol_types::private::primitives::aliases::U256, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`getEpochStart(uint256)`](getEpochStartCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getEpochStartReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getEpochStartCall) -> Self { + (value.epochIndex,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getEpochStartCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { epochIndex: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: getEpochStartReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for getEpochStartReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getEpochStartCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getEpochStart(uint256)"; + const SELECTOR: [u8; 4] = [1u8, 117u8, 226u8, 59u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.epochIndex), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: getEpochStartReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: getEpochStartReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `getTokensForEpoch(uint256)` and selector `0xe0396166`. +```solidity +function getTokensForEpoch(uint256 epoch) external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getTokensForEpochCall { + #[allow(missing_docs)] + pub epoch: alloy::sol_types::private::primitives::aliases::U256, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`getTokensForEpoch(uint256)`](getTokensForEpochCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getTokensForEpochReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getTokensForEpochCall) -> Self { + (value.epoch,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for getTokensForEpochCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { epoch: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getTokensForEpochReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for getTokensForEpochReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getTokensForEpochCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getTokensForEpoch(uint256)"; + const SELECTOR: [u8; 4] = [224u8, 57u8, 97u8, 102u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.epoch), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: getTokensForEpochReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: getTokensForEpochReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `initialize(address,address,address,address,uint256)` and selector `0xf7013ef6`. +```solidity +function initialize(address admin, address, address _permissionRequirementModule, address, uint256 _appchainId) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct initializeCall { + #[allow(missing_docs)] + pub admin: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _1: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _permissionRequirementModule: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _3: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _appchainId: alloy::sol_types::private::primitives::aliases::U256, + } + ///Container type for the return parameters of the [`initialize(address,address,address,address,uint256)`](initializeCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct initializeReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Uint<256>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Address, + alloy::sol_types::private::Address, + alloy::sol_types::private::Address, + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: initializeCall) -> Self { + ( + value.admin, + value._1, + value._permissionRequirementModule, + value._3, + value._appchainId, + ) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for initializeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + admin: tuple.0, + _1: tuple.1, + _permissionRequirementModule: tuple.2, + _3: tuple.3, + _appchainId: tuple.4, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: initializeReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for initializeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl initializeReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for initializeCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Uint<256>, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = initializeReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "initialize(address,address,address,address,uint256)"; + const SELECTOR: [u8; 4] = [247u8, 1u8, 62u8, 246u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.admin, + ), + ::tokenize( + &self._1, + ), + ::tokenize( + &self._permissionRequirementModule, + ), + ::tokenize( + &self._3, + ), + as alloy_sol_types::SolType>::tokenize(&self._appchainId), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + initializeReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `isAllowed(address,address,bytes)` and selector `0x7a3979dc`. +```solidity +function isAllowed(address proposer, address originator, bytes memory data) external view returns (bool); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct isAllowedCall { + #[allow(missing_docs)] + pub proposer: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub originator: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`isAllowed(address,address,bytes)`](isAllowedCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct isAllowedReturn { + #[allow(missing_docs)] + pub _0: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Address, + alloy::sol_types::private::Bytes, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: isAllowedCall) -> Self { + (value.proposer, value.originator, value.data) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for isAllowedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + proposer: tuple.0, + originator: tuple.1, + data: tuple.2, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: isAllowedReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for isAllowedReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for isAllowedCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = bool; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "isAllowed(address,address,bytes)"; + const SELECTOR: [u8; 4] = [122u8, 57u8, 121u8, 220u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.proposer, + ), + ::tokenize( + &self.originator, + ), + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: isAllowedReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: isAllowedReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `lastPermissionUpdate()` and selector `0x3b830889`. +```solidity +function lastPermissionUpdate() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct lastPermissionUpdateCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`lastPermissionUpdate()`](lastPermissionUpdateCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct lastPermissionUpdateReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: lastPermissionUpdateCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for lastPermissionUpdateCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: lastPermissionUpdateReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for lastPermissionUpdateReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for lastPermissionUpdateCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "lastPermissionUpdate()"; + const SELECTOR: [u8; 4] = [59u8, 131u8, 8u8, 137u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: lastPermissionUpdateReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: lastPermissionUpdateReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `lastTransactionTime(address)` and selector `0xe75b2073`. +```solidity +function lastTransactionTime(address) external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct lastTransactionTimeCall(pub alloy::sol_types::private::Address); + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`lastTransactionTime(address)`](lastTransactionTimeCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct lastTransactionTimeReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: lastTransactionTimeCall) -> Self { + (value.0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for lastTransactionTimeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self(tuple.0) + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: lastTransactionTimeReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for lastTransactionTimeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for lastTransactionTimeCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "lastTransactionTime(address)"; + const SELECTOR: [u8; 4] = [231u8, 91u8, 32u8, 115u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.0, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: lastTransactionTimeReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: lastTransactionTimeReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `maxDataSize()` and selector `0xe8eb1dc3`. +```solidity +function maxDataSize() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct maxDataSizeCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`maxDataSize()`](maxDataSizeCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct maxDataSizeReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: maxDataSizeCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for maxDataSizeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: maxDataSizeReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for maxDataSizeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for maxDataSizeCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "maxDataSize()"; + const SELECTOR: [u8; 4] = [232u8, 235u8, 29u8, 195u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: maxDataSizeReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: maxDataSizeReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `maxGasPerTransaction()` and selector `0x8e99f929`. +```solidity +function maxGasPerTransaction() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct maxGasPerTransactionCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`maxGasPerTransaction()`](maxGasPerTransactionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct maxGasPerTransactionReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: maxGasPerTransactionCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for maxGasPerTransactionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: maxGasPerTransactionReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for maxGasPerTransactionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for maxGasPerTransactionCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "maxGasPerTransaction()"; + const SELECTOR: [u8; 4] = [142u8, 153u8, 249u8, 41u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: maxGasPerTransactionReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: maxGasPerTransactionReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `maxTransactionsPerBatch()` and selector `0xca600aa8`. +```solidity +function maxTransactionsPerBatch() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct maxTransactionsPerBatchCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`maxTransactionsPerBatch()`](maxTransactionsPerBatchCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct maxTransactionsPerBatchReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: maxTransactionsPerBatchCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for maxTransactionsPerBatchCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: maxTransactionsPerBatchReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for maxTransactionsPerBatchReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for maxTransactionsPerBatchCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "maxTransactionsPerBatch()"; + const SELECTOR: [u8; 4] = [202u8, 96u8, 10u8, 168u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: maxTransactionsPerBatchReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: maxTransactionsPerBatchReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `minTimeBetweenTxs()` and selector `0xb747b70b`. +```solidity +function minTimeBetweenTxs() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct minTimeBetweenTxsCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`minTimeBetweenTxs()`](minTimeBetweenTxsCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct minTimeBetweenTxsReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: minTimeBetweenTxsCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for minTimeBetweenTxsCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: minTimeBetweenTxsReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for minTimeBetweenTxsReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for minTimeBetweenTxsCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "minTimeBetweenTxs()"; + const SELECTOR: [u8; 4] = [183u8, 71u8, 183u8, 11u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: minTimeBetweenTxsReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: minTimeBetweenTxsReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `owner()` and selector `0x8da5cb5b`. +```solidity +function owner() external view returns (address); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ownerCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`owner()`](ownerCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ownerReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ownerCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ownerCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ownerReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ownerReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for ownerCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::Address; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "owner()"; + const SELECTOR: [u8; 4] = [141u8, 165u8, 203u8, 91u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: ownerReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: ownerReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `permissionRequirementModule()` and selector `0x5b3cd6e2`. +```solidity +function permissionRequirementModule() external view returns (address); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct permissionRequirementModuleCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`permissionRequirementModule()`](permissionRequirementModuleCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct permissionRequirementModuleReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: permissionRequirementModuleCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for permissionRequirementModuleCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: permissionRequirementModuleReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for permissionRequirementModuleReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for permissionRequirementModuleCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::Address; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "permissionRequirementModule()"; + const SELECTOR: [u8; 4] = [91u8, 60u8, 214u8, 226u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: permissionRequirementModuleReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: permissionRequirementModuleReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `processTransaction(bytes)` and selector `0x46e2cc09`. +```solidity +function processTransaction(bytes memory data) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processTransactionCall { + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + ///Container type for the return parameters of the [`processTransaction(bytes)`](processTransactionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processTransactionReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: processTransactionCall) -> Self { + (value.data,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for processTransactionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { data: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: processTransactionReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for processTransactionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl processTransactionReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for processTransactionCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Bytes,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = processTransactionReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "processTransaction(bytes)"; + const SELECTOR: [u8; 4] = [70u8, 226u8, 204u8, 9u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + processTransactionReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `processTransactionsBulk(bytes[])` and selector `0xcdafb978`. +```solidity +function processTransactionsBulk(bytes[] memory data) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processTransactionsBulkCall { + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Vec, + } + ///Container type for the return parameters of the [`processTransactionsBulk(bytes[])`](processTransactionsBulkCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processTransactionsBulkReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Array, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Vec, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: processTransactionsBulkCall) -> Self { + (value.data,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for processTransactionsBulkCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { data: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: processTransactionsBulkReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for processTransactionsBulkReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl processTransactionsBulkReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for processTransactionsBulkCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Array, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = processTransactionsBulkReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "processTransactionsBulk(bytes[])"; + const SELECTOR: [u8; 4] = [205u8, 175u8, 185u8, 120u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.data), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + processTransactionsBulkReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `proxiableUUID()` and selector `0x52d1902d`. +```solidity +function proxiableUUID() external view returns (bytes32); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct proxiableUUIDCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`proxiableUUID()`](proxiableUUIDCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct proxiableUUIDReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: proxiableUUIDCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for proxiableUUIDCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: proxiableUUIDReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for proxiableUUIDReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for proxiableUUIDCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "proxiableUUID()"; + const SELECTOR: [u8; 4] = [82u8, 209u8, 144u8, 45u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: proxiableUUIDReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: proxiableUUIDReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `renounceOwnership()` and selector `0x715018a6`. +```solidity +function renounceOwnership() external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct renounceOwnershipCall; + ///Container type for the return parameters of the [`renounceOwnership()`](renounceOwnershipCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct renounceOwnershipReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: renounceOwnershipCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for renounceOwnershipCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: renounceOwnershipReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for renounceOwnershipReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl renounceOwnershipReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for renounceOwnershipCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = renounceOwnershipReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "renounceOwnership()"; + const SELECTOR: [u8; 4] = [113u8, 80u8, 24u8, 166u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + renounceOwnershipReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `replayProtectionEnabled()` and selector `0x1a8b91e8`. +```solidity +function replayProtectionEnabled() external view returns (bool); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct replayProtectionEnabledCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`replayProtectionEnabled()`](replayProtectionEnabledCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct replayProtectionEnabledReturn { + #[allow(missing_docs)] + pub _0: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: replayProtectionEnabledCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for replayProtectionEnabledCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: replayProtectionEnabledReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for replayProtectionEnabledReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for replayProtectionEnabledCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = bool; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "replayProtectionEnabled()"; + const SELECTOR: [u8; 4] = [26u8, 139u8, 145u8, 232u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: replayProtectionEnabledReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: replayProtectionEnabledReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `setMaxGasPerTransaction(uint256)` and selector `0x17cb741f`. +```solidity +function setMaxGasPerTransaction(uint256 _maxGas) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct setMaxGasPerTransactionCall { + #[allow(missing_docs)] + pub _maxGas: alloy::sol_types::private::primitives::aliases::U256, + } + ///Container type for the return parameters of the [`setMaxGasPerTransaction(uint256)`](setMaxGasPerTransactionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct setMaxGasPerTransactionReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: setMaxGasPerTransactionCall) -> Self { + (value._maxGas,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for setMaxGasPerTransactionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _maxGas: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: setMaxGasPerTransactionReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for setMaxGasPerTransactionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl setMaxGasPerTransactionReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for setMaxGasPerTransactionCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = setMaxGasPerTransactionReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "setMaxGasPerTransaction(uint256)"; + const SELECTOR: [u8; 4] = [23u8, 203u8, 116u8, 31u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self._maxGas), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + setMaxGasPerTransactionReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `setMaxTransactionsPerBatch(uint256)` and selector `0x598c8be6`. +```solidity +function setMaxTransactionsPerBatch(uint256 _max) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct setMaxTransactionsPerBatchCall { + #[allow(missing_docs)] + pub _max: alloy::sol_types::private::primitives::aliases::U256, + } + ///Container type for the return parameters of the [`setMaxTransactionsPerBatch(uint256)`](setMaxTransactionsPerBatchCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct setMaxTransactionsPerBatchReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: setMaxTransactionsPerBatchCall) -> Self { + (value._max,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for setMaxTransactionsPerBatchCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _max: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: setMaxTransactionsPerBatchReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for setMaxTransactionsPerBatchReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl setMaxTransactionsPerBatchReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for setMaxTransactionsPerBatchCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = setMaxTransactionsPerBatchReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "setMaxTransactionsPerBatch(uint256)"; + const SELECTOR: [u8; 4] = [89u8, 140u8, 139u8, 230u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self._max), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + setMaxTransactionsPerBatchReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `setMinTimeBetweenTxs(uint256)` and selector `0x8e6ae229`. +```solidity +function setMinTimeBetweenTxs(uint256 _minTime) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct setMinTimeBetweenTxsCall { + #[allow(missing_docs)] + pub _minTime: alloy::sol_types::private::primitives::aliases::U256, + } + ///Container type for the return parameters of the [`setMinTimeBetweenTxs(uint256)`](setMinTimeBetweenTxsCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct setMinTimeBetweenTxsReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: setMinTimeBetweenTxsCall) -> Self { + (value._minTime,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for setMinTimeBetweenTxsCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _minTime: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: setMinTimeBetweenTxsReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for setMinTimeBetweenTxsReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl setMinTimeBetweenTxsReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for setMinTimeBetweenTxsCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = setMinTimeBetweenTxsReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "setMinTimeBetweenTxs(uint256)"; + const SELECTOR: [u8; 4] = [142u8, 106u8, 226u8, 41u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self._minTime), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + setMinTimeBetweenTxsReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `toggleBatchProcessing()` and selector `0x2bff3d4c`. +```solidity +function toggleBatchProcessing() external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct toggleBatchProcessingCall; + ///Container type for the return parameters of the [`toggleBatchProcessing()`](toggleBatchProcessingCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct toggleBatchProcessingReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: toggleBatchProcessingCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for toggleBatchProcessingCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: toggleBatchProcessingReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for toggleBatchProcessingReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl toggleBatchProcessingReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for toggleBatchProcessingCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = toggleBatchProcessingReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "toggleBatchProcessing()"; + const SELECTOR: [u8; 4] = [43u8, 255u8, 61u8, 76u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + toggleBatchProcessingReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `toggleReplayProtection()` and selector `0x9a6c01bf`. +```solidity +function toggleReplayProtection() external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct toggleReplayProtectionCall; + ///Container type for the return parameters of the [`toggleReplayProtection()`](toggleReplayProtectionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct toggleReplayProtectionReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: toggleReplayProtectionCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for toggleReplayProtectionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: toggleReplayProtectionReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for toggleReplayProtectionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl toggleReplayProtectionReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for toggleReplayProtectionCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = toggleReplayProtectionReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "toggleReplayProtection()"; + const SELECTOR: [u8; 4] = [154u8, 108u8, 1u8, 191u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + toggleReplayProtectionReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `tokensUsedPerEpoch(uint256)` and selector `0x0c672363`. +```solidity +function tokensUsedPerEpoch(uint256 epoch) external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct tokensUsedPerEpochCall { + #[allow(missing_docs)] + pub epoch: alloy::sol_types::private::primitives::aliases::U256, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`tokensUsedPerEpoch(uint256)`](tokensUsedPerEpochCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct tokensUsedPerEpochReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: tokensUsedPerEpochCall) -> Self { + (value.epoch,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for tokensUsedPerEpochCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { epoch: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: tokensUsedPerEpochReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for tokensUsedPerEpochReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for tokensUsedPerEpochCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "tokensUsedPerEpoch(uint256)"; + const SELECTOR: [u8; 4] = [12u8, 103u8, 35u8, 99u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.epoch), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: tokensUsedPerEpochReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: tokensUsedPerEpochReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `transferOwnership(address)` and selector `0xf2fde38b`. +```solidity +function transferOwnership(address newOwner) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct transferOwnershipCall { + #[allow(missing_docs)] + pub newOwner: alloy::sol_types::private::Address, + } + ///Container type for the return parameters of the [`transferOwnership(address)`](transferOwnershipCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct transferOwnershipReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: transferOwnershipCall) -> Self { + (value.newOwner,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for transferOwnershipCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { newOwner: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: transferOwnershipReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for transferOwnershipReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl transferOwnershipReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for transferOwnershipCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = transferOwnershipReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "transferOwnership(address)"; + const SELECTOR: [u8; 4] = [242u8, 253u8, 227u8, 139u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.newOwner, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + transferOwnershipReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `updateRequirementModule(address)` and selector `0xd4f0eb4d`. +```solidity +function updateRequirementModule(address _newModule) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct updateRequirementModuleCall { + #[allow(missing_docs)] + pub _newModule: alloy::sol_types::private::Address, + } + ///Container type for the return parameters of the [`updateRequirementModule(address)`](updateRequirementModuleCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct updateRequirementModuleReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: updateRequirementModuleCall) -> Self { + (value._newModule,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for updateRequirementModuleCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _newModule: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: updateRequirementModuleReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for updateRequirementModuleReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl updateRequirementModuleReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for updateRequirementModuleCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = updateRequirementModuleReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "updateRequirementModule(address)"; + const SELECTOR: [u8; 4] = [212u8, 240u8, 235u8, 77u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self._newModule, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + updateRequirementModuleReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `upgradeToAndCall(address,bytes)` and selector `0x4f1ef286`. +```solidity +function upgradeToAndCall(address newImplementation, bytes memory data) external payable; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct upgradeToAndCallCall { + #[allow(missing_docs)] + pub newImplementation: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + ///Container type for the return parameters of the [`upgradeToAndCall(address,bytes)`](upgradeToAndCallCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct upgradeToAndCallReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Bytes, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: upgradeToAndCallCall) -> Self { + (value.newImplementation, value.data) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for upgradeToAndCallCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + newImplementation: tuple.0, + data: tuple.1, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: upgradeToAndCallReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for upgradeToAndCallReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl upgradeToAndCallReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for upgradeToAndCallCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = upgradeToAndCallReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "upgradeToAndCall(address,bytes)"; + const SELECTOR: [u8; 4] = [79u8, 30u8, 242u8, 134u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.newImplementation, + ), + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + upgradeToAndCallReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `version()` and selector `0x54fd4d50`. +```solidity +function version() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct versionCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`version()`](versionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct versionReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: versionCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for versionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: versionReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for versionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for versionCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "version()"; + const SELECTOR: [u8; 4] = [84u8, 253u8, 77u8, 80u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: versionReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: versionReturn = r.into(); + r._0 + }) + } + } + }; + ///Container for all the [`SyndicateSequencingChainTestingUpgradeability`](self) function calls. + #[derive(serde::Serialize, serde::Deserialize)] + #[derive()] + pub enum SyndicateSequencingChainTestingUpgradeabilityCalls { + #[allow(missing_docs)] + EPOCH_DURATION(EPOCH_DURATIONCall), + #[allow(missing_docs)] + GAS_COUNTER_STORAGE_LOCATION(GAS_COUNTER_STORAGE_LOCATIONCall), + #[allow(missing_docs)] + SEQUENCING_MODULE_STORAGE_LOCATION(SEQUENCING_MODULE_STORAGE_LOCATIONCall), + #[allow(missing_docs)] + START_TIMESTAMP(START_TIMESTAMPCall), + #[allow(missing_docs)] + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall, + ), + #[allow(missing_docs)] + UPGRADE_INTERFACE_VERSION(UPGRADE_INTERFACE_VERSIONCall), + #[allow(missing_docs)] + appchainId(appchainIdCall), + #[allow(missing_docs)] + batchProcessingEnabled(batchProcessingEnabledCall), + #[allow(missing_docs)] + disableGasTracking(disableGasTrackingCall), + #[allow(missing_docs)] + enableGasTracking(enableGasTrackingCall), + #[allow(missing_docs)] + encodeTransaction(encodeTransactionCall), + #[allow(missing_docs)] + gasTrackingEnabled(gasTrackingEnabledCall), + #[allow(missing_docs)] + getCurrentEpoch(getCurrentEpochCall), + #[allow(missing_docs)] + getEpochEnd(getEpochEndCall), + #[allow(missing_docs)] + getEpochStart(getEpochStartCall), + #[allow(missing_docs)] + getTokensForEpoch(getTokensForEpochCall), + #[allow(missing_docs)] + initialize(initializeCall), + #[allow(missing_docs)] + isAllowed(isAllowedCall), + #[allow(missing_docs)] + lastPermissionUpdate(lastPermissionUpdateCall), + #[allow(missing_docs)] + lastTransactionTime(lastTransactionTimeCall), + #[allow(missing_docs)] + maxDataSize(maxDataSizeCall), + #[allow(missing_docs)] + maxGasPerTransaction(maxGasPerTransactionCall), + #[allow(missing_docs)] + maxTransactionsPerBatch(maxTransactionsPerBatchCall), + #[allow(missing_docs)] + minTimeBetweenTxs(minTimeBetweenTxsCall), + #[allow(missing_docs)] + owner(ownerCall), + #[allow(missing_docs)] + permissionRequirementModule(permissionRequirementModuleCall), + #[allow(missing_docs)] + processTransaction(processTransactionCall), + #[allow(missing_docs)] + processTransactionsBulk(processTransactionsBulkCall), + #[allow(missing_docs)] + proxiableUUID(proxiableUUIDCall), + #[allow(missing_docs)] + renounceOwnership(renounceOwnershipCall), + #[allow(missing_docs)] + replayProtectionEnabled(replayProtectionEnabledCall), + #[allow(missing_docs)] + setMaxGasPerTransaction(setMaxGasPerTransactionCall), + #[allow(missing_docs)] + setMaxTransactionsPerBatch(setMaxTransactionsPerBatchCall), + #[allow(missing_docs)] + setMinTimeBetweenTxs(setMinTimeBetweenTxsCall), + #[allow(missing_docs)] + toggleBatchProcessing(toggleBatchProcessingCall), + #[allow(missing_docs)] + toggleReplayProtection(toggleReplayProtectionCall), + #[allow(missing_docs)] + tokensUsedPerEpoch(tokensUsedPerEpochCall), + #[allow(missing_docs)] + transferOwnership(transferOwnershipCall), + #[allow(missing_docs)] + updateRequirementModule(updateRequirementModuleCall), + #[allow(missing_docs)] + upgradeToAndCall(upgradeToAndCallCall), + #[allow(missing_docs)] + version(versionCall), + } + #[automatically_derived] + impl SyndicateSequencingChainTestingUpgradeabilityCalls { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 4usize]] = &[ + [1u8, 117u8, 226u8, 59u8], + [12u8, 103u8, 35u8, 99u8], + [23u8, 203u8, 116u8, 31u8], + [26u8, 139u8, 145u8, 232u8], + [36u8, 7u8, 240u8, 182u8], + [43u8, 255u8, 61u8, 76u8], + [59u8, 131u8, 8u8, 137u8], + [70u8, 226u8, 204u8, 9u8], + [79u8, 30u8, 242u8, 134u8], + [82u8, 209u8, 144u8, 45u8], + [84u8, 103u8, 203u8, 72u8], + [84u8, 253u8, 77u8, 80u8], + [89u8, 140u8, 139u8, 230u8], + [91u8, 60u8, 214u8, 226u8], + [113u8, 80u8, 24u8, 166u8], + [120u8, 28u8, 217u8, 157u8], + [122u8, 57u8, 121u8, 220u8], + [132u8, 250u8, 182u8, 43u8], + [133u8, 7u8, 73u8, 37u8], + [141u8, 165u8, 203u8, 91u8], + [142u8, 106u8, 226u8, 41u8], + [142u8, 153u8, 249u8, 41u8], + [149u8, 197u8, 191u8, 117u8], + [154u8, 108u8, 1u8, 191u8], + [167u8, 11u8, 159u8, 12u8], + [173u8, 60u8, 177u8, 204u8], + [183u8, 71u8, 183u8, 11u8], + [185u8, 125u8, 217u8, 226u8], + [185u8, 247u8, 242u8, 96u8], + [202u8, 96u8, 10u8, 168u8], + [205u8, 175u8, 185u8, 120u8], + [212u8, 240u8, 235u8, 77u8], + [213u8, 23u8, 109u8, 35u8], + [216u8, 120u8, 19u8, 66u8], + [222u8, 31u8, 69u8, 62u8], + [224u8, 57u8, 97u8, 102u8], + [224u8, 87u8, 253u8, 8u8], + [231u8, 91u8, 32u8, 115u8], + [232u8, 235u8, 29u8, 195u8], + [242u8, 253u8, 227u8, 139u8], + [247u8, 1u8, 62u8, 246u8], + ]; + } + #[automatically_derived] + impl alloy_sol_types::SolInterface + for SyndicateSequencingChainTestingUpgradeabilityCalls { + const NAME: &'static str = "SyndicateSequencingChainTestingUpgradeabilityCalls"; + const MIN_DATA_LENGTH: usize = 0usize; + const COUNT: usize = 41usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::EPOCH_DURATION(_) => { + ::SELECTOR + } + Self::GAS_COUNTER_STORAGE_LOCATION(_) => { + ::SELECTOR + } + Self::SEQUENCING_MODULE_STORAGE_LOCATION(_) => { + ::SELECTOR + } + Self::START_TIMESTAMP(_) => { + ::SELECTOR + } + Self::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION(_) => { + ::SELECTOR + } + Self::UPGRADE_INTERFACE_VERSION(_) => { + ::SELECTOR + } + Self::appchainId(_) => { + ::SELECTOR + } + Self::batchProcessingEnabled(_) => { + ::SELECTOR + } + Self::disableGasTracking(_) => { + ::SELECTOR + } + Self::enableGasTracking(_) => { + ::SELECTOR + } + Self::encodeTransaction(_) => { + ::SELECTOR + } + Self::gasTrackingEnabled(_) => { + ::SELECTOR + } + Self::getCurrentEpoch(_) => { + ::SELECTOR + } + Self::getEpochEnd(_) => { + ::SELECTOR + } + Self::getEpochStart(_) => { + ::SELECTOR + } + Self::getTokensForEpoch(_) => { + ::SELECTOR + } + Self::initialize(_) => { + ::SELECTOR + } + Self::isAllowed(_) => { + ::SELECTOR + } + Self::lastPermissionUpdate(_) => { + ::SELECTOR + } + Self::lastTransactionTime(_) => { + ::SELECTOR + } + Self::maxDataSize(_) => { + ::SELECTOR + } + Self::maxGasPerTransaction(_) => { + ::SELECTOR + } + Self::maxTransactionsPerBatch(_) => { + ::SELECTOR + } + Self::minTimeBetweenTxs(_) => { + ::SELECTOR + } + Self::owner(_) => ::SELECTOR, + Self::permissionRequirementModule(_) => { + ::SELECTOR + } + Self::processTransaction(_) => { + ::SELECTOR + } + Self::processTransactionsBulk(_) => { + ::SELECTOR + } + Self::proxiableUUID(_) => { + ::SELECTOR + } + Self::renounceOwnership(_) => { + ::SELECTOR + } + Self::replayProtectionEnabled(_) => { + ::SELECTOR + } + Self::setMaxGasPerTransaction(_) => { + ::SELECTOR + } + Self::setMaxTransactionsPerBatch(_) => { + ::SELECTOR + } + Self::setMinTimeBetweenTxs(_) => { + ::SELECTOR + } + Self::toggleBatchProcessing(_) => { + ::SELECTOR + } + Self::toggleReplayProtection(_) => { + ::SELECTOR + } + Self::tokensUsedPerEpoch(_) => { + ::SELECTOR + } + Self::transferOwnership(_) => { + ::SELECTOR + } + Self::updateRequirementModule(_) => { + ::SELECTOR + } + Self::upgradeToAndCall(_) => { + ::SELECTOR + } + Self::version(_) => ::SELECTOR, + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + >] = &[ + { + fn getEpochStart( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::getEpochStart, + ) + } + getEpochStart + }, + { + fn tokensUsedPerEpoch( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::tokensUsedPerEpoch, + ) + } + tokensUsedPerEpoch + }, + { + fn setMaxGasPerTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::setMaxGasPerTransaction, + ) + } + setMaxGasPerTransaction + }, + { + fn replayProtectionEnabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::replayProtectionEnabled, + ) + } + replayProtectionEnabled + }, + { + fn SEQUENCING_MODULE_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::SEQUENCING_MODULE_STORAGE_LOCATION, + ) + } + SEQUENCING_MODULE_STORAGE_LOCATION + }, + { + fn toggleBatchProcessing( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::toggleBatchProcessing, + ) + } + toggleBatchProcessing + }, + { + fn lastPermissionUpdate( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::lastPermissionUpdate, + ) + } + lastPermissionUpdate + }, + { + fn processTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::processTransaction, + ) + } + processTransaction + }, + { + fn upgradeToAndCall( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::upgradeToAndCall, + ) + } + upgradeToAndCall + }, + { + fn proxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::proxiableUUID, + ) + } + proxiableUUID + }, + { + fn disableGasTracking( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::disableGasTracking, + ) + } + disableGasTracking + }, + { + fn version( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw(data) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::version, + ) + } + version + }, + { + fn setMaxTransactionsPerBatch( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::setMaxTransactionsPerBatch, + ) + } + setMaxTransactionsPerBatch + }, + { + fn permissionRequirementModule( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::permissionRequirementModule, + ) + } + permissionRequirementModule + }, + { + fn renounceOwnership( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::renounceOwnership, + ) + } + renounceOwnership + }, + { + fn START_TIMESTAMP( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::START_TIMESTAMP, + ) + } + START_TIMESTAMP + }, + { + fn isAllowed( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw(data) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::isAllowed, + ) + } + isAllowed + }, + { + fn gasTrackingEnabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::gasTrackingEnabled, + ) + } + gasTrackingEnabled + }, + { + fn encodeTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::encodeTransaction, + ) + } + encodeTransaction + }, + { + fn owner( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw(data) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::owner, + ) + } + owner + }, + { + fn setMinTimeBetweenTxs( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::setMinTimeBetweenTxs, + ) + } + setMinTimeBetweenTxs + }, + { + fn maxGasPerTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::maxGasPerTransaction, + ) + } + maxGasPerTransaction + }, + { + fn SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION, + ) + } + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION + }, + { + fn toggleReplayProtection( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::toggleReplayProtection, + ) + } + toggleReplayProtection + }, + { + fn EPOCH_DURATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::EPOCH_DURATION, + ) + } + EPOCH_DURATION + }, + { + fn UPGRADE_INTERFACE_VERSION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::UPGRADE_INTERFACE_VERSION, + ) + } + UPGRADE_INTERFACE_VERSION + }, + { + fn minTimeBetweenTxs( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::minTimeBetweenTxs, + ) + } + minTimeBetweenTxs + }, + { + fn getCurrentEpoch( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::getCurrentEpoch, + ) + } + getCurrentEpoch + }, + { + fn GAS_COUNTER_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::GAS_COUNTER_STORAGE_LOCATION, + ) + } + GAS_COUNTER_STORAGE_LOCATION + }, + { + fn maxTransactionsPerBatch( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::maxTransactionsPerBatch, + ) + } + maxTransactionsPerBatch + }, + { + fn processTransactionsBulk( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::processTransactionsBulk, + ) + } + processTransactionsBulk + }, + { + fn updateRequirementModule( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::updateRequirementModule, + ) + } + updateRequirementModule + }, + { + fn getEpochEnd( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::getEpochEnd, + ) + } + getEpochEnd + }, + { + fn appchainId( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::appchainId, + ) + } + appchainId + }, + { + fn enableGasTracking( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::enableGasTracking, + ) + } + enableGasTracking + }, + { + fn getTokensForEpoch( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::getTokensForEpoch, + ) + } + getTokensForEpoch + }, + { + fn batchProcessingEnabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::batchProcessingEnabled, + ) + } + batchProcessingEnabled + }, + { + fn lastTransactionTime( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::lastTransactionTime, + ) + } + lastTransactionTime + }, + { + fn maxDataSize( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::maxDataSize, + ) + } + maxDataSize + }, + { + fn transferOwnership( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::transferOwnership, + ) + } + transferOwnership + }, + { + fn initialize( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::initialize, + ) + } + initialize + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_SHIMS[idx](data) + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw_validate( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_VALIDATE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + >] = &[ + { + fn getEpochStart( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::getEpochStart, + ) + } + getEpochStart + }, + { + fn tokensUsedPerEpoch( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::tokensUsedPerEpoch, + ) + } + tokensUsedPerEpoch + }, + { + fn setMaxGasPerTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::setMaxGasPerTransaction, + ) + } + setMaxGasPerTransaction + }, + { + fn replayProtectionEnabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::replayProtectionEnabled, + ) + } + replayProtectionEnabled + }, + { + fn SEQUENCING_MODULE_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::SEQUENCING_MODULE_STORAGE_LOCATION, + ) + } + SEQUENCING_MODULE_STORAGE_LOCATION + }, + { + fn toggleBatchProcessing( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::toggleBatchProcessing, + ) + } + toggleBatchProcessing + }, + { + fn lastPermissionUpdate( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::lastPermissionUpdate, + ) + } + lastPermissionUpdate + }, + { + fn processTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::processTransaction, + ) + } + processTransaction + }, + { + fn upgradeToAndCall( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::upgradeToAndCall, + ) + } + upgradeToAndCall + }, + { + fn proxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::proxiableUUID, + ) + } + proxiableUUID + }, + { + fn disableGasTracking( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::disableGasTracking, + ) + } + disableGasTracking + }, + { + fn version( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::version, + ) + } + version + }, + { + fn setMaxTransactionsPerBatch( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::setMaxTransactionsPerBatch, + ) + } + setMaxTransactionsPerBatch + }, + { + fn permissionRequirementModule( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::permissionRequirementModule, + ) + } + permissionRequirementModule + }, + { + fn renounceOwnership( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::renounceOwnership, + ) + } + renounceOwnership + }, + { + fn START_TIMESTAMP( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::START_TIMESTAMP, + ) + } + START_TIMESTAMP + }, + { + fn isAllowed( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::isAllowed, + ) + } + isAllowed + }, + { + fn gasTrackingEnabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::gasTrackingEnabled, + ) + } + gasTrackingEnabled + }, + { + fn encodeTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::encodeTransaction, + ) + } + encodeTransaction + }, + { + fn owner( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::owner, + ) + } + owner + }, + { + fn setMinTimeBetweenTxs( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::setMinTimeBetweenTxs, + ) + } + setMinTimeBetweenTxs + }, + { + fn maxGasPerTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::maxGasPerTransaction, + ) + } + maxGasPerTransaction + }, + { + fn SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION, + ) + } + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION + }, + { + fn toggleReplayProtection( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::toggleReplayProtection, + ) + } + toggleReplayProtection + }, + { + fn EPOCH_DURATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::EPOCH_DURATION, + ) + } + EPOCH_DURATION + }, + { + fn UPGRADE_INTERFACE_VERSION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::UPGRADE_INTERFACE_VERSION, + ) + } + UPGRADE_INTERFACE_VERSION + }, + { + fn minTimeBetweenTxs( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::minTimeBetweenTxs, + ) + } + minTimeBetweenTxs + }, + { + fn getCurrentEpoch( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::getCurrentEpoch, + ) + } + getCurrentEpoch + }, + { + fn GAS_COUNTER_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::GAS_COUNTER_STORAGE_LOCATION, + ) + } + GAS_COUNTER_STORAGE_LOCATION + }, + { + fn maxTransactionsPerBatch( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::maxTransactionsPerBatch, + ) + } + maxTransactionsPerBatch + }, + { + fn processTransactionsBulk( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::processTransactionsBulk, + ) + } + processTransactionsBulk + }, + { + fn updateRequirementModule( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::updateRequirementModule, + ) + } + updateRequirementModule + }, + { + fn getEpochEnd( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::getEpochEnd, + ) + } + getEpochEnd + }, + { + fn appchainId( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::appchainId, + ) + } + appchainId + }, + { + fn enableGasTracking( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::enableGasTracking, + ) + } + enableGasTracking + }, + { + fn getTokensForEpoch( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::getTokensForEpoch, + ) + } + getTokensForEpoch + }, + { + fn batchProcessingEnabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::batchProcessingEnabled, + ) + } + batchProcessingEnabled + }, + { + fn lastTransactionTime( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::lastTransactionTime, + ) + } + lastTransactionTime + }, + { + fn maxDataSize( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::maxDataSize, + ) + } + maxDataSize + }, + { + fn transferOwnership( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::transferOwnership, + ) + } + transferOwnership + }, + { + fn initialize( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityCalls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityCalls::initialize, + ) + } + initialize + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_VALIDATE_SHIMS[idx](data) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::EPOCH_DURATION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::GAS_COUNTER_STORAGE_LOCATION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::SEQUENCING_MODULE_STORAGE_LOCATION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::START_TIMESTAMP(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::UPGRADE_INTERFACE_VERSION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::appchainId(inner) => { + ::abi_encoded_size(inner) + } + Self::batchProcessingEnabled(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::disableGasTracking(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::enableGasTracking(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::encodeTransaction(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::gasTrackingEnabled(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::getCurrentEpoch(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::getEpochEnd(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::getEpochStart(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::getTokensForEpoch(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::initialize(inner) => { + ::abi_encoded_size(inner) + } + Self::isAllowed(inner) => { + ::abi_encoded_size(inner) + } + Self::lastPermissionUpdate(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::lastTransactionTime(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::maxDataSize(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::maxGasPerTransaction(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::maxTransactionsPerBatch(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::minTimeBetweenTxs(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::owner(inner) => { + ::abi_encoded_size(inner) + } + Self::permissionRequirementModule(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::processTransaction(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::processTransactionsBulk(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::proxiableUUID(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::renounceOwnership(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::replayProtectionEnabled(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::setMaxGasPerTransaction(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::setMaxTransactionsPerBatch(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::setMinTimeBetweenTxs(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::toggleBatchProcessing(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::toggleReplayProtection(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::tokensUsedPerEpoch(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::transferOwnership(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::updateRequirementModule(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::upgradeToAndCall(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::version(inner) => { + ::abi_encoded_size(inner) + } + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::EPOCH_DURATION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::GAS_COUNTER_STORAGE_LOCATION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::SEQUENCING_MODULE_STORAGE_LOCATION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::START_TIMESTAMP(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::UPGRADE_INTERFACE_VERSION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::appchainId(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::batchProcessingEnabled(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::disableGasTracking(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::enableGasTracking(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::encodeTransaction(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::gasTrackingEnabled(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::getCurrentEpoch(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::getEpochEnd(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::getEpochStart(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::getTokensForEpoch(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::initialize(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::isAllowed(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::lastPermissionUpdate(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::lastTransactionTime(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::maxDataSize(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::maxGasPerTransaction(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::maxTransactionsPerBatch(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::minTimeBetweenTxs(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::owner(inner) => { + ::abi_encode_raw(inner, out) + } + Self::permissionRequirementModule(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::processTransaction(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::processTransactionsBulk(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::proxiableUUID(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::renounceOwnership(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::replayProtectionEnabled(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::setMaxGasPerTransaction(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::setMaxTransactionsPerBatch(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::setMinTimeBetweenTxs(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::toggleBatchProcessing(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::toggleReplayProtection(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::tokensUsedPerEpoch(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::transferOwnership(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::updateRequirementModule(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::upgradeToAndCall(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::version(inner) => { + ::abi_encode_raw(inner, out) + } + } + } + } + ///Container for all the [`SyndicateSequencingChainTestingUpgradeability`](self) custom errors. + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Debug, PartialEq, Eq, Hash)] + pub enum SyndicateSequencingChainTestingUpgradeabilityErrors { + #[allow(missing_docs)] + AddressEmptyCode(AddressEmptyCode), + #[allow(missing_docs)] + DataTooLarge(DataTooLarge), + #[allow(missing_docs)] + ERC1967InvalidImplementation(ERC1967InvalidImplementation), + #[allow(missing_docs)] + ERC1967NonPayable(ERC1967NonPayable), + #[allow(missing_docs)] + FailedCall(FailedCall), + #[allow(missing_docs)] + GasTrackingAlreadyDisabled(GasTrackingAlreadyDisabled), + #[allow(missing_docs)] + GasTrackingAlreadyEnabled(GasTrackingAlreadyEnabled), + #[allow(missing_docs)] + InvalidInitialization(InvalidInitialization), + #[allow(missing_docs)] + NoTxData(NoTxData), + #[allow(missing_docs)] + NotInitializing(NotInitializing), + #[allow(missing_docs)] + OwnableInvalidOwner(OwnableInvalidOwner), + #[allow(missing_docs)] + OwnableUnauthorizedAccount(OwnableUnauthorizedAccount), + #[allow(missing_docs)] + TransactionOrSenderNotAllowed(TransactionOrSenderNotAllowed), + #[allow(missing_docs)] + UUPSUnauthorizedCallContext(UUPSUnauthorizedCallContext), + #[allow(missing_docs)] + UUPSUnsupportedProxiableUUID(UUPSUnsupportedProxiableUUID), + #[allow(missing_docs)] + ZeroEpochIndex(ZeroEpochIndex), + } + #[automatically_derived] + impl SyndicateSequencingChainTestingUpgradeabilityErrors { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 4usize]] = &[ + [17u8, 140u8, 218u8, 167u8], + [30u8, 79u8, 189u8, 247u8], + [70u8, 52u8, 105u8, 27u8], + [76u8, 156u8, 140u8, 227u8], + [118u8, 121u8, 64u8, 13u8], + [153u8, 150u8, 179u8, 21u8], + [170u8, 29u8, 73u8, 164u8], + [179u8, 152u8, 151u8, 159u8], + [205u8, 96u8, 195u8, 202u8], + [214u8, 147u8, 104u8, 212u8], + [214u8, 189u8, 162u8, 117u8], + [215u8, 230u8, 188u8, 248u8], + [220u8, 55u8, 245u8, 29u8], + [220u8, 116u8, 20u8, 88u8], + [224u8, 124u8, 141u8, 186u8], + [249u8, 46u8, 232u8, 169u8], + ]; + } + #[automatically_derived] + impl alloy_sol_types::SolInterface + for SyndicateSequencingChainTestingUpgradeabilityErrors { + const NAME: &'static str = "SyndicateSequencingChainTestingUpgradeabilityErrors"; + const MIN_DATA_LENGTH: usize = 0usize; + const COUNT: usize = 16usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::AddressEmptyCode(_) => { + ::SELECTOR + } + Self::DataTooLarge(_) => { + ::SELECTOR + } + Self::ERC1967InvalidImplementation(_) => { + ::SELECTOR + } + Self::ERC1967NonPayable(_) => { + ::SELECTOR + } + Self::FailedCall(_) => { + ::SELECTOR + } + Self::GasTrackingAlreadyDisabled(_) => { + ::SELECTOR + } + Self::GasTrackingAlreadyEnabled(_) => { + ::SELECTOR + } + Self::InvalidInitialization(_) => { + ::SELECTOR + } + Self::NoTxData(_) => ::SELECTOR, + Self::NotInitializing(_) => { + ::SELECTOR + } + Self::OwnableInvalidOwner(_) => { + ::SELECTOR + } + Self::OwnableUnauthorizedAccount(_) => { + ::SELECTOR + } + Self::TransactionOrSenderNotAllowed(_) => { + ::SELECTOR + } + Self::UUPSUnauthorizedCallContext(_) => { + ::SELECTOR + } + Self::UUPSUnsupportedProxiableUUID(_) => { + ::SELECTOR + } + Self::ZeroEpochIndex(_) => { + ::SELECTOR + } + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + >] = &[ + { + fn OwnableUnauthorizedAccount( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::OwnableUnauthorizedAccount, + ) + } + OwnableUnauthorizedAccount + }, + { + fn OwnableInvalidOwner( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::OwnableInvalidOwner, + ) + } + OwnableInvalidOwner + }, + { + fn DataTooLarge( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw(data) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::DataTooLarge, + ) + } + DataTooLarge + }, + { + fn ERC1967InvalidImplementation( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::ERC1967InvalidImplementation, + ) + } + ERC1967InvalidImplementation + }, + { + fn GasTrackingAlreadyEnabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::GasTrackingAlreadyEnabled, + ) + } + GasTrackingAlreadyEnabled + }, + { + fn AddressEmptyCode( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::AddressEmptyCode, + ) + } + AddressEmptyCode + }, + { + fn UUPSUnsupportedProxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::UUPSUnsupportedProxiableUUID, + ) + } + UUPSUnsupportedProxiableUUID + }, + { + fn ERC1967NonPayable( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::ERC1967NonPayable, + ) + } + ERC1967NonPayable + }, + { + fn GasTrackingAlreadyDisabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::GasTrackingAlreadyDisabled, + ) + } + GasTrackingAlreadyDisabled + }, + { + fn ZeroEpochIndex( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::ZeroEpochIndex, + ) + } + ZeroEpochIndex + }, + { + fn FailedCall( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw(data) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::FailedCall, + ) + } + FailedCall + }, + { + fn NotInitializing( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::NotInitializing, + ) + } + NotInitializing + }, + { + fn NoTxData( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw(data) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::NoTxData, + ) + } + NoTxData + }, + { + fn TransactionOrSenderNotAllowed( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::TransactionOrSenderNotAllowed, + ) + } + TransactionOrSenderNotAllowed + }, + { + fn UUPSUnauthorizedCallContext( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::UUPSUnauthorizedCallContext, + ) + } + UUPSUnauthorizedCallContext + }, + { + fn InvalidInitialization( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::InvalidInitialization, + ) + } + InvalidInitialization + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_SHIMS[idx](data) + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw_validate( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_VALIDATE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + >] = &[ + { + fn OwnableUnauthorizedAccount( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::OwnableUnauthorizedAccount, + ) + } + OwnableUnauthorizedAccount + }, + { + fn OwnableInvalidOwner( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::OwnableInvalidOwner, + ) + } + OwnableInvalidOwner + }, + { + fn DataTooLarge( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::DataTooLarge, + ) + } + DataTooLarge + }, + { + fn ERC1967InvalidImplementation( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::ERC1967InvalidImplementation, + ) + } + ERC1967InvalidImplementation + }, + { + fn GasTrackingAlreadyEnabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::GasTrackingAlreadyEnabled, + ) + } + GasTrackingAlreadyEnabled + }, + { + fn AddressEmptyCode( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::AddressEmptyCode, + ) + } + AddressEmptyCode + }, + { + fn UUPSUnsupportedProxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::UUPSUnsupportedProxiableUUID, + ) + } + UUPSUnsupportedProxiableUUID + }, + { + fn ERC1967NonPayable( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::ERC1967NonPayable, + ) + } + ERC1967NonPayable + }, + { + fn GasTrackingAlreadyDisabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::GasTrackingAlreadyDisabled, + ) + } + GasTrackingAlreadyDisabled + }, + { + fn ZeroEpochIndex( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::ZeroEpochIndex, + ) + } + ZeroEpochIndex + }, + { + fn FailedCall( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::FailedCall, + ) + } + FailedCall + }, + { + fn NotInitializing( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::NotInitializing, + ) + } + NotInitializing + }, + { + fn NoTxData( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::NoTxData, + ) + } + NoTxData + }, + { + fn TransactionOrSenderNotAllowed( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::TransactionOrSenderNotAllowed, + ) + } + TransactionOrSenderNotAllowed + }, + { + fn UUPSUnauthorizedCallContext( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::UUPSUnauthorizedCallContext, + ) + } + UUPSUnauthorizedCallContext + }, + { + fn InvalidInitialization( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainTestingUpgradeabilityErrors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainTestingUpgradeabilityErrors::InvalidInitialization, + ) + } + InvalidInitialization + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_VALIDATE_SHIMS[idx](data) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::AddressEmptyCode(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::DataTooLarge(inner) => { + ::abi_encoded_size(inner) + } + Self::ERC1967InvalidImplementation(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ERC1967NonPayable(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::FailedCall(inner) => { + ::abi_encoded_size(inner) + } + Self::GasTrackingAlreadyDisabled(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::GasTrackingAlreadyEnabled(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::InvalidInitialization(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::NoTxData(inner) => { + ::abi_encoded_size(inner) + } + Self::NotInitializing(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::OwnableInvalidOwner(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::OwnableUnauthorizedAccount(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::TransactionOrSenderNotAllowed(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::UUPSUnauthorizedCallContext(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::UUPSUnsupportedProxiableUUID(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ZeroEpochIndex(inner) => { + ::abi_encoded_size( + inner, + ) + } + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::AddressEmptyCode(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::DataTooLarge(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ERC1967InvalidImplementation(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ERC1967NonPayable(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::FailedCall(inner) => { + ::abi_encode_raw(inner, out) + } + Self::GasTrackingAlreadyDisabled(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::GasTrackingAlreadyEnabled(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::InvalidInitialization(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::NoTxData(inner) => { + ::abi_encode_raw(inner, out) + } + Self::NotInitializing(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::OwnableInvalidOwner(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::OwnableUnauthorizedAccount(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::TransactionOrSenderNotAllowed(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::UUPSUnauthorizedCallContext(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::UUPSUnsupportedProxiableUUID(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ZeroEpochIndex(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + } + } + } + ///Container for all the [`SyndicateSequencingChainTestingUpgradeability`](self) events. + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Debug, PartialEq, Eq, Hash)] + pub enum SyndicateSequencingChainTestingUpgradeabilityEvents { + #[allow(missing_docs)] + BatchProcessingToggled(BatchProcessingToggled), + #[allow(missing_docs)] + Initialized(Initialized), + #[allow(missing_docs)] + MaxGasPerTransactionUpdated(MaxGasPerTransactionUpdated), + #[allow(missing_docs)] + MaxTransactionsPerBatchUpdated(MaxTransactionsPerBatchUpdated), + #[allow(missing_docs)] + MinTimeBetweenTxsUpdated(MinTimeBetweenTxsUpdated), + #[allow(missing_docs)] + OwnershipTransferred(OwnershipTransferred), + #[allow(missing_docs)] + ReplayProtectionToggled(ReplayProtectionToggled), + #[allow(missing_docs)] + RequirementModuleUpdated(RequirementModuleUpdated), + #[allow(missing_docs)] + TransactionProcessed(TransactionProcessed), + #[allow(missing_docs)] + Upgraded(Upgraded), + } + #[automatically_derived] + impl SyndicateSequencingChainTestingUpgradeabilityEvents { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 32usize]] = &[ + [ + 37u8, 53u8, 128u8, 248u8, 6u8, 116u8, 28u8, 17u8, 179u8, 212u8, 170u8, + 96u8, 217u8, 202u8, 204u8, 91u8, 239u8, 12u8, 235u8, 179u8, 87u8, 72u8, + 118u8, 127u8, 226u8, 63u8, 17u8, 145u8, 110u8, 47u8, 4u8, 185u8, + ], + [ + 53u8, 158u8, 209u8, 41u8, 95u8, 80u8, 147u8, 39u8, 75u8, 108u8, 166u8, + 163u8, 121u8, 69u8, 184u8, 108u8, 172u8, 79u8, 14u8, 45u8, 239u8, 67u8, + 175u8, 211u8, 162u8, 200u8, 161u8, 41u8, 9u8, 35u8, 242u8, 66u8, + ], + [ + 56u8, 140u8, 172u8, 86u8, 101u8, 179u8, 98u8, 243u8, 129u8, 221u8, 150u8, + 199u8, 198u8, 205u8, 224u8, 73u8, 159u8, 242u8, 37u8, 183u8, 118u8, + 195u8, 189u8, 100u8, 107u8, 31u8, 224u8, 78u8, 191u8, 217u8, 3u8, 165u8, + ], + [ + 117u8, 251u8, 29u8, 202u8, 160u8, 28u8, 180u8, 174u8, 137u8, 42u8, 63u8, + 64u8, 163u8, 60u8, 187u8, 178u8, 71u8, 63u8, 67u8, 74u8, 131u8, 25u8, + 197u8, 45u8, 45u8, 24u8, 95u8, 225u8, 60u8, 170u8, 19u8, 93u8, + ], + [ + 131u8, 54u8, 59u8, 120u8, 189u8, 251u8, 178u8, 62u8, 42u8, 97u8, 219u8, + 122u8, 204u8, 195u8, 192u8, 31u8, 218u8, 41u8, 197u8, 197u8, 236u8, + 129u8, 136u8, 128u8, 3u8, 203u8, 150u8, 41u8, 18u8, 97u8, 138u8, 127u8, + ], + [ + 139u8, 224u8, 7u8, 156u8, 83u8, 22u8, 89u8, 20u8, 19u8, 68u8, 205u8, + 31u8, 208u8, 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8, + 218u8, 175u8, 227u8, 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8, + ], + [ + 188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8, + 179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8, + 12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8, + ], + [ + 199u8, 245u8, 5u8, 178u8, 243u8, 113u8, 174u8, 33u8, 117u8, 238u8, 73u8, + 19u8, 244u8, 73u8, 158u8, 31u8, 38u8, 51u8, 167u8, 181u8, 147u8, 99u8, + 33u8, 238u8, 209u8, 205u8, 174u8, 182u8, 17u8, 81u8, 129u8, 210u8, + ], + [ + 206u8, 45u8, 199u8, 150u8, 208u8, 129u8, 201u8, 193u8, 144u8, 20u8, + 106u8, 48u8, 78u8, 195u8, 183u8, 90u8, 214u8, 172u8, 224u8, 60u8, 55u8, + 200u8, 124u8, 141u8, 143u8, 136u8, 200u8, 177u8, 93u8, 216u8, 24u8, 76u8, + ], + [ + 240u8, 26u8, 198u8, 207u8, 157u8, 126u8, 120u8, 168u8, 9u8, 236u8, 182u8, + 208u8, 162u8, 158u8, 160u8, 129u8, 61u8, 210u8, 48u8, 103u8, 166u8, 48u8, + 16u8, 95u8, 206u8, 185u8, 109u8, 242u8, 126u8, 146u8, 63u8, 225u8, + ], + ]; + } + #[automatically_derived] + impl alloy_sol_types::SolEventInterface + for SyndicateSequencingChainTestingUpgradeabilityEvents { + const NAME: &'static str = "SyndicateSequencingChainTestingUpgradeabilityEvents"; + const COUNT: usize = 10usize; + fn decode_raw_log( + topics: &[alloy_sol_types::Word], + data: &[u8], + ) -> alloy_sol_types::Result { + match topics.first().copied() { + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::BatchProcessingToggled) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::Initialized) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::MaxGasPerTransactionUpdated) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::MaxTransactionsPerBatchUpdated) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::MinTimeBetweenTxsUpdated) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::OwnershipTransferred) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::ReplayProtectionToggled) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::RequirementModuleUpdated) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::TransactionProcessed) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log(topics, data) + .map(Self::Upgraded) + } + _ => { + alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog { + name: ::NAME, + log: alloy_sol_types::private::Box::new( + alloy_sol_types::private::LogData::new_unchecked( + topics.to_vec(), + data.to_vec().into(), + ), + ), + }) + } + } + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData + for SyndicateSequencingChainTestingUpgradeabilityEvents { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + match self { + Self::BatchProcessingToggled(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::Initialized(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::MaxGasPerTransactionUpdated(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::MaxTransactionsPerBatchUpdated(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::MinTimeBetweenTxsUpdated(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::OwnershipTransferred(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::ReplayProtectionToggled(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::RequirementModuleUpdated(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::TransactionProcessed(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::Upgraded(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + } + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + match self { + Self::BatchProcessingToggled(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::Initialized(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::MaxGasPerTransactionUpdated(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::MaxTransactionsPerBatchUpdated(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::MinTimeBetweenTxsUpdated(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::OwnershipTransferred(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::ReplayProtectionToggled(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::RequirementModuleUpdated(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::TransactionProcessed(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::Upgraded(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + } + } + } + use alloy::contract as alloy_contract; + /**Creates a new wrapper around an on-chain [`SyndicateSequencingChainTestingUpgradeability`](self) contract instance. + +See the [wrapper's documentation](`SyndicateSequencingChainTestingUpgradeabilityInstance`) for more details.*/ + #[inline] + pub const fn new< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + address: alloy_sol_types::private::Address, + provider: P, + ) -> SyndicateSequencingChainTestingUpgradeabilityInstance { + SyndicateSequencingChainTestingUpgradeabilityInstance::< + P, + N, + >::new(address, provider) + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub fn deploy< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + provider: P, + ) -> impl ::core::future::Future< + Output = alloy_contract::Result< + SyndicateSequencingChainTestingUpgradeabilityInstance, + >, + > { + SyndicateSequencingChainTestingUpgradeabilityInstance::::deploy(provider) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >(provider: P) -> alloy_contract::RawCallBuilder { + SyndicateSequencingChainTestingUpgradeabilityInstance::< + P, + N, + >::deploy_builder(provider) + } + /**A [`SyndicateSequencingChainTestingUpgradeability`](self) instance. + +Contains type-safe methods for interacting with an on-chain instance of the +[`SyndicateSequencingChainTestingUpgradeability`](self) contract located at a given `address`, using a given +provider `P`. + +If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!) +documentation on how to provide it), the `deploy` and `deploy_builder` methods can +be used to deploy a new instance of the contract. + +See the [module-level documentation](self) for all the available methods.*/ + #[derive(Clone)] + pub struct SyndicateSequencingChainTestingUpgradeabilityInstance< + P, + N = alloy_contract::private::Ethereum, + > { + address: alloy_sol_types::private::Address, + provider: P, + _network: ::core::marker::PhantomData, + } + #[automatically_derived] + impl ::core::fmt::Debug + for SyndicateSequencingChainTestingUpgradeabilityInstance { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple("SyndicateSequencingChainTestingUpgradeabilityInstance") + .field(&self.address) + .finish() + } + } + /// Instantiation and getters/setters. + #[automatically_derived] + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > SyndicateSequencingChainTestingUpgradeabilityInstance { + /**Creates a new wrapper around an on-chain [`SyndicateSequencingChainTestingUpgradeability`](self) contract instance. + +See the [wrapper's documentation](`SyndicateSequencingChainTestingUpgradeabilityInstance`) for more details.*/ + #[inline] + pub const fn new( + address: alloy_sol_types::private::Address, + provider: P, + ) -> Self { + Self { + address, + provider, + _network: ::core::marker::PhantomData, + } + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub async fn deploy( + provider: P, + ) -> alloy_contract::Result< + SyndicateSequencingChainTestingUpgradeabilityInstance, + > { + let call_builder = Self::deploy_builder(provider); + let contract_address = call_builder.deploy().await?; + Ok(Self::new(contract_address, call_builder.provider)) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder(provider: P) -> alloy_contract::RawCallBuilder { + alloy_contract::RawCallBuilder::new_raw_deploy( + provider, + ::core::clone::Clone::clone(&BYTECODE), + ) + } + /// Returns a reference to the address. + #[inline] + pub const fn address(&self) -> &alloy_sol_types::private::Address { + &self.address + } + /// Sets the address. + #[inline] + pub fn set_address(&mut self, address: alloy_sol_types::private::Address) { + self.address = address; + } + /// Sets the address and returns `self`. + pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self { + self.set_address(address); + self + } + /// Returns a reference to the provider. + #[inline] + pub const fn provider(&self) -> &P { + &self.provider + } + } + impl< + P: ::core::clone::Clone, + N, + > SyndicateSequencingChainTestingUpgradeabilityInstance<&P, N> { + /// Clones the provider and returns a new instance with the cloned provider. + #[inline] + pub fn with_cloned_provider( + self, + ) -> SyndicateSequencingChainTestingUpgradeabilityInstance { + SyndicateSequencingChainTestingUpgradeabilityInstance { + address: self.address, + provider: ::core::clone::Clone::clone(&self.provider), + _network: ::core::marker::PhantomData, + } + } + } + /// Function calls. + #[automatically_derived] + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > SyndicateSequencingChainTestingUpgradeabilityInstance { + /// Creates a new call builder using this contract instance's provider and address. + /// + /// Note that the call can be any function call, not just those defined in this + /// contract. Prefer using the other methods for building type-safe contract calls. + pub fn call_builder( + &self, + call: &C, + ) -> alloy_contract::SolCallBuilder<&P, C, N> { + alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) + } + ///Creates a new call builder for the [`EPOCH_DURATION`] function. + pub fn EPOCH_DURATION( + &self, + ) -> alloy_contract::SolCallBuilder<&P, EPOCH_DURATIONCall, N> { + self.call_builder(&EPOCH_DURATIONCall) + } + ///Creates a new call builder for the [`GAS_COUNTER_STORAGE_LOCATION`] function. + pub fn GAS_COUNTER_STORAGE_LOCATION( + &self, + ) -> alloy_contract::SolCallBuilder<&P, GAS_COUNTER_STORAGE_LOCATIONCall, N> { + self.call_builder(&GAS_COUNTER_STORAGE_LOCATIONCall) + } + ///Creates a new call builder for the [`SEQUENCING_MODULE_STORAGE_LOCATION`] function. + pub fn SEQUENCING_MODULE_STORAGE_LOCATION( + &self, + ) -> alloy_contract::SolCallBuilder< + &P, + SEQUENCING_MODULE_STORAGE_LOCATIONCall, + N, + > { + self.call_builder(&SEQUENCING_MODULE_STORAGE_LOCATIONCall) + } + ///Creates a new call builder for the [`START_TIMESTAMP`] function. + pub fn START_TIMESTAMP( + &self, + ) -> alloy_contract::SolCallBuilder<&P, START_TIMESTAMPCall, N> { + self.call_builder(&START_TIMESTAMPCall) + } + ///Creates a new call builder for the [`SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION`] function. + pub fn SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + &self, + ) -> alloy_contract::SolCallBuilder< + &P, + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall, + N, + > { + self.call_builder(&SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall) + } + ///Creates a new call builder for the [`UPGRADE_INTERFACE_VERSION`] function. + pub fn UPGRADE_INTERFACE_VERSION( + &self, + ) -> alloy_contract::SolCallBuilder<&P, UPGRADE_INTERFACE_VERSIONCall, N> { + self.call_builder(&UPGRADE_INTERFACE_VERSIONCall) + } + ///Creates a new call builder for the [`appchainId`] function. + pub fn appchainId( + &self, + ) -> alloy_contract::SolCallBuilder<&P, appchainIdCall, N> { + self.call_builder(&appchainIdCall) + } + ///Creates a new call builder for the [`batchProcessingEnabled`] function. + pub fn batchProcessingEnabled( + &self, + ) -> alloy_contract::SolCallBuilder<&P, batchProcessingEnabledCall, N> { + self.call_builder(&batchProcessingEnabledCall) + } + ///Creates a new call builder for the [`disableGasTracking`] function. + pub fn disableGasTracking( + &self, + ) -> alloy_contract::SolCallBuilder<&P, disableGasTrackingCall, N> { + self.call_builder(&disableGasTrackingCall) + } + ///Creates a new call builder for the [`enableGasTracking`] function. + pub fn enableGasTracking( + &self, + ) -> alloy_contract::SolCallBuilder<&P, enableGasTrackingCall, N> { + self.call_builder(&enableGasTrackingCall) + } + ///Creates a new call builder for the [`encodeTransaction`] function. + pub fn encodeTransaction( + &self, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, encodeTransactionCall, N> { + self.call_builder(&encodeTransactionCall { data }) + } + ///Creates a new call builder for the [`gasTrackingEnabled`] function. + pub fn gasTrackingEnabled( + &self, + ) -> alloy_contract::SolCallBuilder<&P, gasTrackingEnabledCall, N> { + self.call_builder(&gasTrackingEnabledCall) + } + ///Creates a new call builder for the [`getCurrentEpoch`] function. + pub fn getCurrentEpoch( + &self, + ) -> alloy_contract::SolCallBuilder<&P, getCurrentEpochCall, N> { + self.call_builder(&getCurrentEpochCall) + } + ///Creates a new call builder for the [`getEpochEnd`] function. + pub fn getEpochEnd( + &self, + epochIndex: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, getEpochEndCall, N> { + self.call_builder(&getEpochEndCall { epochIndex }) + } + ///Creates a new call builder for the [`getEpochStart`] function. + pub fn getEpochStart( + &self, + epochIndex: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, getEpochStartCall, N> { + self.call_builder(&getEpochStartCall { epochIndex }) + } + ///Creates a new call builder for the [`getTokensForEpoch`] function. + pub fn getTokensForEpoch( + &self, + epoch: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, getTokensForEpochCall, N> { + self.call_builder(&getTokensForEpochCall { epoch }) + } + ///Creates a new call builder for the [`initialize`] function. + pub fn initialize( + &self, + admin: alloy::sol_types::private::Address, + _1: alloy::sol_types::private::Address, + _permissionRequirementModule: alloy::sol_types::private::Address, + _3: alloy::sol_types::private::Address, + _appchainId: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, initializeCall, N> { + self.call_builder( + &initializeCall { + admin, + _1, + _permissionRequirementModule, + _3, + _appchainId, + }, + ) + } + ///Creates a new call builder for the [`isAllowed`] function. + pub fn isAllowed( + &self, + proposer: alloy::sol_types::private::Address, + originator: alloy::sol_types::private::Address, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, isAllowedCall, N> { + self.call_builder( + &isAllowedCall { + proposer, + originator, + data, + }, + ) + } + ///Creates a new call builder for the [`lastPermissionUpdate`] function. + pub fn lastPermissionUpdate( + &self, + ) -> alloy_contract::SolCallBuilder<&P, lastPermissionUpdateCall, N> { + self.call_builder(&lastPermissionUpdateCall) + } + ///Creates a new call builder for the [`lastTransactionTime`] function. + pub fn lastTransactionTime( + &self, + _0: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, lastTransactionTimeCall, N> { + self.call_builder(&lastTransactionTimeCall(_0)) + } + ///Creates a new call builder for the [`maxDataSize`] function. + pub fn maxDataSize( + &self, + ) -> alloy_contract::SolCallBuilder<&P, maxDataSizeCall, N> { + self.call_builder(&maxDataSizeCall) + } + ///Creates a new call builder for the [`maxGasPerTransaction`] function. + pub fn maxGasPerTransaction( + &self, + ) -> alloy_contract::SolCallBuilder<&P, maxGasPerTransactionCall, N> { + self.call_builder(&maxGasPerTransactionCall) + } + ///Creates a new call builder for the [`maxTransactionsPerBatch`] function. + pub fn maxTransactionsPerBatch( + &self, + ) -> alloy_contract::SolCallBuilder<&P, maxTransactionsPerBatchCall, N> { + self.call_builder(&maxTransactionsPerBatchCall) + } + ///Creates a new call builder for the [`minTimeBetweenTxs`] function. + pub fn minTimeBetweenTxs( + &self, + ) -> alloy_contract::SolCallBuilder<&P, minTimeBetweenTxsCall, N> { + self.call_builder(&minTimeBetweenTxsCall) + } + ///Creates a new call builder for the [`owner`] function. + pub fn owner(&self) -> alloy_contract::SolCallBuilder<&P, ownerCall, N> { + self.call_builder(&ownerCall) + } + ///Creates a new call builder for the [`permissionRequirementModule`] function. + pub fn permissionRequirementModule( + &self, + ) -> alloy_contract::SolCallBuilder<&P, permissionRequirementModuleCall, N> { + self.call_builder(&permissionRequirementModuleCall) + } + ///Creates a new call builder for the [`processTransaction`] function. + pub fn processTransaction( + &self, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, processTransactionCall, N> { + self.call_builder(&processTransactionCall { data }) + } + ///Creates a new call builder for the [`processTransactionsBulk`] function. + pub fn processTransactionsBulk( + &self, + data: alloy::sol_types::private::Vec, + ) -> alloy_contract::SolCallBuilder<&P, processTransactionsBulkCall, N> { + self.call_builder( + &processTransactionsBulkCall { + data, + }, + ) + } + ///Creates a new call builder for the [`proxiableUUID`] function. + pub fn proxiableUUID( + &self, + ) -> alloy_contract::SolCallBuilder<&P, proxiableUUIDCall, N> { + self.call_builder(&proxiableUUIDCall) + } + ///Creates a new call builder for the [`renounceOwnership`] function. + pub fn renounceOwnership( + &self, + ) -> alloy_contract::SolCallBuilder<&P, renounceOwnershipCall, N> { + self.call_builder(&renounceOwnershipCall) + } + ///Creates a new call builder for the [`replayProtectionEnabled`] function. + pub fn replayProtectionEnabled( + &self, + ) -> alloy_contract::SolCallBuilder<&P, replayProtectionEnabledCall, N> { + self.call_builder(&replayProtectionEnabledCall) + } + ///Creates a new call builder for the [`setMaxGasPerTransaction`] function. + pub fn setMaxGasPerTransaction( + &self, + _maxGas: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, setMaxGasPerTransactionCall, N> { + self.call_builder( + &setMaxGasPerTransactionCall { + _maxGas, + }, + ) + } + ///Creates a new call builder for the [`setMaxTransactionsPerBatch`] function. + pub fn setMaxTransactionsPerBatch( + &self, + _max: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, setMaxTransactionsPerBatchCall, N> { + self.call_builder( + &setMaxTransactionsPerBatchCall { + _max, + }, + ) + } + ///Creates a new call builder for the [`setMinTimeBetweenTxs`] function. + pub fn setMinTimeBetweenTxs( + &self, + _minTime: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, setMinTimeBetweenTxsCall, N> { + self.call_builder( + &setMinTimeBetweenTxsCall { + _minTime, + }, + ) + } + ///Creates a new call builder for the [`toggleBatchProcessing`] function. + pub fn toggleBatchProcessing( + &self, + ) -> alloy_contract::SolCallBuilder<&P, toggleBatchProcessingCall, N> { + self.call_builder(&toggleBatchProcessingCall) + } + ///Creates a new call builder for the [`toggleReplayProtection`] function. + pub fn toggleReplayProtection( + &self, + ) -> alloy_contract::SolCallBuilder<&P, toggleReplayProtectionCall, N> { + self.call_builder(&toggleReplayProtectionCall) + } + ///Creates a new call builder for the [`tokensUsedPerEpoch`] function. + pub fn tokensUsedPerEpoch( + &self, + epoch: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, tokensUsedPerEpochCall, N> { + self.call_builder(&tokensUsedPerEpochCall { epoch }) + } + ///Creates a new call builder for the [`transferOwnership`] function. + pub fn transferOwnership( + &self, + newOwner: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, transferOwnershipCall, N> { + self.call_builder(&transferOwnershipCall { newOwner }) + } + ///Creates a new call builder for the [`updateRequirementModule`] function. + pub fn updateRequirementModule( + &self, + _newModule: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, updateRequirementModuleCall, N> { + self.call_builder( + &updateRequirementModuleCall { + _newModule, + }, + ) + } + ///Creates a new call builder for the [`upgradeToAndCall`] function. + pub fn upgradeToAndCall( + &self, + newImplementation: alloy::sol_types::private::Address, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, upgradeToAndCallCall, N> { + self.call_builder( + &upgradeToAndCallCall { + newImplementation, + data, + }, + ) + } + ///Creates a new call builder for the [`version`] function. + pub fn version(&self) -> alloy_contract::SolCallBuilder<&P, versionCall, N> { + self.call_builder(&versionCall) + } + } + /// Event filters. + #[automatically_derived] + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > SyndicateSequencingChainTestingUpgradeabilityInstance { + /// Creates a new event filter using this contract instance's provider and address. + /// + /// Note that the type can be any event, not just those defined in this contract. + /// Prefer using the other methods for building type-safe event filters. + pub fn event_filter( + &self, + ) -> alloy_contract::Event<&P, E, N> { + alloy_contract::Event::new_sol(&self.provider, &self.address) + } + ///Creates a new event filter for the [`BatchProcessingToggled`] event. + pub fn BatchProcessingToggled_filter( + &self, + ) -> alloy_contract::Event<&P, BatchProcessingToggled, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`Initialized`] event. + pub fn Initialized_filter(&self) -> alloy_contract::Event<&P, Initialized, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`MaxGasPerTransactionUpdated`] event. + pub fn MaxGasPerTransactionUpdated_filter( + &self, + ) -> alloy_contract::Event<&P, MaxGasPerTransactionUpdated, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`MaxTransactionsPerBatchUpdated`] event. + pub fn MaxTransactionsPerBatchUpdated_filter( + &self, + ) -> alloy_contract::Event<&P, MaxTransactionsPerBatchUpdated, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`MinTimeBetweenTxsUpdated`] event. + pub fn MinTimeBetweenTxsUpdated_filter( + &self, + ) -> alloy_contract::Event<&P, MinTimeBetweenTxsUpdated, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`OwnershipTransferred`] event. + pub fn OwnershipTransferred_filter( + &self, + ) -> alloy_contract::Event<&P, OwnershipTransferred, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`ReplayProtectionToggled`] event. + pub fn ReplayProtectionToggled_filter( + &self, + ) -> alloy_contract::Event<&P, ReplayProtectionToggled, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`RequirementModuleUpdated`] event. + pub fn RequirementModuleUpdated_filter( + &self, + ) -> alloy_contract::Event<&P, RequirementModuleUpdated, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`TransactionProcessed`] event. + pub fn TransactionProcessed_filter( + &self, + ) -> alloy_contract::Event<&P, TransactionProcessed, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`Upgraded`] event. + pub fn Upgraded_filter(&self) -> alloy_contract::Event<&P, Upgraded, N> { + self.event_filter::() + } + } +} diff --git a/shared/contract-bindings/src/synd/syndicate_sequencing_chain_upgrade_v2.rs b/shared/contract-bindings/src/synd/syndicate_sequencing_chain_upgrade_v2.rs new file mode 100644 index 000000000..b22b2314b --- /dev/null +++ b/shared/contract-bindings/src/synd/syndicate_sequencing_chain_upgrade_v2.rs @@ -0,0 +1,10246 @@ +/** + +Generated by the following Solidity interface... +```solidity +interface SyndicateSequencingChainUpgradeV2 { + error AddressEmptyCode(address target); + error DataTooLarge(uint256 dataLength, uint256 maxDataLength); + error ERC1967InvalidImplementation(address implementation); + error ERC1967NonPayable(); + error FailedCall(); + error InvalidInitialization(); + error NoTxData(); + error NotGasMeterContract(); + error NotInitializing(); + error OwnableInvalidOwner(address owner); + error OwnableUnauthorizedAccount(address account); + error TransactionOrSenderNotAllowed(); + error UUPSUnauthorizedCallContext(); + error UUPSUnsupportedProxiableUUID(bytes32 slot); + error ZeroAddress(); + + event FeeCollected(address indexed payer, uint256 amount); + event FeeCollectionToggled(bool enabled); + event Initialized(uint64 version); + event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); + event ProcessingFeeUpdated(uint256 newFee); + event RequirementModuleUpdated(address indexed newModule); + event TransactionProcessed(address indexed sender, bytes data); + event Upgraded(address indexed implementation); + + constructor(address _gasMeter); + + function SEQUENCING_MODULE_STORAGE_LOCATION() external view returns (bytes32); + function SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION() external view returns (bytes32); + function UPGRADE_INTERFACE_VERSION() external view returns (string memory); + function VERSION() external view returns (uint256); + function _processTransaction(address sequencer, bytes memory data) external; + function _processTransactionsBulk(address sequencer, bytes[] memory data) external; + function appchainId() external view returns (uint256); + function contractVersion() external pure returns (string memory); + function encodeTransaction(bytes memory data) external pure returns (bytes memory); + function feeCollectionEnabled() external view returns (bool); + function gasMeter() external view returns (address); + function getInitializedVersion() external view returns (uint64); + function initialize(address admin, address _permissionRequirementModule, uint256 _appchainId) external; + function isAllowed(address proposer, address originator, bytes memory data) external view returns (bool); + function maxDataSize() external view returns (uint256); + function owner() external view returns (address); + function permissionRequirementModule() external view returns (address); + function processTransaction(bytes memory data) external; + function processTransactionWithFee(bytes memory data) external payable; + function processTransactionsBulk(bytes[] memory data) external; + function processingFee() external view returns (uint256); + function proxiableUUID() external view returns (bytes32); + function renounceOwnership() external; + function setProcessingFee(uint256 _fee) external; + function toggleFeeCollection() external; + function totalFeesCollected() external view returns (uint256); + function transferOwnership(address newOwner) external; + function updateRequirementModule(address _newModule) external; + function upgradeToAndCall(address newImplementation, bytes memory data) external payable; + function withdrawFees(address payable recipient) external; +} +``` + +...which was generated by the following JSON ABI: +```json +[ + { + "type": "constructor", + "inputs": [ + { + "name": "_gasMeter", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "SEQUENCING_MODULE_STORAGE_LOCATION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "UPGRADE_INTERFACE_VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "_processTransaction", + "inputs": [ + { + "name": "sequencer", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_processTransactionsBulk", + "inputs": [ + { + "name": "sequencer", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "appchainId", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "contractVersion", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "encodeTransaction", + "inputs": [ + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "feeCollectionEnabled", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "gasMeter", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getInitializedVersion", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "admin", + "type": "address", + "internalType": "address" + }, + { + "name": "_permissionRequirementModule", + "type": "address", + "internalType": "address" + }, + { + "name": "_appchainId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isAllowed", + "inputs": [ + { + "name": "proposer", + "type": "address", + "internalType": "address" + }, + { + "name": "originator", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "maxDataSize", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "permissionRequirementModule", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IPermissionModule" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "processTransaction", + "inputs": [ + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "processTransactionWithFee", + "inputs": [ + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "processTransactionsBulk", + "inputs": [ + { + "name": "data", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "processingFee", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proxiableUUID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setProcessingFee", + "inputs": [ + { + "name": "_fee", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "toggleFeeCollection", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "totalFeesCollected", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateRequirementModule", + "inputs": [ + { + "name": "_newModule", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "upgradeToAndCall", + "inputs": [ + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "withdrawFees", + "inputs": [ + { + "name": "recipient", + "type": "address", + "internalType": "address payable" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "FeeCollected", + "inputs": [ + { + "name": "payer", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "FeeCollectionToggled", + "inputs": [ + { + "name": "enabled", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ProcessingFeeUpdated", + "inputs": [ + { + "name": "newFee", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RequirementModuleUpdated", + "inputs": [ + { + "name": "newModule", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TransactionProcessed", + "inputs": [ + { + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "data", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Upgraded", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AddressEmptyCode", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "DataTooLarge", + "inputs": [ + { + "name": "dataLength", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "maxDataLength", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "type": "error", + "name": "ERC1967InvalidImplementation", + "inputs": [ + { + "name": "implementation", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ERC1967NonPayable", + "inputs": [] + }, + { + "type": "error", + "name": "FailedCall", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidInitialization", + "inputs": [] + }, + { + "type": "error", + "name": "NoTxData", + "inputs": [] + }, + { + "type": "error", + "name": "NotGasMeterContract", + "inputs": [] + }, + { + "type": "error", + "name": "NotInitializing", + "inputs": [] + }, + { + "type": "error", + "name": "OwnableInvalidOwner", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OwnableUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "TransactionOrSenderNotAllowed", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnauthorizedCallContext", + "inputs": [] + }, + { + "type": "error", + "name": "UUPSUnsupportedProxiableUUID", + "inputs": [ + { + "name": "slot", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "type": "error", + "name": "ZeroAddress", + "inputs": [] + } +] +```*/ +#[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style, + clippy::empty_structs_with_brackets +)] +pub mod SyndicateSequencingChainUpgradeV2 { + use super::*; + use alloy::sol_types as alloy_sol_types; + /// The creation / init bytecode of the contract. + /// + /// ```text + ///0x60c03461014757601f61200238819003918201601f19168301916001600160401b0383118484101761014b5780849260209460405283398101031261014757516001600160a01b0381168082036101475730608052156101385760a0525f516020611fe25f395f51905f525460ff8160401c16610129576002600160401b03196001600160401b038216016100d3575b604051611e8290816101608239608051818181610c290152610cee015260a051818181610221015281816104a6015281816110060152818161119b015261172c0152f35b6001600160401b0319166001600160401b039081175f516020611fe25f395f51905f52556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f61008f565b63f92ee8a960e01b5f5260045ffd5b63d92e233d60e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f5f3560e01c806312281983146116db578063164e68de146115615780631794bb3c146111f95780632407f0b6146111bf57806343f97ae51461116f5780634513ed15146110f657806346e2cc0914610fba5780634f1ef28614610ca157806352d1902d14610c015780635b3cd6e214610bae57806360c6d8ae14610b90578063715018a614610ad25780637a3979dc14610a775780638507492514610a255780638c242bce146108605780638da5cb5b1461080d5780639461446d146107c057806395c5bf7514610785578063a0a8e46014610725578063ad3cb1cc146106c1578063b3c650151461067a578063cc8552e914610657578063cdafb9781461045b578063d4f0eb4d14610394578063d878134214610357578063de1881a81461033a578063e4a37d7a146101cf578063e8eb1dc3146101b1578063f2fde38b146101845763ffa1ad7414610164575f80fd5b346101815780600319360112610181576020604051620f42408152f35b80fd5b5034610181576020600319360112610181576101ae6101a1611844565b6101a9611d26565b611c39565b80f35b5034610181578060031936011261018157602060405162030d408152f35b5034610181576040600319360112610181576101e9611844565b60243567ffffffffffffffff8111610336576102099036906004016118bb565b9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361030e5781156102e6579061025791611be9565b90610263823283611a9c565b156102be5773ffffffffffffffffffffffffffffffffffffffff7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f916102b8604051928392602084521694602083019061199b565b0390a280f35b6004837fdc741458000000000000000000000000000000000000000000000000000000008152fd5b6004847fdc37f51d000000000000000000000000000000000000000000000000000000008152fd5b6004847fdaf9861c000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b503461018157806003193601126101815760209054604051908152f35b503461018157806003193601126101815760207fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a40054604051908152f35b50346101815760206003193601126101815773ffffffffffffffffffffffffffffffffffffffff6103c3611844565b6103cb611d26565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500557f253580f806741c11b3d4aa60d9cacc5bef0cebb35748767fe23f11916e2f04b98280a280f35b50346101815760206003193601126101815760043567ffffffffffffffff81116106535761048d90369060040161188a565b919073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692604051917f12281983000000000000000000000000000000000000000000000000000000006020840152816064840133602486015260406044860152526084830160848360051b850101928286907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603015b8383106105d6578880898c610559828c03601f1981018452836118e9565b803b156105d2576105a583929183926040519485809481937fcf6acdac00000000000000000000000000000000000000000000000000000000835260206004840152602483019061199b565b03925af180156105c7576105b65750f35b816105c0916118e9565b6101815780f35b6040513d84823e3d90fd5b5050fd5b9091929394957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c88820301865286358281121561064f57830160208135910167ffffffffffffffff821161064b57813603811361064b5761063d6001936020938493611a7c565b98019601949301919061053b565b8a80fd5b8980fd5b5080fd5b5034610181578060031936011261018157602060ff600154166040519015158152f35b5034610181578060031936011261018157602067ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416604051908152f35b50346101815780600319360112610181576107216040516106e36040826118e9565b600581527f352e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061199b565b0390f35b50346101815780600319360112610181576107216040516107476040826118e9565b600581527f322e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061199b565b503461018157806003193601126101815760206040517fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a4008152f35b5034610181576020600319360112610181577fd6670e3553251b4182025cba6c3e105a9e3fd89063232891411780ac3d1c27e36020600435610800611d26565b808455604051908152a180f35b5034610181578060031936011261018157602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b5060206003193601126101815760043567ffffffffffffffff81116106535761088d9036906004016118bb565b9081156109fd579061089e91611be9565b6108a9813233611a9c565b156109d55760ff60015416806109cb575b6108f7575b7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f60405160208152806102b83394602083019061199b565b8154341061096d57600254348101809111610940576002556040513481527f06c5efeff5c320943d265dc4e5f1af95ad523555ce0c1957e367dda5514572df60203392a26108bf565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e73756666696369656e7420666565000000000000000000000000000000006044820152fd5b50815415156108ba565b6004827fdc741458000000000000000000000000000000000000000000000000000000008152fd5b6004837fdc37f51d000000000000000000000000000000000000000000000000000000008152fd5b5034610181576020600319360112610181576004359067ffffffffffffffff821161018157610721610a63610a5d36600486016118bb565b90611be9565b60405191829160208352602083019061199b565b503461018157606060031936011261018157610a91611844565b90610a9a611867565b906044359067ffffffffffffffff8211610181576020610ac88585610ac23660048801611955565b91611a9c565b6040519015158152f35b5034610181578060031936011261018157610aeb611d26565b8073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101815780600319360112610181576020600254604051908152f35b5034610181578060031936011261018157602073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416604051908152f35b503461018157806003193601126101815773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610c795760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b807fe07c8dba0000000000000000000000000000000000000000000000000000000060049252fd5b50604060031936011261018157610cb6611844565b9060243567ffffffffffffffff811161065357610cd7903690600401611955565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610f78575b50610f5057610d26611d26565b73ffffffffffffffffffffffffffffffffffffffff831690604051937f52d1902d000000000000000000000000000000000000000000000000000000008552602085600481865afa80958596610f18575b50610da857602484847f4c9c8ce3000000000000000000000000000000000000000000000000000000008252600452fd5b9091847f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8103610eed5750813b15610ec257807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8480a28151839015610e8f5780836020610e8b95519101845af4610e85611a4d565b91611de9565b5080f35b50505034610e9a5780f35b807fb398979f0000000000000000000000000000000000000000000000000000000060049252fd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000008452600452602483fd5b7faa1d49a4000000000000000000000000000000000000000000000000000000008552600452602484fd5b9095506020813d602011610f48575b81610f34602093836118e9565b81010312610f445751945f610d77565b8480fd5b3d9150610f27565b6004827fe07c8dba000000000000000000000000000000000000000000000000000000008152fd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f610d19565b50346110f25760206003193601126110f25760043567ffffffffffffffff81116110f257610fec9036906004016118bb565b61107b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169161106d6040519485927fe4a37d7a000000000000000000000000000000000000000000000000000000006020850152336024850152604060448501526064840191611a7c565b03601f1981018452836118e9565b803b156110f2576110c75f929183926040519485809481937fcf6acdac00000000000000000000000000000000000000000000000000000000835260206004840152602483019061199b565b03925af180156110e7576110d9575080f35b6110e591505f906118e9565b005b6040513d5f823e3d90fd5b5f80fd5b346110f2575f6003193601126110f25761110e611d26565b7fb8e2aca102a1597f1cf2663b55e6eea08f4690c2bbd4b86b04d3ff308a65365260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060015460ff808216151691829116176001556040519015158152a1005b346110f2575f6003193601126110f257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346110f2575f6003193601126110f25760206040517f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5008152f35b346110f25760606003193601126110f257611212611844565b61121a611867565b90604435907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549260ff8460401c16159367ffffffffffffffff811680159081611559575b600114908161154f575b159081611546575b5061151e578460017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556114c9575b5073ffffffffffffffffffffffffffffffffffffffff8216156114a15782156114435761131873ffffffffffffffffffffffffffffffffffffffff92611308611d92565b611310611d92565b6101a9611d92565b167fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50055611388611d92565b7fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a400556113b057005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41707020636861696e2049442063616e6e6f74206265203000000000000000006044820152fd5b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055846112c4565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501586611271565b303b159150611269565b86915061125f565b346110f25760206003193601126110f25760043573ffffffffffffffffffffffffffffffffffffffff81168091036110f25761159b611d26565b801561167d574790811561161f575f80809381935af16115b9611a4d565b50156115c157005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5472616e73666572206661696c656400000000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f206665657320746f207769746864726177000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c696420726563697069656e740000000000000000000000000000006044820152fd5b346110f25760406003193601126110f2576116f4611844565b60243567ffffffffffffffff81116110f25761171490369060040161188a565b9173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361181c5782156117f4575f5b83811061176357005b61176e8185856119c0565b9050156117f45780611786610a5d60019387876119c0565b611791813286611a9c565b61179d575b500161175a565b7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f60405160208152806117eb73ffffffffffffffffffffffffffffffffffffffff881694602083019061199b565b0390a285611796565b7fdc37f51d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdaf9861c000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036110f257565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036110f257565b9181601f840112156110f25782359167ffffffffffffffff83116110f2576020808501948460051b0101116110f257565b9181601f840112156110f25782359167ffffffffffffffff83116110f257602083818601950101116110f257565b90601f601f19910116810190811067ffffffffffffffff82111761190c57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161190c57601f01601f191660200190565b81601f820112156110f25780359061196c82611939565b9261197a60405194856118e9565b828452602083830101116110f257815f926020809301838601378301015290565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b9190811015611a205760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156110f257019081359167ffffffffffffffff83116110f25760200182360381136110f2579190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b3d15611a77573d90611a5e82611939565b91611a6c60405193846118e9565b82523d5f602084013e565b606090565b601f8260209493601f1993818652868601375f8582860101520116010190565b9190815162030d408111611bb7575073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500541660018114928315611af7575b505050905090565b6020935073ffffffffffffffffffffffffffffffffffffffff94611b608692604051978896879586957f7a3979dc00000000000000000000000000000000000000000000000000000000875216600486015216602484015260606044840152606483019061199b565b03915afa9081156110e7575f91611b7c575b50805f8080611aef565b90506020813d602011611baf575b81611b97602093836118e9565b810103126110f2575180151581036110f2575f611b72565b3d9150611b8a565b7f4634691b000000000000000000000000000000000000000000000000000000005f5260045262030d4060245260445ffd5b6021611c3691836040519485927f040000000000000000000000000000000000000000000000000000000000000060208501528484013781015f838201520301601f1981018352826118e9565b90565b73ffffffffffffffffffffffffffffffffffffffff168015611cfa5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303611d6657565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615611dc157565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90611e265750805115611dfe57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611e79575b611e37575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15611e2f56f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00 + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"`\xC04a\x01GW`\x1Fa \x028\x81\x90\x03\x91\x82\x01`\x1F\x19\x16\x83\x01\x91`\x01`\x01`@\x1B\x03\x83\x11\x84\x84\x10\x17a\x01KW\x80\x84\x92` \x94`@R\x839\x81\x01\x03\x12a\x01GWQ`\x01`\x01`\xA0\x1B\x03\x81\x16\x80\x82\x03a\x01GW0`\x80R\x15a\x018W`\xA0R_Q` a\x1F\xE2_9_Q\x90_RT`\xFF\x81`@\x1C\x16a\x01)W`\x02`\x01`@\x1B\x03\x19`\x01`\x01`@\x1B\x03\x82\x16\x01a\0\xD3W[`@Qa\x1E\x82\x90\x81a\x01`\x829`\x80Q\x81\x81\x81a\x0C)\x01Ra\x0C\xEE\x01R`\xA0Q\x81\x81\x81a\x02!\x01R\x81\x81a\x04\xA6\x01R\x81\x81a\x10\x06\x01R\x81\x81a\x11\x9B\x01Ra\x17,\x01R\xF3[`\x01`\x01`@\x1B\x03\x19\x16`\x01`\x01`@\x1B\x03\x90\x81\x17_Q` a\x1F\xE2_9_Q\x90_RU`@Q\x90\x81R\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2\x90` \x90\xA1_a\0\x8FV[c\xF9.\xE8\xA9`\xE0\x1B_R`\x04_\xFD[c\xD9.#=`\xE0\x1B_R`\x04_\xFD[_\x80\xFD[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD\xFE`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[__5`\xE0\x1C\x80c\x12(\x19\x83\x14a\x16\xDBW\x80c\x16Nh\xDE\x14a\x15aW\x80c\x17\x94\xBB<\x14a\x11\xF9W\x80c$\x07\xF0\xB6\x14a\x11\xBFW\x80cC\xF9z\xE5\x14a\x11oW\x80cE\x13\xED\x15\x14a\x10\xF6W\x80cF\xE2\xCC\t\x14a\x0F\xBAW\x80cO\x1E\xF2\x86\x14a\x0C\xA1W\x80cR\xD1\x90-\x14a\x0C\x01W\x80c[<\xD6\xE2\x14a\x0B\xAEW\x80c`\xC6\xD8\xAE\x14a\x0B\x90W\x80cqP\x18\xA6\x14a\n\xD2W\x80cz9y\xDC\x14a\nwW\x80c\x85\x07I%\x14a\n%W\x80c\x8C$+\xCE\x14a\x08`W\x80c\x8D\xA5\xCB[\x14a\x08\rW\x80c\x94aDm\x14a\x07\xC0W\x80c\x95\xC5\xBFu\x14a\x07\x85W\x80c\xA0\xA8\xE4`\x14a\x07%W\x80c\xAD<\xB1\xCC\x14a\x06\xC1W\x80c\xB3\xC6P\x15\x14a\x06zW\x80c\xCC\x85R\xE9\x14a\x06WW\x80c\xCD\xAF\xB9x\x14a\x04[W\x80c\xD4\xF0\xEBM\x14a\x03\x94W\x80c\xD8x\x13B\x14a\x03WW\x80c\xDE\x18\x81\xA8\x14a\x03:W\x80c\xE4\xA3}z\x14a\x01\xCFW\x80c\xE8\xEB\x1D\xC3\x14a\x01\xB1W\x80c\xF2\xFD\xE3\x8B\x14a\x01\x84Wc\xFF\xA1\xADt\x14a\x01dW_\x80\xFD[4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` `@Qb\x0FB@\x81R\xF3[\x80\xFD[P4a\x01\x81W` `\x03\x196\x01\x12a\x01\x81Wa\x01\xAEa\x01\xA1a\x18DV[a\x01\xA9a\x1D&V[a\x1C9V[\x80\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` `@Qb\x03\r@\x81R\xF3[P4a\x01\x81W`@`\x03\x196\x01\x12a\x01\x81Wa\x01\xE9a\x18DV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x036Wa\x02\t\x906\x90`\x04\x01a\x18\xBBV[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x163\x03a\x03\x0EW\x81\x15a\x02\xE6W\x90a\x02W\x91a\x1B\xE9V[\x90a\x02c\x822\x83a\x1A\x9CV[\x15a\x02\xBEWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F\x91a\x02\xB8`@Q\x92\x83\x92` \x84R\x16\x94` \x83\x01\x90a\x19\x9BV[\x03\x90\xA2\x80\xF3[`\x04\x83\x7F\xDCt\x14X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x84\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x84\x7F\xDA\xF9\x86\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x82\x80\xFD[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` \x90T`@Q\x90\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` \x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0T`@Q\x90\x81R\xF3[P4a\x01\x81W` `\x03\x196\x01\x12a\x01\x81Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x03\xC3a\x18DV[a\x03\xCBa\x1D&V[\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0U\x7F%5\x80\xF8\x06t\x1C\x11\xB3\xD4\xAA`\xD9\xCA\xCC[\xEF\x0C\xEB\xB3WHv\x7F\xE2?\x11\x91n/\x04\xB9\x82\x80\xA2\x80\xF3[P4a\x01\x81W` `\x03\x196\x01\x12a\x01\x81W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06SWa\x04\x8D\x906\x90`\x04\x01a\x18\x8AV[\x91\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x92`@Q\x91\x7F\x12(\x19\x83\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x84\x01R\x81`d\x84\x013`$\x86\x01R`@`D\x86\x01RR`\x84\x83\x01`\x84\x83`\x05\x1B\x85\x01\x01\x92\x82\x86\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01[\x83\x83\x10a\x05\xD6W\x88\x80\x89\x8Ca\x05Y\x82\x8C\x03`\x1F\x19\x81\x01\x84R\x83a\x18\xE9V[\x80;\x15a\x05\xD2Wa\x05\xA5\x83\x92\x91\x83\x92`@Q\x94\x85\x80\x94\x81\x93\x7F\xCFj\xCD\xAC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` `\x04\x84\x01R`$\x83\x01\x90a\x19\x9BV[\x03\x92Z\xF1\x80\x15a\x05\xC7Wa\x05\xB6WP\xF3[\x81a\x05\xC0\x91a\x18\xE9V[a\x01\x81W\x80\xF3[`@Q=\x84\x82>=\x90\xFD[PP\xFD[\x90\x91\x92\x93\x94\x95\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF|\x88\x82\x03\x01\x86R\x865\x82\x81\x12\x15a\x06OW\x83\x01` \x815\x91\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x06KW\x816\x03\x81\x13a\x06KWa\x06=`\x01\x93` \x93\x84\x93a\x1A|V[\x98\x01\x96\x01\x94\x93\x01\x91\x90a\x05;V[\x8A\x80\xFD[\x89\x80\xFD[P\x80\xFD[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` `\xFF`\x01T\x16`@Q\x90\x15\x15\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16`@Q\x90\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81Wa\x07!`@Qa\x06\xE3`@\x82a\x18\xE9V[`\x05\x81R\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x19\x9BV[\x03\x90\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81Wa\x07!`@Qa\x07G`@\x82a\x18\xE9V[`\x05\x81R\x7F2.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x19\x9BV[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` `@Q\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0\x81R\xF3[P4a\x01\x81W` `\x03\x196\x01\x12a\x01\x81W\x7F\xD6g\x0E5S%\x1BA\x82\x02\\\xBAl>\x10Z\x9E?\xD8\x90c#(\x91A\x17\x80\xAC=\x1C'\xE3` `\x045a\x08\0a\x1D&V[\x80\x84U`@Q\x90\x81R\xA1\x80\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[P` `\x03\x196\x01\x12a\x01\x81W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06SWa\x08\x8D\x906\x90`\x04\x01a\x18\xBBV[\x90\x81\x15a\t\xFDW\x90a\x08\x9E\x91a\x1B\xE9V[a\x08\xA9\x8123a\x1A\x9CV[\x15a\t\xD5W`\xFF`\x01T\x16\x80a\t\xCBW[a\x08\xF7W[\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F`@Q` \x81R\x80a\x02\xB83\x94` \x83\x01\x90a\x19\x9BV[\x81T4\x10a\tmW`\x02T4\x81\x01\x80\x91\x11a\t@W`\x02U`@Q4\x81R\x7F\x06\xC5\xEF\xEF\xF5\xC3 \x94=&]\xC4\xE5\xF1\xAF\x95\xADR5U\xCE\x0C\x19W\xE3g\xDD\xA5QEr\xDF` 3\x92\xA2a\x08\xBFV[`$\x83\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x11`\x04R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x10`$\x82\x01R\x7FInsufficient fee\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[P\x81T\x15\x15a\x08\xBAV[`\x04\x82\x7F\xDCt\x14X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x83\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[P4a\x01\x81W` `\x03\x196\x01\x12a\x01\x81W`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01\x81Wa\x07!a\nca\n]6`\x04\x86\x01a\x18\xBBV[\x90a\x1B\xE9V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x19\x9BV[P4a\x01\x81W```\x03\x196\x01\x12a\x01\x81Wa\n\x91a\x18DV[\x90a\n\x9Aa\x18gV[\x90`D5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01\x81W` a\n\xC8\x85\x85a\n\xC26`\x04\x88\x01a\x19UV[\x91a\x1A\x9CV[`@Q\x90\x15\x15\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81Wa\n\xEBa\x1D&V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` `\x02T`@Q\x90\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`@Q\x90\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x160\x03a\x0CyW` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[\x80\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04\x92R\xFD[P`@`\x03\x196\x01\x12a\x01\x81Wa\x0C\xB6a\x18DV[\x90`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06SWa\x0C\xD7\x906\x90`\x04\x01a\x19UV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\x0FxW[Pa\x0FPWa\r&a\x1D&V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x90`@Q\x93\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R` \x85`\x04\x81\x86Z\xFA\x80\x95\x85\x96a\x0F\x18W[Pa\r\xA8W`$\x84\x84\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R`\x04R\xFD[\x90\x91\x84\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81\x03a\x0E\xEDWP\x81;\x15a\x0E\xC2W\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;\x84\x80\xA2\x81Q\x83\x90\x15a\x0E\x8FW\x80\x83` a\x0E\x8B\x95Q\x91\x01\x84Z\xF4a\x0E\x85a\x1AMV[\x91a\x1D\xE9V[P\x80\xF3[PPP4a\x0E\x9AW\x80\xF3[\x80\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04\x92R\xFD[\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R`\x04R`$\x83\xFD[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R`\x04R`$\x84\xFD[\x90\x95P` \x81=` \x11a\x0FHW[\x81a\x0F4` \x93\x83a\x18\xE9V[\x81\x01\x03\x12a\x0FDWQ\x94_a\rwV[\x84\x80\xFD[=\x91Pa\x0F'V[`\x04\x82\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15_a\r\x19V[P4a\x10\xF2W` `\x03\x196\x01\x12a\x10\xF2W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x10\xF2Wa\x0F\xEC\x906\x90`\x04\x01a\x18\xBBV[a\x10{s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x91a\x10m`@Q\x94\x85\x92\x7F\xE4\xA3}z\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01R3`$\x85\x01R`@`D\x85\x01R`d\x84\x01\x91a\x1A|V[\x03`\x1F\x19\x81\x01\x84R\x83a\x18\xE9V[\x80;\x15a\x10\xF2Wa\x10\xC7_\x92\x91\x83\x92`@Q\x94\x85\x80\x94\x81\x93\x7F\xCFj\xCD\xAC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` `\x04\x84\x01R`$\x83\x01\x90a\x19\x9BV[\x03\x92Z\xF1\x80\x15a\x10\xE7Wa\x10\xD9WP\x80\xF3[a\x10\xE5\x91P_\x90a\x18\xE9V[\0[`@Q=_\x82>=\x90\xFD[_\x80\xFD[4a\x10\xF2W_`\x03\x196\x01\x12a\x10\xF2Wa\x11\x0Ea\x1D&V[\x7F\xB8\xE2\xAC\xA1\x02\xA1Y\x7F\x1C\xF2f;U\xE6\xEE\xA0\x8FF\x90\xC2\xBB\xD4\xB8k\x04\xD3\xFF0\x8Ae6R` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0`\x01T`\xFF\x80\x82\x16\x15\x16\x91\x82\x91\x16\x17`\x01U`@Q\x90\x15\x15\x81R\xA1\0[4a\x10\xF2W_`\x03\x196\x01\x12a\x10\xF2W` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x10\xF2W_`\x03\x196\x01\x12a\x10\xF2W` `@Q\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0\x81R\xF3[4a\x10\xF2W```\x03\x196\x01\x12a\x10\xF2Wa\x12\x12a\x18DV[a\x12\x1Aa\x18gV[\x90`D5\x90\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x92`\xFF\x84`@\x1C\x16\x15\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x15YW[`\x01\x14\x90\x81a\x15OW[\x15\x90\x81a\x15FW[Pa\x15\x1EW\x84`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x14\xC9W[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15a\x14\xA1W\x82\x15a\x14CWa\x13\x18s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92a\x13\x08a\x1D\x92V[a\x13\x10a\x1D\x92V[a\x01\xA9a\x1D\x92V[\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0Ua\x13\x88a\x1D\x92V[\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0Ua\x13\xB0W\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FApp chain ID cannot be 0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x84a\x12\xC4V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x86a\x12qV[0;\x15\x91Pa\x12iV[\x86\x91Pa\x12_V[4a\x10\xF2W` `\x03\x196\x01\x12a\x10\xF2W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x10\xF2Wa\x15\x9Ba\x1D&V[\x80\x15a\x16}WG\x90\x81\x15a\x16\x1FW_\x80\x80\x93\x81\x93Z\xF1a\x15\xB9a\x1AMV[P\x15a\x15\xC1W\0[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x0F`$\x82\x01R\x7FTransfer failed\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x13`$\x82\x01R\x7FNo fees to withdraw\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x11`$\x82\x01R\x7FInvalid recipient\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[4a\x10\xF2W`@`\x03\x196\x01\x12a\x10\xF2Wa\x16\xF4a\x18DV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x10\xF2Wa\x17\x14\x906\x90`\x04\x01a\x18\x8AV[\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x163\x03a\x18\x1CW\x82\x15a\x17\xF4W_[\x83\x81\x10a\x17cW\0[a\x17n\x81\x85\x85a\x19\xC0V[\x90P\x15a\x17\xF4W\x80a\x17\x86a\n]`\x01\x93\x87\x87a\x19\xC0V[a\x17\x91\x812\x86a\x1A\x9CV[a\x17\x9DW[P\x01a\x17ZV[\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F`@Q` \x81R\x80a\x17\xEBs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x94` \x83\x01\x90a\x19\x9BV[\x03\x90\xA2\x85a\x17\x96V[\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\xDA\xF9\x86\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x10\xF2WV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x10\xF2WV[\x91\x81`\x1F\x84\x01\x12\x15a\x10\xF2W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x10\xF2W` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11a\x10\xF2WV[\x91\x81`\x1F\x84\x01\x12\x15a\x10\xF2W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x10\xF2W` \x83\x81\x86\x01\x95\x01\x01\x11a\x10\xF2WV[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x19\x0CW`@RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x19\x0CW`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x81`\x1F\x82\x01\x12\x15a\x10\xF2W\x805\x90a\x19l\x82a\x199V[\x92a\x19z`@Q\x94\x85a\x18\xE9V[\x82\x84R` \x83\x83\x01\x01\x11a\x10\xF2W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x90`\x1F\x19`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x81\x10\x15a\x1A W`\x05\x1B\x81\x015\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x10\xF2W\x01\x90\x815\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x10\xF2W` \x01\x826\x03\x81\x13a\x10\xF2W\x91\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[=\x15a\x1AwW=\x90a\x1A^\x82a\x199V[\x91a\x1Al`@Q\x93\x84a\x18\xE9V[\x82R=_` \x84\x01>V[``\x90V[`\x1F\x82` \x94\x93`\x1F\x19\x93\x81\x86R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x81Qb\x03\r@\x81\x11a\x1B\xB7WPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`\x01\x81\x14\x92\x83\x15a\x1A\xF7W[PPP\x90P\x90V[` \x93Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94a\x1B`\x86\x92`@Q\x97\x88\x96\x87\x95\x86\x95\x7Fz9y\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R\x16`\x04\x86\x01R\x16`$\x84\x01R```D\x84\x01R`d\x83\x01\x90a\x19\x9BV[\x03\x91Z\xFA\x90\x81\x15a\x10\xE7W_\x91a\x1B|W[P\x80_\x80\x80a\x1A\xEFV[\x90P` \x81=` \x11a\x1B\xAFW[\x81a\x1B\x97` \x93\x83a\x18\xE9V[\x81\x01\x03\x12a\x10\xF2WQ\x80\x15\x15\x81\x03a\x10\xF2W_a\x1BrV[=\x91Pa\x1B\x8AV[\x7FF4i\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04Rb\x03\r@`$R`D_\xFD[`!a\x1C6\x91\x83`@Q\x94\x85\x92\x7F\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01R\x84\x84\x017\x81\x01_\x83\x82\x01R\x03\x01`\x1F\x19\x81\x01\x83R\x82a\x18\xE9V[\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a\x1C\xFAWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a\x1DfWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a\x1D\xC1WV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90a\x1E&WP\x80Q\x15a\x1D\xFEW\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a\x1EyW[a\x1E7WP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a\x1E/V\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0", + ); + /// The runtime bytecode of the contract, as deployed on the network. + /// + /// ```text + ///0x60806040526004361015610011575f80fd5b5f5f3560e01c806312281983146116db578063164e68de146115615780631794bb3c146111f95780632407f0b6146111bf57806343f97ae51461116f5780634513ed15146110f657806346e2cc0914610fba5780634f1ef28614610ca157806352d1902d14610c015780635b3cd6e214610bae57806360c6d8ae14610b90578063715018a614610ad25780637a3979dc14610a775780638507492514610a255780638c242bce146108605780638da5cb5b1461080d5780639461446d146107c057806395c5bf7514610785578063a0a8e46014610725578063ad3cb1cc146106c1578063b3c650151461067a578063cc8552e914610657578063cdafb9781461045b578063d4f0eb4d14610394578063d878134214610357578063de1881a81461033a578063e4a37d7a146101cf578063e8eb1dc3146101b1578063f2fde38b146101845763ffa1ad7414610164575f80fd5b346101815780600319360112610181576020604051620f42408152f35b80fd5b5034610181576020600319360112610181576101ae6101a1611844565b6101a9611d26565b611c39565b80f35b5034610181578060031936011261018157602060405162030d408152f35b5034610181576040600319360112610181576101e9611844565b60243567ffffffffffffffff8111610336576102099036906004016118bb565b9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361030e5781156102e6579061025791611be9565b90610263823283611a9c565b156102be5773ffffffffffffffffffffffffffffffffffffffff7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f916102b8604051928392602084521694602083019061199b565b0390a280f35b6004837fdc741458000000000000000000000000000000000000000000000000000000008152fd5b6004847fdc37f51d000000000000000000000000000000000000000000000000000000008152fd5b6004847fdaf9861c000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b503461018157806003193601126101815760209054604051908152f35b503461018157806003193601126101815760207fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a40054604051908152f35b50346101815760206003193601126101815773ffffffffffffffffffffffffffffffffffffffff6103c3611844565b6103cb611d26565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500557f253580f806741c11b3d4aa60d9cacc5bef0cebb35748767fe23f11916e2f04b98280a280f35b50346101815760206003193601126101815760043567ffffffffffffffff81116106535761048d90369060040161188a565b919073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001692604051917f12281983000000000000000000000000000000000000000000000000000000006020840152816064840133602486015260406044860152526084830160848360051b850101928286907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603015b8383106105d6578880898c610559828c03601f1981018452836118e9565b803b156105d2576105a583929183926040519485809481937fcf6acdac00000000000000000000000000000000000000000000000000000000835260206004840152602483019061199b565b03925af180156105c7576105b65750f35b816105c0916118e9565b6101815780f35b6040513d84823e3d90fd5b5050fd5b9091929394957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c88820301865286358281121561064f57830160208135910167ffffffffffffffff821161064b57813603811361064b5761063d6001936020938493611a7c565b98019601949301919061053b565b8a80fd5b8980fd5b5080fd5b5034610181578060031936011261018157602060ff600154166040519015158152f35b5034610181578060031936011261018157602067ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416604051908152f35b50346101815780600319360112610181576107216040516106e36040826118e9565b600581527f352e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061199b565b0390f35b50346101815780600319360112610181576107216040516107476040826118e9565b600581527f322e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061199b565b503461018157806003193601126101815760206040517fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a4008152f35b5034610181576020600319360112610181577fd6670e3553251b4182025cba6c3e105a9e3fd89063232891411780ac3d1c27e36020600435610800611d26565b808455604051908152a180f35b5034610181578060031936011261018157602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b5060206003193601126101815760043567ffffffffffffffff81116106535761088d9036906004016118bb565b9081156109fd579061089e91611be9565b6108a9813233611a9c565b156109d55760ff60015416806109cb575b6108f7575b7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f60405160208152806102b83394602083019061199b565b8154341061096d57600254348101809111610940576002556040513481527f06c5efeff5c320943d265dc4e5f1af95ad523555ce0c1957e367dda5514572df60203392a26108bf565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e73756666696369656e7420666565000000000000000000000000000000006044820152fd5b50815415156108ba565b6004827fdc741458000000000000000000000000000000000000000000000000000000008152fd5b6004837fdc37f51d000000000000000000000000000000000000000000000000000000008152fd5b5034610181576020600319360112610181576004359067ffffffffffffffff821161018157610721610a63610a5d36600486016118bb565b90611be9565b60405191829160208352602083019061199b565b503461018157606060031936011261018157610a91611844565b90610a9a611867565b906044359067ffffffffffffffff8211610181576020610ac88585610ac23660048801611955565b91611a9c565b6040519015158152f35b5034610181578060031936011261018157610aeb611d26565b8073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101815780600319360112610181576020600254604051908152f35b5034610181578060031936011261018157602073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416604051908152f35b503461018157806003193601126101815773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610c795760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b807fe07c8dba0000000000000000000000000000000000000000000000000000000060049252fd5b50604060031936011261018157610cb6611844565b9060243567ffffffffffffffff811161065357610cd7903690600401611955565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610f78575b50610f5057610d26611d26565b73ffffffffffffffffffffffffffffffffffffffff831690604051937f52d1902d000000000000000000000000000000000000000000000000000000008552602085600481865afa80958596610f18575b50610da857602484847f4c9c8ce3000000000000000000000000000000000000000000000000000000008252600452fd5b9091847f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8103610eed5750813b15610ec257807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8480a28151839015610e8f5780836020610e8b95519101845af4610e85611a4d565b91611de9565b5080f35b50505034610e9a5780f35b807fb398979f0000000000000000000000000000000000000000000000000000000060049252fd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000008452600452602483fd5b7faa1d49a4000000000000000000000000000000000000000000000000000000008552600452602484fd5b9095506020813d602011610f48575b81610f34602093836118e9565b81010312610f445751945f610d77565b8480fd5b3d9150610f27565b6004827fe07c8dba000000000000000000000000000000000000000000000000000000008152fd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f610d19565b50346110f25760206003193601126110f25760043567ffffffffffffffff81116110f257610fec9036906004016118bb565b61107b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169161106d6040519485927fe4a37d7a000000000000000000000000000000000000000000000000000000006020850152336024850152604060448501526064840191611a7c565b03601f1981018452836118e9565b803b156110f2576110c75f929183926040519485809481937fcf6acdac00000000000000000000000000000000000000000000000000000000835260206004840152602483019061199b565b03925af180156110e7576110d9575080f35b6110e591505f906118e9565b005b6040513d5f823e3d90fd5b5f80fd5b346110f2575f6003193601126110f25761110e611d26565b7fb8e2aca102a1597f1cf2663b55e6eea08f4690c2bbd4b86b04d3ff308a65365260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060015460ff808216151691829116176001556040519015158152a1005b346110f2575f6003193601126110f257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346110f2575f6003193601126110f25760206040517f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5008152f35b346110f25760606003193601126110f257611212611844565b61121a611867565b90604435907ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549260ff8460401c16159367ffffffffffffffff811680159081611559575b600114908161154f575b159081611546575b5061151e578460017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008316177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00556114c9575b5073ffffffffffffffffffffffffffffffffffffffff8216156114a15782156114435761131873ffffffffffffffffffffffffffffffffffffffff92611308611d92565b611310611d92565b6101a9611d92565b167fffffffffffffffffffffffff00000000000000000000000000000000000000007f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d5005416177f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d50055611388611d92565b7fc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a400556113b057005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41707020636861696e2049442063616e6e6f74206265203000000000000000006044820152fd5b7fd92e233d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055846112c4565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501586611271565b303b159150611269565b86915061125f565b346110f25760206003193601126110f25760043573ffffffffffffffffffffffffffffffffffffffff81168091036110f25761159b611d26565b801561167d574790811561161f575f80809381935af16115b9611a4d565b50156115c157005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5472616e73666572206661696c656400000000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4e6f206665657320746f207769746864726177000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f496e76616c696420726563697069656e740000000000000000000000000000006044820152fd5b346110f25760406003193601126110f2576116f4611844565b60243567ffffffffffffffff81116110f25761171490369060040161188a565b9173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361181c5782156117f4575f5b83811061176357005b61176e8185856119c0565b9050156117f45780611786610a5d60019387876119c0565b611791813286611a9c565b61179d575b500161175a565b7f83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f60405160208152806117eb73ffffffffffffffffffffffffffffffffffffffff881694602083019061199b565b0390a285611796565b7fdc37f51d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdaf9861c000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036110f257565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036110f257565b9181601f840112156110f25782359167ffffffffffffffff83116110f2576020808501948460051b0101116110f257565b9181601f840112156110f25782359167ffffffffffffffff83116110f257602083818601950101116110f257565b90601f601f19910116810190811067ffffffffffffffff82111761190c57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161190c57601f01601f191660200190565b81601f820112156110f25780359061196c82611939565b9261197a60405194856118e9565b828452602083830101116110f257815f926020809301838601378301015290565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b9190811015611a205760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156110f257019081359167ffffffffffffffff83116110f25760200182360381136110f2579190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b3d15611a77573d90611a5e82611939565b91611a6c60405193846118e9565b82523d5f602084013e565b606090565b601f8260209493601f1993818652868601375f8582860101520116010190565b9190815162030d408111611bb7575073ffffffffffffffffffffffffffffffffffffffff7f5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500541660018114928315611af7575b505050905090565b6020935073ffffffffffffffffffffffffffffffffffffffff94611b608692604051978896879586957f7a3979dc00000000000000000000000000000000000000000000000000000000875216600486015216602484015260606044840152606483019061199b565b03915afa9081156110e7575f91611b7c575b50805f8080611aef565b90506020813d602011611baf575b81611b97602093836118e9565b810103126110f2575180151581036110f2575f611b72565b3d9150611b8a565b7f4634691b000000000000000000000000000000000000000000000000000000005f5260045262030d4060245260445ffd5b6021611c3691836040519485927f040000000000000000000000000000000000000000000000000000000000000060208501528484013781015f838201520301601f1981018352826118e9565b90565b73ffffffffffffffffffffffffffffffffffffffff168015611cfa5773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303611d6657565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615611dc157565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b90611e265750805115611dfe57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580611e79575b611e37575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15611e2f56 + /// ``` + #[rustfmt::skip] + #[allow(clippy::all)] + pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static( + b"`\x80`@R`\x046\x10\x15a\0\x11W_\x80\xFD[__5`\xE0\x1C\x80c\x12(\x19\x83\x14a\x16\xDBW\x80c\x16Nh\xDE\x14a\x15aW\x80c\x17\x94\xBB<\x14a\x11\xF9W\x80c$\x07\xF0\xB6\x14a\x11\xBFW\x80cC\xF9z\xE5\x14a\x11oW\x80cE\x13\xED\x15\x14a\x10\xF6W\x80cF\xE2\xCC\t\x14a\x0F\xBAW\x80cO\x1E\xF2\x86\x14a\x0C\xA1W\x80cR\xD1\x90-\x14a\x0C\x01W\x80c[<\xD6\xE2\x14a\x0B\xAEW\x80c`\xC6\xD8\xAE\x14a\x0B\x90W\x80cqP\x18\xA6\x14a\n\xD2W\x80cz9y\xDC\x14a\nwW\x80c\x85\x07I%\x14a\n%W\x80c\x8C$+\xCE\x14a\x08`W\x80c\x8D\xA5\xCB[\x14a\x08\rW\x80c\x94aDm\x14a\x07\xC0W\x80c\x95\xC5\xBFu\x14a\x07\x85W\x80c\xA0\xA8\xE4`\x14a\x07%W\x80c\xAD<\xB1\xCC\x14a\x06\xC1W\x80c\xB3\xC6P\x15\x14a\x06zW\x80c\xCC\x85R\xE9\x14a\x06WW\x80c\xCD\xAF\xB9x\x14a\x04[W\x80c\xD4\xF0\xEBM\x14a\x03\x94W\x80c\xD8x\x13B\x14a\x03WW\x80c\xDE\x18\x81\xA8\x14a\x03:W\x80c\xE4\xA3}z\x14a\x01\xCFW\x80c\xE8\xEB\x1D\xC3\x14a\x01\xB1W\x80c\xF2\xFD\xE3\x8B\x14a\x01\x84Wc\xFF\xA1\xADt\x14a\x01dW_\x80\xFD[4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` `@Qb\x0FB@\x81R\xF3[\x80\xFD[P4a\x01\x81W` `\x03\x196\x01\x12a\x01\x81Wa\x01\xAEa\x01\xA1a\x18DV[a\x01\xA9a\x1D&V[a\x1C9V[\x80\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` `@Qb\x03\r@\x81R\xF3[P4a\x01\x81W`@`\x03\x196\x01\x12a\x01\x81Wa\x01\xE9a\x18DV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x036Wa\x02\t\x906\x90`\x04\x01a\x18\xBBV[\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x163\x03a\x03\x0EW\x81\x15a\x02\xE6W\x90a\x02W\x91a\x1B\xE9V[\x90a\x02c\x822\x83a\x1A\x9CV[\x15a\x02\xBEWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F\x91a\x02\xB8`@Q\x92\x83\x92` \x84R\x16\x94` \x83\x01\x90a\x19\x9BV[\x03\x90\xA2\x80\xF3[`\x04\x83\x7F\xDCt\x14X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x84\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x84\x7F\xDA\xF9\x86\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x82\x80\xFD[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` \x90T`@Q\x90\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` \x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0T`@Q\x90\x81R\xF3[P4a\x01\x81W` `\x03\x196\x01\x12a\x01\x81Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFFa\x03\xC3a\x18DV[a\x03\xCBa\x1D&V[\x16\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0U\x7F%5\x80\xF8\x06t\x1C\x11\xB3\xD4\xAA`\xD9\xCA\xCC[\xEF\x0C\xEB\xB3WHv\x7F\xE2?\x11\x91n/\x04\xB9\x82\x80\xA2\x80\xF3[P4a\x01\x81W` `\x03\x196\x01\x12a\x01\x81W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06SWa\x04\x8D\x906\x90`\x04\x01a\x18\x8AV[\x91\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x92`@Q\x91\x7F\x12(\x19\x83\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x84\x01R\x81`d\x84\x013`$\x86\x01R`@`D\x86\x01RR`\x84\x83\x01`\x84\x83`\x05\x1B\x85\x01\x01\x92\x82\x86\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01[\x83\x83\x10a\x05\xD6W\x88\x80\x89\x8Ca\x05Y\x82\x8C\x03`\x1F\x19\x81\x01\x84R\x83a\x18\xE9V[\x80;\x15a\x05\xD2Wa\x05\xA5\x83\x92\x91\x83\x92`@Q\x94\x85\x80\x94\x81\x93\x7F\xCFj\xCD\xAC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` `\x04\x84\x01R`$\x83\x01\x90a\x19\x9BV[\x03\x92Z\xF1\x80\x15a\x05\xC7Wa\x05\xB6WP\xF3[\x81a\x05\xC0\x91a\x18\xE9V[a\x01\x81W\x80\xF3[`@Q=\x84\x82>=\x90\xFD[PP\xFD[\x90\x91\x92\x93\x94\x95\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF|\x88\x82\x03\x01\x86R\x865\x82\x81\x12\x15a\x06OW\x83\x01` \x815\x91\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x06KW\x816\x03\x81\x13a\x06KWa\x06=`\x01\x93` \x93\x84\x93a\x1A|V[\x98\x01\x96\x01\x94\x93\x01\x91\x90a\x05;V[\x8A\x80\xFD[\x89\x80\xFD[P\x80\xFD[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` `\xFF`\x01T\x16`@Q\x90\x15\x15\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16`@Q\x90\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81Wa\x07!`@Qa\x06\xE3`@\x82a\x18\xE9V[`\x05\x81R\x7F5.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x19\x9BV[\x03\x90\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81Wa\x07!`@Qa\x07G`@\x82a\x18\xE9V[`\x05\x81R\x7F2.0.0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x82\x01R`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x19\x9BV[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` `@Q\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0\x81R\xF3[P4a\x01\x81W` `\x03\x196\x01\x12a\x01\x81W\x7F\xD6g\x0E5S%\x1BA\x82\x02\\\xBAl>\x10Z\x9E?\xD8\x90c#(\x91A\x17\x80\xAC=\x1C'\xE3` `\x045a\x08\0a\x1D&V[\x80\x84U`@Q\x90\x81R\xA1\x80\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x16`@Q\x90\x81R\xF3[P` `\x03\x196\x01\x12a\x01\x81W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06SWa\x08\x8D\x906\x90`\x04\x01a\x18\xBBV[\x90\x81\x15a\t\xFDW\x90a\x08\x9E\x91a\x1B\xE9V[a\x08\xA9\x8123a\x1A\x9CV[\x15a\t\xD5W`\xFF`\x01T\x16\x80a\t\xCBW[a\x08\xF7W[\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F`@Q` \x81R\x80a\x02\xB83\x94` \x83\x01\x90a\x19\x9BV[\x81T4\x10a\tmW`\x02T4\x81\x01\x80\x91\x11a\t@W`\x02U`@Q4\x81R\x7F\x06\xC5\xEF\xEF\xF5\xC3 \x94=&]\xC4\xE5\xF1\xAF\x95\xADR5U\xCE\x0C\x19W\xE3g\xDD\xA5QEr\xDF` 3\x92\xA2a\x08\xBFV[`$\x83\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R`\x11`\x04R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x10`$\x82\x01R\x7FInsufficient fee\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[P\x81T\x15\x15a\x08\xBAV[`\x04\x82\x7F\xDCt\x14X\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[`\x04\x83\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[P4a\x01\x81W` `\x03\x196\x01\x12a\x01\x81W`\x045\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01\x81Wa\x07!a\nca\n]6`\x04\x86\x01a\x18\xBBV[\x90a\x1B\xE9V[`@Q\x91\x82\x91` \x83R` \x83\x01\x90a\x19\x9BV[P4a\x01\x81W```\x03\x196\x01\x12a\x01\x81Wa\n\x91a\x18DV[\x90a\n\x9Aa\x18gV[\x90`D5\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11a\x01\x81W` a\n\xC8\x85\x85a\n\xC26`\x04\x88\x01a\x19UV[\x91a\x1A\x9CV[`@Q\x90\x15\x15\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81Wa\n\xEBa\x1D&V[\x80s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81\x16\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0\x82\x80\xA3\x80\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` `\x02T`@Q\x90\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81W` s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`@Q\x90\x81R\xF3[P4a\x01\x81W\x80`\x03\x196\x01\x12a\x01\x81Ws\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x160\x03a\x0CyW` `@Q\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81R\xF3[\x80\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04\x92R\xFD[P`@`\x03\x196\x01\x12a\x01\x81Wa\x0C\xB6a\x18DV[\x90`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x06SWa\x0C\xD7\x906\x90`\x04\x01a\x19UV[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x800\x14\x90\x81\x15a\x0FxW[Pa\x0FPWa\r&a\x1D&V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x16\x90`@Q\x93\x7FR\xD1\x90-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R` \x85`\x04\x81\x86Z\xFA\x80\x95\x85\x96a\x0F\x18W[Pa\r\xA8W`$\x84\x84\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82R`\x04R\xFD[\x90\x91\x84\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBC\x81\x03a\x0E\xEDWP\x81;\x15a\x0E\xC2W\x80\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x17\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCU\x7F\xBC|\xD7Z \xEE'\xFD\x9A\xDE\xBA\xB3 A\xF7U!M\xBCk\xFF\xA9\x0C\xC0\"[9\xDA.\\-;\x84\x80\xA2\x81Q\x83\x90\x15a\x0E\x8FW\x80\x83` a\x0E\x8B\x95Q\x91\x01\x84Z\xF4a\x0E\x85a\x1AMV[\x91a\x1D\xE9V[P\x80\xF3[PPP4a\x0E\x9AW\x80\xF3[\x80\x7F\xB3\x98\x97\x9F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x04\x92R\xFD[\x7FL\x9C\x8C\xE3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x84R`\x04R`$\x83\xFD[\x7F\xAA\x1DI\xA4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x85R`\x04R`$\x84\xFD[\x90\x95P` \x81=` \x11a\x0FHW[\x81a\x0F4` \x93\x83a\x18\xE9V[\x81\x01\x03\x12a\x0FDWQ\x94_a\rwV[\x84\x80\xFD[=\x91Pa\x0F'V[`\x04\x82\x7F\xE0|\x8D\xBA\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R\xFD[\x90Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F6\x08\x94\xA1;\xA1\xA3!\x06g\xC8(I-\xB9\x8D\xCA> v\xCC75\xA9 \xA3\xCAP]8+\xBCT\x16\x14\x15_a\r\x19V[P4a\x10\xF2W` `\x03\x196\x01\x12a\x10\xF2W`\x045g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x10\xF2Wa\x0F\xEC\x906\x90`\x04\x01a\x18\xBBV[a\x10{s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x91a\x10m`@Q\x94\x85\x92\x7F\xE4\xA3}z\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01R3`$\x85\x01R`@`D\x85\x01R`d\x84\x01\x91a\x1A|V[\x03`\x1F\x19\x81\x01\x84R\x83a\x18\xE9V[\x80;\x15a\x10\xF2Wa\x10\xC7_\x92\x91\x83\x92`@Q\x94\x85\x80\x94\x81\x93\x7F\xCFj\xCD\xAC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83R` `\x04\x84\x01R`$\x83\x01\x90a\x19\x9BV[\x03\x92Z\xF1\x80\x15a\x10\xE7Wa\x10\xD9WP\x80\xF3[a\x10\xE5\x91P_\x90a\x18\xE9V[\0[`@Q=_\x82>=\x90\xFD[_\x80\xFD[4a\x10\xF2W_`\x03\x196\x01\x12a\x10\xF2Wa\x11\x0Ea\x1D&V[\x7F\xB8\xE2\xAC\xA1\x02\xA1Y\x7F\x1C\xF2f;U\xE6\xEE\xA0\x8FF\x90\xC2\xBB\xD4\xB8k\x04\xD3\xFF0\x8Ae6R` \x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0`\x01T`\xFF\x80\x82\x16\x15\x16\x91\x82\x91\x16\x17`\x01U`@Q\x90\x15\x15\x81R\xA1\0[4a\x10\xF2W_`\x03\x196\x01\x12a\x10\xF2W` `@Qs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x81R\xF3[4a\x10\xF2W_`\x03\x196\x01\x12a\x10\xF2W` `@Q\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0\x81R\xF3[4a\x10\xF2W```\x03\x196\x01\x12a\x10\xF2Wa\x12\x12a\x18DV[a\x12\x1Aa\x18gV[\x90`D5\x90\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x92`\xFF\x84`@\x1C\x16\x15\x93g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x15\x90\x81a\x15YW[`\x01\x14\x90\x81a\x15OW[\x15\x90\x81a\x15FW[Pa\x15\x1EW\x84`\x01\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\x83\x16\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0Ua\x14\xC9W[Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x15a\x14\xA1W\x82\x15a\x14CWa\x13\x18s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x92a\x13\x08a\x1D\x92V[a\x13\x10a\x1D\x92V[a\x01\xA9a\x1D\x92V[\x16\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16\x17\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0Ua\x13\x88a\x1D\x92V[\x7F\xC5A\xA3a;\xD2*\x8D\xA1\xC8\x97e\x8E\x95\xC4.k\xB9\x15\x8C\x83\xD6*\xC9cdk\xA2r\0\xA4\0Ua\x13\xB0W\0[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T\x16\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x7F\xC7\xF5\x05\xB2\xF3q\xAE!u\xEEI\x13\xF4I\x9E\x1F&3\xA7\xB5\x93c!\xEE\xD1\xCD\xAE\xB6\x11Q\x81\xD2` `@Q`\x01\x81R\xA1\0[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FApp chain ID cannot be 0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[\x7F\xD9.#=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\x16h\x01\0\0\0\0\0\0\0\x01\x17\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0U\x84a\x12\xC4V[\x7F\xF9.\xE8\xA9\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90P\x15\x86a\x12qV[0;\x15\x91Pa\x12iV[\x86\x91Pa\x12_V[4a\x10\xF2W` `\x03\x196\x01\x12a\x10\xF2W`\x045s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x80\x91\x03a\x10\xF2Wa\x15\x9Ba\x1D&V[\x80\x15a\x16}WG\x90\x81\x15a\x16\x1FW_\x80\x80\x93\x81\x93Z\xF1a\x15\xB9a\x1AMV[P\x15a\x15\xC1W\0[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x0F`$\x82\x01R\x7FTransfer failed\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x13`$\x82\x01R\x7FNo fees to withdraw\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[`d`@Q\x7F\x08\xC3y\xA0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81R` `\x04\x82\x01R`\x11`$\x82\x01R\x7FInvalid recipient\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`D\x82\x01R\xFD[4a\x10\xF2W`@`\x03\x196\x01\x12a\x10\xF2Wa\x16\xF4a\x18DV[`$5g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x10\xF2Wa\x17\x14\x906\x90`\x04\x01a\x18\x8AV[\x91s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x163\x03a\x18\x1CW\x82\x15a\x17\xF4W_[\x83\x81\x10a\x17cW\0[a\x17n\x81\x85\x85a\x19\xC0V[\x90P\x15a\x17\xF4W\x80a\x17\x86a\n]`\x01\x93\x87\x87a\x19\xC0V[a\x17\x91\x812\x86a\x1A\x9CV[a\x17\x9DW[P\x01a\x17ZV[\x7F\x836;x\xBD\xFB\xB2>*a\xDBz\xCC\xC3\xC0\x1F\xDA)\xC5\xC5\xEC\x81\x88\x80\x03\xCB\x96)\x12a\x8A\x7F`@Q` \x81R\x80a\x17\xEBs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x88\x16\x94` \x83\x01\x90a\x19\x9BV[\x03\x90\xA2\x85a\x17\x96V[\x7F\xDC7\xF5\x1D\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x7F\xDA\xF9\x86\x1C\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[`\x045\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x10\xF2WV[`$5\x90s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x16\x82\x03a\x10\xF2WV[\x91\x81`\x1F\x84\x01\x12\x15a\x10\xF2W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x10\xF2W` \x80\x85\x01\x94\x84`\x05\x1B\x01\x01\x11a\x10\xF2WV[\x91\x81`\x1F\x84\x01\x12\x15a\x10\xF2W\x825\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x10\xF2W` \x83\x81\x86\x01\x95\x01\x01\x11a\x10\xF2WV[\x90`\x1F`\x1F\x19\x91\x01\x16\x81\x01\x90\x81\x10g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x17a\x19\x0CW`@RV[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`A`\x04R`$_\xFD[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11a\x19\x0CW`\x1F\x01`\x1F\x19\x16` \x01\x90V[\x81`\x1F\x82\x01\x12\x15a\x10\xF2W\x805\x90a\x19l\x82a\x199V[\x92a\x19z`@Q\x94\x85a\x18\xE9V[\x82\x84R` \x83\x83\x01\x01\x11a\x10\xF2W\x81_\x92` \x80\x93\x01\x83\x86\x017\x83\x01\x01R\x90V[\x90`\x1F\x19`\x1F` \x80\x94\x80Q\x91\x82\x91\x82\x87R\x01\x86\x86\x01^_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x81\x10\x15a\x1A W`\x05\x1B\x81\x015\x90\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xE1\x816\x03\x01\x82\x12\x15a\x10\xF2W\x01\x90\x815\x91g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x83\x11a\x10\xF2W` \x01\x826\x03\x81\x13a\x10\xF2W\x91\x90V[\x7FNH{q\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`2`\x04R`$_\xFD[=\x15a\x1AwW=\x90a\x1A^\x82a\x199V[\x91a\x1Al`@Q\x93\x84a\x18\xE9V[\x82R=_` \x84\x01>V[``\x90V[`\x1F\x82` \x94\x93`\x1F\x19\x93\x81\x86R\x86\x86\x017_\x85\x82\x86\x01\x01R\x01\x16\x01\x01\x90V[\x91\x90\x81Qb\x03\r@\x81\x11a\x1B\xB7WPs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\\m\x17t\xBD\xD6\x9D\x8D\x16\x84|<\x97\xB5\x1E\xA742W\xB8\xF5\xAC\xE5\xDA\x9E%\xAB;\xAF\xD7\xD5\0T\x16`\x01\x81\x14\x92\x83\x15a\x1A\xF7W[PPP\x90P\x90V[` \x93Ps\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x94a\x1B`\x86\x92`@Q\x97\x88\x96\x87\x95\x86\x95\x7Fz9y\xDC\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87R\x16`\x04\x86\x01R\x16`$\x84\x01R```D\x84\x01R`d\x83\x01\x90a\x19\x9BV[\x03\x91Z\xFA\x90\x81\x15a\x10\xE7W_\x91a\x1B|W[P\x80_\x80\x80a\x1A\xEFV[\x90P` \x81=` \x11a\x1B\xAFW[\x81a\x1B\x97` \x93\x83a\x18\xE9V[\x81\x01\x03\x12a\x10\xF2WQ\x80\x15\x15\x81\x03a\x10\xF2W_a\x1BrV[=\x91Pa\x1B\x8AV[\x7FF4i\x1B\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04Rb\x03\r@`$R`D_\xFD[`!a\x1C6\x91\x83`@Q\x94\x85\x92\x7F\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0` \x85\x01R\x84\x84\x017\x81\x01_\x83\x82\x01R\x03\x01`\x1F\x19\x81\x01\x83R\x82a\x18\xE9V[\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16\x80\x15a\x1C\xFAWs\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x82\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x82\x16\x17\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0U\x16\x7F\x8B\xE0\x07\x9CS\x16Y\x14\x13D\xCD\x1F\xD0\xA4\xF2\x84\x19I\x7F\x97\"\xA3\xDA\xAF\xE3\xB4\x18okdW\xE0_\x80\xA3V[\x7F\x1EO\xBD\xF7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R_`\x04R`$_\xFD[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x7F\x90\x16\xD0\x9Dr\xD4\x0F\xDA\xE2\xFD\x8C\xEA\xC6\xB6#Lw\x06!O\xD3\x9C\x1C\xD1\xE6\t\xA0R\x8C\x19\x93\0T\x163\x03a\x1DfWV[\x7F\x11\x8C\xDA\xA7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R3`\x04R`$_\xFD[`\xFF\x7F\xF0\xC5~\x16\x84\r\xF0@\xF1P\x88\xDC/\x81\xFE9\x1C9#\xBE\xC7>#\xA9f.\xFC\x9C\"\x9Cj\0T`@\x1C\x16\x15a\x1D\xC1WV[\x7F\xD7\xE6\xBC\xF8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x90a\x1E&WP\x80Q\x15a\x1D\xFEW\x80Q\x90` \x01\xFD[\x7F\xD6\xBD\xA2u\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R`\x04_\xFD[\x81Q\x15\x80a\x1EyW[a\x1E7WP\x90V[s\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x7F\x99\x96\xB3\x15\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_R\x16`\x04R`$_\xFD[P\x80;\x15a\x1E/V", + ); + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `AddressEmptyCode(address)` and selector `0x9996b315`. +```solidity +error AddressEmptyCode(address target); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct AddressEmptyCode { + #[allow(missing_docs)] + pub target: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: AddressEmptyCode) -> Self { + (value.target,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for AddressEmptyCode { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { target: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for AddressEmptyCode { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "AddressEmptyCode(address)"; + const SELECTOR: [u8; 4] = [153u8, 150u8, 179u8, 21u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.target, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `DataTooLarge(uint256,uint256)` and selector `0x4634691b`. +```solidity +error DataTooLarge(uint256 dataLength, uint256 maxDataLength); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct DataTooLarge { + #[allow(missing_docs)] + pub dataLength: alloy::sol_types::private::primitives::aliases::U256, + #[allow(missing_docs)] + pub maxDataLength: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Uint<256>, + alloy::sol_types::sol_data::Uint<256>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: DataTooLarge) -> Self { + (value.dataLength, value.maxDataLength) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for DataTooLarge { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + dataLength: tuple.0, + maxDataLength: tuple.1, + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for DataTooLarge { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "DataTooLarge(uint256,uint256)"; + const SELECTOR: [u8; 4] = [70u8, 52u8, 105u8, 27u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.dataLength), + as alloy_sol_types::SolType>::tokenize(&self.maxDataLength), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ERC1967InvalidImplementation(address)` and selector `0x4c9c8ce3`. +```solidity +error ERC1967InvalidImplementation(address implementation); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ERC1967InvalidImplementation { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: ERC1967InvalidImplementation) -> Self { + (value.implementation,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for ERC1967InvalidImplementation { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { implementation: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ERC1967InvalidImplementation { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ERC1967InvalidImplementation(address)"; + const SELECTOR: [u8; 4] = [76u8, 156u8, 140u8, 227u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.implementation, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ERC1967NonPayable()` and selector `0xb398979f`. +```solidity +error ERC1967NonPayable(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ERC1967NonPayable; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ERC1967NonPayable) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ERC1967NonPayable { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ERC1967NonPayable { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ERC1967NonPayable()"; + const SELECTOR: [u8; 4] = [179u8, 152u8, 151u8, 159u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `FailedCall()` and selector `0xd6bda275`. +```solidity +error FailedCall(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct FailedCall; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: FailedCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for FailedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for FailedCall { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "FailedCall()"; + const SELECTOR: [u8; 4] = [214u8, 189u8, 162u8, 117u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `InvalidInitialization()` and selector `0xf92ee8a9`. +```solidity +error InvalidInitialization(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct InvalidInitialization; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: InvalidInitialization) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for InvalidInitialization { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for InvalidInitialization { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "InvalidInitialization()"; + const SELECTOR: [u8; 4] = [249u8, 46u8, 232u8, 169u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `NoTxData()` and selector `0xdc37f51d`. +```solidity +error NoTxData(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct NoTxData; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: NoTxData) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for NoTxData { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for NoTxData { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "NoTxData()"; + const SELECTOR: [u8; 4] = [220u8, 55u8, 245u8, 29u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `NotGasMeterContract()` and selector `0xdaf9861c`. +```solidity +error NotGasMeterContract(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct NotGasMeterContract; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: NotGasMeterContract) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for NotGasMeterContract { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for NotGasMeterContract { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "NotGasMeterContract()"; + const SELECTOR: [u8; 4] = [218u8, 249u8, 134u8, 28u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `NotInitializing()` and selector `0xd7e6bcf8`. +```solidity +error NotInitializing(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct NotInitializing; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: NotInitializing) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for NotInitializing { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for NotInitializing { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "NotInitializing()"; + const SELECTOR: [u8; 4] = [215u8, 230u8, 188u8, 248u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `OwnableInvalidOwner(address)` and selector `0x1e4fbdf7`. +```solidity +error OwnableInvalidOwner(address owner); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct OwnableInvalidOwner { + #[allow(missing_docs)] + pub owner: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: OwnableInvalidOwner) -> Self { + (value.owner,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for OwnableInvalidOwner { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { owner: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for OwnableInvalidOwner { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "OwnableInvalidOwner(address)"; + const SELECTOR: [u8; 4] = [30u8, 79u8, 189u8, 247u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.owner, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `OwnableUnauthorizedAccount(address)` and selector `0x118cdaa7`. +```solidity +error OwnableUnauthorizedAccount(address account); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct OwnableUnauthorizedAccount { + #[allow(missing_docs)] + pub account: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: OwnableUnauthorizedAccount) -> Self { + (value.account,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for OwnableUnauthorizedAccount { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { account: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for OwnableUnauthorizedAccount { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "OwnableUnauthorizedAccount(address)"; + const SELECTOR: [u8; 4] = [17u8, 140u8, 218u8, 167u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.account, + ), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `TransactionOrSenderNotAllowed()` and selector `0xdc741458`. +```solidity +error TransactionOrSenderNotAllowed(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct TransactionOrSenderNotAllowed; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: TransactionOrSenderNotAllowed) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for TransactionOrSenderNotAllowed { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for TransactionOrSenderNotAllowed { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "TransactionOrSenderNotAllowed()"; + const SELECTOR: [u8; 4] = [220u8, 116u8, 20u8, 88u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `UUPSUnauthorizedCallContext()` and selector `0xe07c8dba`. +```solidity +error UUPSUnauthorizedCallContext(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UUPSUnauthorizedCallContext; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UUPSUnauthorizedCallContext) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UUPSUnauthorizedCallContext { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for UUPSUnauthorizedCallContext { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "UUPSUnauthorizedCallContext()"; + const SELECTOR: [u8; 4] = [224u8, 124u8, 141u8, 186u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `UUPSUnsupportedProxiableUUID(bytes32)` and selector `0xaa1d49a4`. +```solidity +error UUPSUnsupportedProxiableUUID(bytes32 slot); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UUPSUnsupportedProxiableUUID { + #[allow(missing_docs)] + pub slot: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UUPSUnsupportedProxiableUUID) -> Self { + (value.slot,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UUPSUnsupportedProxiableUUID { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { slot: tuple.0 } + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for UUPSUnsupportedProxiableUUID { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "UUPSUnsupportedProxiableUUID(bytes32)"; + const SELECTOR: [u8; 4] = [170u8, 29u8, 73u8, 164u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.slot), + ) + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Custom error with signature `ZeroAddress()` and selector `0xd92e233d`. +```solidity +error ZeroAddress(); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ZeroAddress; + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ZeroAddress) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ZeroAddress { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + #[automatically_derived] + impl alloy_sol_types::SolError for ZeroAddress { + type Parameters<'a> = UnderlyingSolTuple<'a>; + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "ZeroAddress()"; + const SELECTOR: [u8; 4] = [217u8, 46u8, 35u8, 61u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Self::new) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `FeeCollected(address,uint256)` and selector `0x06c5efeff5c320943d265dc4e5f1af95ad523555ce0c1957e367dda5514572df`. +```solidity +event FeeCollected(address indexed payer, uint256 amount); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct FeeCollected { + #[allow(missing_docs)] + pub payer: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub amount: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for FeeCollected { + type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "FeeCollected(address,uint256)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 6u8, 197u8, 239u8, 239u8, 245u8, 195u8, 32u8, 148u8, 61u8, 38u8, 93u8, + 196u8, 229u8, 241u8, 175u8, 149u8, 173u8, 82u8, 53u8, 85u8, 206u8, 12u8, + 25u8, 87u8, 227u8, 103u8, 221u8, 165u8, 81u8, 69u8, 114u8, 223u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + payer: topics.1, + amount: data.0, + } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.amount), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.payer.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.payer, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for FeeCollected { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&FeeCollected> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &FeeCollected) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `FeeCollectionToggled(bool)` and selector `0xb8e2aca102a1597f1cf2663b55e6eea08f4690c2bbd4b86b04d3ff308a653652`. +```solidity +event FeeCollectionToggled(bool enabled); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct FeeCollectionToggled { + #[allow(missing_docs)] + pub enabled: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for FeeCollectionToggled { + type DataTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "FeeCollectionToggled(bool)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 184u8, 226u8, 172u8, 161u8, 2u8, 161u8, 89u8, 127u8, 28u8, 242u8, 102u8, + 59u8, 85u8, 230u8, 238u8, 160u8, 143u8, 70u8, 144u8, 194u8, 187u8, 212u8, + 184u8, 107u8, 4u8, 211u8, 255u8, 48u8, 138u8, 101u8, 54u8, 82u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { enabled: data.0 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + ::tokenize( + &self.enabled, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for FeeCollectionToggled { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&FeeCollectionToggled> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &FeeCollectionToggled) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `Initialized(uint64)` and selector `0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2`. +```solidity +event Initialized(uint64 version); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct Initialized { + #[allow(missing_docs)] + pub version: u64, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for Initialized { + type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<64>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "Initialized(uint64)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 199u8, 245u8, 5u8, 178u8, 243u8, 113u8, 174u8, 33u8, 117u8, 238u8, 73u8, + 19u8, 244u8, 73u8, 158u8, 31u8, 38u8, 51u8, 167u8, 181u8, 147u8, 99u8, + 33u8, 238u8, 209u8, 205u8, 174u8, 182u8, 17u8, 81u8, 129u8, 210u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { version: data.0 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.version), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Initialized { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Initialized> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Initialized) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `OwnershipTransferred(address,address)` and selector `0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0`. +```solidity +event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct OwnershipTransferred { + #[allow(missing_docs)] + pub previousOwner: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub newOwner: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for OwnershipTransferred { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "OwnershipTransferred(address,address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 139u8, 224u8, 7u8, 156u8, 83u8, 22u8, 89u8, 20u8, 19u8, 68u8, 205u8, + 31u8, 208u8, 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8, + 218u8, 175u8, 227u8, 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + previousOwner: topics.1, + newOwner: topics.2, + } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + ( + Self::SIGNATURE_HASH.into(), + self.previousOwner.clone(), + self.newOwner.clone(), + ) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.previousOwner, + ); + out[2usize] = ::encode_topic( + &self.newOwner, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for OwnershipTransferred { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&OwnershipTransferred> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &OwnershipTransferred) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `ProcessingFeeUpdated(uint256)` and selector `0xd6670e3553251b4182025cba6c3e105a9e3fd89063232891411780ac3d1c27e3`. +```solidity +event ProcessingFeeUpdated(uint256 newFee); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct ProcessingFeeUpdated { + #[allow(missing_docs)] + pub newFee: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for ProcessingFeeUpdated { + type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = (alloy_sol_types::sol_data::FixedBytes<32>,); + const SIGNATURE: &'static str = "ProcessingFeeUpdated(uint256)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 214u8, 103u8, 14u8, 53u8, 83u8, 37u8, 27u8, 65u8, 130u8, 2u8, 92u8, + 186u8, 108u8, 62u8, 16u8, 90u8, 158u8, 63u8, 216u8, 144u8, 99u8, 35u8, + 40u8, 145u8, 65u8, 23u8, 128u8, 172u8, 61u8, 28u8, 39u8, 227u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { newFee: data.0 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.newFee), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(),) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for ProcessingFeeUpdated { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&ProcessingFeeUpdated> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &ProcessingFeeUpdated) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `RequirementModuleUpdated(address)` and selector `0x253580f806741c11b3d4aa60d9cacc5bef0cebb35748767fe23f11916e2f04b9`. +```solidity +event RequirementModuleUpdated(address indexed newModule); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct RequirementModuleUpdated { + #[allow(missing_docs)] + pub newModule: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for RequirementModuleUpdated { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "RequirementModuleUpdated(address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 37u8, 53u8, 128u8, 248u8, 6u8, 116u8, 28u8, 17u8, 179u8, 212u8, 170u8, + 96u8, 217u8, 202u8, 204u8, 91u8, 239u8, 12u8, 235u8, 179u8, 87u8, 72u8, + 118u8, 127u8, 226u8, 63u8, 17u8, 145u8, 110u8, 47u8, 4u8, 185u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { newModule: topics.1 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.newModule.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.newModule, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for RequirementModuleUpdated { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&RequirementModuleUpdated> for alloy_sol_types::private::LogData { + #[inline] + fn from( + this: &RequirementModuleUpdated, + ) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `TransactionProcessed(address,bytes)` and selector `0x83363b78bdfbb23e2a61db7accc3c01fda29c5c5ec81888003cb962912618a7f`. +```solidity +event TransactionProcessed(address indexed sender, bytes data); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct TransactionProcessed { + #[allow(missing_docs)] + pub sender: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for TransactionProcessed { + type DataTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "TransactionProcessed(address,bytes)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 131u8, 54u8, 59u8, 120u8, 189u8, 251u8, 178u8, 62u8, 42u8, 97u8, 219u8, + 122u8, 204u8, 195u8, 192u8, 31u8, 218u8, 41u8, 197u8, 197u8, 236u8, + 129u8, 136u8, 128u8, 3u8, 203u8, 150u8, 41u8, 18u8, 97u8, 138u8, 127u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { + sender: topics.1, + data: data.0, + } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + ( + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.sender.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.sender, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for TransactionProcessed { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&TransactionProcessed> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &TransactionProcessed) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Event with signature `Upgraded(address)` and selector `0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b`. +```solidity +event Upgraded(address indexed implementation); +```*/ + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + #[derive(Clone)] + pub struct Upgraded { + #[allow(missing_docs)] + pub implementation: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + #[automatically_derived] + impl alloy_sol_types::SolEvent for Upgraded { + type DataTuple<'a> = (); + type DataToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + type TopicList = ( + alloy_sol_types::sol_data::FixedBytes<32>, + alloy::sol_types::sol_data::Address, + ); + const SIGNATURE: &'static str = "Upgraded(address)"; + const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([ + 188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8, + 179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8, + 12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8, + ]); + const ANONYMOUS: bool = false; + #[allow(unused_variables)] + #[inline] + fn new( + topics: ::RustType, + data: as alloy_sol_types::SolType>::RustType, + ) -> Self { + Self { implementation: topics.1 } + } + #[inline] + fn check_signature( + topics: &::RustType, + ) -> alloy_sol_types::Result<()> { + if topics.0 != Self::SIGNATURE_HASH { + return Err( + alloy_sol_types::Error::invalid_event_signature_hash( + Self::SIGNATURE, + topics.0, + Self::SIGNATURE_HASH, + ), + ); + } + Ok(()) + } + #[inline] + fn tokenize_body(&self) -> Self::DataToken<'_> { + () + } + #[inline] + fn topics(&self) -> ::RustType { + (Self::SIGNATURE_HASH.into(), self.implementation.clone()) + } + #[inline] + fn encode_topics_raw( + &self, + out: &mut [alloy_sol_types::abi::token::WordToken], + ) -> alloy_sol_types::Result<()> { + if out.len() < ::COUNT { + return Err(alloy_sol_types::Error::Overrun); + } + out[0usize] = alloy_sol_types::abi::token::WordToken( + Self::SIGNATURE_HASH, + ); + out[1usize] = ::encode_topic( + &self.implementation, + ); + Ok(()) + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData for Upgraded { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + From::from(self) + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + From::from(&self) + } + } + #[automatically_derived] + impl From<&Upgraded> for alloy_sol_types::private::LogData { + #[inline] + fn from(this: &Upgraded) -> alloy_sol_types::private::LogData { + alloy_sol_types::SolEvent::encode_log_data(this) + } + } + }; + /**Constructor`. +```solidity +constructor(address _gasMeter); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct constructorCall { + #[allow(missing_docs)] + pub _gasMeter: alloy::sol_types::private::Address, + } + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: constructorCall) -> Self { + (value._gasMeter,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for constructorCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _gasMeter: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolConstructor for constructorCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self._gasMeter, + ), + ) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `SEQUENCING_MODULE_STORAGE_LOCATION()` and selector `0x2407f0b6`. +```solidity +function SEQUENCING_MODULE_STORAGE_LOCATION() external view returns (bytes32); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct SEQUENCING_MODULE_STORAGE_LOCATIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`SEQUENCING_MODULE_STORAGE_LOCATION()`](SEQUENCING_MODULE_STORAGE_LOCATIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct SEQUENCING_MODULE_STORAGE_LOCATIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: SEQUENCING_MODULE_STORAGE_LOCATIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for SEQUENCING_MODULE_STORAGE_LOCATIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: SEQUENCING_MODULE_STORAGE_LOCATIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for SEQUENCING_MODULE_STORAGE_LOCATIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for SEQUENCING_MODULE_STORAGE_LOCATIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "SEQUENCING_MODULE_STORAGE_LOCATION()"; + const SELECTOR: [u8; 4] = [36u8, 7u8, 240u8, 182u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: SEQUENCING_MODULE_STORAGE_LOCATIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: SEQUENCING_MODULE_STORAGE_LOCATIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION()` and selector `0x95c5bf75`. +```solidity +function SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION() external view returns (bytes32); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION()`](SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from( + value: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn, + ) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall + for SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION()"; + const SELECTOR: [u8; 4] = [149u8, 197u8, 191u8, 117u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn = r + .into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONReturn = r + .into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `UPGRADE_INTERFACE_VERSION()` and selector `0xad3cb1cc`. +```solidity +function UPGRADE_INTERFACE_VERSION() external view returns (string memory); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UPGRADE_INTERFACE_VERSIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`UPGRADE_INTERFACE_VERSION()`](UPGRADE_INTERFACE_VERSIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct UPGRADE_INTERFACE_VERSIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::String, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UPGRADE_INTERFACE_VERSIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UPGRADE_INTERFACE_VERSIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: UPGRADE_INTERFACE_VERSIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for UPGRADE_INTERFACE_VERSIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for UPGRADE_INTERFACE_VERSIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::String; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "UPGRADE_INTERFACE_VERSION()"; + const SELECTOR: [u8; 4] = [173u8, 60u8, 177u8, 204u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: UPGRADE_INTERFACE_VERSIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: UPGRADE_INTERFACE_VERSIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `VERSION()` and selector `0xffa1ad74`. +```solidity +function VERSION() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct VERSIONCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`VERSION()`](VERSIONCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct VERSIONReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: VERSIONCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for VERSIONCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: VERSIONReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for VERSIONReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for VERSIONCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "VERSION()"; + const SELECTOR: [u8; 4] = [255u8, 161u8, 173u8, 116u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: VERSIONReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: VERSIONReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `_processTransaction(address,bytes)` and selector `0xe4a37d7a`. +```solidity +function _processTransaction(address sequencer, bytes memory data) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct _processTransactionCall { + #[allow(missing_docs)] + pub sequencer: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + ///Container type for the return parameters of the [`_processTransaction(address,bytes)`](_processTransactionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct _processTransactionReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Bytes, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From<_processTransactionCall> + for UnderlyingRustTuple<'_> { + fn from(value: _processTransactionCall) -> Self { + (value.sequencer, value.data) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for _processTransactionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + sequencer: tuple.0, + data: tuple.1, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From<_processTransactionReturn> + for UnderlyingRustTuple<'_> { + fn from(value: _processTransactionReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for _processTransactionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl _processTransactionReturn { + fn _tokenize( + &self, + ) -> <_processTransactionCall as alloy_sol_types::SolCall>::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for _processTransactionCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = _processTransactionReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "_processTransaction(address,bytes)"; + const SELECTOR: [u8; 4] = [228u8, 163u8, 125u8, 122u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.sequencer, + ), + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + _processTransactionReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `_processTransactionsBulk(address,bytes[])` and selector `0x12281983`. +```solidity +function _processTransactionsBulk(address sequencer, bytes[] memory data) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct _processTransactionsBulkCall { + #[allow(missing_docs)] + pub sequencer: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Vec, + } + ///Container type for the return parameters of the [`_processTransactionsBulk(address,bytes[])`](_processTransactionsBulkCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct _processTransactionsBulkReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Array, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Vec, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From<_processTransactionsBulkCall> + for UnderlyingRustTuple<'_> { + fn from(value: _processTransactionsBulkCall) -> Self { + (value.sequencer, value.data) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for _processTransactionsBulkCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + sequencer: tuple.0, + data: tuple.1, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From<_processTransactionsBulkReturn> + for UnderlyingRustTuple<'_> { + fn from(value: _processTransactionsBulkReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for _processTransactionsBulkReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl _processTransactionsBulkReturn { + fn _tokenize( + &self, + ) -> <_processTransactionsBulkCall as alloy_sol_types::SolCall>::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for _processTransactionsBulkCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Array, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = _processTransactionsBulkReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "_processTransactionsBulk(address,bytes[])"; + const SELECTOR: [u8; 4] = [18u8, 40u8, 25u8, 131u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.sequencer, + ), + as alloy_sol_types::SolType>::tokenize(&self.data), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + _processTransactionsBulkReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `appchainId()` and selector `0xd8781342`. +```solidity +function appchainId() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct appchainIdCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`appchainId()`](appchainIdCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct appchainIdReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: appchainIdCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for appchainIdCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: appchainIdReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for appchainIdReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for appchainIdCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "appchainId()"; + const SELECTOR: [u8; 4] = [216u8, 120u8, 19u8, 66u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: appchainIdReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: appchainIdReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `contractVersion()` and selector `0xa0a8e460`. +```solidity +function contractVersion() external pure returns (string memory); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct contractVersionCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`contractVersion()`](contractVersionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct contractVersionReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::String, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: contractVersionCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for contractVersionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: contractVersionReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for contractVersionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for contractVersionCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::String; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "contractVersion()"; + const SELECTOR: [u8; 4] = [160u8, 168u8, 228u8, 96u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: contractVersionReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: contractVersionReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `encodeTransaction(bytes)` and selector `0x85074925`. +```solidity +function encodeTransaction(bytes memory data) external pure returns (bytes memory); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct encodeTransactionCall { + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`encodeTransaction(bytes)`](encodeTransactionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct encodeTransactionReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Bytes, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: encodeTransactionCall) -> Self { + (value.data,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for encodeTransactionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { data: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: encodeTransactionReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for encodeTransactionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for encodeTransactionCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Bytes,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::Bytes; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "encodeTransaction(bytes)"; + const SELECTOR: [u8; 4] = [133u8, 7u8, 73u8, 37u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: encodeTransactionReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: encodeTransactionReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `feeCollectionEnabled()` and selector `0xcc8552e9`. +```solidity +function feeCollectionEnabled() external view returns (bool); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct feeCollectionEnabledCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`feeCollectionEnabled()`](feeCollectionEnabledCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct feeCollectionEnabledReturn { + #[allow(missing_docs)] + pub _0: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: feeCollectionEnabledCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for feeCollectionEnabledCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: feeCollectionEnabledReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for feeCollectionEnabledReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for feeCollectionEnabledCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = bool; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "feeCollectionEnabled()"; + const SELECTOR: [u8; 4] = [204u8, 133u8, 82u8, 233u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: feeCollectionEnabledReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: feeCollectionEnabledReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `gasMeter()` and selector `0x43f97ae5`. +```solidity +function gasMeter() external view returns (address); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct gasMeterCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`gasMeter()`](gasMeterCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct gasMeterReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: gasMeterCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for gasMeterCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: gasMeterReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for gasMeterReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for gasMeterCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::Address; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "gasMeter()"; + const SELECTOR: [u8; 4] = [67u8, 249u8, 122u8, 229u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: gasMeterReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: gasMeterReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `getInitializedVersion()` and selector `0xb3c65015`. +```solidity +function getInitializedVersion() external view returns (uint64); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getInitializedVersionCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`getInitializedVersion()`](getInitializedVersionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct getInitializedVersionReturn { + #[allow(missing_docs)] + pub _0: u64, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getInitializedVersionCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for getInitializedVersionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<64>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (u64,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: getInitializedVersionReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for getInitializedVersionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for getInitializedVersionCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = u64; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<64>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "getInitializedVersion()"; + const SELECTOR: [u8; 4] = [179u8, 198u8, 80u8, 21u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: getInitializedVersionReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: getInitializedVersionReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `initialize(address,address,uint256)` and selector `0x1794bb3c`. +```solidity +function initialize(address admin, address _permissionRequirementModule, uint256 _appchainId) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct initializeCall { + #[allow(missing_docs)] + pub admin: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _permissionRequirementModule: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub _appchainId: alloy::sol_types::private::primitives::aliases::U256, + } + ///Container type for the return parameters of the [`initialize(address,address,uint256)`](initializeCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct initializeReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Uint<256>, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Address, + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: initializeCall) -> Self { + (value.admin, value._permissionRequirementModule, value._appchainId) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for initializeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + admin: tuple.0, + _permissionRequirementModule: tuple.1, + _appchainId: tuple.2, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: initializeReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for initializeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl initializeReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for initializeCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Uint<256>, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = initializeReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "initialize(address,address,uint256)"; + const SELECTOR: [u8; 4] = [23u8, 148u8, 187u8, 60u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.admin, + ), + ::tokenize( + &self._permissionRequirementModule, + ), + as alloy_sol_types::SolType>::tokenize(&self._appchainId), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + initializeReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `isAllowed(address,address,bytes)` and selector `0x7a3979dc`. +```solidity +function isAllowed(address proposer, address originator, bytes memory data) external view returns (bool); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct isAllowedCall { + #[allow(missing_docs)] + pub proposer: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub originator: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`isAllowed(address,address,bytes)`](isAllowedCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct isAllowedReturn { + #[allow(missing_docs)] + pub _0: bool, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Address, + alloy::sol_types::private::Bytes, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: isAllowedCall) -> Self { + (value.proposer, value.originator, value.data) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for isAllowedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + proposer: tuple.0, + originator: tuple.1, + data: tuple.2, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (bool,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: isAllowedReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for isAllowedReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for isAllowedCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = bool; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "isAllowed(address,address,bytes)"; + const SELECTOR: [u8; 4] = [122u8, 57u8, 121u8, 220u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.proposer, + ), + ::tokenize( + &self.originator, + ), + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: isAllowedReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: isAllowedReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `maxDataSize()` and selector `0xe8eb1dc3`. +```solidity +function maxDataSize() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct maxDataSizeCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`maxDataSize()`](maxDataSizeCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct maxDataSizeReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: maxDataSizeCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for maxDataSizeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: maxDataSizeReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for maxDataSizeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for maxDataSizeCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "maxDataSize()"; + const SELECTOR: [u8; 4] = [232u8, 235u8, 29u8, 195u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: maxDataSizeReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: maxDataSizeReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `owner()` and selector `0x8da5cb5b`. +```solidity +function owner() external view returns (address); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ownerCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`owner()`](ownerCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct ownerReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ownerCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ownerCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: ownerReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for ownerReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for ownerCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::Address; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "owner()"; + const SELECTOR: [u8; 4] = [141u8, 165u8, 203u8, 91u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: ownerReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: ownerReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `permissionRequirementModule()` and selector `0x5b3cd6e2`. +```solidity +function permissionRequirementModule() external view returns (address); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct permissionRequirementModuleCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`permissionRequirementModule()`](permissionRequirementModuleCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct permissionRequirementModuleReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::Address, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: permissionRequirementModuleCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for permissionRequirementModuleCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: permissionRequirementModuleReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for permissionRequirementModuleReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for permissionRequirementModuleCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::Address; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "permissionRequirementModule()"; + const SELECTOR: [u8; 4] = [91u8, 60u8, 214u8, 226u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + ::tokenize( + ret, + ), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: permissionRequirementModuleReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: permissionRequirementModuleReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `processTransaction(bytes)` and selector `0x46e2cc09`. +```solidity +function processTransaction(bytes memory data) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processTransactionCall { + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + ///Container type for the return parameters of the [`processTransaction(bytes)`](processTransactionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processTransactionReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: processTransactionCall) -> Self { + (value.data,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for processTransactionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { data: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: processTransactionReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for processTransactionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl processTransactionReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for processTransactionCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Bytes,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = processTransactionReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "processTransaction(bytes)"; + const SELECTOR: [u8; 4] = [70u8, 226u8, 204u8, 9u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + processTransactionReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `processTransactionWithFee(bytes)` and selector `0x8c242bce`. +```solidity +function processTransactionWithFee(bytes memory data) external payable; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processTransactionWithFeeCall { + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + ///Container type for the return parameters of the [`processTransactionWithFee(bytes)`](processTransactionWithFeeCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processTransactionWithFeeReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bytes,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Bytes,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: processTransactionWithFeeCall) -> Self { + (value.data,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for processTransactionWithFeeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { data: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: processTransactionWithFeeReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for processTransactionWithFeeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl processTransactionWithFeeReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for processTransactionWithFeeCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Bytes,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = processTransactionWithFeeReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "processTransactionWithFee(bytes)"; + const SELECTOR: [u8; 4] = [140u8, 36u8, 43u8, 206u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + processTransactionWithFeeReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `processTransactionsBulk(bytes[])` and selector `0xcdafb978`. +```solidity +function processTransactionsBulk(bytes[] memory data) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processTransactionsBulkCall { + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Vec, + } + ///Container type for the return parameters of the [`processTransactionsBulk(bytes[])`](processTransactionsBulkCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processTransactionsBulkReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Array, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Vec, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: processTransactionsBulkCall) -> Self { + (value.data,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for processTransactionsBulkCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { data: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: processTransactionsBulkReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for processTransactionsBulkReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl processTransactionsBulkReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for processTransactionsBulkCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Array, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = processTransactionsBulkReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "processTransactionsBulk(bytes[])"; + const SELECTOR: [u8; 4] = [205u8, 175u8, 185u8, 120u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self.data), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + processTransactionsBulkReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `processingFee()` and selector `0xde1881a8`. +```solidity +function processingFee() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processingFeeCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`processingFee()`](processingFeeCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct processingFeeReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: processingFeeCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for processingFeeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: processingFeeReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for processingFeeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for processingFeeCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "processingFee()"; + const SELECTOR: [u8; 4] = [222u8, 24u8, 129u8, 168u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: processingFeeReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: processingFeeReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `proxiableUUID()` and selector `0x52d1902d`. +```solidity +function proxiableUUID() external view returns (bytes32); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct proxiableUUIDCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`proxiableUUID()`](proxiableUUIDCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct proxiableUUIDReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::FixedBytes<32>, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: proxiableUUIDCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for proxiableUUIDCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: proxiableUUIDReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for proxiableUUIDReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for proxiableUUIDCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::FixedBytes<32>; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "proxiableUUID()"; + const SELECTOR: [u8; 4] = [82u8, 209u8, 144u8, 45u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: proxiableUUIDReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: proxiableUUIDReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `renounceOwnership()` and selector `0x715018a6`. +```solidity +function renounceOwnership() external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct renounceOwnershipCall; + ///Container type for the return parameters of the [`renounceOwnership()`](renounceOwnershipCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct renounceOwnershipReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: renounceOwnershipCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for renounceOwnershipCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: renounceOwnershipReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for renounceOwnershipReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl renounceOwnershipReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for renounceOwnershipCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = renounceOwnershipReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "renounceOwnership()"; + const SELECTOR: [u8; 4] = [113u8, 80u8, 24u8, 166u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + renounceOwnershipReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `setProcessingFee(uint256)` and selector `0x9461446d`. +```solidity +function setProcessingFee(uint256 _fee) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct setProcessingFeeCall { + #[allow(missing_docs)] + pub _fee: alloy::sol_types::private::primitives::aliases::U256, + } + ///Container type for the return parameters of the [`setProcessingFee(uint256)`](setProcessingFeeCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct setProcessingFeeReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: setProcessingFeeCall) -> Self { + (value._fee,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for setProcessingFeeCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _fee: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: setProcessingFeeReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for setProcessingFeeReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl setProcessingFeeReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for setProcessingFeeCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = setProcessingFeeReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "setProcessingFee(uint256)"; + const SELECTOR: [u8; 4] = [148u8, 97u8, 68u8, 109u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + as alloy_sol_types::SolType>::tokenize(&self._fee), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + setProcessingFeeReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `toggleFeeCollection()` and selector `0x4513ed15`. +```solidity +function toggleFeeCollection() external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct toggleFeeCollectionCall; + ///Container type for the return parameters of the [`toggleFeeCollection()`](toggleFeeCollectionCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct toggleFeeCollectionReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: toggleFeeCollectionCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for toggleFeeCollectionCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: toggleFeeCollectionReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for toggleFeeCollectionReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl toggleFeeCollectionReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for toggleFeeCollectionCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = toggleFeeCollectionReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "toggleFeeCollection()"; + const SELECTOR: [u8; 4] = [69u8, 19u8, 237u8, 21u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + toggleFeeCollectionReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `totalFeesCollected()` and selector `0x60c6d8ae`. +```solidity +function totalFeesCollected() external view returns (uint256); +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct totalFeesCollectedCall; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + ///Container type for the return parameters of the [`totalFeesCollected()`](totalFeesCollectedCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct totalFeesCollectedReturn { + #[allow(missing_docs)] + pub _0: alloy::sol_types::private::primitives::aliases::U256, + } + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: totalFeesCollectedCall) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for totalFeesCollectedCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::primitives::aliases::U256, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: totalFeesCollectedReturn) -> Self { + (value._0,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for totalFeesCollectedReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _0: tuple.0 } + } + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for totalFeesCollectedCall { + type Parameters<'a> = (); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = alloy::sol_types::private::primitives::aliases::U256; + type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "totalFeesCollected()"; + const SELECTOR: [u8; 4] = [96u8, 198u8, 216u8, 174u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + () + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + ( + as alloy_sol_types::SolType>::tokenize(ret), + ) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(|r| { + let r: totalFeesCollectedReturn = r.into(); + r._0 + }) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(|r| { + let r: totalFeesCollectedReturn = r.into(); + r._0 + }) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `transferOwnership(address)` and selector `0xf2fde38b`. +```solidity +function transferOwnership(address newOwner) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct transferOwnershipCall { + #[allow(missing_docs)] + pub newOwner: alloy::sol_types::private::Address, + } + ///Container type for the return parameters of the [`transferOwnership(address)`](transferOwnershipCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct transferOwnershipReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: transferOwnershipCall) -> Self { + (value.newOwner,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for transferOwnershipCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { newOwner: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: transferOwnershipReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for transferOwnershipReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl transferOwnershipReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for transferOwnershipCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = transferOwnershipReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "transferOwnership(address)"; + const SELECTOR: [u8; 4] = [242u8, 253u8, 227u8, 139u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.newOwner, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + transferOwnershipReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `updateRequirementModule(address)` and selector `0xd4f0eb4d`. +```solidity +function updateRequirementModule(address _newModule) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct updateRequirementModuleCall { + #[allow(missing_docs)] + pub _newModule: alloy::sol_types::private::Address, + } + ///Container type for the return parameters of the [`updateRequirementModule(address)`](updateRequirementModuleCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct updateRequirementModuleReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: updateRequirementModuleCall) -> Self { + (value._newModule,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for updateRequirementModuleCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { _newModule: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: updateRequirementModuleReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for updateRequirementModuleReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl updateRequirementModuleReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken< + '_, + > { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for updateRequirementModuleCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = updateRequirementModuleReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "updateRequirementModule(address)"; + const SELECTOR: [u8; 4] = [212u8, 240u8, 235u8, 77u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self._newModule, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + updateRequirementModuleReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `upgradeToAndCall(address,bytes)` and selector `0x4f1ef286`. +```solidity +function upgradeToAndCall(address newImplementation, bytes memory data) external payable; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct upgradeToAndCallCall { + #[allow(missing_docs)] + pub newImplementation: alloy::sol_types::private::Address, + #[allow(missing_docs)] + pub data: alloy::sol_types::private::Bytes, + } + ///Container type for the return parameters of the [`upgradeToAndCall(address,bytes)`](upgradeToAndCallCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct upgradeToAndCallReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = ( + alloy::sol_types::private::Address, + alloy::sol_types::private::Bytes, + ); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: upgradeToAndCallCall) -> Self { + (value.newImplementation, value.data) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for upgradeToAndCallCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { + newImplementation: tuple.0, + data: tuple.1, + } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From + for UnderlyingRustTuple<'_> { + fn from(value: upgradeToAndCallReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> + for upgradeToAndCallReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl upgradeToAndCallReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for upgradeToAndCallCall { + type Parameters<'a> = ( + alloy::sol_types::sol_data::Address, + alloy::sol_types::sol_data::Bytes, + ); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = upgradeToAndCallReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "upgradeToAndCall(address,bytes)"; + const SELECTOR: [u8; 4] = [79u8, 30u8, 242u8, 134u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.newImplementation, + ), + ::tokenize( + &self.data, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + upgradeToAndCallReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Default, Debug, PartialEq, Eq, Hash)] + /**Function with signature `withdrawFees(address)` and selector `0x164e68de`. +```solidity +function withdrawFees(address recipient) external; +```*/ + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct withdrawFeesCall { + #[allow(missing_docs)] + pub recipient: alloy::sol_types::private::Address, + } + ///Container type for the return parameters of the [`withdrawFees(address)`](withdrawFeesCall) function. + #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)] + #[derive(Clone)] + pub struct withdrawFeesReturn {} + #[allow( + non_camel_case_types, + non_snake_case, + clippy::pub_underscore_fields, + clippy::style + )] + const _: () = { + use alloy::sol_types as alloy_sol_types; + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: withdrawFeesCall) -> Self { + (value.recipient,) + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for withdrawFeesCall { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self { recipient: tuple.0 } + } + } + } + { + #[doc(hidden)] + type UnderlyingSolTuple<'a> = (); + #[doc(hidden)] + type UnderlyingRustTuple<'a> = (); + #[cfg(test)] + #[allow(dead_code, unreachable_patterns)] + fn _type_assertion( + _t: alloy_sol_types::private::AssertTypeEq, + ) { + match _t { + alloy_sol_types::private::AssertTypeEq::< + ::RustType, + >(_) => {} + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From for UnderlyingRustTuple<'_> { + fn from(value: withdrawFeesReturn) -> Self { + () + } + } + #[automatically_derived] + #[doc(hidden)] + impl ::core::convert::From> for withdrawFeesReturn { + fn from(tuple: UnderlyingRustTuple<'_>) -> Self { + Self {} + } + } + } + impl withdrawFeesReturn { + fn _tokenize( + &self, + ) -> ::ReturnToken<'_> { + () + } + } + #[automatically_derived] + impl alloy_sol_types::SolCall for withdrawFeesCall { + type Parameters<'a> = (alloy::sol_types::sol_data::Address,); + type Token<'a> = as alloy_sol_types::SolType>::Token<'a>; + type Return = withdrawFeesReturn; + type ReturnTuple<'a> = (); + type ReturnToken<'a> = as alloy_sol_types::SolType>::Token<'a>; + const SIGNATURE: &'static str = "withdrawFees(address)"; + const SELECTOR: [u8; 4] = [22u8, 78u8, 104u8, 222u8]; + #[inline] + fn new<'a>( + tuple: as alloy_sol_types::SolType>::RustType, + ) -> Self { + tuple.into() + } + #[inline] + fn tokenize(&self) -> Self::Token<'_> { + ( + ::tokenize( + &self.recipient, + ), + ) + } + #[inline] + fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> { + withdrawFeesReturn::_tokenize(ret) + } + #[inline] + fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence(data) + .map(Into::into) + } + #[inline] + fn abi_decode_returns_validate( + data: &[u8], + ) -> alloy_sol_types::Result { + as alloy_sol_types::SolType>::abi_decode_sequence_validate(data) + .map(Into::into) + } + } + }; + ///Container for all the [`SyndicateSequencingChainUpgradeV2`](self) function calls. + #[derive(serde::Serialize, serde::Deserialize)] + #[derive()] + pub enum SyndicateSequencingChainUpgradeV2Calls { + #[allow(missing_docs)] + SEQUENCING_MODULE_STORAGE_LOCATION(SEQUENCING_MODULE_STORAGE_LOCATIONCall), + #[allow(missing_docs)] + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall, + ), + #[allow(missing_docs)] + UPGRADE_INTERFACE_VERSION(UPGRADE_INTERFACE_VERSIONCall), + #[allow(missing_docs)] + VERSION(VERSIONCall), + #[allow(missing_docs)] + _processTransaction(_processTransactionCall), + #[allow(missing_docs)] + _processTransactionsBulk(_processTransactionsBulkCall), + #[allow(missing_docs)] + appchainId(appchainIdCall), + #[allow(missing_docs)] + contractVersion(contractVersionCall), + #[allow(missing_docs)] + encodeTransaction(encodeTransactionCall), + #[allow(missing_docs)] + feeCollectionEnabled(feeCollectionEnabledCall), + #[allow(missing_docs)] + gasMeter(gasMeterCall), + #[allow(missing_docs)] + getInitializedVersion(getInitializedVersionCall), + #[allow(missing_docs)] + initialize(initializeCall), + #[allow(missing_docs)] + isAllowed(isAllowedCall), + #[allow(missing_docs)] + maxDataSize(maxDataSizeCall), + #[allow(missing_docs)] + owner(ownerCall), + #[allow(missing_docs)] + permissionRequirementModule(permissionRequirementModuleCall), + #[allow(missing_docs)] + processTransaction(processTransactionCall), + #[allow(missing_docs)] + processTransactionWithFee(processTransactionWithFeeCall), + #[allow(missing_docs)] + processTransactionsBulk(processTransactionsBulkCall), + #[allow(missing_docs)] + processingFee(processingFeeCall), + #[allow(missing_docs)] + proxiableUUID(proxiableUUIDCall), + #[allow(missing_docs)] + renounceOwnership(renounceOwnershipCall), + #[allow(missing_docs)] + setProcessingFee(setProcessingFeeCall), + #[allow(missing_docs)] + toggleFeeCollection(toggleFeeCollectionCall), + #[allow(missing_docs)] + totalFeesCollected(totalFeesCollectedCall), + #[allow(missing_docs)] + transferOwnership(transferOwnershipCall), + #[allow(missing_docs)] + updateRequirementModule(updateRequirementModuleCall), + #[allow(missing_docs)] + upgradeToAndCall(upgradeToAndCallCall), + #[allow(missing_docs)] + withdrawFees(withdrawFeesCall), + } + #[automatically_derived] + impl SyndicateSequencingChainUpgradeV2Calls { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 4usize]] = &[ + [18u8, 40u8, 25u8, 131u8], + [22u8, 78u8, 104u8, 222u8], + [23u8, 148u8, 187u8, 60u8], + [36u8, 7u8, 240u8, 182u8], + [67u8, 249u8, 122u8, 229u8], + [69u8, 19u8, 237u8, 21u8], + [70u8, 226u8, 204u8, 9u8], + [79u8, 30u8, 242u8, 134u8], + [82u8, 209u8, 144u8, 45u8], + [91u8, 60u8, 214u8, 226u8], + [96u8, 198u8, 216u8, 174u8], + [113u8, 80u8, 24u8, 166u8], + [122u8, 57u8, 121u8, 220u8], + [133u8, 7u8, 73u8, 37u8], + [140u8, 36u8, 43u8, 206u8], + [141u8, 165u8, 203u8, 91u8], + [148u8, 97u8, 68u8, 109u8], + [149u8, 197u8, 191u8, 117u8], + [160u8, 168u8, 228u8, 96u8], + [173u8, 60u8, 177u8, 204u8], + [179u8, 198u8, 80u8, 21u8], + [204u8, 133u8, 82u8, 233u8], + [205u8, 175u8, 185u8, 120u8], + [212u8, 240u8, 235u8, 77u8], + [216u8, 120u8, 19u8, 66u8], + [222u8, 24u8, 129u8, 168u8], + [228u8, 163u8, 125u8, 122u8], + [232u8, 235u8, 29u8, 195u8], + [242u8, 253u8, 227u8, 139u8], + [255u8, 161u8, 173u8, 116u8], + ]; + } + #[automatically_derived] + impl alloy_sol_types::SolInterface for SyndicateSequencingChainUpgradeV2Calls { + const NAME: &'static str = "SyndicateSequencingChainUpgradeV2Calls"; + const MIN_DATA_LENGTH: usize = 0usize; + const COUNT: usize = 30usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::SEQUENCING_MODULE_STORAGE_LOCATION(_) => { + ::SELECTOR + } + Self::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION(_) => { + ::SELECTOR + } + Self::UPGRADE_INTERFACE_VERSION(_) => { + ::SELECTOR + } + Self::VERSION(_) => ::SELECTOR, + Self::_processTransaction(_) => { + <_processTransactionCall as alloy_sol_types::SolCall>::SELECTOR + } + Self::_processTransactionsBulk(_) => { + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::SELECTOR + } + Self::appchainId(_) => { + ::SELECTOR + } + Self::contractVersion(_) => { + ::SELECTOR + } + Self::encodeTransaction(_) => { + ::SELECTOR + } + Self::feeCollectionEnabled(_) => { + ::SELECTOR + } + Self::gasMeter(_) => ::SELECTOR, + Self::getInitializedVersion(_) => { + ::SELECTOR + } + Self::initialize(_) => { + ::SELECTOR + } + Self::isAllowed(_) => { + ::SELECTOR + } + Self::maxDataSize(_) => { + ::SELECTOR + } + Self::owner(_) => ::SELECTOR, + Self::permissionRequirementModule(_) => { + ::SELECTOR + } + Self::processTransaction(_) => { + ::SELECTOR + } + Self::processTransactionWithFee(_) => { + ::SELECTOR + } + Self::processTransactionsBulk(_) => { + ::SELECTOR + } + Self::processingFee(_) => { + ::SELECTOR + } + Self::proxiableUUID(_) => { + ::SELECTOR + } + Self::renounceOwnership(_) => { + ::SELECTOR + } + Self::setProcessingFee(_) => { + ::SELECTOR + } + Self::toggleFeeCollection(_) => { + ::SELECTOR + } + Self::totalFeesCollected(_) => { + ::SELECTOR + } + Self::transferOwnership(_) => { + ::SELECTOR + } + Self::updateRequirementModule(_) => { + ::SELECTOR + } + Self::upgradeToAndCall(_) => { + ::SELECTOR + } + Self::withdrawFees(_) => { + ::SELECTOR + } + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn _processTransactionsBulk( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::_processTransactionsBulk, + ) + } + _processTransactionsBulk + }, + { + fn withdrawFees( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::withdrawFees) + } + withdrawFees + }, + { + fn initialize( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::initialize) + } + initialize + }, + { + fn SEQUENCING_MODULE_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::SEQUENCING_MODULE_STORAGE_LOCATION, + ) + } + SEQUENCING_MODULE_STORAGE_LOCATION + }, + { + fn gasMeter( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw(data) + .map(SyndicateSequencingChainUpgradeV2Calls::gasMeter) + } + gasMeter + }, + { + fn toggleFeeCollection( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::toggleFeeCollection, + ) + } + toggleFeeCollection + }, + { + fn processTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::processTransaction, + ) + } + processTransaction + }, + { + fn upgradeToAndCall( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::upgradeToAndCall, + ) + } + upgradeToAndCall + }, + { + fn proxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::proxiableUUID) + } + proxiableUUID + }, + { + fn permissionRequirementModule( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::permissionRequirementModule, + ) + } + permissionRequirementModule + }, + { + fn totalFeesCollected( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::totalFeesCollected, + ) + } + totalFeesCollected + }, + { + fn renounceOwnership( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::renounceOwnership, + ) + } + renounceOwnership + }, + { + fn isAllowed( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw(data) + .map(SyndicateSequencingChainUpgradeV2Calls::isAllowed) + } + isAllowed + }, + { + fn encodeTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::encodeTransaction, + ) + } + encodeTransaction + }, + { + fn processTransactionWithFee( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::processTransactionWithFee, + ) + } + processTransactionWithFee + }, + { + fn owner( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw(data) + .map(SyndicateSequencingChainUpgradeV2Calls::owner) + } + owner + }, + { + fn setProcessingFee( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::setProcessingFee, + ) + } + setProcessingFee + }, + { + fn SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION, + ) + } + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION + }, + { + fn contractVersion( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::contractVersion) + } + contractVersion + }, + { + fn UPGRADE_INTERFACE_VERSION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::UPGRADE_INTERFACE_VERSION, + ) + } + UPGRADE_INTERFACE_VERSION + }, + { + fn getInitializedVersion( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::getInitializedVersion, + ) + } + getInitializedVersion + }, + { + fn feeCollectionEnabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::feeCollectionEnabled, + ) + } + feeCollectionEnabled + }, + { + fn processTransactionsBulk( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::processTransactionsBulk, + ) + } + processTransactionsBulk + }, + { + fn updateRequirementModule( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::updateRequirementModule, + ) + } + updateRequirementModule + }, + { + fn appchainId( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::appchainId) + } + appchainId + }, + { + fn processingFee( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::processingFee) + } + processingFee + }, + { + fn _processTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + <_processTransactionCall as alloy_sol_types::SolCall>::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::_processTransaction, + ) + } + _processTransaction + }, + { + fn maxDataSize( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::maxDataSize) + } + maxDataSize + }, + { + fn transferOwnership( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::transferOwnership, + ) + } + transferOwnership + }, + { + fn VERSION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw(data) + .map(SyndicateSequencingChainUpgradeV2Calls::VERSION) + } + VERSION + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_SHIMS[idx](data) + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw_validate( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_VALIDATE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn _processTransactionsBulk( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::_processTransactionsBulk, + ) + } + _processTransactionsBulk + }, + { + fn withdrawFees( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::withdrawFees) + } + withdrawFees + }, + { + fn initialize( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::initialize) + } + initialize + }, + { + fn SEQUENCING_MODULE_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::SEQUENCING_MODULE_STORAGE_LOCATION, + ) + } + SEQUENCING_MODULE_STORAGE_LOCATION + }, + { + fn gasMeter( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::gasMeter) + } + gasMeter + }, + { + fn toggleFeeCollection( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::toggleFeeCollection, + ) + } + toggleFeeCollection + }, + { + fn processTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::processTransaction, + ) + } + processTransaction + }, + { + fn upgradeToAndCall( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::upgradeToAndCall, + ) + } + upgradeToAndCall + }, + { + fn proxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::proxiableUUID) + } + proxiableUUID + }, + { + fn permissionRequirementModule( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::permissionRequirementModule, + ) + } + permissionRequirementModule + }, + { + fn totalFeesCollected( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::totalFeesCollected, + ) + } + totalFeesCollected + }, + { + fn renounceOwnership( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::renounceOwnership, + ) + } + renounceOwnership + }, + { + fn isAllowed( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::isAllowed) + } + isAllowed + }, + { + fn encodeTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::encodeTransaction, + ) + } + encodeTransaction + }, + { + fn processTransactionWithFee( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::processTransactionWithFee, + ) + } + processTransactionWithFee + }, + { + fn owner( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::owner) + } + owner + }, + { + fn setProcessingFee( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::setProcessingFee, + ) + } + setProcessingFee + }, + { + fn SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION, + ) + } + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION + }, + { + fn contractVersion( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::contractVersion) + } + contractVersion + }, + { + fn UPGRADE_INTERFACE_VERSION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::UPGRADE_INTERFACE_VERSION, + ) + } + UPGRADE_INTERFACE_VERSION + }, + { + fn getInitializedVersion( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::getInitializedVersion, + ) + } + getInitializedVersion + }, + { + fn feeCollectionEnabled( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::feeCollectionEnabled, + ) + } + feeCollectionEnabled + }, + { + fn processTransactionsBulk( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::processTransactionsBulk, + ) + } + processTransactionsBulk + }, + { + fn updateRequirementModule( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::updateRequirementModule, + ) + } + updateRequirementModule + }, + { + fn appchainId( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::appchainId) + } + appchainId + }, + { + fn processingFee( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::processingFee) + } + processingFee + }, + { + fn _processTransaction( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + <_processTransactionCall as alloy_sol_types::SolCall>::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::_processTransaction, + ) + } + _processTransaction + }, + { + fn maxDataSize( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::maxDataSize) + } + maxDataSize + }, + { + fn transferOwnership( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Calls::transferOwnership, + ) + } + transferOwnership + }, + { + fn VERSION( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Calls, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Calls::VERSION) + } + VERSION + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_VALIDATE_SHIMS[idx](data) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::SEQUENCING_MODULE_STORAGE_LOCATION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::UPGRADE_INTERFACE_VERSION(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::VERSION(inner) => { + ::abi_encoded_size(inner) + } + Self::_processTransaction(inner) => { + <_processTransactionCall as alloy_sol_types::SolCall>::abi_encoded_size( + inner, + ) + } + Self::_processTransactionsBulk(inner) => { + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::abi_encoded_size( + inner, + ) + } + Self::appchainId(inner) => { + ::abi_encoded_size(inner) + } + Self::contractVersion(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::encodeTransaction(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::feeCollectionEnabled(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::gasMeter(inner) => { + ::abi_encoded_size(inner) + } + Self::getInitializedVersion(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::initialize(inner) => { + ::abi_encoded_size(inner) + } + Self::isAllowed(inner) => { + ::abi_encoded_size(inner) + } + Self::maxDataSize(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::owner(inner) => { + ::abi_encoded_size(inner) + } + Self::permissionRequirementModule(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::processTransaction(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::processTransactionWithFee(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::processTransactionsBulk(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::processingFee(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::proxiableUUID(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::renounceOwnership(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::setProcessingFee(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::toggleFeeCollection(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::totalFeesCollected(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::transferOwnership(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::updateRequirementModule(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::upgradeToAndCall(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::withdrawFees(inner) => { + ::abi_encoded_size( + inner, + ) + } + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::SEQUENCING_MODULE_STORAGE_LOCATION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::UPGRADE_INTERFACE_VERSION(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::VERSION(inner) => { + ::abi_encode_raw(inner, out) + } + Self::_processTransaction(inner) => { + <_processTransactionCall as alloy_sol_types::SolCall>::abi_encode_raw( + inner, + out, + ) + } + Self::_processTransactionsBulk(inner) => { + <_processTransactionsBulkCall as alloy_sol_types::SolCall>::abi_encode_raw( + inner, + out, + ) + } + Self::appchainId(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::contractVersion(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::encodeTransaction(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::feeCollectionEnabled(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::gasMeter(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::getInitializedVersion(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::initialize(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::isAllowed(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::maxDataSize(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::owner(inner) => { + ::abi_encode_raw(inner, out) + } + Self::permissionRequirementModule(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::processTransaction(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::processTransactionWithFee(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::processTransactionsBulk(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::processingFee(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::proxiableUUID(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::renounceOwnership(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::setProcessingFee(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::toggleFeeCollection(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::totalFeesCollected(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::transferOwnership(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::updateRequirementModule(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::upgradeToAndCall(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::withdrawFees(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + } + } + } + ///Container for all the [`SyndicateSequencingChainUpgradeV2`](self) custom errors. + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Debug, PartialEq, Eq, Hash)] + pub enum SyndicateSequencingChainUpgradeV2Errors { + #[allow(missing_docs)] + AddressEmptyCode(AddressEmptyCode), + #[allow(missing_docs)] + DataTooLarge(DataTooLarge), + #[allow(missing_docs)] + ERC1967InvalidImplementation(ERC1967InvalidImplementation), + #[allow(missing_docs)] + ERC1967NonPayable(ERC1967NonPayable), + #[allow(missing_docs)] + FailedCall(FailedCall), + #[allow(missing_docs)] + InvalidInitialization(InvalidInitialization), + #[allow(missing_docs)] + NoTxData(NoTxData), + #[allow(missing_docs)] + NotGasMeterContract(NotGasMeterContract), + #[allow(missing_docs)] + NotInitializing(NotInitializing), + #[allow(missing_docs)] + OwnableInvalidOwner(OwnableInvalidOwner), + #[allow(missing_docs)] + OwnableUnauthorizedAccount(OwnableUnauthorizedAccount), + #[allow(missing_docs)] + TransactionOrSenderNotAllowed(TransactionOrSenderNotAllowed), + #[allow(missing_docs)] + UUPSUnauthorizedCallContext(UUPSUnauthorizedCallContext), + #[allow(missing_docs)] + UUPSUnsupportedProxiableUUID(UUPSUnsupportedProxiableUUID), + #[allow(missing_docs)] + ZeroAddress(ZeroAddress), + } + #[automatically_derived] + impl SyndicateSequencingChainUpgradeV2Errors { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 4usize]] = &[ + [17u8, 140u8, 218u8, 167u8], + [30u8, 79u8, 189u8, 247u8], + [70u8, 52u8, 105u8, 27u8], + [76u8, 156u8, 140u8, 227u8], + [153u8, 150u8, 179u8, 21u8], + [170u8, 29u8, 73u8, 164u8], + [179u8, 152u8, 151u8, 159u8], + [214u8, 189u8, 162u8, 117u8], + [215u8, 230u8, 188u8, 248u8], + [217u8, 46u8, 35u8, 61u8], + [218u8, 249u8, 134u8, 28u8], + [220u8, 55u8, 245u8, 29u8], + [220u8, 116u8, 20u8, 88u8], + [224u8, 124u8, 141u8, 186u8], + [249u8, 46u8, 232u8, 169u8], + ]; + } + #[automatically_derived] + impl alloy_sol_types::SolInterface for SyndicateSequencingChainUpgradeV2Errors { + const NAME: &'static str = "SyndicateSequencingChainUpgradeV2Errors"; + const MIN_DATA_LENGTH: usize = 0usize; + const COUNT: usize = 15usize; + #[inline] + fn selector(&self) -> [u8; 4] { + match self { + Self::AddressEmptyCode(_) => { + ::SELECTOR + } + Self::DataTooLarge(_) => { + ::SELECTOR + } + Self::ERC1967InvalidImplementation(_) => { + ::SELECTOR + } + Self::ERC1967NonPayable(_) => { + ::SELECTOR + } + Self::FailedCall(_) => { + ::SELECTOR + } + Self::InvalidInitialization(_) => { + ::SELECTOR + } + Self::NoTxData(_) => ::SELECTOR, + Self::NotGasMeterContract(_) => { + ::SELECTOR + } + Self::NotInitializing(_) => { + ::SELECTOR + } + Self::OwnableInvalidOwner(_) => { + ::SELECTOR + } + Self::OwnableUnauthorizedAccount(_) => { + ::SELECTOR + } + Self::TransactionOrSenderNotAllowed(_) => { + ::SELECTOR + } + Self::UUPSUnauthorizedCallContext(_) => { + ::SELECTOR + } + Self::UUPSUnsupportedProxiableUUID(_) => { + ::SELECTOR + } + Self::ZeroAddress(_) => { + ::SELECTOR + } + } + } + #[inline] + fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> { + Self::SELECTORS.get(i).copied() + } + #[inline] + fn valid_selector(selector: [u8; 4]) -> bool { + Self::SELECTORS.binary_search(&selector).is_ok() + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn OwnableUnauthorizedAccount( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::OwnableUnauthorizedAccount, + ) + } + OwnableUnauthorizedAccount + }, + { + fn OwnableInvalidOwner( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::OwnableInvalidOwner, + ) + } + OwnableInvalidOwner + }, + { + fn DataTooLarge( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw(data) + .map(SyndicateSequencingChainUpgradeV2Errors::DataTooLarge) + } + DataTooLarge + }, + { + fn ERC1967InvalidImplementation( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::ERC1967InvalidImplementation, + ) + } + ERC1967InvalidImplementation + }, + { + fn AddressEmptyCode( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::AddressEmptyCode, + ) + } + AddressEmptyCode + }, + { + fn UUPSUnsupportedProxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::UUPSUnsupportedProxiableUUID, + ) + } + UUPSUnsupportedProxiableUUID + }, + { + fn ERC1967NonPayable( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::ERC1967NonPayable, + ) + } + ERC1967NonPayable + }, + { + fn FailedCall( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw(data) + .map(SyndicateSequencingChainUpgradeV2Errors::FailedCall) + } + FailedCall + }, + { + fn NotInitializing( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::NotInitializing, + ) + } + NotInitializing + }, + { + fn ZeroAddress( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw(data) + .map(SyndicateSequencingChainUpgradeV2Errors::ZeroAddress) + } + ZeroAddress + }, + { + fn NotGasMeterContract( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::NotGasMeterContract, + ) + } + NotGasMeterContract + }, + { + fn NoTxData( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw(data) + .map(SyndicateSequencingChainUpgradeV2Errors::NoTxData) + } + NoTxData + }, + { + fn TransactionOrSenderNotAllowed( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::TransactionOrSenderNotAllowed, + ) + } + TransactionOrSenderNotAllowed + }, + { + fn UUPSUnauthorizedCallContext( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::UUPSUnauthorizedCallContext, + ) + } + UUPSUnauthorizedCallContext + }, + { + fn InvalidInitialization( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::InvalidInitialization, + ) + } + InvalidInitialization + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_SHIMS[idx](data) + } + #[inline] + #[allow(non_snake_case)] + fn abi_decode_raw_validate( + selector: [u8; 4], + data: &[u8], + ) -> alloy_sol_types::Result { + static DECODE_VALIDATE_SHIMS: &[fn( + &[u8], + ) -> alloy_sol_types::Result] = &[ + { + fn OwnableUnauthorizedAccount( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::OwnableUnauthorizedAccount, + ) + } + OwnableUnauthorizedAccount + }, + { + fn OwnableInvalidOwner( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::OwnableInvalidOwner, + ) + } + OwnableInvalidOwner + }, + { + fn DataTooLarge( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Errors::DataTooLarge) + } + DataTooLarge + }, + { + fn ERC1967InvalidImplementation( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::ERC1967InvalidImplementation, + ) + } + ERC1967InvalidImplementation + }, + { + fn AddressEmptyCode( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::AddressEmptyCode, + ) + } + AddressEmptyCode + }, + { + fn UUPSUnsupportedProxiableUUID( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::UUPSUnsupportedProxiableUUID, + ) + } + UUPSUnsupportedProxiableUUID + }, + { + fn ERC1967NonPayable( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::ERC1967NonPayable, + ) + } + ERC1967NonPayable + }, + { + fn FailedCall( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Errors::FailedCall) + } + FailedCall + }, + { + fn NotInitializing( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::NotInitializing, + ) + } + NotInitializing + }, + { + fn ZeroAddress( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Errors::ZeroAddress) + } + ZeroAddress + }, + { + fn NotGasMeterContract( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::NotGasMeterContract, + ) + } + NotGasMeterContract + }, + { + fn NoTxData( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map(SyndicateSequencingChainUpgradeV2Errors::NoTxData) + } + NoTxData + }, + { + fn TransactionOrSenderNotAllowed( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::TransactionOrSenderNotAllowed, + ) + } + TransactionOrSenderNotAllowed + }, + { + fn UUPSUnauthorizedCallContext( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::UUPSUnauthorizedCallContext, + ) + } + UUPSUnauthorizedCallContext + }, + { + fn InvalidInitialization( + data: &[u8], + ) -> alloy_sol_types::Result< + SyndicateSequencingChainUpgradeV2Errors, + > { + ::abi_decode_raw_validate( + data, + ) + .map( + SyndicateSequencingChainUpgradeV2Errors::InvalidInitialization, + ) + } + InvalidInitialization + }, + ]; + let Ok(idx) = Self::SELECTORS.binary_search(&selector) else { + return Err( + alloy_sol_types::Error::unknown_selector( + ::NAME, + selector, + ), + ); + }; + DECODE_VALIDATE_SHIMS[idx](data) + } + #[inline] + fn abi_encoded_size(&self) -> usize { + match self { + Self::AddressEmptyCode(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::DataTooLarge(inner) => { + ::abi_encoded_size(inner) + } + Self::ERC1967InvalidImplementation(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ERC1967NonPayable(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::FailedCall(inner) => { + ::abi_encoded_size(inner) + } + Self::InvalidInitialization(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::NoTxData(inner) => { + ::abi_encoded_size(inner) + } + Self::NotGasMeterContract(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::NotInitializing(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::OwnableInvalidOwner(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::OwnableUnauthorizedAccount(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::TransactionOrSenderNotAllowed(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::UUPSUnauthorizedCallContext(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::UUPSUnsupportedProxiableUUID(inner) => { + ::abi_encoded_size( + inner, + ) + } + Self::ZeroAddress(inner) => { + ::abi_encoded_size(inner) + } + } + } + #[inline] + fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec) { + match self { + Self::AddressEmptyCode(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::DataTooLarge(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ERC1967InvalidImplementation(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ERC1967NonPayable(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::FailedCall(inner) => { + ::abi_encode_raw(inner, out) + } + Self::InvalidInitialization(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::NoTxData(inner) => { + ::abi_encode_raw(inner, out) + } + Self::NotGasMeterContract(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::NotInitializing(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::OwnableInvalidOwner(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::OwnableUnauthorizedAccount(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::TransactionOrSenderNotAllowed(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::UUPSUnauthorizedCallContext(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::UUPSUnsupportedProxiableUUID(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + Self::ZeroAddress(inner) => { + ::abi_encode_raw( + inner, + out, + ) + } + } + } + } + ///Container for all the [`SyndicateSequencingChainUpgradeV2`](self) events. + #[derive(serde::Serialize, serde::Deserialize)] + #[derive(Debug, PartialEq, Eq, Hash)] + pub enum SyndicateSequencingChainUpgradeV2Events { + #[allow(missing_docs)] + FeeCollected(FeeCollected), + #[allow(missing_docs)] + FeeCollectionToggled(FeeCollectionToggled), + #[allow(missing_docs)] + Initialized(Initialized), + #[allow(missing_docs)] + OwnershipTransferred(OwnershipTransferred), + #[allow(missing_docs)] + ProcessingFeeUpdated(ProcessingFeeUpdated), + #[allow(missing_docs)] + RequirementModuleUpdated(RequirementModuleUpdated), + #[allow(missing_docs)] + TransactionProcessed(TransactionProcessed), + #[allow(missing_docs)] + Upgraded(Upgraded), + } + #[automatically_derived] + impl SyndicateSequencingChainUpgradeV2Events { + /// All the selectors of this enum. + /// + /// Note that the selectors might not be in the same order as the variants. + /// No guarantees are made about the order of the selectors. + /// + /// Prefer using `SolInterface` methods instead. + pub const SELECTORS: &'static [[u8; 32usize]] = &[ + [ + 6u8, 197u8, 239u8, 239u8, 245u8, 195u8, 32u8, 148u8, 61u8, 38u8, 93u8, + 196u8, 229u8, 241u8, 175u8, 149u8, 173u8, 82u8, 53u8, 85u8, 206u8, 12u8, + 25u8, 87u8, 227u8, 103u8, 221u8, 165u8, 81u8, 69u8, 114u8, 223u8, + ], + [ + 37u8, 53u8, 128u8, 248u8, 6u8, 116u8, 28u8, 17u8, 179u8, 212u8, 170u8, + 96u8, 217u8, 202u8, 204u8, 91u8, 239u8, 12u8, 235u8, 179u8, 87u8, 72u8, + 118u8, 127u8, 226u8, 63u8, 17u8, 145u8, 110u8, 47u8, 4u8, 185u8, + ], + [ + 131u8, 54u8, 59u8, 120u8, 189u8, 251u8, 178u8, 62u8, 42u8, 97u8, 219u8, + 122u8, 204u8, 195u8, 192u8, 31u8, 218u8, 41u8, 197u8, 197u8, 236u8, + 129u8, 136u8, 128u8, 3u8, 203u8, 150u8, 41u8, 18u8, 97u8, 138u8, 127u8, + ], + [ + 139u8, 224u8, 7u8, 156u8, 83u8, 22u8, 89u8, 20u8, 19u8, 68u8, 205u8, + 31u8, 208u8, 164u8, 242u8, 132u8, 25u8, 73u8, 127u8, 151u8, 34u8, 163u8, + 218u8, 175u8, 227u8, 180u8, 24u8, 111u8, 107u8, 100u8, 87u8, 224u8, + ], + [ + 184u8, 226u8, 172u8, 161u8, 2u8, 161u8, 89u8, 127u8, 28u8, 242u8, 102u8, + 59u8, 85u8, 230u8, 238u8, 160u8, 143u8, 70u8, 144u8, 194u8, 187u8, 212u8, + 184u8, 107u8, 4u8, 211u8, 255u8, 48u8, 138u8, 101u8, 54u8, 82u8, + ], + [ + 188u8, 124u8, 215u8, 90u8, 32u8, 238u8, 39u8, 253u8, 154u8, 222u8, 186u8, + 179u8, 32u8, 65u8, 247u8, 85u8, 33u8, 77u8, 188u8, 107u8, 255u8, 169u8, + 12u8, 192u8, 34u8, 91u8, 57u8, 218u8, 46u8, 92u8, 45u8, 59u8, + ], + [ + 199u8, 245u8, 5u8, 178u8, 243u8, 113u8, 174u8, 33u8, 117u8, 238u8, 73u8, + 19u8, 244u8, 73u8, 158u8, 31u8, 38u8, 51u8, 167u8, 181u8, 147u8, 99u8, + 33u8, 238u8, 209u8, 205u8, 174u8, 182u8, 17u8, 81u8, 129u8, 210u8, + ], + [ + 214u8, 103u8, 14u8, 53u8, 83u8, 37u8, 27u8, 65u8, 130u8, 2u8, 92u8, + 186u8, 108u8, 62u8, 16u8, 90u8, 158u8, 63u8, 216u8, 144u8, 99u8, 35u8, + 40u8, 145u8, 65u8, 23u8, 128u8, 172u8, 61u8, 28u8, 39u8, 227u8, + ], + ]; + } + #[automatically_derived] + impl alloy_sol_types::SolEventInterface for SyndicateSequencingChainUpgradeV2Events { + const NAME: &'static str = "SyndicateSequencingChainUpgradeV2Events"; + const COUNT: usize = 8usize; + fn decode_raw_log( + topics: &[alloy_sol_types::Word], + data: &[u8], + ) -> alloy_sol_types::Result { + match topics.first().copied() { + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::FeeCollected) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::FeeCollectionToggled) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::Initialized) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::OwnershipTransferred) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::ProcessingFeeUpdated) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::RequirementModuleUpdated) + } + Some( + ::SIGNATURE_HASH, + ) => { + ::decode_raw_log( + topics, + data, + ) + .map(Self::TransactionProcessed) + } + Some(::SIGNATURE_HASH) => { + ::decode_raw_log(topics, data) + .map(Self::Upgraded) + } + _ => { + alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog { + name: ::NAME, + log: alloy_sol_types::private::Box::new( + alloy_sol_types::private::LogData::new_unchecked( + topics.to_vec(), + data.to_vec().into(), + ), + ), + }) + } + } + } + } + #[automatically_derived] + impl alloy_sol_types::private::IntoLogData + for SyndicateSequencingChainUpgradeV2Events { + fn to_log_data(&self) -> alloy_sol_types::private::LogData { + match self { + Self::FeeCollected(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::FeeCollectionToggled(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::Initialized(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::OwnershipTransferred(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::ProcessingFeeUpdated(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::RequirementModuleUpdated(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::TransactionProcessed(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + Self::Upgraded(inner) => { + alloy_sol_types::private::IntoLogData::to_log_data(inner) + } + } + } + fn into_log_data(self) -> alloy_sol_types::private::LogData { + match self { + Self::FeeCollected(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::FeeCollectionToggled(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::Initialized(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::OwnershipTransferred(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::ProcessingFeeUpdated(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::RequirementModuleUpdated(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::TransactionProcessed(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + Self::Upgraded(inner) => { + alloy_sol_types::private::IntoLogData::into_log_data(inner) + } + } + } + } + use alloy::contract as alloy_contract; + /**Creates a new wrapper around an on-chain [`SyndicateSequencingChainUpgradeV2`](self) contract instance. + +See the [wrapper's documentation](`SyndicateSequencingChainUpgradeV2Instance`) for more details.*/ + #[inline] + pub const fn new< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + address: alloy_sol_types::private::Address, + provider: P, + ) -> SyndicateSequencingChainUpgradeV2Instance { + SyndicateSequencingChainUpgradeV2Instance::::new(address, provider) + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub fn deploy< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + provider: P, + _gasMeter: alloy::sol_types::private::Address, + ) -> impl ::core::future::Future< + Output = alloy_contract::Result>, + > { + SyndicateSequencingChainUpgradeV2Instance::::deploy(provider, _gasMeter) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + >( + provider: P, + _gasMeter: alloy::sol_types::private::Address, + ) -> alloy_contract::RawCallBuilder { + SyndicateSequencingChainUpgradeV2Instance::< + P, + N, + >::deploy_builder(provider, _gasMeter) + } + /**A [`SyndicateSequencingChainUpgradeV2`](self) instance. + +Contains type-safe methods for interacting with an on-chain instance of the +[`SyndicateSequencingChainUpgradeV2`](self) contract located at a given `address`, using a given +provider `P`. + +If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!) +documentation on how to provide it), the `deploy` and `deploy_builder` methods can +be used to deploy a new instance of the contract. + +See the [module-level documentation](self) for all the available methods.*/ + #[derive(Clone)] + pub struct SyndicateSequencingChainUpgradeV2Instance< + P, + N = alloy_contract::private::Ethereum, + > { + address: alloy_sol_types::private::Address, + provider: P, + _network: ::core::marker::PhantomData, + } + #[automatically_derived] + impl ::core::fmt::Debug for SyndicateSequencingChainUpgradeV2Instance { + #[inline] + fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result { + f.debug_tuple("SyndicateSequencingChainUpgradeV2Instance") + .field(&self.address) + .finish() + } + } + /// Instantiation and getters/setters. + #[automatically_derived] + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > SyndicateSequencingChainUpgradeV2Instance { + /**Creates a new wrapper around an on-chain [`SyndicateSequencingChainUpgradeV2`](self) contract instance. + +See the [wrapper's documentation](`SyndicateSequencingChainUpgradeV2Instance`) for more details.*/ + #[inline] + pub const fn new( + address: alloy_sol_types::private::Address, + provider: P, + ) -> Self { + Self { + address, + provider, + _network: ::core::marker::PhantomData, + } + } + /**Deploys this contract using the given `provider` and constructor arguments, if any. + +Returns a new instance of the contract, if the deployment was successful. + +For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/ + #[inline] + pub async fn deploy( + provider: P, + _gasMeter: alloy::sol_types::private::Address, + ) -> alloy_contract::Result> { + let call_builder = Self::deploy_builder(provider, _gasMeter); + let contract_address = call_builder.deploy().await?; + Ok(Self::new(contract_address, call_builder.provider)) + } + /**Creates a `RawCallBuilder` for deploying this contract using the given `provider` +and constructor arguments, if any. + +This is a simple wrapper around creating a `RawCallBuilder` with the data set to +the bytecode concatenated with the constructor's ABI-encoded arguments.*/ + #[inline] + pub fn deploy_builder( + provider: P, + _gasMeter: alloy::sol_types::private::Address, + ) -> alloy_contract::RawCallBuilder { + alloy_contract::RawCallBuilder::new_raw_deploy( + provider, + [ + &BYTECODE[..], + &alloy_sol_types::SolConstructor::abi_encode( + &constructorCall { _gasMeter }, + )[..], + ] + .concat() + .into(), + ) + } + /// Returns a reference to the address. + #[inline] + pub const fn address(&self) -> &alloy_sol_types::private::Address { + &self.address + } + /// Sets the address. + #[inline] + pub fn set_address(&mut self, address: alloy_sol_types::private::Address) { + self.address = address; + } + /// Sets the address and returns `self`. + pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self { + self.set_address(address); + self + } + /// Returns a reference to the provider. + #[inline] + pub const fn provider(&self) -> &P { + &self.provider + } + } + impl SyndicateSequencingChainUpgradeV2Instance<&P, N> { + /// Clones the provider and returns a new instance with the cloned provider. + #[inline] + pub fn with_cloned_provider( + self, + ) -> SyndicateSequencingChainUpgradeV2Instance { + SyndicateSequencingChainUpgradeV2Instance { + address: self.address, + provider: ::core::clone::Clone::clone(&self.provider), + _network: ::core::marker::PhantomData, + } + } + } + /// Function calls. + #[automatically_derived] + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > SyndicateSequencingChainUpgradeV2Instance { + /// Creates a new call builder using this contract instance's provider and address. + /// + /// Note that the call can be any function call, not just those defined in this + /// contract. Prefer using the other methods for building type-safe contract calls. + pub fn call_builder( + &self, + call: &C, + ) -> alloy_contract::SolCallBuilder<&P, C, N> { + alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call) + } + ///Creates a new call builder for the [`SEQUENCING_MODULE_STORAGE_LOCATION`] function. + pub fn SEQUENCING_MODULE_STORAGE_LOCATION( + &self, + ) -> alloy_contract::SolCallBuilder< + &P, + SEQUENCING_MODULE_STORAGE_LOCATIONCall, + N, + > { + self.call_builder(&SEQUENCING_MODULE_STORAGE_LOCATIONCall) + } + ///Creates a new call builder for the [`SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION`] function. + pub fn SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION( + &self, + ) -> alloy_contract::SolCallBuilder< + &P, + SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall, + N, + > { + self.call_builder(&SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATIONCall) + } + ///Creates a new call builder for the [`UPGRADE_INTERFACE_VERSION`] function. + pub fn UPGRADE_INTERFACE_VERSION( + &self, + ) -> alloy_contract::SolCallBuilder<&P, UPGRADE_INTERFACE_VERSIONCall, N> { + self.call_builder(&UPGRADE_INTERFACE_VERSIONCall) + } + ///Creates a new call builder for the [`VERSION`] function. + pub fn VERSION(&self) -> alloy_contract::SolCallBuilder<&P, VERSIONCall, N> { + self.call_builder(&VERSIONCall) + } + ///Creates a new call builder for the [`_processTransaction`] function. + pub fn _processTransaction( + &self, + sequencer: alloy::sol_types::private::Address, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, _processTransactionCall, N> { + self.call_builder( + &_processTransactionCall { + sequencer, + data, + }, + ) + } + ///Creates a new call builder for the [`_processTransactionsBulk`] function. + pub fn _processTransactionsBulk( + &self, + sequencer: alloy::sol_types::private::Address, + data: alloy::sol_types::private::Vec, + ) -> alloy_contract::SolCallBuilder<&P, _processTransactionsBulkCall, N> { + self.call_builder( + &_processTransactionsBulkCall { + sequencer, + data, + }, + ) + } + ///Creates a new call builder for the [`appchainId`] function. + pub fn appchainId( + &self, + ) -> alloy_contract::SolCallBuilder<&P, appchainIdCall, N> { + self.call_builder(&appchainIdCall) + } + ///Creates a new call builder for the [`contractVersion`] function. + pub fn contractVersion( + &self, + ) -> alloy_contract::SolCallBuilder<&P, contractVersionCall, N> { + self.call_builder(&contractVersionCall) + } + ///Creates a new call builder for the [`encodeTransaction`] function. + pub fn encodeTransaction( + &self, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, encodeTransactionCall, N> { + self.call_builder(&encodeTransactionCall { data }) + } + ///Creates a new call builder for the [`feeCollectionEnabled`] function. + pub fn feeCollectionEnabled( + &self, + ) -> alloy_contract::SolCallBuilder<&P, feeCollectionEnabledCall, N> { + self.call_builder(&feeCollectionEnabledCall) + } + ///Creates a new call builder for the [`gasMeter`] function. + pub fn gasMeter(&self) -> alloy_contract::SolCallBuilder<&P, gasMeterCall, N> { + self.call_builder(&gasMeterCall) + } + ///Creates a new call builder for the [`getInitializedVersion`] function. + pub fn getInitializedVersion( + &self, + ) -> alloy_contract::SolCallBuilder<&P, getInitializedVersionCall, N> { + self.call_builder(&getInitializedVersionCall) + } + ///Creates a new call builder for the [`initialize`] function. + pub fn initialize( + &self, + admin: alloy::sol_types::private::Address, + _permissionRequirementModule: alloy::sol_types::private::Address, + _appchainId: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, initializeCall, N> { + self.call_builder( + &initializeCall { + admin, + _permissionRequirementModule, + _appchainId, + }, + ) + } + ///Creates a new call builder for the [`isAllowed`] function. + pub fn isAllowed( + &self, + proposer: alloy::sol_types::private::Address, + originator: alloy::sol_types::private::Address, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, isAllowedCall, N> { + self.call_builder( + &isAllowedCall { + proposer, + originator, + data, + }, + ) + } + ///Creates a new call builder for the [`maxDataSize`] function. + pub fn maxDataSize( + &self, + ) -> alloy_contract::SolCallBuilder<&P, maxDataSizeCall, N> { + self.call_builder(&maxDataSizeCall) + } + ///Creates a new call builder for the [`owner`] function. + pub fn owner(&self) -> alloy_contract::SolCallBuilder<&P, ownerCall, N> { + self.call_builder(&ownerCall) + } + ///Creates a new call builder for the [`permissionRequirementModule`] function. + pub fn permissionRequirementModule( + &self, + ) -> alloy_contract::SolCallBuilder<&P, permissionRequirementModuleCall, N> { + self.call_builder(&permissionRequirementModuleCall) + } + ///Creates a new call builder for the [`processTransaction`] function. + pub fn processTransaction( + &self, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, processTransactionCall, N> { + self.call_builder(&processTransactionCall { data }) + } + ///Creates a new call builder for the [`processTransactionWithFee`] function. + pub fn processTransactionWithFee( + &self, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, processTransactionWithFeeCall, N> { + self.call_builder( + &processTransactionWithFeeCall { + data, + }, + ) + } + ///Creates a new call builder for the [`processTransactionsBulk`] function. + pub fn processTransactionsBulk( + &self, + data: alloy::sol_types::private::Vec, + ) -> alloy_contract::SolCallBuilder<&P, processTransactionsBulkCall, N> { + self.call_builder( + &processTransactionsBulkCall { + data, + }, + ) + } + ///Creates a new call builder for the [`processingFee`] function. + pub fn processingFee( + &self, + ) -> alloy_contract::SolCallBuilder<&P, processingFeeCall, N> { + self.call_builder(&processingFeeCall) + } + ///Creates a new call builder for the [`proxiableUUID`] function. + pub fn proxiableUUID( + &self, + ) -> alloy_contract::SolCallBuilder<&P, proxiableUUIDCall, N> { + self.call_builder(&proxiableUUIDCall) + } + ///Creates a new call builder for the [`renounceOwnership`] function. + pub fn renounceOwnership( + &self, + ) -> alloy_contract::SolCallBuilder<&P, renounceOwnershipCall, N> { + self.call_builder(&renounceOwnershipCall) + } + ///Creates a new call builder for the [`setProcessingFee`] function. + pub fn setProcessingFee( + &self, + _fee: alloy::sol_types::private::primitives::aliases::U256, + ) -> alloy_contract::SolCallBuilder<&P, setProcessingFeeCall, N> { + self.call_builder(&setProcessingFeeCall { _fee }) + } + ///Creates a new call builder for the [`toggleFeeCollection`] function. + pub fn toggleFeeCollection( + &self, + ) -> alloy_contract::SolCallBuilder<&P, toggleFeeCollectionCall, N> { + self.call_builder(&toggleFeeCollectionCall) + } + ///Creates a new call builder for the [`totalFeesCollected`] function. + pub fn totalFeesCollected( + &self, + ) -> alloy_contract::SolCallBuilder<&P, totalFeesCollectedCall, N> { + self.call_builder(&totalFeesCollectedCall) + } + ///Creates a new call builder for the [`transferOwnership`] function. + pub fn transferOwnership( + &self, + newOwner: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, transferOwnershipCall, N> { + self.call_builder(&transferOwnershipCall { newOwner }) + } + ///Creates a new call builder for the [`updateRequirementModule`] function. + pub fn updateRequirementModule( + &self, + _newModule: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, updateRequirementModuleCall, N> { + self.call_builder( + &updateRequirementModuleCall { + _newModule, + }, + ) + } + ///Creates a new call builder for the [`upgradeToAndCall`] function. + pub fn upgradeToAndCall( + &self, + newImplementation: alloy::sol_types::private::Address, + data: alloy::sol_types::private::Bytes, + ) -> alloy_contract::SolCallBuilder<&P, upgradeToAndCallCall, N> { + self.call_builder( + &upgradeToAndCallCall { + newImplementation, + data, + }, + ) + } + ///Creates a new call builder for the [`withdrawFees`] function. + pub fn withdrawFees( + &self, + recipient: alloy::sol_types::private::Address, + ) -> alloy_contract::SolCallBuilder<&P, withdrawFeesCall, N> { + self.call_builder(&withdrawFeesCall { recipient }) + } + } + /// Event filters. + #[automatically_derived] + impl< + P: alloy_contract::private::Provider, + N: alloy_contract::private::Network, + > SyndicateSequencingChainUpgradeV2Instance { + /// Creates a new event filter using this contract instance's provider and address. + /// + /// Note that the type can be any event, not just those defined in this contract. + /// Prefer using the other methods for building type-safe event filters. + pub fn event_filter( + &self, + ) -> alloy_contract::Event<&P, E, N> { + alloy_contract::Event::new_sol(&self.provider, &self.address) + } + ///Creates a new event filter for the [`FeeCollected`] event. + pub fn FeeCollected_filter(&self) -> alloy_contract::Event<&P, FeeCollected, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`FeeCollectionToggled`] event. + pub fn FeeCollectionToggled_filter( + &self, + ) -> alloy_contract::Event<&P, FeeCollectionToggled, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`Initialized`] event. + pub fn Initialized_filter(&self) -> alloy_contract::Event<&P, Initialized, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`OwnershipTransferred`] event. + pub fn OwnershipTransferred_filter( + &self, + ) -> alloy_contract::Event<&P, OwnershipTransferred, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`ProcessingFeeUpdated`] event. + pub fn ProcessingFeeUpdated_filter( + &self, + ) -> alloy_contract::Event<&P, ProcessingFeeUpdated, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`RequirementModuleUpdated`] event. + pub fn RequirementModuleUpdated_filter( + &self, + ) -> alloy_contract::Event<&P, RequirementModuleUpdated, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`TransactionProcessed`] event. + pub fn TransactionProcessed_filter( + &self, + ) -> alloy_contract::Event<&P, TransactionProcessed, N> { + self.event_filter::() + } + ///Creates a new event filter for the [`Upgraded`] event. + pub fn Upgraded_filter(&self) -> alloy_contract::Event<&P, Upgraded, N> { + self.event_filter::() + } + } +} diff --git a/shared/src/multi_rpc_provider.rs b/shared/src/multi_rpc_provider.rs index 9a81dfad2..7b874ed70 100644 --- a/shared/src/multi_rpc_provider.rs +++ b/shared/src/multi_rpc_provider.rs @@ -41,7 +41,7 @@ use std::{ Arc, }, }; -use tracing::{debug, error, info, warn}; +use tracing::{debug, info, warn}; use url::Url; /// Multi-RPC provider that handles multiple RPC endpoints with automatic failover diff --git a/shared/test-utils/src/anvil.rs b/shared/test-utils/src/anvil.rs index f3419bf6d..25f031574 100644 --- a/shared/test-utils/src/anvil.rs +++ b/shared/test-utils/src/anvil.rs @@ -47,3 +47,9 @@ pub async fn mine_block(provider: &FilledProvider, delay: u64) -> Result<()> { .unwrap(); Ok(()) } + +/// mine a block at a specific timestamp +pub async fn mine_block_at_ts(provider: &FilledProvider, absolute_ts: u64) -> Result<()> { + provider.evm_mine(Some(MineOptions::Timestamp(Some(absolute_ts)))).await.unwrap(); + Ok(()) +} diff --git a/synd-batch-sequencer/src/batcher.rs b/synd-batch-sequencer/src/batcher.rs index c4dce72ca..d5a02aac2 100644 --- a/synd-batch-sequencer/src/batcher.rs +++ b/synd-batch-sequencer/src/batcher.rs @@ -212,7 +212,7 @@ impl Batcher { Ok(instance) => instance, Err(e) => { error!("Failed to reset sequencing contract instance: {:?}", e); - return + return; } }; diff --git a/synd-contracts/.claude/CLAUDE.md b/synd-contracts/.claude/CLAUDE.md new file mode 100644 index 000000000..96179a38e --- /dev/null +++ b/synd-contracts/.claude/CLAUDE.md @@ -0,0 +1,17 @@ +# Claude Code Preferences + +## Code Style + +- Always run `forge fmt --check` for linting +- Mappings should use descriptive variable names: `mapping(address acceptedToken => bool isAccepted) public supportedTokens;` +- No emojis in documentation, comments, or deploy scripts + +## Security + +- Always review code for vulnerabilities and security issues +- Look for common smart contract vulnerabilities (reentrancy, overflow, access control, etc.) + +## Testing + +- Update tests when refactoring contracts +- Ensure comprehensive test coverage for new functionality diff --git a/synd-contracts/.storage-layouts/ArbChainConfig.json b/synd-contracts/.storage-layouts/ArbChainConfig.json new file mode 100644 index 000000000..9e9237fb5 --- /dev/null +++ b/synd-contracts/.storage-layouts/ArbChainConfig.json @@ -0,0 +1,125 @@ +{ + "storage": [ + { + "astId": 276, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 278, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "INITIAL_APPCHAIN_OWNER", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 280, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "ARBITRUM_BRIDGE_ADDRESS", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 282, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "ARBITRUM_INBOX_ADDRESS", + "offset": 0, + "slot": "3", + "type": "t_address" + }, + { + "astId": 284, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "SEQUENCING_CONTRACT_ADDRESS", + "offset": 0, + "slot": "4", + "type": "t_address" + }, + { + "astId": 286, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "CHAIN_ID", + "offset": 0, + "slot": "5", + "type": "t_uint256" + }, + { + "astId": 288, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "SEQUENCING_CHAIN_ID", + "offset": 0, + "slot": "6", + "type": "t_uint256" + }, + { + "astId": 290, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "SETTLEMENT_DELAY", + "offset": 0, + "slot": "7", + "type": "t_uint256" + }, + { + "astId": 292, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "SETTLEMENT_START_BLOCK", + "offset": 0, + "slot": "8", + "type": "t_uint256" + }, + { + "astId": 294, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "SEQUENCING_START_BLOCK", + "offset": 0, + "slot": "9", + "type": "t_uint256" + }, + { + "astId": 296, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "DEFAULT_SEQUENCING_CHAIN_WS_RPC_URL", + "offset": 0, + "slot": "10", + "type": "t_string_storage" + }, + { + "astId": 298, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "APPCHAIN_BLOCK_EXPLORER_URL", + "offset": 0, + "slot": "11", + "type": "t_string_storage" + }, + { + "astId": 301, + "contract": "src/config/ArbChainConfig.sol:ArbChainConfig", + "label": "version", + "offset": 0, + "slot": "12", + "type": "t_string_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } +} diff --git a/synd-contracts/.storage-layouts/GasArchive.json b/synd-contracts/.storage-layouts/GasArchive.json new file mode 100644 index 000000000..127dec9fd --- /dev/null +++ b/synd-contracts/.storage-layouts/GasArchive.json @@ -0,0 +1,4 @@ +{ + "storage": [], + "types": {} +} diff --git a/synd-contracts/.storage-layouts/SyndicateFactory.json b/synd-contracts/.storage-layouts/SyndicateFactory.json new file mode 100644 index 000000000..127dec9fd --- /dev/null +++ b/synd-contracts/.storage-layouts/SyndicateFactory.json @@ -0,0 +1,4 @@ +{ + "storage": [], + "types": {} +} diff --git a/synd-contracts/.storage-layouts/SyndicateSequencingChain.json b/synd-contracts/.storage-layouts/SyndicateSequencingChain.json new file mode 100644 index 000000000..127dec9fd --- /dev/null +++ b/synd-contracts/.storage-layouts/SyndicateSequencingChain.json @@ -0,0 +1,4 @@ +{ + "storage": [], + "types": {} +} diff --git a/synd-contracts/Makefile b/synd-contracts/Makefile index 711cb262a..21112eebf 100644 --- a/synd-contracts/Makefile +++ b/synd-contracts/Makefile @@ -6,7 +6,9 @@ -include .env # deploy SyndicateFactory to Base Sepolia -deploy-syndicate-factory :; forge script script/DeployContractsForSequencingChain.s.sol:DeploySyndicateFactory --rpc-url exo --account deployer --sender ${DEV_PUB_ADDRESS} --skip-simulation --legacy --broadcast -vv +deploy-syndicate-factory :; forge script script/DeploySyndicateFactoryDeterministic.s.sol:DeploySyndicateFactoryDeterministic --rpc-url base_sepolia --account deployer --sender ${DEV_PUB_ADDRESS} --broadcast -vv + +preview-syndicate-factory :; forge script script/DeploySyndicateFactoryDeterministic.s.sol:PreviewSyndicateFactoryAddresses --rpc-url base_sepolia --account deployer --sender ${DEV_PUB_ADDRESS} --broadcast -vv # deploy DeploySyndicateSequencingChainPlusSetupWithAlwaysAllowModule to Syndicate Exo deploy-syndicate-sequencing-chain-plus-setup-with-always-allow-module :; forge script script/DeployContractsForSequencingChain.s.sol:DeploySyndicateSequencingChainPlusSetupWithAlwaysAllowModule --rpc-url exo --account deployer --sender ${DEV_PUB_ADDRESS} --skip-simulation --legacy --broadcast -vv @@ -87,5 +89,121 @@ airdrop-dry-run :; DRY_RUN=true AIRDROP_CONTRACT=${AIRDROP_CONTRACT} TOKEN_ADDRE # Execute airdrop with bash script airdrop-execute :; AIRDROP_CONTRACT=${AIRDROP_CONTRACT} TOKEN_ADDRESS=${TOKEN_ADDRESS} RPC_URL=${RPC_URL} ACCOUNT=${ACCOUNT} DEV_PUB_ADDRESS=${DEV_PUB_ADDRESS} ./script/airdrop/airdrop.sh +## Storage Layout Validation Commands + +# Simple storage layout validation for upgradeable contracts +storage-layout-check :; @echo "Validating storage layouts for upgradeable contracts..." && \ + contracts=(SyndicateFactory SyndicateSequencingChain GasArchive ArbChainConfig) && \ + mkdir -p .storage-layouts && \ + for contract in "$${contracts[@]}"; do \ + forge inspect --json "$${contract}" storageLayout > ".storage-layouts/$${contract}.temp.json"; \ + done && \ + for contract in "$${contracts[@]}"; do \ + if [ -f ".storage-layouts/$${contract}.json" ]; then \ + echo "Comparing $${contract}..."; \ + if ! cmp -s ".storage-layouts/$${contract}.json" ".storage-layouts/$${contract}.temp.json"; then \ + echo "❌ STORAGE LAYOUT CHANGED: $${contract}"; \ + echo "Baseline:"; \ + cat ".storage-layouts/$${contract}.json"; \ + echo "Current:"; \ + cat ".storage-layouts/$${contract}.temp.json"; \ + echo "This change could corrupt storage during upgrades!"; \ + exit 1; \ + else \ + echo "✅ $${contract}: Storage layout unchanged"; \ + fi; \ + else \ + echo "ℹ️ $${contract}: No contract found, skipping..."; \ + fi; \ + done && \ + rm -f .storage-layouts/*.temp.json && \ + echo "✅ All storage layouts are safe for upgrades" + +# Clean storage layout artifacts +storage-layout-clean :; rm -rf .storage-layouts out/build-info + +# Update storage layout +storage-layout-update :; @echo "Updating storage layout..." && \ + $(MAKE) storage-layout-clean && \ + mkdir -p .storage-layouts && \ + contracts=(SyndicateFactory SyndicateSequencingChain GasArchive ArbChainConfig) && \ + for contract in "$${contracts[@]}"; do \ + forge inspect --json "$${contract}" storageLayout > ".storage-layouts/$${contract}.json"; \ + done && \ + echo "✅ Storage layouts updated" + +## 🚀 Deployment & Upgrade Commands +## See docs/upgrade/README.md for detailed guide + +# Deploy SyndicateFactory (deterministic deployment) +# Also auto-deploys: GasAggregator, SyndicateSequencingChain implementation +deploy-factory :; forge script script/DeploySyndicateFactoryDeterministic.s.sol:DeploySyndicateFactoryDeterministic \ + --rpc-url ${RPC_URL} \ + --account ${ACCOUNT} \ + --sender ${DEV_PUB_ADDRESS} \ + --broadcast \ + -vv + +# Preview SyndicateFactory deployment addresses (same across all chains) +preview-factory :; forge script script/DeploySyndicateFactoryDeterministic.s.sol:PreviewSyndicateFactoryAddresses \ + --rpc-url ${RPC_URL} \ + -vv + +# Deploy ArbConfigManager (optional - only for Arbitrum settlement) +# Required env: OWNER_ADDRESS +deploy-arb-config :; forge script script/DeployArbConfigManager.s.sol:DeployArbConfigManager \ + --rpc-url ${RPC_URL} \ + --account ${ACCOUNT} \ + --sender ${DEV_PUB_ADDRESS} \ + --broadcast \ + -vv + +## 🔗 Create Sequencing Chains + +# Create a new sequencing chain via factory +# Required env: FACTORY_ADDRESS, NONCE, ADMIN_ADDRESS +# Optional env: PERMISSION_MODULE (deploys AlwaysAllowedModule if not set) +# Example: NONCE=1 make create-sequencing-chain +# Note: Chain ID is computed from nonce by the factory +create-sequencing-chain :; forge script script/upgrade/CreateSequencingChain.s.sol \ + --rpc-url ${RPC_URL} \ + --account ${ACCOUNT} \ + --sender ${DEV_PUB_ADDRESS} \ + --broadcast \ + -vv + +## ⚠️ Upgrade Commands - ALWAYS run 'make storage-layout-check' first! + +# Upgrade SyndicateFactory to new implementation +# Required env: FACTORY_ADDRESS +upgrade-factory :; @echo "⚠️ Run 'make storage-layout-check' first!" && \ + forge script script/upgrade/UpgradeContracts.s.sol:UpgradeSyndicateFactory \ + --rpc-url ${RPC_URL} \ + --account ${ACCOUNT} \ + --sender ${DEV_PUB_ADDRESS} \ + --broadcast \ + -vv + +# Upgrade SyndicateSequencingChain to new implementation +# Sets new default in factory +# Required env: CHAIN_ADDRESS, FACTORY_ADDRESS +upgrade-sequencing-chain :; @echo "⚠️ Run 'make storage-layout-check' first!" && \ + forge script script/upgrade/UpgradeSequencingChain.s.sol \ + --rpc-url ${RPC_URL} \ + --account ${ACCOUNT} \ + --sender ${DEV_PUB_ADDRESS} \ + --broadcast \ + -vv + +## Fork Testing Commands + +# Run upgrade integration tests against risa_devnet fork +test-upgrade-fork :; forge test --match-contract UpgradeFlowIntegrationTest --fork-url risa_devnet -vv + +# Run upgrade integration tests against risa_devnet fork (verbose) +test-upgrade-fork-verbose :; forge test --match-contract UpgradeFlowIntegrationTest --fork-url risa_devnet -vvvv + # Deploy emissions contracts -deploy-emissions :; forge script script/DeployStakingContracts.s.sol:DeployStakingContracts --private-key ${PRIVATE_KEY} --rpc-url eth --broadcast -vvv \ No newline at end of file +deploy-emissions :; forge script script/DeployStakingContracts.s.sol:DeployStakingContracts --private-key ${PRIVATE_KEY} --rpc-url eth --broadcast -vvv + +test-forwarder :; forge script script/TestSyndForwarder.s.sol:TestSyndForwarder --rpc-url sepolia --keystore ${ETH_KEYSTORE} --froms ${ETH_FROM} --broadcast -vvv diff --git a/synd-contracts/certora/conf/AllowlistSequencingModule.conf b/synd-contracts/certora/conf/AllowlistSequencingModule.conf index f16438750..bfdcd45db 100644 --- a/synd-contracts/certora/conf/AllowlistSequencingModule.conf +++ b/synd-contracts/certora/conf/AllowlistSequencingModule.conf @@ -9,7 +9,8 @@ "rule_sanity": "basic", "packages": [ "@arbitrum/nitro-contracts/src/=lib/nitro-contracts/src/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts" + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/" ], "msg": "Verifying AllowlistSequencingModule contract" } diff --git a/synd-contracts/certora/conf/AssertionPoster.conf b/synd-contracts/certora/conf/AssertionPoster.conf index 4406808b6..4b49c073d 100644 --- a/synd-contracts/certora/conf/AssertionPoster.conf +++ b/synd-contracts/certora/conf/AssertionPoster.conf @@ -11,7 +11,8 @@ "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts", "@arbitrum/nitro-contracts/src/=lib/nitro-contracts/src/", "@offchainlabs/upgrade-executor/src/=lib/upgrade-executor/src/", - "@eigenda/contracts/=lib/eigenda-contracts/" + "@eigenda/contracts/=lib/eigenda-contracts/", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/" ], "msg": "Verifying AssertionPoster contract" } \ No newline at end of file diff --git a/synd-contracts/certora/conf/AtomicSequencer.conf b/synd-contracts/certora/conf/AtomicSequencer.conf index 9468cbfa4..b8b881cf0 100644 --- a/synd-contracts/certora/conf/AtomicSequencer.conf +++ b/synd-contracts/certora/conf/AtomicSequencer.conf @@ -9,7 +9,8 @@ "rule_sanity": "basic", "packages": [ "@arbitrum/nitro-contracts/src/=lib/nitro-contracts/src/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts" + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/" ], "msg": "Verifying AtomicSequencer contract" } diff --git a/synd-contracts/certora/conf/AtomicSequencerImplementation.conf b/synd-contracts/certora/conf/AtomicSequencerImplementation.conf index 91e0df340..b5833f9db 100644 --- a/synd-contracts/certora/conf/AtomicSequencerImplementation.conf +++ b/synd-contracts/certora/conf/AtomicSequencerImplementation.conf @@ -10,7 +10,8 @@ "rule_sanity": "basic", "packages": [ "@arbitrum/nitro-contracts/src/=lib/nitro-contracts/src/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts" + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/" ], "msg": "Verifying AtomicSequencerImplementation contract" } diff --git a/synd-contracts/certora/conf/RequireAndModule.conf b/synd-contracts/certora/conf/RequireAndModule.conf index 3eeee8003..9fcb229dc 100644 --- a/synd-contracts/certora/conf/RequireAndModule.conf +++ b/synd-contracts/certora/conf/RequireAndModule.conf @@ -9,7 +9,8 @@ "rule_sanity": "basic", "packages": [ "@arbitrum/nitro-contracts/src/=lib/nitro-contracts/src/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts" + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/" ], "msg": "Verifying RequireAndModule contract" } diff --git a/synd-contracts/certora/conf/RequireOrModule.conf b/synd-contracts/certora/conf/RequireOrModule.conf index 7f89f9d45..e8cc155cc 100644 --- a/synd-contracts/certora/conf/RequireOrModule.conf +++ b/synd-contracts/certora/conf/RequireOrModule.conf @@ -9,7 +9,8 @@ "rule_sanity": "basic", "packages": [ "@arbitrum/nitro-contracts/src/=lib/nitro-contracts/src/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts" + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/" ], "msg": "Verifying RequireOrModule contract" } diff --git a/synd-contracts/certora/conf/SyndicateSequencingChain.conf b/synd-contracts/certora/conf/SyndicateSequencingChain.conf index 850d94f7e..5f6245d31 100644 --- a/synd-contracts/certora/conf/SyndicateSequencingChain.conf +++ b/synd-contracts/certora/conf/SyndicateSequencingChain.conf @@ -4,7 +4,7 @@ "certora/specs/helpers/PermissionModuleBasic.sol", "certora/specs/helpers/ArbSys.sol" ], - "link": [ + "struct_link": [ "SyndicateSequencingChain:permissionRequirementModule=PermissionModuleBasic" ], "address": [ @@ -17,7 +17,8 @@ "rule_sanity": "basic", "packages": [ "@arbitrum/nitro-contracts/src/=lib/nitro-contracts/src/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts" + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/" ], "verify": "SyndicateSequencingChain:certora/specs/SyndicateSequencingChain.spec", "msg": "Verifying SyndicateSequencingChain contract", diff --git a/synd-contracts/certora/conf/TestnetSyndToken.conf b/synd-contracts/certora/conf/TestnetSyndToken.conf index e0661ed52..59beed978 100644 --- a/synd-contracts/certora/conf/TestnetSyndToken.conf +++ b/synd-contracts/certora/conf/TestnetSyndToken.conf @@ -9,7 +9,8 @@ "loop_iter": "3", "packages": [ "@arbitrum/nitro-contracts/src/=lib/nitro-contracts/src/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts" + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/" ], "msg": "Verifying TestnetSyndToken contract" } diff --git a/synd-contracts/certora/conf/WalletPoolWrapperModule.conf b/synd-contracts/certora/conf/WalletPoolWrapperModule.conf index bf157dacc..72c08c30e 100644 --- a/synd-contracts/certora/conf/WalletPoolWrapperModule.conf +++ b/synd-contracts/certora/conf/WalletPoolWrapperModule.conf @@ -10,7 +10,8 @@ "rule_sanity": "basic", "packages": [ "@arbitrum/nitro-contracts/src/=lib/nitro-contracts/src/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts" + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/" ], "msg": "Verifying WalletPoolWrapperModule contract" } diff --git a/synd-contracts/certora/specs/SyndicateSequencingChain.spec b/synd-contracts/certora/specs/SyndicateSequencingChain.spec index bf09e667d..6cd83a256 100644 --- a/synd-contracts/certora/specs/SyndicateSequencingChain.spec +++ b/synd-contracts/certora/specs/SyndicateSequencingChain.spec @@ -6,115 +6,179 @@ methods { function permissionRequirementModule() external returns (address) envfree; function isAllowed(address, address, bytes) external returns (bool) envfree; function owner() external returns (address) envfree; - function gasTrackingDisabled() external returns (bool) envfree; + function getInitializedVersion() external returns (uint64) envfree; function encodeTransaction(bytes) external returns (bytes) envfree; - + function gasMeter() external returns (address) envfree; // Permission module envfree view functions function permissionModule.isAllowed(address, address, bytes) external returns (bool) envfree; + function permissionModule.setAllowed(address, bool) external; } /* - * Rule 1: Verify that appchainId cannot be zero + * Rule: Initialization rules */ -invariant appchainIdNotZero() - appchainId() != 0; +rule initializeOnce(address admin, address module, uint256 appchainId) { + env e; + require admin != 0; + require appchainId != 0; + require e.msg.sender != currentContract; + // First initialization + initialize@withrevert(e, admin, module, appchainId); + bool firstInit = !lastReverted; + // Try to initialize again + initialize@withrevert(e, admin, module, appchainId); + assert firstInit => lastReverted, "Contract initialized more than once"; +} /* - * Rule 2: Only allowed addresses can process transactions + * Rule: Initialization sets correct values */ -rule onlyAllowedCanProcess(bytes data) { +rule initializationCorrect(address admin, address module, uint256 appchainId) { env e; + require admin != 0; + require appchainId != 0; + require e.msg.sender != currentContract; + initialize(e, admin, module, appchainId); + assert permissionRequirementModule() == module, "Permission module not set correctly"; + assert owner() == admin, "Admin not set correctly"; + assert appchainId() == appchainId, "AppchainId not set correctly"; +} - // Try to process a transaction - processTransaction@withrevert(e, data); +/* + * Rule: AppchainId is set correctly after initialization + */ +rule appchainIdSetAfterInit(address admin, address module, uint256 chainId) { + env e; + require admin != 0; + require chainId != 0; + require e.msg.sender != currentContract; + // Before initialization, appchainId should be 0 + require getInitializedVersion() == 0; + require appchainId() == 0; + // Initialize the contract + initialize(e, admin, module, chainId); + // After initialization, appchainId should be set to the provided value + assert appchainId() == chainId, "AppchainId not set correctly after initialization"; + assert appchainId() != 0, "AppchainId should not be zero after initialization"; +} - // If the transaction succeeded +/* + * Rule: Only allowed addresses can process transactions + */ +rule onlyAllowedCanProcess(address sequencer, bytes data) { + env e; + require getInitializedVersion() > 0; + require data.length > 0; + require data.length <= 1024; + require e.msg.value == 0; + require e.msg.sender == gasMeter(); + // Use address(1) as permission module to allow all transactions + require permissionRequirementModule() == 1; + // Try to process a transaction + _processTransaction@withrevert(e, sequencer, data); + // With no permission module, all transactions should succeed bool success = !lastReverted; + assert success, "Transaction failed with no permission restrictions"; +} - // Then the sender must have been allowed - assert success => isAllowed(e.msg.sender, e.msg.sender, encodeTransaction(data)), - "Unauthorized sender processed transaction"; +/* + * Rule: Test bulk processing with no permission restrictions + */ +rule processConsistencyNoPermissions(address sequencer, bytes data) { + env e; + require getInitializedVersion() > 0; + require data.length > 0; + require data.length <= 1024; + require e.msg.value == 0; + require e.msg.sender == gasMeter(); + // Use address(1) as permission module (allows all) + require permissionRequirementModule() == 1; + // Record both outcomes + _processTransaction@withrevert(e, sequencer, data); + bool txSuccess = !lastReverted; + _processTransactionsBulk@withrevert(e, sequencer, [data]); + bool bulkSuccess = !lastReverted; + // With no permissions, both should succeed + assert txSuccess, "_processTransaction failed with no permissions"; + assert bulkSuccess, "_processTransactionsBulk should not revert"; } /* - * Rule 3: Only owner can update requirement module + * Rule: Test that permission module address matters */ -rule onlyOwnerCanUpdateModule(address newModule) { +rule permissionModuleRequired(address sequencer, bytes data) { env e; + require getInitializedVersion() > 0; + require data.length > 0; + require data.length <= 1024; require e.msg.value == 0; + require e.msg.sender == gasMeter(); + // Compare behavior with and without permission module + // First test with address(1) permission module (allows all) + require permissionRequirementModule() == 1; + _processTransaction@withrevert(e, sequencer, data); + bool successNoPermissions = !lastReverted; + // This should succeed since no permissions are required + assert successNoPermissions, "Transaction failed with no permission module"; +} +/* + * Rule: Only owner can update requirement module + */ +rule onlyOwnerCanUpdateModule(address newModule) { + env e; + require getInitializedVersion() > 0; // Try to update the module updateRequirementModule@withrevert(e, newModule); - bool txSucceeded = !lastReverted; - - // Bidirectional assertions - assert txSucceeded => e.msg.sender == owner(), - "Non-owner updated requirement module"; - assert !txSucceeded => e.msg.sender != owner(), - "Owner failed to update requirement module"; + // If successful, must have been owner + assert !lastReverted => e.msg.sender == owner(), "Non-owner updated requirement module"; } /* - * Rule 4: Module update changes state correctly + * Rule: Module update changes state correctly */ rule moduleUpdateChangesState(address newModule) { env e; + require getInitializedVersion() > 0; require newModule != 0; - // Store old module address oldProposerModule = permissionRequirementModule(); - // Update module updateRequirementModule@withrevert(e, newModule); - // If successful, module should be updated - assert !lastReverted => permissionRequirementModule() == newModule, - "Proposer module not updated correctly"; + assert !lastReverted => permissionRequirementModule() == newModule, "Proposer module not updated correctly"; } /* - * Rule 5: State consistency after transaction processing + * Rule: State consistency after transaction processing */ -rule stateConsistencyAfterProcessing(bytes data) { +rule stateConsistencyAfterProcessing(address sequencer, bytes data) { env e; + require getInitializedVersion() > 0; + require e.msg.sender == gasMeter(); address oldProposerModule = permissionRequirementModule(); - // Process transaction - processTransaction@withrevert(e, data); - + _processTransaction@withrevert(e, sequencer, data); // Verify requirement modules haven't changed - assert permissionRequirementModule() == oldProposerModule, - "Transaction processing modified proposer module state"; + assert permissionRequirementModule() == oldProposerModule, "Transaction processing modified proposer module state"; } /* - * Rule 6: Verify permissions are correctly enforced + * Rule : Only owner can perform upgrades */ -rule permissionsCorrectlyEnforced(bytes data) { +rule onlyOwnerCanUpgrade(address newImplementation, bytes data) { env e; - - // Require the contract to be initialized - require permissionRequirementModule() == permissionModule; - require owner() == e.msg.sender; - - // Valid sender and msg parameters - require e.block.timestamp >= 1754089200; - require e.msg.value == 0; - - // Valid data requirements - require data.length > 0; - require data.length < max_uint256; - - // Check permissions - bool senderAllowed = isAllowed(e.msg.sender, e.msg.sender, encodeTransaction(data)); - - // Process transaction - processTransaction@withrevert(e, data); - bool txSucceeded = !lastReverted; - - // Bidirectional assertions - assert txSucceeded => senderAllowed, - "Transaction succeeded with unauthorized sender"; - assert senderAllowed => txSucceeded, - "Transaction failed despite permissions being valid and preconditions met"; + require getInitializedVersion() > 0; + require newImplementation != 0; + require e.msg.value == 0; // No ETH should be sent + require newImplementation != currentContract; // Can't upgrade to self + + // Get owner before upgrade attempt + address contractOwner = owner(); + require contractOwner != 0; // Owner should be set + + // Try to upgrade + upgradeToAndCall@withrevert(e, newImplementation, data); + // If successful, must have been owner + assert !lastReverted => e.msg.sender == contractOwner, "Non-owner performed upgrade"; } diff --git a/synd-contracts/foundry.toml b/synd-contracts/foundry.toml index af7571231..f9c0e55ff 100644 --- a/synd-contracts/foundry.toml +++ b/synd-contracts/foundry.toml @@ -13,14 +13,18 @@ out = "out" src = "src" via_ir = true +[lint] +lint_on_build = false + + [rpc_endpoints] -base_sepolia = "https://sepolia.base.org" -exo = "${EXO_RPC_URL}" -holesky = "https://ethereum-holesky-rpc.publicnode.com" -localhost = "http://localhost:8545" -mainnet = "${ETH_MAINNET_RPC_URL}" -risa_devnet = "${RISA_DEVNET_RPC_URL}" -sepolia = "https://ethereum-sepolia-rpc.publicnode.com" +base_sepolia = "https://sepolia.base.org" +exo = "${EXO_RPC_URL}" +holesky = "https://ethereum-holesky-rpc.publicnode.com" +localhost = "http://localhost:8545" +mainnet = "${ETH_MAINNET_RPC_URL}" +risa_devnet = "https://risa-testnet.g.alchemy.com/public" +sepolia = "https://ethereum-sepolia-rpc.publicnode.com" syndicate_frame = "https://rpc-frame.syndicate.io" # See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options diff --git a/synd-contracts/script/DeployContractsForSequencingChain.s.sol b/synd-contracts/script/DeployContractsForSequencingChain.s.sol deleted file mode 100644 index 1e5d2bb62..000000000 --- a/synd-contracts/script/DeployContractsForSequencingChain.s.sol +++ /dev/null @@ -1,87 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.28; - -import {Script, console} from "forge-std/Script.sol"; - -import {SyndicateSequencingChain} from "src/SyndicateSequencingChain.sol"; -import {RequireAndModule} from "src/requirement-modules/RequireAndModule.sol"; -import {AlwaysAllowedModule} from "src/sequencing-modules/AlwaysAllowedModule.sol"; -import {SyndicateFactory} from "src/factory/SyndicateFactory.sol"; -import {RequireAndModuleFactory} from "src/factory/PermissionModuleFactories.sol"; -import {IRequirementModule} from "src/interfaces/IRequirementModule.sol"; - -contract DeploySyndicateFactory is Script { - SyndicateFactory public syndicateFactory; - RequireAndModuleFactory public requireAndModuleFactory; - uint256 public appchainId; - - function run() public { - vm.startBroadcast(); - - appchainId = 0; // TODO: Set the App chain ID - - // syndicate admin and manager - address admin = vm.envOr("ADMIN_ADDR", msg.sender); - - syndicateFactory = new SyndicateFactory(admin); - console.log("Deployed SyndicateFactory", address(syndicateFactory)); - requireAndModuleFactory = new RequireAndModuleFactory(admin); - console.log("Deployed RequireAndModuleFactory", address(requireAndModuleFactory)); - - bytes32 salt = bytes32(appchainId); - - address module = requireAndModuleFactory.createRequireAndModule(admin, salt); - console.log("Deployed RequireAndModule", module); - - // create SyndicateSequencingChain with the permission module - (address sequencingChain, uint256 chainId) = syndicateFactory.createSyndicateSequencingChain( - 0, // auto-increment - admin, - IRequirementModule(module), - salt - ); - - console.log("Deployed SyndicateSequencingChain", sequencingChain); - console.log("Deployed RequireAndModule", address(module)); - console.log("Sequencing Chain ID", chainId); - - vm.stopBroadcast(); - } -} - -contract DeploySyndicateSequencingChainPlusSetupWithAlwaysAllowModule is Script { - SyndicateSequencingChain public sequencingChain; - RequireAndModule public permissionModule; - uint256 public appchainId; - - function run() public { - vm.startBroadcast(); - - appchainId = 0; // TODO: Set the App chain ID - address admin = vm.envOr("ADMIN_ADDR", msg.sender); - - // Deploy permission module first - permissionModule = new RequireAndModule(admin); - console.log("Deployed RequireAndModule", address(permissionModule)); - - // Deploy sequencer with permission module - sequencingChain = new SyndicateSequencingChain(appchainId); - - // Set sequencing module - sequencingChain.updateRequirementModule(address(permissionModule)); - - // Transfer ownership - sequencingChain.transferOwnership(admin); - - console.log("Deployed SyndicateSequencingChain", address(sequencingChain)); - - // Deploy and add always allowed module - AlwaysAllowedModule alwaysAllowedModule = new AlwaysAllowedModule(); - console.log("Deployed AlwaysAllowedModule", address(alwaysAllowedModule)); - - permissionModule.addPermissionCheck(address(alwaysAllowedModule), true); - console.log("Added alwaysAllowedModule to permission checks", address(alwaysAllowedModule)); - - vm.stopBroadcast(); - } -} diff --git a/synd-contracts/script/DeployMinDependenciesForAppchain.s.sol b/synd-contracts/script/DeployMinDependenciesForAppchain.s.sol index 524cae855..be44ea80c 100644 --- a/synd-contracts/script/DeployMinDependenciesForAppchain.s.sol +++ b/synd-contracts/script/DeployMinDependenciesForAppchain.s.sol @@ -3,44 +3,11 @@ pragma solidity 0.8.28; import {Script} from "forge-std/Script.sol"; -import {RequireAndModuleFactory} from "src/factory/PermissionModuleFactories.sol"; -import {RequireOrModuleFactory} from "src/factory/PermissionModuleFactories.sol"; -import {RequireCompositeModuleFactory} from "src/factory/PermissionModuleFactories.sol"; -import {SyndicateFactory} from "src/factory/SyndicateFactory.sol"; -import {SyndicateFactoryWrapper} from "src/factory/SyndicateFactoryWrapper.sol"; - import {ArbConfigManagerFactory} from "src/config/ArbConfigManagerFactory.sol"; import {ArbConfigManager} from "src/config/ArbConfigManager.sol"; import {console} from "forge-std/console.sol"; -contract DeployMinRequiredSequencingChain is Script { - function run() public { - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - vm.startBroadcast(deployerPrivateKey); - address admin = vm.envAddress("ADMIN_ADDR"); - - RequireAndModuleFactory requireAndModuleFactory = new RequireAndModuleFactory(admin); - console.log("requireAndModuleFactory", address(requireAndModuleFactory)); - - RequireOrModuleFactory requireOrModuleFactory = new RequireOrModuleFactory(admin); - console.log("requireOrModuleFactory", address(requireOrModuleFactory)); - - RequireCompositeModuleFactory requireCompositeModuleFactory = new RequireCompositeModuleFactory(admin); - console.log("requireCompositeModuleFactory", address(requireCompositeModuleFactory)); - - SyndicateFactory syndicateFactory = new SyndicateFactory(admin); - console.log("syndicateFactory", address(syndicateFactory)); - - SyndicateFactoryWrapper syndicateFactoryWrapper = new SyndicateFactoryWrapper( - admin, address(syndicateFactory), address(requireAndModuleFactory), address(requireOrModuleFactory) - ); - console.log("syndicateFactoryWrapper", address(syndicateFactoryWrapper)); - - vm.stopBroadcast(); - } -} - contract DeployMinRequiredSettlementChain is Script { function run() public { uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); diff --git a/synd-contracts/script/DeploySyndicateFactory.s.sol b/synd-contracts/script/DeploySyndicateFactory.s.sol deleted file mode 100644 index 402569f4b..000000000 --- a/synd-contracts/script/DeploySyndicateFactory.s.sol +++ /dev/null @@ -1,53 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.28; - -import {Script} from "forge-std/Script.sol"; -import {console2} from "forge-std/console2.sol"; -import {Create2} from "@openzeppelin/contracts/utils/Create2.sol"; -import {SyndicateFactory} from "src/factory/SyndicateFactory.sol"; - -/** - * @title DeploySyndicateFactoryDirect - * @notice Forge script to deploy SyndicateFactory directly using CREATE2 - * @dev Alternative approach that doesn't require a separate deployer contract - */ -contract DeploySyndicateFactoryDirect is Script { - function run() public { - // The fixed salt for CREATE2 deployment - bytes32 factorySalt = keccak256("SYNDICATE_FACTORY_v1"); - - // MUST use the same private key (resulting in the same deployer address) across all chains - uint256 privateKey = vm.envUint("DEPLOYER_PRIVATE_KEY"); - address deployer = vm.addr(privateKey); - - // Get the bytecode for the factory with constructor arguments - bytes memory bytecode = abi.encodePacked( - type(SyndicateFactory).creationCode, - abi.encode(deployer) // admin = deployer - ); - bytes32 bytecodeHash = keccak256(bytecode); - - // Calculate the expected address - address expectedAddress = Create2.computeAddress(factorySalt, bytecodeHash, deployer); - console2.log("Expected SyndicateFactory address:", expectedAddress); - - // Start broadcasting transactions - vm.startBroadcast(privateKey); - - // Deploy using CREATE2 - address factoryAddress; - assembly { - factoryAddress := create2(0, add(bytecode, 0x20), mload(bytecode), factorySalt) - if iszero(factoryAddress) { - mstore(0x00, "Deployment failed") - revert(0x00, 0x20) - } - } - - console2.log("SyndicateFactory deployed to:", factoryAddress); - console2.log("Deployment successful:", factoryAddress == expectedAddress ? "Yes" : "No"); - - // Stop broadcasting transactions - vm.stopBroadcast(); - } -} diff --git a/synd-contracts/script/TestSyndForwarder.s.sol b/synd-contracts/script/TestSyndForwarder.s.sol new file mode 100644 index 000000000..89cea5ddf --- /dev/null +++ b/synd-contracts/script/TestSyndForwarder.s.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.28; + +import {Script} from "forge-std/Script.sol"; +import {console2} from "forge-std/console2.sol"; +import {SyndForwarder} from "src/deployment/SyndForwarder.sol"; + +interface IOptimismPortal { + function depositTransaction(address _to, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes memory _data) + external; +} + +contract TestSyndForwarder is Script { + address public stub = address(0x920487DB398Be410Eda65D1A33e826A0453C0814); + address public optimismPortal = address(0x49f53e41452C74589E85cA1677426Ba426459e85); + + uint256 public gasLimit = 500000; + + SyndForwarder public forwarder = SyndForwarder(0x2E38D75B496B201532580D96c848786aE9692368); + + function run() public { + vm.startBroadcast(); + + address deployedContract = forwarder.deploy(bytes32(uint256(1)), stub, ""); + console2.log("Deployed contract on chain 1 to:", deployedContract); + + forwarder.call( + address(optimismPortal), + abi.encodeWithSelector( + IOptimismPortal.depositTransaction.selector, + address(forwarder), + 0, + gasLimit, + false, + abi.encodeWithSelector(SyndForwarder.deploy.selector, bytes32(uint256(1)), stub, "") + ) + ); + console2.log("Confirm the txn succeeded on chain 2 and the contract is deployed at:", deployedContract); + + vm.stopBroadcast(); + } +} diff --git a/synd-contracts/script/upgrade/UpgradeSequencingChain.s.sol b/synd-contracts/script/upgrade/UpgradeSequencingChain.s.sol new file mode 100644 index 000000000..33cbe9eab --- /dev/null +++ b/synd-contracts/script/upgrade/UpgradeSequencingChain.s.sol @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +import {Script} from "forge-std/Script.sol"; +import {console2} from "forge-std/console2.sol"; +import {SyndicateSequencingChain} from "src/SyndicateSequencingChain.sol"; +import {GasMeter} from "src/staking/GasMeter.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; + +/** + * @title UpgradeSequencingChain + * @notice Upgrades a SyndicateSequencingChain to a new implementation + * + * @dev This script performs three actions: + * 1. Deploys new SyndicateSequencingChain implementation + * 2. Sets it as default in factory (for future chains) + * 3. Upgrades the specific chain proxy + * + * @dev Environment Variables Required: + * - CHAIN_ADDRESS: Address of SyndicateSequencingChain proxy to upgrade + * - FACTORY_ADDRESS: Address of SyndicateFactory + * + * @dev Usage: + * make upgrade-sequencing-chain + * or + * forge script script/upgrade/UpgradeSequencingChain.s.sol \ + * --rpc-url $RPC_URL --broadcast --env-file .env + * + * @dev IMPORTANT: Always run storage layout validation before upgrading: + * make storage-layout-check + * + * @dev Note: Setting new default implementation in factory requires DEFAULT_ADMIN_ROLE + */ +contract UpgradeSequencingChain is Script { + function run() external { + address chainAddress = vm.envAddress("CHAIN_ADDRESS"); + address factoryAddress = vm.envAddress("FACTORY_ADDRESS"); + + console2.log("=== Upgrading SyndicateSequencingChain ==="); + console2.log("Chain proxy:", chainAddress); + console2.log("Factory:", factoryAddress); + console2.log(""); + + vm.startBroadcast(); + + // Deploy GasMeter + GasMeter gasMeterImpl = new GasMeter(); + address gasMeter = address(new ERC1967Proxy(address(gasMeterImpl), abi.encodeCall(GasMeter.initialize, ()))); + + // Deploy new implementation + console2.log("Deploying new implementation..."); + SyndicateSequencingChain newImplementation = new SyndicateSequencingChain(gasMeter); + console2.log("New implementation:", address(newImplementation)); + console2.log(""); + + // Upgrade the specific chain + console2.log("Upgrading chain proxy..."); + SyndicateSequencingChain chain = SyndicateSequencingChain(chainAddress); + chain.upgradeToAndCall(address(newImplementation), ""); + + vm.stopBroadcast(); + + // Verify upgrade + uint256 version = chain.VERSION(); + console2.log("=== Upgrade Complete ==="); + console2.log("Chain proxy:", chainAddress); + console2.log("Implementation:", address(newImplementation)); + console2.log("Version:", version); + console2.log(""); + console2.log("New chains created via factory will use this implementation"); + } +} diff --git a/synd-contracts/scripts/check-uups-storage.sh b/synd-contracts/scripts/check-uups-storage.sh new file mode 100755 index 000000000..a5b5f442e --- /dev/null +++ b/synd-contracts/scripts/check-uups-storage.sh @@ -0,0 +1,84 @@ +#!/bin/bash +# Script to check that UUPS upgradeable contracts have empty storage layouts +# This ensures all storage is in ERC-7201 namespaced storage slots + +set -e + +# UUPS Upgradeable contracts that should have empty storage +UUPS_CONTRACTS=( + "SyndicateSequencingChain" + "GasArchive" +) + +echo "================================================" +echo "UUPS Storage Layout Validation" +echo "================================================" +echo "" +echo "Checking that UUPS contracts use only namespaced storage..." +echo "" + +FAILED=0 +PASSED=0 + +for contract in "${UUPS_CONTRACTS[@]}"; do + echo "Checking $contract..." + + # Get storage layout + STORAGE_OUTPUT=$(forge inspect "$contract" storageLayout 2>&1 || true) + + if echo "$STORAGE_OUTPUT" | grep -q "Error"; then + echo "✗ FAILED: Could not inspect $contract" + echo "$STORAGE_OUTPUT" + FAILED=$((FAILED + 1)) + continue + fi + + # Check if storage layout is empty (should only have the table header) + # An empty storage layout will have a table with no data rows + STORAGE_COUNT=$(echo "$STORAGE_OUTPUT" | grep -E "^\|" | grep -v "^\+=" | grep -v "Name.*Type.*Slot" | grep -v "^+-" | wc -l | tr -d ' ') + + if [ "$STORAGE_COUNT" -eq "0" ]; then + echo "✓ PASSED: $contract has empty storage (uses namespaced storage)" + PASSED=$((PASSED + 1)) + else + echo "✗ FAILED: $contract has non-empty storage layout" + echo "" + echo "Storage layout:" + echo "$STORAGE_OUTPUT" + echo "" + echo "UUPS upgradeable contracts MUST use ERC-7201 namespaced storage." + echo "See SyndicateSequencingChain.sol for an example of correct implementation." + echo "" + FAILED=$((FAILED + 1)) + fi + echo "" +done + +echo "================================================" +echo "Results:" +echo " Passed: $PASSED" +echo " Failed: $FAILED" +echo "================================================" + +if [ $FAILED -gt 0 ]; then + echo "" + echo "Storage validation FAILED!" + echo "" + echo "All UUPS upgradeable contracts must use ERC-7201 namespaced storage." + echo "This ensures storage slots don't conflict during upgrades." + echo "" + echo "To fix:" + echo "1. Move all storage variables into a storage struct" + echo "2. Use @custom:storage-location erc7201:syndicate.storage.YourContract" + echo "3. Access storage via a private function using assembly" + echo "4. Generate the storage slot with: cast index-erc7201 syndicate.storage.YourContract" + echo "" + echo "Example: see SyndicateSequencingChain.sol or GasCounter.sol" + echo "" + exit 1 +else + echo "" + echo "All UUPS contracts use namespaced storage correctly!" + echo "" + exit 0 +fi diff --git a/synd-contracts/scripts/deploy-arachnid.sh b/synd-contracts/scripts/deploy-arachnid.sh new file mode 100755 index 000000000..a34774b49 --- /dev/null +++ b/synd-contracts/scripts/deploy-arachnid.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# Arachnid address (from: https://github.com/Arachnid/deterministic-deployment-proxy) +DEPLOYER_ADDRESS=0x4e59b44847b379578588920cA78FbF26c0B4956C + +# Chain ID to deploy to +CHAIN=base_sepolia + +# Constructor arguments +SRC_SENDER=0xb6235EAEADfA5839CdA207B454d98b328dFE2F3A +SRC_CHAIN_ID=11155111 +CONSTRUCTOR_ARGS=$(cast abi-encode "constructor(address,uint256)" $SRC_SENDER $SRC_CHAIN_ID) + +# Salt (shouldnt need to change this) +SALT=0x0000000000000000000000000000000000000000000000000000000000000000 + +# SyndForwarder Bytecode +BYTECODE=60c080604052346101855760408161122f803803809161001f8285610189565b833981010312610185578051906001600160a01b03821682036101855760200151460361013a576080525b61073560405161005d6020830182610189565b8181526020810191610afa83396100936020604051809482820194518091865e81015f838201520301601f198101845283610189565b81511561012b577f53594e445f464f525741524445525f535455425f5631000000000000000000009151905ff53d1519811516610120576001600160a01b038116156101115760a05260405161093990816101c1823960805181818160a9015281816101b401526102b9015260a051818181610440015261066d0152f35b63b06ebf3d60e01b5f5260045ffd5b6040513d5f823e3d90fd5b631328927760e21b5f5260045ffd5b5030731111000000000000000000000000000000001111016001600160a01b038111610171576001600160a01b031660805261004a565b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b601f909101601f19168101906001600160401b038211908210176101ac57604052565b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c80631575eaae146100645780631b8b921d1461005f5780632781212e1461005a57806356dba779146100555763b416663e14610050575f80fd5b610464565b6103f6565b610249565b61014a565b346100d2575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100d25773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660805260206080f35b5f80fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100d257565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100d257565b9181601f840112156100d25782359167ffffffffffffffff83116100d257602083818601950101116100d257565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100d25761017c6100d6565b60243567ffffffffffffffff81116100d25761019c90369060040161011c565b9173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361022157825f9392849360405192839283378101848152039173ffffffffffffffffffffffffffffffffffffffff3491165af161021161055b565b901561021957005b602081519101fd5b7fcf62cd97000000000000000000000000000000000000000000000000000000005f5260045ffd5b346100d25760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100d2576102806100f9565b60443567ffffffffffffffff81116100d2576102a090369060040161011c565b909173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303610221576102e761062b565b8051156103ce578051600435916020015ff5903d15198215166103c35773ffffffffffffffffffffffffffffffffffffffff82161561039b575f80949361038f829561036360405193849260208401977f4f1ef286000000000000000000000000000000000000000000000000000000008952602485016105b8565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610515565b51925af161021161055b565b7fb06ebf3d000000000000000000000000000000000000000000000000000000005f5260045ffd5b6040513d5f823e3d90fd5b7f4ca249dc000000000000000000000000000000000000000000000000000000005f5260045ffd5b346100d2575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100d257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100d2575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100d2576020604061049e61062b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f835194859381855280519182918282880152018686015e5f85828601015201168101030190f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055657604052565b6104e8565b3d156105b3573d9067ffffffffffffffff821161055657604051916105a860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160184610515565b82523d5f602084013e565b606090565b9183606094601f9273ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09516865260406020870152816040870152868601375f8582860101520116010190565b805191908290602001825e015f815290565b6106bd6106c3610272604051906106456020820183610515565b8082526106c7602083013961036360405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660208201526040808201525f6060820152606081526106ad608082610515565b6040519485936020850190610619565b90610619565b9056fe60806040526102728038038061001481610168565b92833981016040828203126101645781516001600160a01b03811692909190838303610164576020810151906001600160401b03821161016457019281601f8501121561016457835161006e610069826101a1565b610168565b9481865260208601936020838301011161016457815f926020809301865e86010152823b15610152577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561013a575f8091610122945190845af43d15610132573d91610113610069846101a1565b9283523d5f602085013e6101bc565b505b6040516057908161021b8239f35b6060916101bc565b50505034156101245763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761018d57604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b03811161018d57601f01601f191660200190565b906101e057508051156101d157805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580610211575b6101f1575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156101e956fe60806040525f8073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416368280378136915af43d5f803e156053573d5ff35b3d5ffd60a0806040523460295730608052610707908161002e82396080518181816101f001526103290152f35b5f80fdfe608060405260043610156100d0575b36156100725760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f537475623a206e6f206c6f67696320696d706c656d656e7465640000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f537475623a20455448206e6f74206163636570746564000000000000000000006044820152fd5b5f3560e01c80634f1ef2861461026857806352d1902d146101ab5763ad3cb1cc0361000e57346101a7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a757604080519061013281836105c6565b6005825260208201917f352e302e3000000000000000000000000000000000000000000000000000000083527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8351948593602085525180918160208701528686015e5f85828601015201168101030190f35b5f80fd5b346101a7575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a75773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036102405760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101a75760043573ffffffffffffffffffffffffffffffffffffffff8116908181036101a7576024359067ffffffffffffffff82116101a757366023830112156101a7578160040135916102e183610634565b926102ef60405194856105c6565b808452602084019136602483830101116101a757815f9260246020930185378501015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610584575b50610240576040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481885afa5f9181610550575b506103c157847f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8692036105255750823b156104fa57807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a28251156104c8575f80916104be945190845af43d156104c0573d916104a283610634565b926104b060405194856105c6565b83523d5f602085013e61066e565b005b60609161066e565b505050346104d257005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d60201161057c575b8161056c602093836105c6565b810103126101a757519086610390565b3d915061055f565b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141585610354565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761060757604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161060757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b906106ab575080511561068357805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b815115806106fe575b6106bc575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156106b456 + +cast send -r $CHAIN --keystore $ETH_KEYSTORE --from $ETH_FROM $DEPLOYER_ADDRESS "$SALT$BYTECODE$CONSTRUCTOR_ARGS" diff --git a/synd-contracts/src/SequencingModuleChecker.sol b/synd-contracts/src/SequencingModuleChecker.sol index ba832c45d..873968b12 100644 --- a/synd-contracts/src/SequencingModuleChecker.sol +++ b/synd-contracts/src/SequencingModuleChecker.sol @@ -2,30 +2,51 @@ pragma solidity 0.8.28; import {IPermissionModule} from "./interfaces/IPermissionModule.sol"; -import {NotInitializedModule} from "./sequencing-modules/NotInitializedModule.sol"; -import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import {DataTooLarge} from "@arbitrum/nitro-contracts/src/libraries/Error.sol"; +/// @custom:storage-location erc7201:syndicate.storage.SequencingModule +struct SequencingModuleStorage { + /// @notice The requirement module that handles checks + IPermissionModule permissionRequirementModule; +} + /// @title SequencingModuleChecker /// @notice A contract that delegates permission checks to modular permission systems /// @dev This separation of concerns allows for flexible permission systems: /// 1. The SequencingModuleChecker manages the core permission interface /// 2. The permissionRequirementModule (typically RequireAndModule or RequireOrModule) handles the actual permission logic /// 3. This design allows for complex permission structures (AND/OR logic) that can be upgraded over time -/// 4. Proper setup of the permission system after deployment involves setting a sequencing module and transferring ownership -/// via the Ownable transferOwnership() function -abstract contract SequencingModuleChecker is Ownable, IPermissionModule { +/// 4. The initialization pattern allows for proper setup of the permission system after deployment +abstract contract SequencingModuleChecker is Initializable, OwnableUpgradeable, IPermissionModule { + event RequirementModuleUpdated(address indexed newModule); + // Just in case, limit the amount of tx data sent to the isAllowed function. uint256 public constant maxDataSize = 200000; - /// @notice The requirement module that handles checks - IPermissionModule public permissionRequirementModule; + // cast index-erc7201 syndicate.storage.SequencingModule + bytes32 public constant SEQUENCING_MODULE_STORAGE_LOCATION = + 0x5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500; - event RequirementModuleUpdated(address indexed newModule); + function _getSequencingModuleStorage() private pure returns (SequencingModuleStorage storage $) { + assembly { + $.slot := SEQUENCING_MODULE_STORAGE_LOCATION + } + } - /// @dev Constructor function - // [Olympix Warning: no parameter validation in constructor] Admin validation handled by OpenZeppelin's Ownable - constructor() Ownable(msg.sender) {} + function permissionRequirementModule() public view returns (IPermissionModule) { + SequencingModuleStorage storage $ = _getSequencingModuleStorage(); + return $.permissionRequirementModule; + } + + function __SequencingModuleChecker_init(address admin, address _permissionRequirementModule) + internal + onlyInitializing + { + __Ownable_init(admin); + _getSequencingModuleStorage().permissionRequirementModule = IPermissionModule(_permissionRequirementModule); + } /// @notice Updates the requirement module /// @param _newModule The address of the new requirement module @@ -33,7 +54,7 @@ abstract contract SequencingModuleChecker is Ownable, IPermissionModule { /// All addresses without code cause all transaction types to be forbidden by reverting. /// Address one corresponds to the always allowed module. function updateRequirementModule(address _newModule) external onlyOwner { - permissionRequirementModule = IPermissionModule(_newModule); + _getSequencingModuleStorage().permissionRequirementModule = IPermissionModule(_newModule); emit RequirementModuleUpdated(_newModule); } @@ -45,7 +66,7 @@ abstract contract SequencingModuleChecker is Ownable, IPermissionModule { /// @return bool indicating if both the proposer and calldata are allowed function isAllowed(address proposer, address originator, bytes memory data) public view returns (bool) { require(data.length <= maxDataSize, DataTooLarge(data.length, maxDataSize)); - return address(permissionRequirementModule) == address(1) - || permissionRequirementModule.isAllowed(proposer, originator, data); //#olympix-ignore-calls-in-loop + return address(permissionRequirementModule()) == address(1) + || permissionRequirementModule().isAllowed(proposer, originator, data); //#olympix-ignore-calls-in-loop } } diff --git a/synd-contracts/src/SyndicateSequencingChain.sol b/synd-contracts/src/SyndicateSequencingChain.sol index 579d6f65f..c0981c02b 100644 --- a/synd-contracts/src/SyndicateSequencingChain.sol +++ b/synd-contracts/src/SyndicateSequencingChain.sol @@ -2,11 +2,23 @@ pragma solidity 0.8.28; import {SequencingModuleChecker} from "./SequencingModuleChecker.sol"; -import {GasCounter} from "./staking/GasCounter.sol"; +import {GasMeter} from "./staking/GasMeter.sol"; import {ISyndicateSequencingChain} from "./interfaces/ISyndicateSequencingChain.sol"; +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; uint8 constant L2MessageType_SignedTx = 4; // a regular signed transaction +/// @notice Storage struct for SyndicateSequencingChain using ERC-7201 namespaced storage pattern +/// @dev This struct contains all the state variables specific to the sequencing chain functionality. +/// Using ERC-7201 ensures storage slots don't conflict during upgrades. +/// @custom:storage-location erc7201:syndicate.storage.SyndicateSequencingChain +struct SyndicateSequencingChainStorage { + /// @notice The ID of the App chain that this contract is sequencing transactions for + /// @dev This is set during initialization and never changes + uint256 appchainId; +} + /// @title SyndicateSequencingChain /// @notice Core contract for transaction sequencing using Syndicate's "secure by module design" architecture /// @@ -25,9 +37,9 @@ uint8 constant L2MessageType_SignedTx = 4; // a regular signed transaction /// ┌─────────────────────────────────────────────────────────────────────────┐ /// │ RESPONSIBILITY DISTRIBUTION: │ /// ├─────────────────────────────────────────────────────────────────────────┤ -/// │ SyndicateSequencingChain: Routes to permission modules │ +/// │ SyndicateSequencingChain: Routes to permission modules │ /// │ PermissionModule (Dev): Implements authorization logic │ -/// │ Module Developer: MUST validate both msg.sender and tx.origin properly │ +/// │ Module Developer: MUST validate both msg.sender and tx.origin properly │ /// └─────────────────────────────────────────────────────────────────────────┘ /// /// @dev Transaction Lifecycle: @@ -40,121 +52,185 @@ uint8 constant L2MessageType_SignedTx = 4; // a regular signed transaction /// /// This event-based design provides scalability and gas efficiency while maintaining security /// through modular, developer-controlled permission systems. -contract SyndicateSequencingChain is SequencingModuleChecker, ISyndicateSequencingChain, GasCounter { +/// +/// To view the storage layout, run "forge inspect SyndicateSequencingChain storageLayout" +contract SyndicateSequencingChain is + Initializable, + SequencingModuleChecker, + ISyndicateSequencingChain, + UUPSUpgradeable +{ + uint256 public constant VERSION = 1_000_000; // 1.0.0 + + /// @notice The address of the GasMeter contract + /// @dev This is set during initialization and never changes + address public immutable gasMeter; + + /*////////////////////////////////////////////////////////////// + STORAGE + //////////////////////////////////////////////////////////////*/ + + /// @notice ERC-7201 storage slot for SyndicateSequencingChain-specific data + /// @dev Generated using: cast keccak "erc7201:syndicate.storage.SyndicateSequencingChain" + /// This ensures the storage slot doesn't conflict with inherited contracts + /// cast index-erc7201 syndicate.storage.SyndicateSequencingChain + bytes32 public constant SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION = + 0xc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a400; + + /// @notice Internal function to access the ERC-7201 namespaced storage + /// @dev Uses inline assembly to access the specific storage slot for this contract's data + /// @return $ Storage pointer to the SyndicateSequencingChainStorage struct + function _getSyndicateSequencingChainStorage() private pure returns (SyndicateSequencingChainStorage storage $) { + assembly { + $.slot := SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION + } + } + + /// @notice Get the appchain ID that this contract sequences for + /// @return The unique identifier of the application chain + function appchainId() public view returns (uint256) { + SyndicateSequencingChainStorage storage $ = _getSyndicateSequencingChainStorage(); + return $.appchainId; + } + + /*////////////////////////////////////////////////////////////// + ERRORS + //////////////////////////////////////////////////////////////*/ + + /// @notice Thrown when no transaction data is provided to processing functions error NoTxData(); + + /// @notice Thrown when the transaction or sender is not allowed by the permission module error TransactionOrSenderNotAllowed(); - error GasTrackingAlreadyEnabled(); - error GasTrackingAlreadyDisabled(); + + /// @notice Thrown when a zero address is provided where a valid address is required + error ZeroAddress(); + + /// @notice Thrown when the caller of a function is not the GasMeter + error NotGasMeterContract(); + + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ /// @notice Emitted when a new transaction is processed /// @param sender The address that submitted the transaction /// @param data The transaction data that was processed event TransactionProcessed(address indexed sender, bytes data); - /// @notice Emitted when the emissions receiver is updated - /// @param oldReceiver The previous emissions receiver address - /// @param newReceiver The new emissions receiver address - event EmissionsReceiverUpdated(address indexed oldReceiver, address indexed newReceiver); + /*////////////////////////////////////////////////////////////// + FUNCTIONS + //////////////////////////////////////////////////////////////*/ - uint256 public immutable appchainId; + /// @notice Disables initializers to prevent the implementation contract from being initialized + constructor(address _gasMeter) { + if (_gasMeter == address(0)) revert ZeroAddress(); + gasMeter = _gasMeter; + _disableInitializers(); + } - /// @notice The address that receives emissions for this sequencing chain - address public emissionsReceiver; + function getInitializedVersion() external view returns (uint64) { + return _getInitializedVersion(); + } - /// @notice Constructs the SyndicateSequencingChain contract. - /// @param _appchainId The ID of the App chain that this contract is sequencing transactions for. - //#olympix-ignore-missing-revert-reason-tests - constructor(uint256 _appchainId) SequencingModuleChecker() { - // chain id zero has no replay protection: https://eips.ethereum.org/EIPS/eip-3788 + /// @notice Initializes the SyndicateSequencingChain contract + /// @dev This function can only be called once during proxy deployment. It sets up all the core functionality + /// including ownership, permission modules, gas tracking, and appchain identification. + /// @param admin The address to be set as the contract owner (receives DEFAULT_ADMIN_ROLE) + /// @param _permissionRequirementModule The address of the permission requirement module or address(0) to allow all transactions + /// @param _appchainId The unique identifier for the application chain this contract sequences for (must not be 0) + function initialize(address admin, address _permissionRequirementModule, uint256 _appchainId) + external + initializer + { + if (admin == address(0)) revert ZeroAddress(); require(_appchainId != 0, "App chain ID cannot be 0"); - appchainId = _appchainId; + __SequencingModuleChecker_init(admin, _permissionRequirementModule); + __UUPSUpgradeable_init(); + + SyndicateSequencingChainStorage storage $ = _getSyndicateSequencingChainStorage(); + $.appchainId = _appchainId; + } + + modifier onlyGasMeter() { + require(msg.sender == gasMeter, NotGasMeterContract()); + _; } + /// @notice Authorizes contract upgrades. Only callable by the contract owner. + /// @dev Required by UUPSUpgradeable to restrict upgradeability to the owner. + /// @param _newImplementation The address of the new implementation contract. + function _authorizeUpgrade(address _newImplementation) internal override onlyOwner {} + + /// @notice Encode transaction data with L2 message type prefix + /// @dev Prepends the transaction data with the L2MessageType_SignedTx identifier + /// This encoding is used by off-chain systems to identify transaction types + /// @param data The raw transaction data to encode + /// @return The encoded transaction data with message type prefix function encodeTransaction(bytes calldata data) public pure returns (bytes memory) { return abi.encodePacked(L2MessageType_SignedTx, data); } - /// @notice Process a signed transaction. - /// @param data Transaction data + /// @notice Processes a single signed transaction by forwarding it to the gas meter contract for gas accounting and validation. + /// @dev Requires that the transaction data is not empty. Delegates the call to processTransactionImpl on the configured gas meter contract. + /// @param data The transaction data to process (must not be empty). + function processTransaction(bytes calldata data) external { + GasMeter(gasMeter).meterCall(abi.encodeCall(SyndicateSequencingChain._processTransaction, (msg.sender, data))); + } + + /// @notice Process a single signed transaction + /// @dev Validates the transaction through the permission module and emits an event if authorized. + /// The tx.origin is intentionally used as part of the security model - see contract-level documentation. + /// @param sequencer The address of original sequencer that is processing the transaction + /// @param data The transaction data to process (must not be empty) //#olympix-ignore-required-tx-origin - function processTransaction(bytes calldata data) external trackGasUsage { + function _processTransaction(address sequencer, bytes calldata data) external onlyGasMeter { require(data.length > 0, NoTxData()); + // Encode transaction with L2 message type for off-chain processing bytes memory transaction = encodeTransaction(data); - require(isAllowed(msg.sender, tx.origin, transaction), TransactionOrSenderNotAllowed()); - emit TransactionProcessed(msg.sender, transaction); + + // Check authorization through permission module (considers both sequencer and tx.origin) + require(isAllowed(sequencer, tx.origin, transaction), TransactionOrSenderNotAllowed()); + + // Emit event for off-chain systems to execute on application chain + emit TransactionProcessed(sequencer, transaction); + } + + /// @notice Processes multiple signed transactions in a single call by forwarding them to the gas meter contract for gas accounting and validation. + /// @dev Each transaction in the array must be non-empty. This function delegates processing to the configured gas meter contract for each transaction. + /// @param data An array of transaction data to process (must not be empty). + function processTransactionsBulk(bytes[] calldata data) external { + GasMeter(gasMeter).meterCall( + abi.encodeCall(SyndicateSequencingChain._processTransactionsBulk, (msg.sender, data)) + ); } - /// @notice Processes multiple signed transactions in bulk. - /// @param data An array of transaction data. + /// @notice Processes multiple signed transactions in bulk for gas efficiency + /// @dev Each transaction is individually validated through the permission module. + /// Only authorized transactions emit events, unauthorized ones are silently skipped. + /// The tx.origin is intentionally used as part of the security model. + /// @param sequencer The address of original sequencer that is processing the transactions. + /// @param data An array of transaction data to process (must not be empty) //#olympix-ignore - function processTransactionsBulk(bytes[] calldata data) external trackGasUsage { + function _processTransactionsBulk(address sequencer, bytes[] calldata data) external onlyGasMeter { uint256 dataCount = data.length; require(dataCount > 0, NoTxData()); - // Process all transactions - uint256 i; - for (i = 0; i < dataCount; i++) { + // Process all transactions individually + for (uint256 i = 0; i < dataCount; i++) { require(data[i].length > 0, NoTxData()); - bytes memory transaction = encodeTransaction(data[i]); - bool isAllowed = isAllowed(msg.sender, tx.origin, transaction); //#olympix-ignore-any-tx-origin - if (isAllowed) { - // only emit the event if the transaction is allowed - emit TransactionProcessed(msg.sender, transaction); - } - } - } - /*////////////////////////////////////////////////////////////// - EMISSIONS RECEIVER ADMIN FUNCTIONS - //////////////////////////////////////////////////////////////*/ + // Encode transaction with L2 message type + bytes memory transaction = encodeTransaction(data[i]); - /// @notice Set the emissions receiver address - /// @dev Only callable by the contract owner - /// @param _emissionsReceiver The address to receive emissions - function setEmissionsReceiver(address _emissionsReceiver) external onlyOwner { - address oldReceiver = emissionsReceiver; - emissionsReceiver = _emissionsReceiver; - if (emissionsReceiver != address(0)) { - emit EmissionsReceiverUpdated(oldReceiver, _emissionsReceiver); - } else { - emit EmissionsReceiverUpdated(oldReceiver, owner()); - } - } + // Check authorization (considers both sequencer and tx.origin) + bool allowed = isAllowed(sequencer, tx.origin, transaction); //#olympix-ignore-any-tx-origin - /// @notice Get the effective emissions receiver address - /// @dev Returns emissionsReceiver if set, otherwise returns the contract owner - /// @return The address that should receive emissions - function getEmissionsReceiver() external view returns (address) { - return emissionsReceiver == address(0) ? owner() : emissionsReceiver; - } - - /// @notice Override transferOwnership to emit EmissionsReceiverUpdated event when appropriate - /// @dev When emissionsReceiver is not explicitly set (address(0)), transferring ownership - /// effectively changes the emissions receiver, so we emit the event for transparency - /// @param newOwner The address of the new owner - function transferOwnership(address newOwner) public override onlyOwner { - if (emissionsReceiver == address(0)) { - emit EmissionsReceiverUpdated(owner(), newOwner); + if (allowed) { + // Only emit event for authorized transactions + emit TransactionProcessed(sequencer, transaction); + } } - super.transferOwnership(newOwner); - } - - /*////////////////////////////////////////////////////////////// - GAS TRACKING ADMIN FUNCTIONS - //////////////////////////////////////////////////////////////*/ - - /// @notice Disable gas tracking if needed - /// @dev Only callable by the contract owner - function disableGasTracking() external onlyOwner { - require(!gasTrackingDisabled, GasTrackingAlreadyDisabled()); - gasTrackingDisabled = true; - } - - /// @notice Enable gas tracking - /// @dev Only callable by the contract owner - function enableGasTracking() external onlyOwner { - require(gasTrackingDisabled, GasTrackingAlreadyEnabled()); - gasTrackingDisabled = false; } } diff --git a/synd-contracts/src/config/ArbChainConfig.sol b/synd-contracts/src/config/ArbChainConfig.sol index 6079be24e..d1b8ecd08 100644 --- a/synd-contracts/src/config/ArbChainConfig.sol +++ b/synd-contracts/src/config/ArbChainConfig.sol @@ -35,6 +35,9 @@ contract ArbChainConfig is Initializable { string public DEFAULT_SEQUENCING_CHAIN_WS_RPC_URL; string public APPCHAIN_BLOCK_EXPLORER_URL; + /// @notice Version of the ArbChainConfig contract (updatable during upgrades) + string public version; + /** * @dev Constructor for the implementation contract * This is only used when deploying the implementation contract @@ -92,6 +95,9 @@ contract ArbChainConfig is Initializable { SEQUENCING_CONTRACT_ADDRESS = sequencingContractAddress; SEQUENCING_START_BLOCK = sequencingStartBlock; + // Set initial version + version = "1.0.0"; + // Set mutable configuration parameters INITIAL_APPCHAIN_OWNER = initialAppchainOwner; DEFAULT_SEQUENCING_CHAIN_WS_RPC_URL = sequencingChainWsRpcUrl; @@ -150,4 +156,12 @@ contract ArbChainConfig is Initializable { owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } + + /** + * @dev Updates the contract version (owner only, typically called during upgrades) + * @param newVersion The new version string (e.g., "1.1.0") + */ + function updateVersion(string calldata newVersion) external onlyOwner { + version = newVersion; + } } diff --git a/synd-contracts/src/deployment/DeployerParent.sol b/synd-contracts/src/deployment/DeployerParent.sol new file mode 100644 index 000000000..2b8714077 --- /dev/null +++ b/synd-contracts/src/deployment/DeployerParent.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.28; + +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import {SyndForwarder} from "./SyndForwarder.sol"; + +/// @title DeployerParent +/// @notice Temporary contract for controlling forwarders until we have the chain registry +contract DeployerParent is UUPSUpgradeable { + address public immutable owner; + SyndForwarder public immutable forwarder; + + error NotOwner(); + + constructor(address owner_, address forwarder_) { + owner = owner_; + forwarder = SyndForwarder(forwarder_); + } + + modifier onlyOwner() { + if (msg.sender != owner) revert NotOwner(); + _; + } + + function _authorizeUpgrade(address newImplementation) internal override onlyOwner {} + + function call(address dest, bytes calldata data) external payable onlyOwner { + forwarder.call{value: msg.value}(dest, data); + } + + function deploy(bytes32 salt, address impl, bytes calldata init) external onlyOwner returns (address) { + return forwarder.deploy(salt, impl, init); + } +} diff --git a/synd-contracts/src/deployment/MinimalUUPSStub.sol b/synd-contracts/src/deployment/MinimalUUPSStub.sol new file mode 100644 index 000000000..5231c1c23 --- /dev/null +++ b/synd-contracts/src/deployment/MinimalUUPSStub.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; + +/// @title MinimalUUPSStub +/// @notice Minimal UUPS implementation stub for deterministic proxy deployments +/// @dev This contract will NEVER change to ensure deterministic CREATE2 addresses across all deployments. +/// It serves as a temporary implementation that is immediately upgraded after proxy deployment. +/// The stub has no functionality except for UUPS upgrade capability and security measures. +contract MinimalUUPSStub is UUPSUpgradeable { + /// @notice this is only used to get a reliably deterministic address, the proxy will immediately be upgraded + function _authorizeUpgrade(address) internal view override {} + + /// @notice Receive function that reverts - this stub should not receive ETH + receive() external payable { + revert("Stub: ETH not accepted"); + } + + /// @notice Fallback that reverts - this stub has no logic + fallback() external payable { + revert("Stub: no logic implemented"); + } +} diff --git a/synd-contracts/src/deployment/SyndForwarder.sol b/synd-contracts/src/deployment/SyndForwarder.sol new file mode 100644 index 000000000..658c1773d --- /dev/null +++ b/synd-contracts/src/deployment/SyndForwarder.sol @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.28; + +import {Create2} from "@openzeppelin/contracts/utils/Create2.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import {AddressAliasHelper} from "lib/nitro-contracts/src/libraries/AddressAliasHelper.sol"; +import {MinimalUUPSStub} from "./MinimalUUPSStub.sol"; + +/// @title SyndForwarder +/// @notice Syndicate Forwarder for consistent deterministic deployment of contracts across chains +/// @dev This contract should be deployed using a deterministic deployment proxy so that +/// for a givien config (source sender and source chain id) it will have the same address +/// across all chains +contract SyndForwarder { + address public immutable allowedSender; + address public immutable stubImplementation; + + error NotAllowedSender(); + + /// @notice Constructor + /// @param _sourceSender The source address that is allowed to call the base forwarder on ETH mainnet + /// @param _sourceChainId The chain ID of the source chain + constructor(address _sourceSender, uint256 _sourceChainId) { + if (block.chainid == _sourceChainId) { + allowedSender = _sourceSender; + } else { + // alias the contract address to receive messages from the same contract on the parent chain + allowedSender = AddressAliasHelper.applyL1ToL2Alias(address(this)); + } + + bytes memory stubBytecode = abi.encodePacked(type(MinimalUUPSStub).creationCode); + stubImplementation = Create2.deploy(0, bytes32("SYND_FORWARDER_STUB_V1"), stubBytecode); + } + + modifier onlyAllowedSender() { + if (msg.sender != allowedSender) revert NotAllowedSender(); + _; + } + + function call(address dest, bytes calldata data) external payable onlyAllowedSender { + (bool success, bytes memory result) = payable(dest).call{value: msg.value}(data); + if (!success) { + assembly { + revert(add(result, 32), mload(result)) + } + } + } + + function deploy(bytes32 salt, address impl, bytes calldata init) external onlyAllowedSender returns (address) { + address deployAddress = Create2.deploy(0, salt, getProxyBytecode()); + (bool upgradeSuccess, bytes memory result) = + deployAddress.call(abi.encodeWithSignature("upgradeToAndCall(address,bytes)", impl, init)); + if (!upgradeSuccess) { + assembly { + revert(add(result, 32), mload(result)) + } + } + return deployAddress; + } + + /// @notice Returns the consistent proxy bytecode used for all deployments + /// @dev Always returns the same bytecode for predictable CREATE2 addresses + /// @return The bytecode to be used for deployment + function getProxyBytecode() public view returns (bytes memory) { + return abi.encodePacked(type(ERC1967Proxy).creationCode, abi.encode(stubImplementation, "")); + } +} diff --git a/synd-contracts/src/factory/PermissionModuleFactories.sol b/synd-contracts/src/factory/PermissionModuleFactories.sol deleted file mode 100644 index d2ffb8aac..000000000 --- a/synd-contracts/src/factory/PermissionModuleFactories.sol +++ /dev/null @@ -1,166 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.28; - -import {RequireAndModule} from "../requirement-modules/RequireAndModule.sol"; -import {RequireOrModule} from "../requirement-modules/RequireOrModule.sol"; -import {RequireCompositeModule} from "../requirement-modules/RequireCompositeModule.sol"; -import {Create2} from "@openzeppelin/contracts/utils/Create2.sol"; -import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; -import {Pausable} from "@openzeppelin/contracts/utils/Pausable.sol"; - -/// @title RequireAndModuleFactory -/// @notice Factory for deploying RequireAndModule contracts using CREATE2 pattern -contract RequireAndModuleFactory is AccessControl, Pausable { - /// @notice Emitted when a new RequireAndModule is created - event RequireAndModuleCreated(address indexed module, address indexed admin); - - bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); - - error ZeroAddress(); - - constructor(address admin) { - if (admin == address(0)) revert ZeroAddress(); - - _grantRole(DEFAULT_ADMIN_ROLE, admin); - _grantRole(MANAGER_ROLE, admin); - } - - /// @notice Deploy a new RequireAndModule using CREATE2 - /// @param admin The admin address for the module - /// @param salt The salt for deterministic deployment - /// @return module The deployed module address - function createRequireAndModule(address admin, bytes32 salt) external whenNotPaused returns (address module) { - if (admin == address(0)) revert ZeroAddress(); - - bytes memory bytecode = abi.encodePacked(type(RequireAndModule).creationCode, abi.encode(admin)); - module = Create2.deploy(0, salt, bytecode); - - emit RequireAndModuleCreated(module, admin); - return module; - } - - /// @notice Compute the address where a module will be deployed - /// @param admin The admin address for the module - /// @param salt The salt for deterministic deployment - /// @return The computed address - function computeModuleAddress(address admin, bytes32 salt) external view returns (address) { - bytes memory bytecode = abi.encodePacked(type(RequireAndModule).creationCode, abi.encode(admin)); - return Create2.computeAddress(salt, keccak256(bytecode)); - } - - /// @notice Pause the factory (admin only) - function pause() external onlyRole(DEFAULT_ADMIN_ROLE) { - _pause(); - } - - /// @notice Unpause the factory (admin only) - function unpause() external onlyRole(DEFAULT_ADMIN_ROLE) { - _unpause(); - } -} - -/// @title RequireOrModuleFactory -/// @notice Factory for deploying RequireOrModule contracts using CREATE2 pattern -contract RequireOrModuleFactory is AccessControl, Pausable { - /// @notice Emitted when a new RequireOrModule is created - event RequireOrModuleCreated(address indexed module, address indexed admin); - - bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); - - error ZeroAddress(); - - constructor(address admin) { - if (admin == address(0)) revert ZeroAddress(); - - _grantRole(DEFAULT_ADMIN_ROLE, admin); - _grantRole(MANAGER_ROLE, admin); - } - - /// @notice Deploy a new RequireOrModule using CREATE2 - /// @param admin The admin address for the module - /// @param salt The salt for deterministic deployment - /// @return module The deployed module address - function createRequireOrModule(address admin, bytes32 salt) external whenNotPaused returns (address module) { - if (admin == address(0)) revert ZeroAddress(); - - bytes memory bytecode = abi.encodePacked(type(RequireOrModule).creationCode, abi.encode(admin)); - module = Create2.deploy(0, salt, bytecode); - - emit RequireOrModuleCreated(module, admin); - return module; - } - - /// @notice Compute the address where a module will be deployed - /// @param admin The admin address for the module - /// @param salt The salt for deterministic deployment - /// @return The computed address - function computeModuleAddress(address admin, bytes32 salt) external view returns (address) { - bytes memory bytecode = abi.encodePacked(type(RequireOrModule).creationCode, abi.encode(admin)); - return Create2.computeAddress(salt, keccak256(bytecode)); - } - - /// @notice Pause the factory (admin only) - function pause() external onlyRole(DEFAULT_ADMIN_ROLE) { - _pause(); - } - - /// @notice Unpause the factory (admin only) - function unpause() external onlyRole(DEFAULT_ADMIN_ROLE) { - _unpause(); - } -} - -/// @title RequireCompositeModuleFactory -/// @notice Factory for deploying RequireCompositeModule contracts using CREATE2 pattern -contract RequireCompositeModuleFactory is AccessControl, Pausable { - /// @notice Emitted when a new RequireCompositeModule is created - event RequireCompositeModuleCreated(address indexed module, address indexed admin); - - bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); - - error ZeroAddress(); - - constructor(address admin) { - if (admin == address(0)) revert ZeroAddress(); - - _grantRole(DEFAULT_ADMIN_ROLE, admin); - _grantRole(MANAGER_ROLE, admin); - } - - /// @notice Deploy a new RequireCompositeModule using CREATE2 - /// @param admin The admin address for the module - /// @param salt The salt for deterministic deployment - /// @return module The deployed module address - function createRequireCompositeModule(address admin, bytes32 salt) - external - whenNotPaused - returns (address module) - { - if (admin == address(0)) revert ZeroAddress(); - - bytes memory bytecode = abi.encodePacked(type(RequireCompositeModule).creationCode, abi.encode(admin)); - module = Create2.deploy(0, salt, bytecode); - - emit RequireCompositeModuleCreated(module, admin); - return module; - } - - /// @notice Compute the address where a module will be deployed - /// @param admin The admin address for the module - /// @param salt The salt for deterministic deployment - /// @return The computed address - function computeModuleAddress(address admin, bytes32 salt) external view returns (address) { - bytes memory bytecode = abi.encodePacked(type(RequireCompositeModule).creationCode, abi.encode(admin)); - return Create2.computeAddress(salt, keccak256(bytecode)); - } - - /// @notice Pause the factory (admin only) - function pause() external onlyRole(DEFAULT_ADMIN_ROLE) { - _pause(); - } - - /// @notice Unpause the factory (admin only) - function unpause() external onlyRole(DEFAULT_ADMIN_ROLE) { - _unpause(); - } -} diff --git a/synd-contracts/src/factory/SyndicateFactory.sol b/synd-contracts/src/factory/SyndicateFactory.sol deleted file mode 100644 index 216016c89..000000000 --- a/synd-contracts/src/factory/SyndicateFactory.sol +++ /dev/null @@ -1,206 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.28; - -import {SyndicateSequencingChain} from "../SyndicateSequencingChain.sol"; -import {IRequirementModule} from "../interfaces/IRequirementModule.sol"; -import {Create2} from "@openzeppelin/contracts/utils/Create2.sol"; -import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; -import {Pausable} from "@openzeppelin/contracts/utils/Pausable.sol"; -import {Strings} from "@openzeppelin/contracts/utils/Strings.sol"; -import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; - -enum NamespaceState { - Available, - Used, - Reserved -} - -/// @title SyndicateFactory -/// @notice Factory contract for creating SyndicateSequencingChain contracts with centralized gas tracking -/// @dev Uses CREATE2 pattern for deterministic deployments - users deploy permission modules separately -contract SyndicateFactory is AccessControl, Pausable { - /// @notice Emitted when a new SyndicateSequencingChain is created - event SyndicateSequencingChainCreated( - uint256 indexed appchainId, address indexed sequencingChainAddress, address indexed permissionModuleAddress - ); - - /// @notice Emitted when namespace configuration is updated - event NamespaceConfigUpdated(uint256 oldNamespacePrefix, uint256 newNamespacePrefix); - - /// @notice Emitted when a chain ID is manually marked as used - event ChainIdManuallyMarked(uint256 indexed chainId); - - bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); - - error ZeroAddress(); - error ChainIdAlreadyExists(); - - // Namespace configuration - made public for frontend access - uint256 public namespacePrefix; - uint256 public nextAutoChainId; - mapping(uint256 => NamespaceState) public usedNamespaces; - - /// @notice Mapping from appchain ID to the sequencing contract address - mapping(uint256 => address) public appchainContracts; - uint256[] public chainIDs; - - constructor(address admin) { - if (admin == address(0)) revert ZeroAddress(); - - _grantRole(DEFAULT_ADMIN_ROLE, admin); - _grantRole(MANAGER_ROLE, admin); - - _updateNamespaceConfig(510); - - nextAutoChainId = 1; - } - - /// @notice Creates a new SyndicateSequencingChain contract - /// @param appchainId The app chain ID (0 for auto-increment) - /// @param admin The admin address for the new chain - /// @param permissionModule The pre-deployed permission module - /// @param salt The salt for CREATE2 deployment - /// @return sequencingChain The deployed sequencing chain address - /// @return actualChainId The chain ID that was used - //#olympix-ignore-reentrancy-events - function createSyndicateSequencingChain( - uint256 appchainId, - address admin, - IRequirementModule permissionModule, - bytes32 salt - ) external whenNotPaused returns (address sequencingChain, uint256 actualChainId) { - if (admin == address(0) || address(permissionModule) == address(0)) { - revert ZeroAddress(); - } - - // Determine actual chain ID - actualChainId = appchainId == 0 ? getNextChainId() : appchainId; - - // Validate chain ID is not already used - if (appchainContracts[actualChainId] != address(0)) { - revert ChainIdAlreadyExists(); - } - - if (appchainId == 0) { - nextAutoChainId++; - } - - // Deploy the sequencing chain using CREATE2 - bytes memory bytecode = getBytecode(actualChainId); - sequencingChain = Create2.deploy(0, salt, bytecode); - - // Store the mapping of appchain ID to contract address - appchainContracts[actualChainId] = sequencingChain; - chainIDs.push(actualChainId); - - // Set sequencing module - SyndicateSequencingChain(sequencingChain).updateRequirementModule(address(permissionModule)); - - // Transfer owner - Ownable(sequencingChain).transferOwnership(admin); - - emit SyndicateSequencingChainCreated(actualChainId, sequencingChain, address(permissionModule)); - - return (sequencingChain, actualChainId); - } - - /// @notice Computes the address where a sequencing chain will be deployed - /// @param salt The salt for CREATE2 deployment - /// @param chainId The chain ID - /// @return The computed address - function computeSequencingChainAddress(bytes32 salt, uint256 chainId) external view returns (address) { - return Create2.computeAddress(salt, keccak256(getBytecode(chainId))); - } - - /// @notice Returns the bytecode for deploying a SyndicateSequencingChain - /// @param chainId The chain ID - /// @return The bytecode with constructor parameters - function getBytecode(uint256 chainId) public pure returns (bytes memory) { - return abi.encodePacked(type(SyndicateSequencingChain).creationCode, abi.encode(chainId, false)); - } - - /// @notice Get the next auto-generated chain ID - /// @dev Chain ID calculation: concatenates namespacePrefix with nextAutoChainId - /// @dev Example: with namespacePrefix=510 and nextAutoChainId=1, result is 5101 - /// @dev Example: with namespacePrefix=510 and nextAutoChainId=1000, result is 5101000 - /// @return The next available chain ID in the namespace - function getNextChainId() public view returns (uint256) { - // Concatenate namespace prefix with auto chain ID - // This ensures we always stay within the 510 namespace - string memory prefixStr = Strings.toString(namespacePrefix); - string memory chainIdStr = Strings.toString(nextAutoChainId); - //#olympix-ignore-abi-encode-packed-dynamic-types - string memory combined = string(abi.encodePacked(prefixStr, chainIdStr)); - return Strings.parseUint(combined); - } - - /// @notice Check if a chain ID has been used - /// @param chainId The chain ID to check - /// @return 1 if used, 0 if available - function isChainIdUsed(uint256 chainId) public view returns (bool) { - return appchainContracts[chainId] != address(0); - } - - /// @notice returns the number of appchains - function getTotalAppchains() external view returns (uint256) { - return chainIDs.length; - } - - /// @notice returns the contracts for a given list of appchain chainIDs - /// @param _chainIDs the list of chain IDs - /// @return _contracts contracts for the given chain IDs - function getContractsForAppchains(uint256[] memory _chainIDs) external view returns (address[] memory _contracts) { - address[] memory contracts = new address[](_chainIDs.length); - for (uint256 i = 0; i < _chainIDs.length; i++) { - contracts[i] = appchainContracts[_chainIDs[i]]; - } - return contracts; - } - - /// @notice returns all appchains chainIDs and associated contracts - /// @return _chainIDs - /// @return _contracts - function getAppchainsAndContracts() - external - view - returns (uint256[] memory _chainIDs, address[] memory _contracts) - { - address[] memory contracts = new address[](chainIDs.length); - for (uint256 i = 0; i < chainIDs.length; i++) { - contracts[i] = appchainContracts[chainIDs[i]]; - } - return (chainIDs, contracts); - } - - /// @notice Update namespace configuration (manager only) - /// @param newPrefix The new namespace prefix - /// old namespace prefixes can be reused, but prefixes that can generate collisions are forbidden - function updateNamespaceConfig(uint256 newPrefix) external onlyRole(MANAGER_ROLE) { - _updateNamespaceConfig(newPrefix); - } - - function _updateNamespaceConfig(uint256 newPrefix) private { - require(newPrefix > 0, "namespace prefix of 0 is forbidden"); - require(usedNamespaces[newPrefix] != NamespaceState.Reserved, "namespace collision detected"); - usedNamespaces[newPrefix] = NamespaceState.Used; - uint256 prefix = newPrefix / 10; - while (prefix > 0) { - require(usedNamespaces[prefix] != NamespaceState.Used, "namespace collision detected"); - usedNamespaces[prefix] = NamespaceState.Reserved; - prefix /= 10; - } - prefix = namespacePrefix; - namespacePrefix = newPrefix; - emit NamespaceConfigUpdated(prefix, newPrefix); - } - - /// @notice Pause the factory (admin only) - function pause() external onlyRole(DEFAULT_ADMIN_ROLE) { - _pause(); - } - - /// @notice Unpause the factory (admin only) - function unpause() external onlyRole(DEFAULT_ADMIN_ROLE) { - _unpause(); - } -} diff --git a/synd-contracts/src/factory/SyndicateFactoryWrapper.sol b/synd-contracts/src/factory/SyndicateFactoryWrapper.sol deleted file mode 100644 index d2ae87308..000000000 --- a/synd-contracts/src/factory/SyndicateFactoryWrapper.sol +++ /dev/null @@ -1,181 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.28; - -import {SyndicateFactory} from "./SyndicateFactory.sol"; -import {RequireAndModuleFactory, RequireOrModuleFactory} from "./PermissionModuleFactories.sol"; -import {IRequirementModule} from "../interfaces/IRequirementModule.sol"; -import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; -import {Pausable} from "@openzeppelin/contracts/utils/Pausable.sol"; - -/// @title SyndicateFactoryWrapper -/// @notice Wrapper factory that deploys both permission modules and sequencing chains together -/// @dev Combines functionality from individual factories for a complete deployment experience -contract SyndicateFactoryWrapper is AccessControl, Pausable { - /// @notice Emitted when a complete syndicate deployment is created - event CompleteSyndicateDeployed( - uint256 indexed chainId, - address indexed sequencingChain, - address indexed permissionModule, - ModuleType moduleType, - address admin - ); - - /// @notice Types of permission modules supported - enum ModuleType { - RequireAnd, - RequireOr - } - - bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); - - error ZeroAddress(); - error InvalidModuleType(); - - // Factory contract references - SyndicateFactory public immutable syndicateFactory; - RequireAndModuleFactory public immutable requireAndFactory; - RequireOrModuleFactory public immutable requireOrFactory; - - constructor(address admin, address _syndicateFactory, address _requireAndFactory, address _requireOrFactory) { - if ( - admin == address(0) || _syndicateFactory == address(0) || _requireAndFactory == address(0) - || _requireOrFactory == address(0) - ) revert ZeroAddress(); - - _grantRole(DEFAULT_ADMIN_ROLE, admin); - _grantRole(MANAGER_ROLE, admin); - - syndicateFactory = SyndicateFactory(_syndicateFactory); - requireAndFactory = RequireAndModuleFactory(_requireAndFactory); - requireOrFactory = RequireOrModuleFactory(_requireOrFactory); - } - - /// @notice Deploy a complete syndicate with permission module and sequencing chain - /// @param appchainId The app chain ID (0 for auto-increment) - /// @param admin The admin address for both contracts - /// @param moduleType The type of permission module to deploy (And or Or) - /// @param moduleSalt The salt for the permission module deployment - /// @param chainSalt The salt for the sequencing chain deployment - /// @return sequencingChain The deployed sequencing chain address - /// @return permissionModule The deployed permission module address - /// @return actualChainId The chain ID that was used - //#olympix-ignore-reentrancy-events - function deployCompleteSyndicate( - uint256 appchainId, - address admin, - ModuleType moduleType, - bytes32 moduleSalt, - bytes32 chainSalt - ) public whenNotPaused returns (address sequencingChain, address permissionModule, uint256 actualChainId) { - if (admin == address(0)) revert ZeroAddress(); - - // Deploy the appropriate permission module - if (moduleType == ModuleType.RequireAnd) { - permissionModule = requireAndFactory.createRequireAndModule(admin, moduleSalt); - } else if (moduleType == ModuleType.RequireOr) { - permissionModule = requireOrFactory.createRequireOrModule(admin, moduleSalt); - } else { - revert InvalidModuleType(); - } - - // Deploy the sequencing chain with the permission module - (sequencingChain, actualChainId) = syndicateFactory.createSyndicateSequencingChain( - appchainId, admin, IRequirementModule(permissionModule), chainSalt - ); - - emit CompleteSyndicateDeployed(actualChainId, sequencingChain, permissionModule, moduleType, admin); - - return (sequencingChain, permissionModule, actualChainId); - } - - /// @notice Compute addresses for a complete syndicate deployment - /// @param admin The admin address for the module - /// @param moduleType The type of permission module - /// @param moduleSalt The salt for the permission module - /// @param chainSalt The salt for the sequencing chain - /// @param chainId The chain ID for the sequencing chain - /// @return permissionModuleAddress The computed permission module address - /// @return sequencingChainAddress The computed sequencing chain address - function computeCompleteSyndicateAddresses( - address admin, - ModuleType moduleType, - bytes32 moduleSalt, - bytes32 chainSalt, - uint256 chainId - ) external view returns (address permissionModuleAddress, address sequencingChainAddress) { - // Compute permission module address - if (moduleType == ModuleType.RequireAnd) { - permissionModuleAddress = requireAndFactory.computeModuleAddress(admin, moduleSalt); - } else if (moduleType == ModuleType.RequireOr) { - permissionModuleAddress = requireOrFactory.computeModuleAddress(admin, moduleSalt); - } else { - revert InvalidModuleType(); - } - - // Compute sequencing chain address - sequencingChainAddress = syndicateFactory.computeSequencingChainAddress(chainSalt, chainId); - - return (permissionModuleAddress, sequencingChainAddress); - } - - /// @notice Get the next auto-generated chain ID from the syndicate factory - /// @return The next available chain ID - function getNextAutoChainId() external view returns (uint256) { - return syndicateFactory.getNextChainId(); - } - - /// @notice Check if a chain ID has been used in the syndicate factory - /// @param chainId The chain ID to check - /// @return true if used, false if available - function isChainIdUsed(uint256 chainId) external view returns (bool) { - return syndicateFactory.isChainIdUsed(chainId); - } - - /// @notice Get the namespace prefix from the syndicate factory - /// @return The current namespace prefix - function getNamespacePrefix() external view returns (uint256) { - return syndicateFactory.namespacePrefix(); - } - - /// @notice Deploy a syndicate with RequireAndModule - /// @param appchainId The app chain ID (0 for auto-increment) - /// @param admin The admin address for both contracts - /// @param moduleSalt The salt for the permission module deployment - /// @param chainSalt The salt for the sequencing chain deployment - /// @return sequencingChain The deployed sequencing chain address - /// @return permissionModule The deployed permission module address - /// @return actualChainId The chain ID that was used - function deployWithRequireAndModule(uint256 appchainId, address admin, bytes32 moduleSalt, bytes32 chainSalt) - external - whenNotPaused - returns (address sequencingChain, address permissionModule, uint256 actualChainId) - { - return deployCompleteSyndicate(appchainId, admin, ModuleType.RequireAnd, moduleSalt, chainSalt); - } - - /// @notice Deploy a syndicate with RequireOrModule - /// @param appchainId The app chain ID (0 for auto-increment) - /// @param admin The admin address for both contracts - /// @param moduleSalt The salt for the permission module deployment - /// @param chainSalt The salt for the sequencing chain deployment - /// @return sequencingChain The deployed sequencing chain address - /// @return permissionModule The deployed permission module address - /// @return actualChainId The chain ID that was used - function deployWithRequireOrModule(uint256 appchainId, address admin, bytes32 moduleSalt, bytes32 chainSalt) - external - whenNotPaused - returns (address sequencingChain, address permissionModule, uint256 actualChainId) - { - return deployCompleteSyndicate(appchainId, admin, ModuleType.RequireOr, moduleSalt, chainSalt); - } - - /// @notice Pause the wrapper factory (admin only) - function pause() external onlyRole(DEFAULT_ADMIN_ROLE) { - _pause(); - } - - /// @notice Unpause the wrapper factory (admin only) - function unpause() external onlyRole(DEFAULT_ADMIN_ROLE) { - _unpause(); - } -} diff --git a/synd-contracts/src/interfaces/IGasAggregator.sol b/synd-contracts/src/interfaces/IGasAggregator.sol new file mode 100644 index 000000000..62bf693a6 --- /dev/null +++ b/synd-contracts/src/interfaces/IGasAggregator.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +interface IGasAggregator { + function notifyNewImplementation(address newImplementation) external; + function notifyChainUpgrade(uint256 chainId, address newImplementation) external; + function allowedImplementations(address implementation) external view returns (bool); +} diff --git a/synd-contracts/src/interfaces/ILegacyAppchain.sol b/synd-contracts/src/interfaces/ILegacyAppchain.sol new file mode 100644 index 000000000..bdaae37e4 --- /dev/null +++ b/synd-contracts/src/interfaces/ILegacyAppchain.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +/// @title ILegacyAppchain +/// @notice Interface for legacy appchain contracts that need to be migrated +/// @dev Used to extract gas usage data from old appchain implementations during migration +interface ILegacyAppchain { + /// @notice Get the total gas tokens used for a specific epoch + /// @param epoch The epoch number to query + /// @return The amount of gas tokens used in the specified epoch + function getTokensForEpoch(uint256 epoch) external view returns (uint256); +} diff --git a/synd-contracts/src/staking/GasAggregator.sol b/synd-contracts/src/staking/GasAggregator.sol index bbad0ae74..b886a4b0d 100644 --- a/synd-contracts/src/staking/GasAggregator.sol +++ b/synd-contracts/src/staking/GasAggregator.sol @@ -4,16 +4,18 @@ pragma solidity 0.8.28; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {Create2} from "@openzeppelin/contracts/utils/Create2.sol"; import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; -import {ISyndicateSequencingChain} from "../interfaces/ISyndicateSequencingChain.sol"; -import {GasCounter} from "./GasCounter.sol"; import {Pausable} from "@openzeppelin/contracts/utils/Pausable.sol"; import {EpochTracker} from "./EpochTracker.sol"; interface ISyndicateProxy { - // This function exists in both the new proxy and legacy implementation contract + // This function exists in legacy contracts function tokensUsedPerEpoch(uint256 epoch) external view returns (uint256); } +interface IGasMeter { + function gasUsed(uint256 epoch, address chainAddress) external view returns (uint256); +} + /// @notice Storage struct for GasAggregator using ERC-7201 namespaced storage pattern /// @dev This struct is used to store the aggregated epoch data hash. /// @dev Using ERC-7201 ensures storage slots don't conflict during upgrades. @@ -38,14 +40,18 @@ contract GasAggregator is Ownable(msg.sender), Pausable, EpochTracker { CONSTANTS //////////////////////////////////////////////////////////////*/ - /// @notice Version of the GasAggregator contract (updatable during upgrades) + /// @notice Version of the GasAggregator contract /// @dev Semantic version string to track contract upgrades and compatibility - uint256 public constant VERSION = 1_000_000; // 1.0.0 (major * 1_000_000 + minor * 1_000 + patch) + uint256 public constant VERSION = 1_001_000; // 1.1.0 (major * 1_000_000 + minor * 1_000 + patch) /*////////////////////////////////////////////////////////////// STATE VARIABLES //////////////////////////////////////////////////////////////*/ + /// @notice Address of the gas meter contract + /// @dev Used to get the gas used for each appchain + address public immutable gasMeterContract; + /// @notice Factory contract address to determine create2 addresses address public factory; @@ -77,6 +83,10 @@ contract GasAggregator is Ownable(msg.sender), Pausable, EpochTracker { /// @notice appchain contract addresses mapping mapping(uint256 chainId => address) public appchainContract; + /// @notice Legacy appchain contract addresses mapping + /// @dev Used to track legacy appchain contracts + mapping(uint256 chainId => bool) public isLegacyAppchainContract; + /*////////////////////////////////////////////////////////////// ERRORS //////////////////////////////////////////////////////////////*/ @@ -144,11 +154,14 @@ contract GasAggregator is Ownable(msg.sender), Pausable, EpochTracker { /// @dev The epoch is the first epoch to start from /// @dev The addChainFee is the fee to add a chain (setting it to 0 will default to 5 ether) /// @dev The maxAppchainsToQuery is the maximum number of appchains to query (setting it to 0 will default to 100) + /// @param _gasMeterContract The address of the gas meter contract /// @param _epoch The epoch to start from /// @param _addChainFee The fee to add a chain /// @param _maxAppchainsToQuery The maximum number of appchains to query - constructor(uint256 _epoch, uint256 _addChainFee, uint256 _maxAppchainsToQuery) { + constructor(address _gasMeterContract, uint256 _epoch, uint256 _addChainFee, uint256 _maxAppchainsToQuery) { require(_epoch != 0); + gasMeterContract = _gasMeterContract; + currentEpoch = _epoch; addChainFee = _addChainFee; if (addChainFee == 0) { @@ -249,7 +262,7 @@ contract GasAggregator is Ownable(msg.sender), Pausable, EpochTracker { for (uint256 i = 0; i < appchainToQuery; i++) { uint256 chainId = _appchains.at(aggregateIndex + i); - uint256 gasUsed = ISyndicateProxy(appchainContract[chainId]).tokensUsedPerEpoch(currentEpoch); + uint256 gasUsed = getAppchainGasUsed(currentEpoch, chainId); // ignore appchains with no gas usage in the epoch if (gasUsed > 0) { chainIds[chainIdCount] = chainId; @@ -293,18 +306,28 @@ contract GasAggregator is Ownable(msg.sender), Pausable, EpochTracker { return _appchains.at(index); } + /// @notice Get the gas used for a given appchain + /// @param chainId The chain ID to get the gas used for + /// @return The gas used for the given appchain for the current epoch + function getAppchainGasUsed(uint256 epoch, uint256 chainId) public view returns (uint256) { + if (isLegacyAppchainContract[chainId]) { + return ISyndicateProxy(appchainContract[chainId]).tokensUsedPerEpoch(epoch); + } + + return IGasMeter(gasMeterContract).gasUsed(epoch, appchainContract[chainId]); + } + /*////////////////////////////////////////////////////////////// ADMIN FUNCTIONS //////////////////////////////////////////////////////////////*/ - /// @notice Adds a chain to the gas tracking registry with a chainContract override. - /// This legacy function is deactivated once the factory is set. - function addLegacyChain(uint256 chainId, address chainContract) external onlyOwner whenNotPaused { - require(factory == address(0), FactoryAlreadySet()); + /// @notice Manually adds a chain to the gas tracking registry with a chainContract override. + function adminAddChain(uint256 chainId, address chainContract, bool isLegacy) external onlyOwner whenNotPaused { require(chainId > 0, ZeroChainId()); - require(_appchains.add(chainId), ChainAlreadyTracked(chainId)); require(chainContract.code.length > 0, ChainNotFound(chainId)); + require(_appchains.add(chainId), ChainAlreadyTracked(chainId)); appchainContract[chainId] = chainContract; + isLegacyAppchainContract[chainId] = isLegacy; emit ChainAdded(currentEpoch, chainId, chainContract, msg.sender); } diff --git a/synd-contracts/src/staking/GasArchive.sol b/synd-contracts/src/staking/GasArchive.sol index 5b05d5e9a..6ef6b5468 100644 --- a/synd-contracts/src/staking/GasArchive.sol +++ b/synd-contracts/src/staking/GasArchive.sol @@ -10,19 +10,68 @@ import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +/// @notice Storage struct for GasArchive using ERC-7201 namespaced storage pattern +/// @dev This struct contains all the state variables for the gas archive contract. +/// Using ERC-7201 ensures storage slots don't conflict during upgrades. +/// @custom:storage-location erc7201:syndicate.storage.GasArchive +struct GasArchiveStorage { + /// @notice the current epoch + uint256 epoch; + /// @notice list of sequencing chains + EnumerableSet.UintSet seqChains; + /// @notice tracks the remaining chains for the epoch + uint256 epochRemainingChains; + /// @notice mapping of sequencing chain IDs to the address of the gas aggregator contract + mapping(uint256 chainId => address aggregatorAddress) seqChainGasAggregator; + /// @notice mapping of sequencing chain IDs to the address of the Outbox contract for that sequencing chain (where the confirmed rollup hash can be found) + mapping(uint256 chainId => address outboxAddress) seqChainOutbox; + mapping(uint256 chainId => bool) seqChainSettlesToBase; + /// @notice block hashes for l1 and settlement chains + mapping(bytes32 blockHash => bool isPresent) ethBlockHashes; + mapping(bytes32 blockHash => bool isPresent) setBlockHashes; + /// @notice tracks which sequencing chains have submitted data for each epoch + mapping(uint256 epoch => mapping(uint256 chainId => bool submitted)) epochChainDataSubmitted; + /// @notice Stores the verified epoch data hash + mapping(uint256 epoch => mapping(uint256 seqChainID => bytes32 dataHash)) epochVerifiedDataHash; + /// @notice Validated epoch data + mapping(uint256 epoch => uint256 totalTokens) totalGasFees; + mapping(uint256 epoch => EnumerableSet.UintSet appchainIds) appchainIDs; + mapping(uint256 epoch => mapping(uint256 appchainId => uint256 tokens)) appchainGasFees; +} + /// @title GasArchive /// @notice Lives on the staking appchain and trustlessly validates and stores gas usage data from multiple sequencing chains using storage proofs /// @dev This contract supports arbitrum-based sequencing chains only (with the exception of the settlement chain, which can be any chain) contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPSUpgradeable { + uint256 public constant VERSION = 1_000_000; // 1.0.0 + using EnumerableSet for EnumerableSet.UintSet; using RLPReader for RLPReader.RLPItem; using RLPReader for bytes; + /*////////////////////////////////////////////////////////////// + STORAGE + //////////////////////////////////////////////////////////////*/ + + /// @notice ERC-7201 storage slot for GasArchive-specific data + /// @dev Generated using: cast index-erc7201 syndicate.storage.GasArchive + bytes32 public constant GAS_ARCHIVE_STORAGE_LOCATION = + 0xd6f5d5932ff2716a1d050c5c8f3a1f0545e980f5b0f5ff32a773ed0818c1a400; + + /// @notice Internal function to access the ERC-7201 namespaced storage + /// @dev Uses inline assembly to access the specific storage slot for this contract's data + /// @return $ Storage pointer to the GasArchiveStorage struct + function _getGasArchiveStorage() internal pure returns (GasArchiveStorage storage $) { + assembly { + $.slot := GAS_ARCHIVE_STORAGE_LOCATION + } + } + /*////////////////////////////////////////////////////////////// CONSTANTS //////////////////////////////////////////////////////////////*/ - /// @notice ERC-7201 storage slot for GasAggregator-specific data + /// @notice ERC-7201 storage slot for GasAggregator-specific data (used for storage proofs) /// @dev Generated using: cast index-erc7201 syndicate.storage.GasAggregator bytes32 public constant GAS_AGGREGATOR_STORAGE_LOCATION = 0xb7dfb3be9e2ba9b0349e11a21cd1baebde23ce111dd0651619b69a6e26aa0600; @@ -48,38 +97,97 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS uint256 public immutable settlementChainID; /*////////////////////////////////////////////////////////////// - STORAGE VARIABLES + STORAGE VIEW FUNCTIONS //////////////////////////////////////////////////////////////*/ - /// @notice the current epoch - uint256 public epoch; + /// @notice Get the current epoch + /// @return The current epoch number + function epoch() public view returns (uint256) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.epoch; + } - /// @notice list of sequencing chains - // The chains are enumerable to make it easy to tell which chains are tracked by the archiver - EnumerableSet.UintSet seqChains; + /// @notice Get the number of remaining chains for the current epoch + /// @return The number of remaining chains + function epochRemainingChains() public view returns (uint256) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.epochRemainingChains; + } - /// @notice tracks the remaining chains for the epoch - uint256 public epochRemainingChains; + /// @notice Get the gas aggregator address for a sequencing chain + /// @param chainId The chain ID + /// @return The gas aggregator address + function seqChainGasAggregator(uint256 chainId) public view returns (address) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.seqChainGasAggregator[chainId]; + } - /// @notice mapping of sequencing chain IDs to the address of the gas aggregator contract - mapping(uint256 chainId => address aggregatorAddress) public seqChainGasAggregator; - /// @notice mapping of sequencing chain IDs to the address of the Outbox contract for that sequencing chain (where the confirmed rollup hash can be found) - mapping(uint256 chainId => address outboxAddress) public seqChainOutbox; - mapping(uint256 chainId => bool) public seqChainSettlesToBase; - /// @notice block hashes for l1 and settlement chains - mapping(bytes32 blockHash => bool isPresent) public ethBlockHashes; - mapping(bytes32 blockHash => bool isPresent) public setBlockHashes; + /// @notice Get the outbox address for a sequencing chain + /// @param chainId The chain ID + /// @return The outbox address + function seqChainOutbox(uint256 chainId) public view returns (address) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.seqChainOutbox[chainId]; + } - /// @notice tracks which sequencing chains have submitted data for each epoch - mapping(uint256 epoch => mapping(uint256 chainId => bool submitted)) public epochChainDataSubmitted; + /// @notice Check if a sequencing chain settles to base + /// @param chainId The chain ID + /// @return True if settles to base + function seqChainSettlesToBase(uint256 chainId) public view returns (bool) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.seqChainSettlesToBase[chainId]; + } - /// @notice Stores the verified epoch data hash - mapping(uint256 epoch => mapping(uint256 seqChainID => bytes32 dataHash)) public epochVerifiedDataHash; + /// @notice Check if an ETH block hash is known + /// @param blockHash The block hash + /// @return True if known + function ethBlockHashes(bytes32 blockHash) public view returns (bool) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.ethBlockHashes[blockHash]; + } - /// @notice Validated epoch data - mapping(uint256 epoch => uint256 totalTokens) public totalGasFees; - mapping(uint256 epoch => EnumerableSet.UintSet appchainIds) internal appchainIDs; - mapping(uint256 epoch => mapping(uint256 appchainId => uint256 tokens)) public appchainGasFees; + /// @notice Check if a settlement block hash is known + /// @param blockHash The block hash + /// @return True if known + function setBlockHashes(bytes32 blockHash) public view returns (bool) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.setBlockHashes[blockHash]; + } + + /// @notice Check if a chain has submitted data for an epoch + /// @param _epoch The epoch + /// @param chainId The chain ID + /// @return True if submitted + function epochChainDataSubmitted(uint256 _epoch, uint256 chainId) public view returns (bool) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.epochChainDataSubmitted[_epoch][chainId]; + } + + /// @notice Get the verified epoch data hash for a chain + /// @param _epoch The epoch + /// @param seqChainID The sequencing chain ID + /// @return The data hash + function epochVerifiedDataHash(uint256 _epoch, uint256 seqChainID) public view returns (bytes32) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.epochVerifiedDataHash[_epoch][seqChainID]; + } + + /// @notice Get the total gas fees for an epoch + /// @param _epoch The epoch + /// @return The total fees + function totalGasFees(uint256 _epoch) public view returns (uint256) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.totalGasFees[_epoch]; + } + + /// @notice Get the gas fees for a specific appchain in an epoch + /// @param _epoch The epoch + /// @param appchainId The appchain ID + /// @return The gas fees + function appchainGasFees(uint256 _epoch, uint256 appchainId) public view returns (uint256) { + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.appchainGasFees[_epoch][appchainId]; + } /*////////////////////////////////////////////////////////////// EVENTS @@ -148,7 +256,8 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS * @param _epoch Initial epoch number (stored in proxy storage) */ function initialize(uint256 _epoch) external initializer { - epoch = _epoch; + GasArchiveStorage storage $ = _getGasArchiveStorage(); + $.epoch = _epoch; __Ownable_init(msg.sender); } @@ -163,8 +272,9 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS function sendBlockHashes(bytes32 ethBlockHash, bytes32 setBlockHash) external { require(msg.sender == blockHashSender, NotBlockHashSender()); - ethBlockHashes[ethBlockHash] = true; - setBlockHashes[setBlockHash] = true; + GasArchiveStorage storage $ = _getGasArchiveStorage(); + $.ethBlockHashes[ethBlockHash] = true; + $.setBlockHashes[setBlockHash] = true; emit KnownBlockHash(ethBlockHash, setBlockHash); } @@ -174,7 +284,8 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS bytes[] calldata storageProof ) external { _confirmEpochDataHash(settlementChainID, blockHeader, accountProof, storageProof); - require(setBlockHashes[keccak256(blockHeader)], InvalidSeqBlockHeader()); + GasArchiveStorage storage $ = _getGasArchiveStorage(); + require($.setBlockHashes[keccak256(blockHeader)], InvalidSeqBlockHeader()); } /// @notice Validates and stores the epochDataHash for a given sequencing chain / epoch using sequencing chain storage proofs @@ -197,23 +308,24 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS bytes[] calldata seqAccountProof, bytes[] calldata seqStorageProof ) external { + GasArchiveStorage storage $ = _getGasArchiveStorage(); _confirmEpochDataHash(seqChainID, seqBlockHeader, seqAccountProof, seqStorageProof); if (seqChainID == settlementChainID) { - require(setBlockHashes[keccak256(seqBlockHeader)], InvalidSeqBlockHeader()); + require($.setBlockHashes[keccak256(seqBlockHeader)], InvalidSeqBlockHeader()); return; } - if (seqChainSettlesToBase[seqChainID]) { - require(setBlockHashes[keccak256(ethBlockHeader)], InvalidSetBlockHeader()); + if ($.seqChainSettlesToBase[seqChainID]) { + require($.setBlockHashes[keccak256(ethBlockHeader)], InvalidSetBlockHeader()); } else { - require(ethBlockHashes[keccak256(ethBlockHeader)], InvalidEthBlockHeader()); + require($.ethBlockHashes[keccak256(ethBlockHeader)], InvalidEthBlockHeader()); } bytes32 verifiedSeqChainBlockHash = _getSlotValueFromProof({ blockHeader: ethBlockHeader, accountProof: ethAccountProof, storageProof: ethStorageProof, - account: seqChainOutbox[seqChainID], + account: $.seqChainOutbox[seqChainID], storageSlot: keccak256(abi.encode(sendRoot, SEND_ROOT_STORAGE_SLOT)) }); @@ -227,25 +339,26 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS bytes[] calldata accountProof, bytes[] calldata storageProof ) internal { + GasArchiveStorage storage $ = _getGasArchiveStorage(); // prevent resubmission for the same epoch and chain - require(epochVerifiedDataHash[epoch][chainID] == bytes32(0), AlreadySubmitted()); + require($.epochVerifiedDataHash[$.epoch][chainID] == bytes32(0), AlreadySubmitted()); // submissions are only allowed for active sequencing chains - require(seqChains.contains(chainID), InvalidSequencingChain()); + require($.seqChains.contains(chainID), InvalidSequencingChain()); // verify that the provided epoch data is valid according to the sequencing chain proof bytes32 verifiedEpochDataHash = _getSlotValueFromProof({ blockHeader: blockHeader, accountProof: accountProof, storageProof: storageProof, - account: seqChainGasAggregator[chainID], - storageSlot: keccak256(abi.encode(epoch, GAS_AGGREGATOR_STORAGE_LOCATION)) + account: $.seqChainGasAggregator[chainID], + storageSlot: keccak256(abi.encode($.epoch, GAS_AGGREGATOR_STORAGE_LOCATION)) }); require(verifiedEpochDataHash != bytes32(0), EmptyDataHash()); // data submitted is valid, store it - epochVerifiedDataHash[epoch][chainID] = verifiedEpochDataHash; + $.epochVerifiedDataHash[$.epoch][chainID] = verifiedEpochDataHash; } /// @notice Receives the pre-image data for a verified epoch @@ -255,33 +368,34 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS function submitEpochPreImageData(uint256 seqChainID, uint256[] calldata appchains, uint256[] calldata tokens) external { + GasArchiveStorage storage $ = _getGasArchiveStorage(); // prevent resubmission for the same epoch and chain - require(!epochChainDataSubmitted[epoch][seqChainID], AlreadySubmitted()); + require(!$.epochChainDataSubmitted[$.epoch][seqChainID], AlreadySubmitted()); // note: we skip validating that appchains.length == tokens.length // because the GasAggregator already enforces this. // similarly we skip epoch validation because confirmEpochDataHash already enforces this. - require(epochVerifiedDataHash[epoch][seqChainID] == keccak256(abi.encode(appchains, tokens)), InvalidData()); + require($.epochVerifiedDataHash[$.epoch][seqChainID] == keccak256(abi.encode(appchains, tokens)), InvalidData()); for (uint256 i = 0; i < appchains.length; i++) { uint256 gasUsed = tokens[i]; // ignore appchains with no gas if (gasUsed > 0) { uint256 appchain = appchains[i]; - appchainIDs[epoch].add(appchain); - totalGasFees[epoch] += gasUsed; - appchainGasFees[epoch][appchain] += gasUsed; + $.appchainIDs[$.epoch].add(appchain); + $.totalGasFees[$.epoch] += gasUsed; + $.appchainGasFees[$.epoch][appchain] += gasUsed; } } - epochChainDataSubmitted[epoch][seqChainID] = true; - epochRemainingChains--; - if (epochRemainingChains == 0) { - emit EpochCompleted(epoch); - epoch++; - epochRemainingChains = seqChains.length(); + $.epochChainDataSubmitted[$.epoch][seqChainID] = true; + $.epochRemainingChains--; + if ($.epochRemainingChains == 0) { + emit EpochCompleted($.epoch); + $.epoch++; + $.epochRemainingChains = $.seqChains.length(); } - emit ChainSubmitted(epoch, seqChainID); + emit ChainSubmitted($.epoch, seqChainID); } /*////////////////////////////////////////////////////////////// @@ -345,30 +459,35 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS //////////////////////////////////////////////////////////////*/ function getAppchainGasFees(uint256 epochIndex, uint256 appchainId) external view returns (uint256) { - require(epochIndex < epoch, NotArchivedEpoch()); - return appchainGasFees[epochIndex][appchainId]; + GasArchiveStorage storage $ = _getGasArchiveStorage(); + require(epochIndex < $.epoch, NotArchivedEpoch()); + return $.appchainGasFees[epochIndex][appchainId]; } function getTotalGasFees(uint256 epochIndex) external view returns (uint256) { - require(epochIndex < epoch, NotArchivedEpoch()); - return totalGasFees[epochIndex]; + GasArchiveStorage storage $ = _getGasArchiveStorage(); + require(epochIndex < $.epoch, NotArchivedEpoch()); + return $.totalGasFees[epochIndex]; } function getAppchainIds(uint256 epochIndex) external view returns (uint256[] memory chainIDs) { - require(epochIndex < epoch, NotArchivedEpoch()); - bytes32[] memory ids = appchainIDs[epochIndex]._inner._values; + GasArchiveStorage storage $ = _getGasArchiveStorage(); + require(epochIndex < $.epoch, NotArchivedEpoch()); + bytes32[] memory ids = $.appchainIDs[epochIndex]._inner._values; assembly { chainIDs := ids } } function getAppchainCount(uint256 epochIndex) external view returns (uint256) { - require(epochIndex < epoch, NotArchivedEpoch()); - return appchainIDs[epochIndex].length(); + GasArchiveStorage storage $ = _getGasArchiveStorage(); + require(epochIndex < $.epoch, NotArchivedEpoch()); + return $.appchainIDs[epochIndex].length(); } function sequencingChainCount() external view returns (uint256) { - return seqChains.length(); + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.seqChains.length(); } // when count is zero, returns the full list of results @@ -378,29 +497,32 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS view returns (uint256[] memory chainIds, uint256[] memory gasUsed) { - require(epochIndex < epoch, NotArchivedEpoch()); - uint256 maxCount = appchainIDs[epochIndex].length() - startIndex; + GasArchiveStorage storage $ = _getGasArchiveStorage(); + require(epochIndex < $.epoch, NotArchivedEpoch()); + uint256 maxCount = $.appchainIDs[epochIndex].length() - startIndex; if (count == 0 || count > maxCount) { count = maxCount; } chainIds = new uint256[](count); gasUsed = new uint256[](count); for (uint256 i = 0; i < count; i++) { - uint256 chainId = appchainIDs[epochIndex].at(startIndex + i); + uint256 chainId = $.appchainIDs[epochIndex].at(startIndex + i); chainIds[i] = chainId; - gasUsed[i] = appchainGasFees[epochIndex][chainId]; + gasUsed[i] = $.appchainGasFees[epochIndex][chainId]; } } function getSequencingChainIds() external view returns (uint256[] memory chainIDs) { - bytes32[] memory ids = seqChains._inner._values; + GasArchiveStorage storage $ = _getGasArchiveStorage(); + bytes32[] memory ids = $.seqChains._inner._values; assembly { chainIDs := ids } } function sequencingChainId(uint256 index) external view returns (uint256) { - return seqChains.at(index); + GasArchiveStorage storage $ = _getGasArchiveStorage(); + return $.seqChains.at(index); } /*////////////////////////////////////////////////////////////// @@ -419,19 +541,22 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS require(aggregatorAddress != address(0), ZeroAddress()); require(chainID != 0, ZeroChainId()); - require(seqChains.add(chainID), SequencingChainAlreadyExists()); + GasArchiveStorage storage $ = _getGasArchiveStorage(); + require($.seqChains.add(chainID), SequencingChainAlreadyExists()); // If the chain has data for this epoch already, dont increment the counter - if (!epochChainDataSubmitted[epoch][chainID]) { - epochRemainingChains++; + if (!$.epochChainDataSubmitted[$.epoch][chainID]) { + $.epochRemainingChains++; } - seqChainGasAggregator[chainID] = aggregatorAddress; + $.seqChainGasAggregator[chainID] = aggregatorAddress; if (chainID != settlementChainID) { require(outboxAddress != address(0), ZeroAddress()); - seqChainOutbox[chainID] = outboxAddress; - seqChainSettlesToBase[chainID] = settlesToBase; + $.seqChainOutbox[chainID] = outboxAddress; + $.seqChainSettlesToBase[chainID] = settlesToBase; } - emit ChainAdded(epoch, chainID, aggregatorAddress, seqChainOutbox[chainID], seqChainSettlesToBase[chainID]); + emit ChainAdded( + $.epoch, chainID, aggregatorAddress, $.seqChainOutbox[chainID], $.seqChainSettlesToBase[chainID] + ); } function addSettlementChainAsSequencingChain(address aggregatorAddress) external { @@ -441,22 +566,23 @@ contract GasArchive is Initializable, OwnableUpgradeable, IGasDataProvider, UUPS /// @notice Removes an existing sequencing chain immediately /// @dev Only admin can remove sequencing chains function removeSequencingChain(uint256 chainID) external onlyOwner { - require(seqChains.remove(chainID), SequencingChainDoesNotExist()); - seqChainGasAggregator[chainID] = address(0); + GasArchiveStorage storage $ = _getGasArchiveStorage(); + require($.seqChains.remove(chainID), SequencingChainDoesNotExist()); + $.seqChainGasAggregator[chainID] = address(0); if (chainID != settlementChainID) { - seqChainOutbox[chainID] = address(0); - seqChainSettlesToBase[chainID] = false; + $.seqChainOutbox[chainID] = address(0); + $.seqChainSettlesToBase[chainID] = false; } - if (!epochChainDataSubmitted[epoch][chainID]) { + if (!$.epochChainDataSubmitted[$.epoch][chainID]) { // clear the verified data hash in case it is set - epochVerifiedDataHash[epoch][chainID] = bytes32(0); - epochRemainingChains--; - if (epochRemainingChains == 0) { - emit EpochCompleted(epoch); - epoch++; - epochRemainingChains = seqChains.length(); + $.epochVerifiedDataHash[$.epoch][chainID] = bytes32(0); + $.epochRemainingChains--; + if ($.epochRemainingChains == 0) { + emit EpochCompleted($.epoch); + $.epoch++; + $.epochRemainingChains = $.seqChains.length(); } } - emit ChainRemoved(epoch, chainID); + emit ChainRemoved($.epoch, chainID); } } diff --git a/synd-contracts/src/staking/GasCounter.sol b/synd-contracts/src/staking/GasCounter.sol index c51bafe33..ff71090c7 100644 --- a/synd-contracts/src/staking/GasCounter.sol +++ b/synd-contracts/src/staking/GasCounter.sol @@ -3,6 +3,14 @@ pragma solidity 0.8.28; import {EpochTracker} from "./EpochTracker.sol"; +/// @custom:storage-location erc7201:syndicate.storage.GasCounter +struct GasCounterStorage { + /// @notice Whether gas tracking is enabled + bool gasTrackingEnabled; + /// @notice Mapping of epoch to gas data + mapping(uint256 => uint256) tokensUsedPerEpoch; +} + /** * @title GasCounter * @notice Tracks gas consumption over 30-day epochs for reward calculation @@ -11,16 +19,34 @@ import {EpochTracker} from "./EpochTracker.sol"; */ abstract contract GasCounter is EpochTracker { /*////////////////////////////////////////////////////////////// - STATE VARIABLES + STATE VARIABLE VIEW FUNCTIONS //////////////////////////////////////////////////////////////*/ - /// @notice Whether gas tracking is disabled - /// @dev When true, gas tracking is bypassed for all functions using trackGasUsage modifier - bool public gasTrackingDisabled; + // cast index-erc7201 syndicate.storage.GasCounter + bytes32 public constant GAS_COUNTER_STORAGE_LOCATION = + 0x119494e47c2426a6072fc6072ec5c5d5ae865a3372fd102c643c18e978b14800; + + function _getGasCounterStorage() internal pure returns (GasCounterStorage storage $) { + assembly { + $.slot := GAS_COUNTER_STORAGE_LOCATION + } + } - /// @notice Mapping from epoch index to total tokens used in gas fees for that epoch - /// @dev Accumulates all gas costs (gasUsed * gasPrice) for each epoch - mapping(uint256 epochIndex => uint256 tokensUsed) public tokensUsedPerEpoch; + function gasTrackingEnabled() public view returns (bool) { + GasCounterStorage storage $ = _getGasCounterStorage(); + return $.gasTrackingEnabled; + } + + function tokensUsedPerEpoch(uint256 epoch) public view returns (uint256) { + GasCounterStorage storage $ = _getGasCounterStorage(); + return $.tokensUsedPerEpoch[epoch]; + } + + /*////////////////////////////////////////////////////////////// + ERRORS + //////////////////////////////////////////////////////////////*/ + error GasTrackingAlreadyEnabled(); + error GasTrackingAlreadyDisabled(); /*////////////////////////////////////////////////////////////// MODIFIERS @@ -30,7 +56,7 @@ abstract contract GasCounter is EpochTracker { /// @dev Automatically measures gas consumption and converts to token cost /// Gas tracking can be disabled by setting gasTrackingDisabled to true modifier trackGasUsage() { - if (gasTrackingDisabled) { + if (!gasTrackingEnabled()) { _; return; } @@ -63,23 +89,39 @@ abstract contract GasCounter is EpochTracker { gasPrice = 1; } - // Add gas cost to current epoch total - // Using unchecked for gas efficiency since gasUsed * gasPrice cannot realistically overflow - unchecked { - tokensUsedPerEpoch[currentEpoch] += gasUsed * gasPrice; - } + // Add gas and cost to current epoch + _getGasCounterStorage().tokensUsedPerEpoch[currentEpoch] += gasUsed * gasPrice; } /*////////////////////////////////////////////////////////////// VIEW FUNCTIONS //////////////////////////////////////////////////////////////*/ - /// @notice Get the total tokens used in gas fees for a given epoch - /// @dev Returns the accumulated gas costs for the specified epoch - /// @param epochIndex The epoch index to query - /// @return The total tokens used in gas fees for the specified epoch - /// @custom:example If epoch 1 had 1000 gas units at 20 gwei, returns 20000 wei - function getTokensForEpoch(uint256 epochIndex) external view returns (uint256) { - return tokensUsedPerEpoch[epochIndex]; + /// @notice get the gas usage for a given epoch + /// @param epoch The epoch to query + function getTokensForEpoch(uint256 epoch) external view returns (uint256) { + return tokensUsedPerEpoch(epoch); + } + + /*////////////////////////////////////////////////////////////// + ADMIN FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + /// @notice Disable gas tracking if needed + /// @dev This is an internal function that should be exposed by inheriting contracts with proper access control + function _disableGasTracking() internal { + if (gasTrackingEnabled() == false) { + revert GasTrackingAlreadyDisabled(); + } + _getGasCounterStorage().gasTrackingEnabled = false; + } + + /// @notice Enable gas tracking + /// @dev This is an internal function that should be exposed by inheriting contracts with proper access control + function _enableGasTracking() internal { + if (gasTrackingEnabled() == true) { + revert GasTrackingAlreadyEnabled(); + } + _getGasCounterStorage().gasTrackingEnabled = true; } } diff --git a/synd-contracts/src/staking/GasMeter.sol b/synd-contracts/src/staking/GasMeter.sol new file mode 100644 index 000000000..903d73a55 --- /dev/null +++ b/synd-contracts/src/staking/GasMeter.sol @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import {EpochTracker} from "./EpochTracker.sol"; +import {ReentrancyGuardTransientUpgradeable} from + "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardTransientUpgradeable.sol"; + +struct GasMeterStorage { + /// @notice Mapping of epoch to gas data + mapping(uint256 epoch => mapping(address chainAddress => uint256 gasUsed)) gasUsed; +} + +/// @title GasMeter +/// @notice Tracks gas usage for sequencing chains +/// @dev This contract is used to track gas usage for sequencing chains per epoch +contract GasMeter is + Initializable, + OwnableUpgradeable, + UUPSUpgradeable, + ReentrancyGuardTransientUpgradeable, + EpochTracker +{ + uint256 public constant VERSION = 1_000_000; // 1.0.0 + + /*////////////////////////////////////////////////////////////// + STORAGE + //////////////////////////////////////////////////////////////*/ + + /// @notice Storage slot for GasMeter-specific data + /// @dev Generated using: cast index-erc7201 syndicate.storage.GasMeter + bytes32 public constant GAS_METER_STORAGE_LOCATION = + 0xfc98281d044415bf020b282d0d9074ae05a385f11f6d4a56281e2a89efbc8900; + + /// @notice Internal function to access the ERC-7201 namespaced storage + /// @dev Uses inline assembly to access the specific storage slot for this contract's data + /// @return $ Storage pointer to the GasMeterStorage struct + function _getGasMeterStorage() private pure returns (GasMeterStorage storage $) { + assembly { + $.slot := GAS_METER_STORAGE_LOCATION + } + } + + /// @notice Get the gas used for a given epoch and chain address + /// @param epoch The epoch to get the gas used for + /// @param chainAddress The address of the chain to get the gas used for + /// @return The gas used for the given epoch and chain address + function gasUsed(uint256 epoch, address chainAddress) public view returns (uint256) { + GasMeterStorage storage $ = _getGasMeterStorage(); + return $.gasUsed[epoch][chainAddress]; + } + + constructor() { + _disableInitializers(); + } + + /// @notice Initialize the GasMeter contract + /// @dev Initializes the GasMeter contract and sets the owner + function initialize() external initializer { + __Ownable_init(msg.sender); + } + + /// @notice Meter a call and track the gas used + /// @dev Meters the gas used for a call and tracks it in the gas used mapping + /// @param meteredCall The call to track gas for + function meterCall(bytes calldata meteredCall) public nonReentrant { + uint256 startGas = gasleft(); + (bool success, bytes memory result) = address(msg.sender).call(meteredCall); + if (!success) { + assembly { + revert(add(result, 32), mload(result)) + } + } + + uint256 gasPrice = tx.gasprice; + + // WORKAROUND: estimate gas will give a wrong value when called with tx.gasprice 0 + // Use minimum price of 1 wei to ensure calculation doesn't fail + if (gasPrice == 0) { + gasPrice = 1; + } + _getGasMeterStorage().gasUsed[getCurrentEpoch()][msg.sender] += (startGas - gasleft()) * gasPrice; + } + + /// @notice Authorizes the upgrade of the GasMeter contract + /// @dev Authorizes the upgrade of the GasMeter contract only if the caller is the owner + /// @param newImplementation The address of the new implementation contract + function _authorizeUpgrade(address newImplementation) internal override onlyOwner {} +} diff --git a/synd-contracts/src/staking/RelayerMocks.sol b/synd-contracts/src/staking/RelayerMocks.sol index 7e76a6f3b..8f8ef20dd 100644 --- a/synd-contracts/src/staking/RelayerMocks.sol +++ b/synd-contracts/src/staking/RelayerMocks.sol @@ -8,7 +8,7 @@ contract RelayerMocks { emit Deposit(msg.sender, epochIndex, msg.value); } - function getCurrentEpoch() external view returns (uint256) { + function getCurrentEpoch() external pure returns (uint256) { return 1; } } diff --git a/synd-contracts/src/token/AccessControlledERC20.sol b/synd-contracts/src/token/AccessControlledERC20.sol index e926d5a7b..c10f543d2 100644 --- a/synd-contracts/src/token/AccessControlledERC20.sol +++ b/synd-contracts/src/token/AccessControlledERC20.sol @@ -3,8 +3,6 @@ pragma solidity 0.8.28; import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; -import {ERC20Permit, Nonces} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol"; -import {ERC20Votes} from "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol"; contract AccessControlledERC20 is ERC20, AccessControl { bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); diff --git a/synd-contracts/src/token/testnet-synd-token/TestnetSyndToken.sol b/synd-contracts/src/token/testnet-synd-token/TestnetSyndToken.sol index 12a4db68e..2dd2d9600 100644 --- a/synd-contracts/src/token/testnet-synd-token/TestnetSyndToken.sol +++ b/synd-contracts/src/token/testnet-synd-token/TestnetSyndToken.sol @@ -23,7 +23,6 @@ contract TestnetSyndToken is ERC20, AccessControl, ERC20Permit, ERC20Votes { constructor(address defaultAdmin, address minter) ERC20("Testnet Syndicate", "TestnetSYND") ERC20Permit("Testnet Syndicate") - ERC20Votes() { if (defaultAdmin == address(0)) revert ZeroAddress(); if (minter == address(0)) revert ZeroAddress(); diff --git a/synd-contracts/src/upgrade/ENVIRONMENT.md b/synd-contracts/src/upgrade/ENVIRONMENT.md new file mode 100644 index 000000000..eb1ff635f --- /dev/null +++ b/synd-contracts/src/upgrade/ENVIRONMENT.md @@ -0,0 +1,155 @@ +# 🔧 Environment Variables Reference + +Complete reference for all environment variables used in deployment and upgrades. + +## Required Variables + +### Network Configuration + +```bash +# RPC endpoint for the target network +RPC_URL=https://your-rpc-endpoint + +# Your foundry account name (created with `cast wallet import`) +ACCOUNT=deployer + +# Your deployer address +DEV_PUB_ADDRESS=0xYourDeployerAddress +``` + +### Admin Configuration + +```bash +# Address that will own all contracts (receive DEFAULT_ADMIN_ROLE) +ADMIN_ADDRESS=0xYourAdminAddress +``` + +## Post-Deployment Variables + +After deploying, add these to your `.env`: + +```bash +# SyndicateFactory proxy address +FACTORY_ADDRESS=0xFactoryProxyAddress + +# GasAggregator proxy address (get with: cast call $FACTORY_ADDRESS "gasAggregator()(address)") +GAS_AGGREGATOR_ADDRESS=0xGasAggregatorProxyAddress +``` + +## Chain-Specific Variables + +### Creating Chains + +```bash +# User-provided nonce for deterministic chain ID generation (1, 2, 3, ...) +# The factory will compute the actual chain ID from this nonce +NONCE=1 + +# Optional: Custom permission module address +# If not set, deploys new AlwaysAllowedModule +PERMISSION_MODULE=0xYourPermissionModuleAddress +``` + +### Upgrading Chains + +```bash +# Address of the chain to upgrade +CHAIN_ADDRESS=0xSequencingChainProxyAddress +``` + +## Optional Variables + +### ArbConfigManager Deployment + +```bash +# Owner address for ArbConfigManager +OWNER_ADDRESS=0xOwnerAddress +``` + +--- + +## Example .env File + +```bash +# Network +RPC_URL=https://sepolia.base.org +ACCOUNT=deployer +DEV_PUB_ADDRESS=0x1234567890123456789012345678901234567890 + +# Admin +ADMIN_ADDRESS=0xabcdefabcdefabcdefabcdefabcdefabcdefabcd + +# Deployed Contracts (fill in after deployment) +FACTORY_ADDRESS= +GAS_AGGREGATOR_ADDRESS= + +# For operations +NONCE=1 +CHAIN_ADDRESS= + +# Optional +PERMISSION_MODULE= +OWNER_ADDRESS= +``` + +--- + +## Getting Addresses + +### After Factory Deployment + +```bash +# Get GasAggregator address +cast call $FACTORY_ADDRESS "gasAggregator()(address)" --rpc-url $RPC_URL + +# Get all chain IDs +cast call $FACTORY_ADDRESS "chainIDs()(uint256[])" --rpc-url $RPC_URL + +# Get specific chain address +cast call $FACTORY_ADDRESS "appchainContracts(uint256)(address)" 1 --rpc-url $RPC_URL + +# Get current implementation +cast call $FACTORY_ADDRESS "syndicateChainImpl()(address)" --rpc-url $RPC_URL +``` + +--- + +## Network-Specific Examples + +### Base Sepolia + +```bash +RPC_URL=https://sepolia.base.org +``` + +### Arbitrum Sepolia + +```bash +RPC_URL=https://sepolia-rollup.arbitrum.io/rpc +``` + +### Local Fork + +```bash +# Start anvil: anvil --fork-url https://sepolia.base.org +RPC_URL=http://localhost:8545 +``` + +--- + +## Security Notes + +🔒 **Never commit `.env` to git!** + +Add to `.gitignore`: +``` +.env +.env.local +.env.*.local +``` + +🔐 **Use different accounts for different networks:** +- Testnet: Can use less secure key +- Mainnet: Use hardware wallet or secure keystore + +🛡️ **For production, use multi-sig for ADMIN_ADDRESS** diff --git a/synd-contracts/src/upgrade/QUICK_START.md b/synd-contracts/src/upgrade/QUICK_START.md new file mode 100644 index 000000000..86bf3d4ef --- /dev/null +++ b/synd-contracts/src/upgrade/QUICK_START.md @@ -0,0 +1,127 @@ +# ⚡ Quick Start Guide + +Get up and running in 5 minutes! + +## Step 1: Setup (2 minutes) + +```bash +# Copy environment template +cp .env.example .env + +# Edit .env and fill in: +# - RPC_URL +# - ACCOUNT (your foundry account name) +# - DEV_PUB_ADDRESS +# - ADMIN_ADDRESS +``` + +## Step 2: Deploy (1 minute) + +```bash +# Preview addresses (optional) +make preview-factory + +# Deploy everything +make deploy-factory +``` + +**Save the Factory address to `.env`:** + +```bash +FACTORY_ADDRESS=0x... # From output +``` + +## Step 3: Save GasAggregator Address (30 seconds) + +The GasAggregator address will be in the deployment output from Step 2. + +```bash +# Add to .env +echo "GAS_AGGREGATOR_ADDRESS=0x..." >> .env # From deployment output +``` + +## Step 4: Create Your First Chain (1 minute) + +```bash +NONCE=1 make create-sequencing-chain +``` + +**Save the chain address to `.env`:** + +```bash +CHAIN_ADDRESS=0x... # From output +``` + +## Done! 🎉 + +You now have: + +- ✅ SyndicateFactory deployed +- ✅ GasAggregator deployed (automatic) +- ✅ Your first sequencing chain created + +--- + +## What's Next? + +### Create More Chains + +```bash +NONCE=2 make create-sequencing-chain +NONCE=3 make create-sequencing-chain +``` + +### When You Need to Upgrade + +```bash +# Always check storage first! +make storage-layout-check + +# Then upgrade +make upgrade-factory +make upgrade-sequencing-chain + +``` + +--- + +## Quick Reference + +```bash +# Deployment +make preview-factory # Preview addresses +make deploy-factory # Deploy everything +make deploy-arb-config # Deploy Arb config (optional) + +# Create chains +make create-sequencing-chain # Create new chain + +# Upgrades +make storage-layout-check # ⚠️ ALWAYS run first! +make upgrade-factory # Upgrade factory +make upgrade-sequencing-chain # Upgrade chain +``` + +--- + +## Need Help? + +📖 **Detailed guides:** + +- [README.md](./README.md) - Complete guide with examples +- [ENVIRONMENT.md](./ENVIRONMENT.md) - Environment variables +- [UPGRADE_SAFETY.md](./UPGRADE_SAFETY.md) - Safety best practices + +🐛 **Troubleshooting:** See [README.md](./README.md#-troubleshooting) + +--- + +**Pro tip:** Test everything on a local fork first! + +```bash +# Terminal 1 +anvil --fork-url $RPC_URL + +# Terminal 2 +RPC_URL=http://localhost:8545 make deploy-factory +``` diff --git a/synd-contracts/src/upgrade/README.md b/synd-contracts/src/upgrade/README.md new file mode 100644 index 000000000..b771a4188 --- /dev/null +++ b/synd-contracts/src/upgrade/README.md @@ -0,0 +1,403 @@ +# 🚀 Deployment & Upgrade Guide + +Quick and easy guide for deploying and upgrading Syndicate Appchains contracts. + +## 📋 Table of Contents + +- [Quick Start](#-quick-start) +- [Deployment](#-deployment) +- [Creating Chains](#-creating-chains) +- [Upgrades](#-upgrades) +- [Verification](#-verification) +- [Troubleshooting](#-troubleshooting) + +--- + +## ⚡ Quick Start + +### First Time Setup + +```bash +# 1. Copy environment template +cp .env.example .env + +# 2. Edit .env with your values +# RPC_URL, ACCOUNT, DEV_PUB_ADDRESS, ADMIN_ADDRESS + +# 3. Preview deployment addresses +make preview-factory + +# 4. Deploy (this also deploys GasAggregator!) +make deploy-factory +``` + +### After Deployment + +```bash +# Create your first sequencing chain +NONCE=1 make create-sequencing-chain + +# When you need to upgrade +make storage-layout-check +make upgrade-factory +``` + +--- + +## 🌍 Deployment + +### What Gets Deployed? + +Running `make deploy-factory` deploys: + +``` +✅ SyndicateFactory (proxy + implementation) + ├── ✅ GasAggregator (non-upgradeable contract) - AUTOMATIC! + ├── ✅ SyndicateSequencingChain implementation - AUTOMATIC! + └── ✅ MinimalUUPSStub - AUTOMATIC! +``` + +You only manually deploy: +- **SyndicateFactory** (everything else is automatic) +- **ArbConfigManager** (optional, only if using Arbitrum) + +**Note:** GasAggregator is no longer upgradeable (changed from UUPS proxy pattern to simple contract deployment) + +### Step 1: Configure Environment + +Create `.env` file: + +```bash +# Network +RPC_URL=https://your-rpc-url +ACCOUNT=deployer # Your foundry account name +DEV_PUB_ADDRESS=0xYourAddress + +# Admin (will own all contracts) +ADMIN_ADDRESS=0xAdminAddress +``` + +### Step 2: Preview Addresses + +```bash +make preview-factory +``` + +Shows you what addresses will be used (same on all chains due to CREATE2). + +### Step 3: Deploy Factory + +```bash +make deploy-factory +``` + +**Output:** +``` +Implementation deployed to: 0x1234... +SyndicateFactory proxy deployed to: 0x5678... +✅ Deterministic deployment successful! +``` + +### Step 4: Save Addresses + +Add to your `.env`: + +```bash +FACTORY_ADDRESS=0x5678... # From output above +GAS_AGGREGATOR_ADDRESS=0xabcd... # From deployment output +``` + +### Optional: Deploy ArbConfigManager + +Only if using Arbitrum as settlement chain: + +```bash +OWNER_ADDRESS=0xYourOwner make deploy-arb-config +``` + +--- + +## 🔗 Creating Chains + +### Create First Chain + +```bash +# Set nonce and create (factory will compute deterministic chain ID) +NONCE=1 make create-sequencing-chain +``` + +**What you'll see:** +``` +=== Creating Sequencing Chain === +Factory: 0x5678... +Nonce: 1 +Admin: 0xAdmin... + +No PERMISSION_MODULE set, deploying AlwaysAllowedModule... +AlwaysAllowedModule deployed: 0xabcd... + +=== Sequencing Chain Created === +Chain Address: 0x9abc... +Chain ID: 1 + +Save this address to your .env file: +CHAIN_ADDRESS=0x9abc... +``` + +### Create More Chains + +```bash +# Create multiple chains with different nonces +NONCE=2 make create-sequencing-chain +NONCE=3 make create-sequencing-chain +``` + +### Using Custom Permission Module + +```bash +# Use your own permission module +NONCE=4 PERMISSION_MODULE=0xYourModule make create-sequencing-chain +``` + +--- + +## 🔄 Upgrades + +### ⚠️ Before Every Upgrade + +**ALWAYS run storage layout validation:** + +```bash +make storage-layout-check +``` + +**Expected output:** +``` +✅ SyndicateFactory: Storage layout unchanged +✅ SyndicateSequencingChain: Storage layout unchanged +✅ All storage layouts are safe for upgrades +``` + +**Note:** GasAggregator is no longer checked as it's not upgradeable. + +If you see `❌ STORAGE LAYOUT CHANGED`, **STOP and review changes!** + +### Upgrade SyndicateFactory + +```bash +make upgrade-factory +``` + +**What happens:** +1. Deploys new implementation +2. Upgrades proxy to new implementation +3. Verifies upgrade succeeded + +**Output:** +``` +=== Upgrading SyndicateFactory === +Deploying new implementation... +New implementation: 0xdef0... + +Upgrading proxy to new implementation... + +=== Upgrade Complete === +Proxy: 0x5678... +Implementation: 0xdef0... +Version: 1.1.0 +``` + +### ~~Upgrade GasAggregator~~ (No Longer Supported) + +**GasAggregator is non-upgradeable.** If you need to upgrade it, you must: +1. Deploy a new GasAggregator contract +2. Update all references to point to the new contract +3. Migrate tracked chains to the new instance + +This is intentional to keep the gas aggregation logic simple and immutable. + +### Upgrade Sequencing Chain + +```bash +# Set which chain to upgrade +CHAIN_ADDRESS=0x9abc... make upgrade-sequencing-chain +``` + +**What happens:** +1. Deploys new implementation +2. Sets it as default in factory (for new chains) +3. Upgrades the specific chain + +**Output:** +``` +=== Upgrading SyndicateSequencingChain === +Deploying new implementation... +Setting as default implementation in factory... + +Upgrading chain proxy... + +=== Upgrade Complete === +Chain proxy: 0x9abc... +Implementation: 0x5678... +Version: 1.1.0 + +New chains created via factory will use this implementation +``` + +### Upgrade All Chains + +```bash +# Get all chain IDs +cast call $FACTORY_ADDRESS "chainIDs()(uint256[])" --rpc-url $RPC_URL + +# Upgrade each chain +for id in 1 2 3; do + CHAIN=$(cast call $FACTORY_ADDRESS "appchainContracts(uint256)(address)" $id --rpc-url $RPC_URL) + CHAIN_ADDRESS=$CHAIN make upgrade-sequencing-chain +done +``` + +--- + +## ✅ Verification + +### Check Contract Versions + +```bash +# Factory version +cast call $FACTORY_ADDRESS "version()(string)" --rpc-url $RPC_URL + +# GasAggregator version (constant) +cast call $GAS_AGGREGATOR_ADDRESS "VERSION()(uint256)" --rpc-url $RPC_URL + +# Chain version +cast call $CHAIN_ADDRESS "version()(string)" --rpc-url $RPC_URL +``` + +### Check Admin Roles + +```bash +# Check if address has admin role +cast call $FACTORY_ADDRESS \ + "hasRole(bytes32,address)(bool)" \ + $(cast keccak "DEFAULT_ADMIN_ROLE()") \ + $ADMIN_ADDRESS \ + --rpc-url $RPC_URL +``` + +### Get Contract Addresses + +```bash +# Current sequencing chain implementation +cast call $FACTORY_ADDRESS "syndicateChainImpl()(address)" --rpc-url $RPC_URL + +# Check if chain ID is used +cast call $FACTORY_ADDRESS "isChainIdUsed(uint256)(bool)" 1 --rpc-url $RPC_URL + +# Compute sequencing chain address +cast call $FACTORY_ADDRESS "computeSequencingChainAddress(uint256)(address)" 1 --rpc-url $RPC_URL +``` + +--- + +## 🐛 Troubleshooting + +### "Storage layout changed" Error + +**Cause:** Storage layout has changed + +**Fix:** +1. Review what changed +2. If safe (adding at end), update baseline: + ```bash + forge inspect SyndicateFactory storageLayout > .storage-layouts/SyndicateFactory.json + ``` +3. If unsafe, revert code changes + +### "Unauthorized" Error + +**Cause:** You don't have required role + +**Fix:** Use the admin account that deployed the contracts + +### "Contract already deployed" + +**Cause:** Using deterministic deployment, address already exists + +**Fix:** This is normal! The script will use the existing deployment + +### Upgrade Fails Silently + +**Cause:** Need more verbose output + +**Fix:** Add `-vvvv` flag: +```bash +forge script script/upgrade/UpgradeContracts.s.sol:UpgradeSyndicateFactory \ + --rpc-url $RPC_URL \ + --broadcast \ + -vvvv +``` + +--- + +## 🧪 Testing Locally + +Test everything on a local fork before mainnet: + +```bash +# Terminal 1: Start local fork +anvil --fork-url $RPC_URL + +# Terminal 2: Deploy and test +export RPC_URL=http://localhost:8545 + +make deploy-factory +APPCHAIN_ID=1 make create-sequencing-chain +make upgrade-factory +``` + +--- + +## 📚 Available Commands + +```bash +# Deployment +make preview-factory # Preview deployment addresses +make deploy-factory # Deploy SyndicateFactory +make deploy-arb-config # Deploy ArbConfigManager + +# Create Chains +make create-sequencing-chain # Create new sequencing chain + +# Upgrades +make upgrade-factory # Upgrade SyndicateFactory +make upgrade-sequencing-chain # Upgrade sequencing chain + +# Validation +make storage-layout-check # Validate storage layouts +``` + +--- + +## 🔐 Security Best Practices + +✅ Always run `make storage-layout-check` before upgrades +✅ Test on local fork with Anvil first +✅ Deploy to testnet before mainnet +✅ Use multi-sig for admin operations on mainnet +✅ Monitor contracts after upgrades +✅ Have rollback plan ready + +--- + +## 📖 Additional Resources + +- [Quick Start Guide](./QUICK_START.md) - Get started in 5 minutes +- [Environment Variables](./ENVIRONMENT.md) - All configuration options +- [Upgrade Safety](./UPGRADE_SAFETY.md) - Storage layout and safety checks +- [Upgrade Checklist](./UPGRADE_CHECKLIST.md) - Pre-upgrade safety checklist +- [Risa Testnet Deployment](./RISA_DEPLOYMENT.md) - Risa-specific deployment guide + +--- + +Need help? Check the detailed guides in `docs/upgrade/` folder! diff --git a/synd-contracts/src/upgrade/RISA_DEPLOYMENT.md b/synd-contracts/src/upgrade/RISA_DEPLOYMENT.md new file mode 100644 index 000000000..59664fb9e --- /dev/null +++ b/synd-contracts/src/upgrade/RISA_DEPLOYMENT.md @@ -0,0 +1,388 @@ +# 🚀 Risa Testnet Deployment Guide + +Step-by-step guide to deploy Syndicate Appchains contracts to Risa testnet. + +## Prerequisites + +- [ ] Foundry installed and updated (`foundryup`) +- [ ] Access to Risa testnet RPC +- [ ] Deployer wallet with testnet funds +- [ ] Admin wallet address decided + +--- + +## Step 1: Environment Setup (5 minutes) + +### 1.1 Create/Update .env File + +```bash +# Copy template if you don't have .env +cp .env.example .env + +# Edit .env +nano .env # or use your preferred editor +``` + +### 1.2 Configure .env for Risa + +```bash +# Network Configuration +RPC_URL=risa_devnet # Use the foundry.toml alias +RISA_DEVNET_RPC_URL=https://your-risa-rpc-url # Your actual Risa RPC endpoint + +# Account Configuration +ACCOUNT=deployer # Your foundry account name +DEV_PUB_ADDRESS=0xYourDeployerAddress # Your deployer public address + +# Admin Configuration +ADMIN_ADDRESS=0xYourAdminAddress # Who will own the contracts + +# These will be filled in after deployment +FACTORY_ADDRESS= +GAS_AGGREGATOR_ADDRESS= +``` + +### 1.3 Set Up Deployer Account + +If you haven't created a foundry account yet: + +```bash +# Import your private key (interactive) +cast wallet import deployer --interactive + +# Verify it's imported +cast wallet list + +# Check your balance on Risa +cast balance $DEV_PUB_ADDRESS --rpc-url risa_devnet +``` + +**⚠️ Make sure you have enough testnet tokens for deployment!** + +--- + +## Step 2: Preview Deployment (1 minute) + +Preview what addresses will be deployed (deterministic): + +```bash +make preview-factory +``` + +**Output:** +``` +=== Address Preview === +Implementation will deploy to: 0x1234... +Proxy will deploy to: 0x5678... +===================== +``` + +**✅ These addresses will be the SAME on all chains!** + +--- + +## Step 3: Deploy SyndicateFactory (2 minutes) + +Deploy the factory (this also auto-deploys GasAggregator): + +```bash +make deploy-factory +``` + +**What happens:** +1. ✅ Deploys SyndicateFactory implementation +2. ✅ Deploys SyndicateFactory proxy +3. ✅ Initializes factory with your admin +4. ✅ **Auto-deploys GasAggregator** (proxy + implementation) +5. ✅ **Auto-deploys SyndicateSequencingChain** implementation +6. ✅ **Auto-deploys MinimalUUPSStub** + +**Expected Output:** +``` +Implementation deployed to: 0x1234567890... +SyndicateFactory proxy deployed to: 0xabcdef1234... +Deterministic deployment successful! +SyndicateFactory address (consistent across all chains): 0xabcdef1234... +``` + +**⚠️ Save the Factory proxy address!** + +--- + +## Step 4: Save Deployed Addresses (1 minute) + +### 4.1 Add Factory Address to .env + +```bash +# Add to .env file +echo "FACTORY_ADDRESS=0xYourFactoryProxyAddress" >> .env +``` + +### 4.2 Get GasAggregator Address + +```bash +# Query factory for GasAggregator address +cast call $FACTORY_ADDRESS "gasAggregator()(address)" --rpc-url risa_devnet +``` + +**Output:** `0x...` (the GasAggregator proxy address) + +```bash +# Add to .env file +echo "GAS_AGGREGATOR_ADDRESS=0xYourGasAggregatorAddress" >> .env +``` + +### 4.3 Verify Your .env + +Your `.env` should now have: +```bash +RPC_URL=risa_devnet +RISA_DEVNET_RPC_URL=https://... +ACCOUNT=deployer +DEV_PUB_ADDRESS=0x... +ADMIN_ADDRESS=0x... +FACTORY_ADDRESS=0x... # ✅ Added +GAS_AGGREGATOR_ADDRESS=0x... # ✅ Added +``` + +--- + +## Step 5: Verify Deployment (2 minutes) + +### 5.1 Check Factory Version + +```bash +cast call $FACTORY_ADDRESS "version()(string)" --rpc-url risa_devnet +``` + +**Expected:** `1.0.0` (or current version) + +### 5.2 Check GasAggregator Version + +```bash +cast call $GAS_AGGREGATOR_ADDRESS "version()(string)" --rpc-url risa_devnet +``` + +**Expected:** `1.0.0` (or current version) + +### 5.3 Check Admin Role + +```bash +# Get DEFAULT_ADMIN_ROLE hash +DEFAULT_ADMIN_ROLE=$(cast keccak "DEFAULT_ADMIN_ROLE()") + +# Check if your admin has the role +cast call $FACTORY_ADDRESS \ + "hasRole(bytes32,address)(bool)" \ + $DEFAULT_ADMIN_ROLE \ + $ADMIN_ADDRESS \ + --rpc-url risa_devnet +``` + +**Expected:** `true` + +### 5.4 Check Factory State + +```bash +# Get current implementation +cast call $FACTORY_ADDRESS "syndicateChainImpl()(address)" --rpc-url risa_devnet + +# Check factory is not paused +cast call $FACTORY_ADDRESS "paused()(bool)" --rpc-url risa_devnet +``` + +**Expected:** Address and `false` + +--- + +## Step 6: Create Your First Sequencing Chain (3 minutes) + +### 6.1 Create Chain + +```bash +# Create chain with nonce 1 +NONCE=1 make create-sequencing-chain +``` + +**What happens:** +1. Checks if PERMISSION_MODULE is set +2. If not, deploys new AlwaysAllowedModule +3. Calls factory.createSyndicateSequencingChain(nonce, admin, module) +4. Returns chain address and computed chain ID + +**Expected Output:** +``` +=== Creating Sequencing Chain === +Factory: 0xabcdef... +Nonce: 1 +Admin: 0xAdmin... + +No PERMISSION_MODULE set, deploying AlwaysAllowedModule... +AlwaysAllowedModule deployed: 0x1234... + +=== Sequencing Chain Created === +Chain Address: 0x9abc... +Chain ID: 123456789 + +Save this address to your .env file: +CHAIN_ADDRESS=0x9abc... +``` + +### 6.2 Save Chain Address + +```bash +# Add to .env +echo "CHAIN_ADDRESS=0xYourChainAddress" >> .env +``` + +### 6.3 Verify Chain + +```bash +# Check chain version +cast call $CHAIN_ADDRESS "version()(string)" --rpc-url risa_devnet + +# Check chain appchainId +cast call $CHAIN_ADDRESS "appchainId()(uint256)" --rpc-url risa_devnet + +# Check chain owner +cast call $CHAIN_ADDRESS "owner()(address)" --rpc-url risa_devnet +``` + +--- + +## Step 7: Create More Chains (Optional) + +```bash +# Create additional chains with different nonces +NONCE=2 make create-sequencing-chain +NONCE=3 make create-sequencing-chain +NONCE=4 make create-sequencing-chain +``` + +**Note:** Each nonce produces a different chain ID deterministically! + +--- + +## Step 8: Document Your Deployment + +Create a deployment record: + +```bash +cat > deployment-risa.txt << EOF +=== Risa Testnet Deployment === +Date: $(date) +Network: Risa Devnet +Deployer: $DEV_PUB_ADDRESS +Admin: $ADMIN_ADDRESS + +Deployed Contracts: +- SyndicateFactory: $FACTORY_ADDRESS +- GasAggregator: $GAS_AGGREGATOR_ADDRESS +- Chain #1: $CHAIN_ADDRESS + +Block Explorer: +- Factory: https://risa-explorer.io/address/$FACTORY_ADDRESS +- GasAggregator: https://risa-explorer.io/address/$GAS_AGGREGATOR_ADDRESS +- Chain #1: https://risa-explorer.io/address/$CHAIN_ADDRESS +EOF + +cat deployment-risa.txt +``` + +--- + +## Verification Checklist + +After deployment, verify: + +- [ ] Factory deployed and initialized +- [ ] GasAggregator deployed and linked to factory +- [ ] Admin role assigned correctly +- [ ] Factory not paused +- [ ] Can create sequencing chains +- [ ] Chains have correct admin +- [ ] All addresses saved to `.env` +- [ ] Deployment documented + +--- + +## Quick Reference - All Commands + +```bash +# 1. Setup +cp .env.example .env +# Edit .env with your values + +# 2. Import account (if needed) +cast wallet import deployer --interactive + +# 3. Check balance +cast balance $DEV_PUB_ADDRESS --rpc-url risa_devnet + +# 4. Preview +make preview-factory + +# 5. Deploy +make deploy-factory + +# 6. Get addresses +cast call $FACTORY_ADDRESS "gasAggregator()(address)" --rpc-url risa_devnet + +# 7. Create chain +NONCE=1 make create-sequencing-chain + +# 8. Verify +cast call $FACTORY_ADDRESS "version()(string)" --rpc-url risa_devnet +``` + +--- + +## Troubleshooting + +### "Insufficient funds for gas" +**Solution:** Get more testnet tokens for your deployer address + +### "Deterministic deployment proxy not found" +**Solution:** Deploy the proxy first: +```bash +# Check if it exists +cast code 0x4e59b44847b379578588920cA78FbF26c0B4956C --rpc-url risa_devnet + +# If empty, you need to deploy it (contact team for instructions) +``` + +### "Transaction reverted" +**Solution:** Check with verbose output: +```bash +make deploy-factory -vvvv +``` + +### "Contract already deployed" +**Solution:** This is OK! Deterministic deployment found existing contract + +### "RPC_URL not set" +**Solution:** Make sure `.env` has `RPC_URL=risa_devnet` and `RISA_DEVNET_RPC_URL=https://...` + +--- + +## Next Steps + +After successful deployment: + +1. **Share addresses** with your team +2. **Add chains to GasAggregator** tracking (if needed) +3. **Test transaction processing** on your chains +4. **Set up monitoring** for your contracts +5. **Document any custom configurations** + +--- + +## Need Help? + +- 📖 [Main Guide](./README.md) - Detailed documentation +- 🔧 [Environment Variables](./ENVIRONMENT.md) - All config options +- 🛡️ [Upgrade Safety](./UPGRADE_SAFETY.md) - When you need to upgrade + +--- + +**🎉 Congratulations! You've deployed to Risa testnet!** diff --git a/synd-contracts/src/upgrade/UPGRADE_CHECKLIST.md b/synd-contracts/src/upgrade/UPGRADE_CHECKLIST.md new file mode 100644 index 000000000..01b386bfb --- /dev/null +++ b/synd-contracts/src/upgrade/UPGRADE_CHECKLIST.md @@ -0,0 +1,203 @@ +# Contract Upgrade Safety Checklist + +This checklist ensures safe upgrades of UUPS-based contracts in the Syndicate system, particularly `SyndicateFactory` and `SyndicateSequencingChain`. + +## Storage Layout Safety + +### Storage Variables - CRITICAL +**These changes CAN break upgrades:** + +- [ ] **DO NOT** reorder existing storage variables +- [ ] **DO NOT** change the type of existing storage variables +- [ ] **DO NOT** remove existing storage variables +- [ ] **DO NOT** insert new variables between existing ones + +**Safe storage practices:** +- [ ] New storage variables can be added **at the end** of the contract +- [ ] Use namespaced storage (ERC-7201) for new variables when possible +- [ ] Run storage layout tests before and after changes + +### Safe Elements - NO STORAGE IMPACT +**These changes are SAFE and do not affect storage:** + +- [ ] **Events** - Can be added, modified, or removed freely +- [ ] **Error definitions** - Can be added, modified, or removed freely +- [ ] **Modifiers** - Can be added, modified, or removed freely +- [ ] **Functions** - Can be added, modified, or removed freely +- [ ] **Constants** - Do not use storage slots, safe to modify +- [ ] **Immutable variables** - Set in constructor, safe to add/modify +- [ ] **View/Pure functions** - No state changes, completely safe + +## Pre-Upgrade Testing + +### Storage Compatibility Tests +- [ ] Run `forge inspect ContractName storageLayout` before changes +- [ ] Run `forge inspect ContractName storageLayout` after changes +- [ ] Compare storage layouts to ensure no conflicts +- [ ] Run upgrade tests: `forge test --match-contract StorageUpgradeTest` +- [ ] Test storage preservation with actual proxy upgrade + +### Functional Testing +- [ ] All existing tests pass: `forge test` +- [ ] New functionality tests added and passing +- [ ] Integration tests verify end-to-end functionality +- [ ] Gas usage analysis for new features + +## Implementation Requirements + +### New Implementation Contract +- [ ] Implementation contract properly inherits from base contracts +- [ ] Constructor calls `_disableInitializers()` +- [ ] No constructor parameters (use initializer instead) +- [ ] `_authorizeUpgrade()` properly restricts upgrade access +- [ ] Version tracking updated if applicable + +### Factory Integration (SyndicateSequencingChain) +- [ ] New implementation set in factory via `setSyndicateSequencingChainImplementation` +- [ ] Factory admin approval for new implementation +- [ ] Decision: Make new implementation the default? + +## Upgrade Process + +### Pre-Deployment +- [ ] Deploy new implementation contract +- [ ] Verify implementation contract on block explorer +- [ ] Test upgrade on testnet first +- [ ] Prepare upgrade transaction data + +### Factory Upgrade (SyndicateFactory) +```solidity +// Admin calls upgradeToAndCall on proxy +factory.upgradeToAndCall(newImplementation, ""); +``` +- [ ] Verify admin has `DEFAULT_ADMIN_ROLE` +- [ ] Test upgrade call in simulation first +- [ ] Monitor upgrade transaction confirmation + +### Sequencing Chain Upgrade +```solidity +// Owner calls upgradeToAndCall on chain +sequencingChain.upgradeToAndCall(newImplementation, ""); +``` +- [ ] Verify caller is chain owner +- [ ] Implementation should be set in factory first (best practice) + +## Storage Layout Examples + +### Traditional Storage (Current Pattern) +```solidity +contract SyndicateSequencingChain { + // ❌ NEVER change order of these variables + uint256 public appchainId; // Slot 0 + address public emissionsReceiver; // Slot 1 + address public factory; // Slot 2 + bool public allowGasTrackingBanOnUpgrade; // Slot 3 + + // ✅ New variables can be added here + uint256 public newVariable; // Slot 4 - SAFE +} +``` + +### Namespaced Storage (Recommended for New Variables) +```solidity +/// @custom:storage-location erc7201:my.new.namespace +struct MyNewStorage { + uint256 newField1; + bool newField2; + mapping(address => uint256) newMapping; +} + +contract UpgradedContract { + // Deterministic storage location + bytes32 constant MY_STORAGE_LOCATION = 0x...; + + function _getMyStorage() private pure returns (MyNewStorage storage $) { + assembly { $.slot := MY_STORAGE_LOCATION } + } +} +``` + +## Common Pitfalls + +### DANGEROUS - Will Break Upgrades +```solidity +// Before upgrade +uint256 public appchainId; +address public factory; + +// After upgrade - DON'T DO THIS +address public factory; // DANGEROUS: Reordered! +uint256 public appchainId; // DANGEROUS: Will corrupt storage +``` + +### DANGEROUS - Type Changes +```solidity +// Before +uint256 public myValue; + +// After - DON'T DO THIS +uint128 public myValue; // DANGEROUS: Type change will corrupt storage +``` + +### SAFE - Adding New Variables +```solidity +// Before +uint256 public existingVar; + +// After - This is SAFE +uint256 public existingVar; +uint256 public newVar; // SAFE: Added at end +``` + +## Verification Steps + +### Post-Upgrade Validation +- [ ] Verify storage values preserved (appchainId, factory, etc.) +- [ ] Test all existing functionality still works +- [ ] Test new functionality works as expected +- [ ] Verify events are emitted correctly +- [ ] Check gas usage patterns +- [ ] Validate access control still functions + +### Monitoring +- [ ] Monitor contract behavior for 24-48 hours +- [ ] Watch for unexpected reverts or errors +- [ ] Verify gas tracking continues working +- [ ] Monitor emission calculations if applicable + +## Reference Documentation + +- [OpenZeppelin UUPS Guide](https://docs.openzeppelin.com/upgrades-plugins/1.x/proxies#uups-proxies) +- [ERC-7201 Namespaced Storage](https://eips.ethereum.org/EIPS/eip-7201) +- [Storage Layout Tests](./test/upgrade/StorageUpgradeTest.t.sol) +- [Factory Implementation Management](./src/factory/SyndicateFactory.sol#L463-L500) + +## Emergency Procedures + +### If Upgrade Fails +- [ ] Do not panic - proxy is still on old implementation +- [ ] Investigate failure reason from transaction logs +- [ ] Fix implementation contract issues +- [ ] Deploy new fixed implementation +- [ ] Retry upgrade with fixed implementation + +### If Storage Corruption Detected +- [ ] **STOP** - Do not perform any more state changes +- [ ] Assess extent of corruption +- [ ] If possible, upgrade to implementation that fixes corruption +- [ ] Consider emergency pause mechanisms if available +- [ ] Contact development team immediately + +## Final Checklist + +Before any upgrade: +- [ ] All storage layout checks passed +- [ ] All tests passing on new implementation +- [ ] Testnet upgrade successful +- [ ] Implementation contract deployed and verified +- [ ] Upgrade transaction prepared and tested +- [ ] Monitoring systems ready +- [ ] Emergency procedures reviewed +- [ ] Team notification sent + +**Remember: Upgrades are irreversible. When in doubt, don't upgrade.** \ No newline at end of file diff --git a/synd-contracts/src/upgrade/UPGRADE_SAFETY.md b/synd-contracts/src/upgrade/UPGRADE_SAFETY.md new file mode 100644 index 000000000..88af15199 --- /dev/null +++ b/synd-contracts/src/upgrade/UPGRADE_SAFETY.md @@ -0,0 +1,413 @@ +# 🛡️ Upgrade Safety Guide + +Learn how to safely upgrade contracts without breaking storage. + +## ⚠️ Critical Rules + +### 1. ALWAYS Validate Storage Layout + +```bash +make storage-layout-check +``` + +Run this **BEFORE EVERY UPGRADE**. No exceptions. + +### 2. Understand Storage Layout + +Solidity stores variables in **sequential slots**: + +```solidity +contract Example { + uint256 a; // slot 0 + address b; // slot 1 + mapping c; // slot 2 +} +``` + +--- + +## ✅ Safe Changes + +### Adding Variables at the End + +**✅ SAFE:** + +```solidity +// Before +contract Example { + uint256 a; + address b; +} + +// After - Adding at end +contract Example { + uint256 a; + address b; + uint256 c; // ✅ Safe - new slot +} +``` + +### Adding New Functions + +**✅ SAFE:** + +```solidity +// Adding new functions is always safe +function newFunction() external { } +``` + +### Modifying Function Logic + +**✅ SAFE:** + +```solidity +// Changing function code is safe +function existing() external { + // New logic here +} +``` + +--- + +## ❌ Dangerous Changes + +### Removing Variables + +**❌ DANGEROUS:** + +```solidity +// Before +contract Example { + uint256 a; + address b; // ❌ Don't remove! + uint256 c; +} + +// After +contract Example { + uint256 a; + uint256 c; // ❌ Now in wrong slot! +} +``` + +### Reordering Variables + +**❌ DANGEROUS:** + +```solidity +// Before +contract Example { + uint256 a; + address b; +} + +// After +contract Example { + address b; // ❌ Now in wrong slot! + uint256 a; // ❌ Now in wrong slot! +} +``` + +### Changing Variable Types + +**❌ DANGEROUS:** + +```solidity +// Before +contract Example { + uint256 a; +} + +// After +contract Example { + address a; // ❌ Wrong type, same slot! +} +``` + +### Inserting Variables + +**❌ DANGEROUS:** + +```solidity +// Before +contract Example { + uint256 a; + uint256 c; +} + +// After +contract Example { + uint256 a; + uint256 b; // ❌ Inserted, shifts everything! + uint256 c; // ❌ Now in wrong slot! +} +``` + +--- + +## 🔍 Storage Layout Validation + +### Automated Checking + +Our CI automatically checks storage layouts: + +```yaml +# .github/workflows/storage-layout.yaml +- Compares against baseline +- Fails if storage changed +- Prevents accidental corruption +``` + +### Manual Check + +```bash +make storage-layout-check +``` + +**Good output:** + +``` +✅ SyndicateFactory: Storage layout unchanged +✅ SyndicateSequencingChain: Storage layout unchanged +✅ All storage layouts are safe for upgrades +``` + +**Bad output:** + +``` +❌ STORAGE LAYOUT CHANGED: SyndicateFactory +This change could corrupt storage during upgrades! +``` + +### View Storage Layout + +```bash +# See current layout +forge inspect SyndicateFactory storageLayout + +# See specific contract +forge inspect SyndicateSequencingChain storageLayout +``` + +--- + +## 🏗️ Safe Upgrade Patterns + +### Pattern 1: Add at End + +```solidity +contract MyContract { + // Existing variables + uint256 public version; + address public admin; + + // ✅ Add new variables here + uint256 public newFeature; + mapping(address => uint256) public newMapping; +} +``` + +### Pattern 2: Use Namespaced Storage (ERC-7201) + +```solidity +// SyndicateSequencingChain uses this pattern +struct MyStorage { + uint256 newVar; + address newAddr; +} + +function _getStorage() private pure returns (MyStorage storage $) { + assembly { + $.slot := keccak256("my.namespace.storage") + } +} +``` + +### Pattern 3: Reserved Slots + +```solidity +contract Upgradeable { + uint256 public variable1; + uint256 public variable2; + + // Reserve slots for future use + uint256[50] private __gap; +} +``` + +--- + +## 🧪 Testing Upgrades + +### 1. Test on Local Fork + +```bash +# Terminal 1 +anvil --fork-url $RPC_URL + +# Terminal 2 +export RPC_URL=http://localhost:8545 + +# Deploy +make deploy-factory +APPCHAIN_ID=1 make create-sequencing-chain + +# Store some data +cast send $CHAIN_ADDRESS "someFunction()" --rpc-url $RPC_URL + +# Upgrade +make upgrade-sequencing-chain + +# Verify data intact +cast call $CHAIN_ADDRESS "someGetter()" --rpc-url $RPC_URL +``` + +### 2. Test Storage Persistence + +```solidity +// Before upgrade +uint256 before = chain.someValue(); + +// Upgrade +chain.upgradeToAndCall(newImpl, ""); + +// After upgrade +uint256 after = chain.someValue(); +assert(before == after); // Storage persisted! +``` + +### 3. Test New Functionality + +```solidity +// After upgrade +chain.newFunction(); // Should work +chain.oldFunction(); // Should still work +``` + +--- + +## 📊 Understanding Storage Slots + +### How Storage Works + +Each storage slot is 32 bytes (256 bits): + +``` +Slot 0: [32 bytes] uint256 or address (20 bytes) + padding +Slot 1: [32 bytes] next variable +Slot 2: [32 bytes] mapping location (key => slot) +``` + +### Packed Storage + +Small variables can share slots: + +```solidity +contract Packed { + uint128 a; // First 16 bytes of slot 0 + uint128 b; // Last 16 bytes of slot 0 + uint256 c; // Slot 1 +} +``` + +### Dynamic Types + +Arrays and mappings: + +```solidity +contract Dynamic { + uint256[] public array; // Slot 0: length + // Elements: keccak256(slot) + index + + mapping(uint => uint) public map; // Slot 1: empty + // Values: keccak256(key, slot) +} +``` + +--- + +## 🔄 Upgrade Process Checklist + +### Before Upgrade + +- [ ] Run `make storage-layout-check` +- [ ] Review all storage changes +- [ ] Test on local fork +- [ ] Test on testnet +- [ ] Document changes + +### During Upgrade + +- [ ] Deploy new implementation +- [ ] Verify implementation on explorer +- [ ] Call `upgradeToAndCall()` +- [ ] Wait for confirmations + +### After Upgrade + +- [ ] Verify storage intact +- [ ] Test existing functionality +- [ ] Test new functionality +- [ ] Monitor for issues + +--- + +## 🚨 Emergency Procedures + +### If Storage Corrupted + +**Prevention is key** - there's no safe recovery from storage corruption. + +If it happens: + +1. Pause contracts immediately +2. Assess damage extent +3. Consider redeployment with migration +4. Communicate with users + +### Rollback (Only if Safe) + +Rollback is only safe if: + +- Old implementation still available +- No storage layout changes +- No breaking changes in data + +```bash +# Redeploy old implementation +OLD_IMPL=0xPreviousImplementation + +# Downgrade +cast send $FACTORY_ADDRESS \ + "upgradeToAndCall(address,bytes)" \ + $OLD_IMPL \ + 0x \ + --rpc-url $RPC_URL +``` + +--- + +## 📚 Resources + +- [OpenZeppelin Upgrades Guide](https://docs.openzeppelin.com/upgrades-plugins/1.x/writing-upgradeable) +- [EIP-1967: Proxy Storage Slots](https://eips.ethereum.org/EIPS/eip-1967) +- [ERC-7201: Namespaced Storage](https://eips.ethereum.org/EIPS/eip-7201) + +--- + +## 💡 Key Takeaways + +✅ **Always validate storage layouts** +✅ **Only add variables at the end** +✅ **Test thoroughly before mainnet** +✅ **Use namespaced storage for complex contracts** +✅ **Document all storage changes** + +❌ **Never remove variables** +❌ **Never reorder variables** +❌ **Never change variable types** +❌ **Never insert variables in the middle** + +--- + +Remember: **Storage corruption is not recoverable.** Always validate before upgrading! diff --git a/synd-contracts/test/SequencingModuleCheckerTest.t.sol b/synd-contracts/test/SequencingModuleCheckerTest.t.sol index 66f3f53e2..2a94a04bc 100644 --- a/synd-contracts/test/SequencingModuleCheckerTest.t.sol +++ b/synd-contracts/test/SequencingModuleCheckerTest.t.sol @@ -1,63 +1,265 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.28; -import {SequencingModuleChecker, Ownable} from "src/SequencingModuleChecker.sol"; +import {SequencingModuleChecker} from "src/SequencingModuleChecker.sol"; +import {IPermissionModule} from "src/interfaces/IPermissionModule.sol"; +import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import {RequireAndModule} from "src/requirement-modules/RequireAndModule.sol"; +import {RequireOrModule} from "src/requirement-modules/RequireOrModule.sol"; +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {DataTooLarge} from "@arbitrum/nitro-contracts/src/libraries/Error.sol"; import {Test} from "forge-std/Test.sol"; -contract SequencingModuleCheckerMock is SequencingModuleChecker {} +contract SequencingModuleCheckerMock is Initializable, SequencingModuleChecker { + function initialize(address admin, address _permissionRequirementModule) external initializer { + __SequencingModuleChecker_init(admin, _permissionRequirementModule); + } +} + +contract MockPermissionModule is IPermissionModule { + bool public shouldAllow; + + constructor(bool _shouldAllow) { + shouldAllow = _shouldAllow; + } + + function isAllowed(address, address, bytes memory) external view returns (bool) { + return shouldAllow; + } + + function setShouldAllow(bool _shouldAllow) external { + shouldAllow = _shouldAllow; + } +} contract SequencingModuleCheckerTest is Test { - SequencingModuleChecker public manager; + SequencingModuleCheckerMock public manager; RequireAndModule public masterModule; + MockPermissionModule public mockModule; address public admin; address public nonAdmin; + address public user1; + address public user2; + + event RequirementModuleUpdated(address indexed newModule); function setUp() public { - admin = msg.sender; + admin = address(this); nonAdmin = address(0x456); + user1 = address(0x123); + user2 = address(0x789); masterModule = new RequireAndModule(admin); + mockModule = new MockPermissionModule(true); manager = new SequencingModuleCheckerMock(); - manager.updateRequirementModule(address(masterModule)); - manager.transferOwnership(admin); + manager.initialize(admin, address(masterModule)); + } + + // Initialization Tests + function testInitialization() public { + assertEq(manager.owner(), admin); + assertEq(address(manager.permissionRequirementModule()), address(masterModule)); + } + + function testCannotInitializeTwice() public { + vm.expectRevert(abi.encodeWithSelector(Initializable.InvalidInitialization.selector)); + manager.initialize(admin, address(masterModule)); + } + + function testInitializeWithDifferentModule() public { + SequencingModuleCheckerMock newManager = new SequencingModuleCheckerMock(); + MockPermissionModule newMockModule = new MockPermissionModule(false); + + newManager.initialize(user1, address(newMockModule)); + + assertEq(newManager.owner(), user1); + assertEq(address(newManager.permissionRequirementModule()), address(newMockModule)); } - function testUpdateMasterModule() public { + // Permission Requirement Module Update Tests + function testUpdateRequirementModule() public { address newModule = address(new RequireAndModule(admin)); - vm.prank(admin); vm.expectEmit(true, false, false, false); - emit SequencingModuleChecker.RequirementModuleUpdated(newModule); + emit RequirementModuleUpdated(newModule); manager.updateRequirementModule(newModule); assertEq(address(manager.permissionRequirementModule()), newModule); } - function testUpdateMasterModuleNonAdmin() public { + function testUpdateRequirementModuleNonAdmin() public { address newModule = address(new RequireAndModule(admin)); vm.prank(nonAdmin); - vm.expectRevert(abi.encodeWithSelector(Ownable.OwnableUnauthorizedAccount.selector, nonAdmin)); + vm.expectRevert(abi.encodeWithSelector(OwnableUpgradeable.OwnableUnauthorizedAccount.selector, nonAdmin)); manager.updateRequirementModule(newModule); } - function testNotInitialized() public { - SequencingModuleChecker uninitializedManager = new SequencingModuleCheckerMock(); + function testUpdateRequirementModuleToZeroAddress() public { + vm.expectEmit(true, false, false, false); + emit RequirementModuleUpdated(address(0)); + manager.updateRequirementModule(address(0)); + + assertEq(address(manager.permissionRequirementModule()), address(0)); + } + + function testUpdateRequirementModuleToAddressOne() public { + vm.expectEmit(true, false, false, false); + emit RequirementModuleUpdated(address(1)); + manager.updateRequirementModule(address(1)); + + assertEq(address(manager.permissionRequirementModule()), address(1)); + } + + // isAllowed Function Tests + function testIsAllowedWithAddressOne() public { + manager.updateRequirementModule(address(1)); + + bytes memory testData = abi.encode("test data"); + assertTrue(manager.isAllowed(user1, user2, testData)); + } - bytes memory emptyData = new bytes(0); + function testIsAllowedWithZeroAddress() public { + manager.updateRequirementModule(address(0)); + bytes memory testData = abi.encode("test data"); + // Zero address should cause a revert since there's no code there vm.expectRevert(); - uninitializedManager.isAllowed(address(0), address(0), emptyData); + manager.isAllowed(user1, user2, testData); + } + + function testIsAllowedWithMockModuleAllow() public { + manager.updateRequirementModule(address(mockModule)); + mockModule.setShouldAllow(true); + + bytes memory testData = abi.encode("test data"); + assertTrue(manager.isAllowed(user1, user2, testData)); + } + + function testIsAllowedWithMockModuleDeny() public { + manager.updateRequirementModule(address(mockModule)); + mockModule.setShouldAllow(false); + + bytes memory testData = abi.encode("test data"); + assertFalse(manager.isAllowed(user1, user2, testData)); + } + + function testIsAllowedWithEmptyData() public { + manager.updateRequirementModule(address(1)); + + bytes memory emptyData = ""; + assertTrue(manager.isAllowed(user1, user2, emptyData)); } - function testIsAllowedAfterInitialization() public { - SequencingModuleChecker initializedManager = new SequencingModuleCheckerMock(); - initializedManager.updateRequirementModule(address(masterModule)); - initializedManager.transferOwnership(admin); + function testIsAllowedWithLargeData() public { + manager.updateRequirementModule(address(1)); + + bytes memory largeData = new bytes(199999); // Just under the limit + assertTrue(manager.isAllowed(user1, user2, largeData)); + } + + function testIsAllowedWithMaxSizeData() public { + manager.updateRequirementModule(address(1)); + + bytes memory maxSizeData = new bytes(200000); // Exactly the limit + assertTrue(manager.isAllowed(user1, user2, maxSizeData)); + } + + function testIsAllowedWithOversizedData() public { + manager.updateRequirementModule(address(1)); + + bytes memory oversizedData = new bytes(200001); // Over the limit + vm.expectRevert(abi.encodeWithSelector(DataTooLarge.selector, 200001, 200000)); + manager.isAllowed(user1, user2, oversizedData); + } + + function testIsAllowedWithRealModule() public { + RequireOrModule orModule = new RequireOrModule(admin); + manager.updateRequirementModule(address(orModule)); + + bytes memory testData = abi.encode("test"); + // RequireOrModule with no modules returns true by default + assertTrue(manager.isAllowed(user1, user2, testData)); + } + + // Edge Cases and Error Conditions + function testMaxDataSizeConstant() public { + assertEq(manager.maxDataSize(), 200000); + } + + function testStorageLocation() public { + // Test that the storage location constant is correct + bytes32 expected = 0x5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500; + assertEq(manager.SEQUENCING_MODULE_STORAGE_LOCATION(), expected); + } + + function testPermissionRequirementModuleGetter() public { + assertEq(address(manager.permissionRequirementModule()), address(masterModule)); + + manager.updateRequirementModule(address(mockModule)); + assertEq(address(manager.permissionRequirementModule()), address(mockModule)); + } + + // Ownership Tests + function testOwnershipTransfer() public { + assertEq(manager.owner(), admin); + + manager.transferOwnership(user1); + assertEq(manager.owner(), user1); + } + + function testRenounceOwnership() public { + manager.renounceOwnership(); + assertEq(manager.owner(), address(0)); + } + + function testOnlyOwnerFunctions() public { + vm.prank(nonAdmin); + vm.expectRevert(abi.encodeWithSelector(OwnableUpgradeable.OwnableUnauthorizedAccount.selector, nonAdmin)); + manager.updateRequirementModule(address(mockModule)); + } + + // Integration Tests with Different Module Types + function testWithRequireAndModule() public { + RequireAndModule andModule = new RequireAndModule(admin); + manager.updateRequirementModule(address(andModule)); + + bytes memory testData = abi.encode("test"); + // Empty AndModule returns true (no checks to fail) + assertTrue(manager.isAllowed(user1, user2, testData)); + } + + function testWithRequireOrModule() public { + RequireOrModule orModule = new RequireOrModule(admin); + manager.updateRequirementModule(address(orModule)); + + bytes memory testData = abi.encode("test"); + // Empty OrModule returns true by default + assertTrue(manager.isAllowed(user1, user2, testData)); + } + + // Fuzz Tests + function testFuzzIsAllowedWithVariousAddresses(address proposer, address originator) public { + manager.updateRequirementModule(address(1)); + + bytes memory testData = abi.encode("test"); + assertTrue(manager.isAllowed(proposer, originator, testData)); + } + + function testFuzzDataSizeLimit(uint256 dataSize) public { + vm.assume(dataSize <= 200000); + manager.updateRequirementModule(address(1)); + + bytes memory testData = new bytes(dataSize); + assertTrue(manager.isAllowed(user1, user2, testData)); + } - bytes memory emptyData = new bytes(0); + function testFuzzDataSizeRevert(uint256 dataSize) public { + vm.assume(dataSize > 200000 && dataSize < 1000000); // Cap to prevent OOM + manager.updateRequirementModule(address(1)); - assertTrue(initializedManager.isAllowed(address(0), address(0), emptyData)); + bytes memory testData = new bytes(dataSize); + vm.expectRevert(abi.encodeWithSelector(DataTooLarge.selector, dataSize, 200000)); + manager.isAllowed(user1, user2, testData); } } diff --git a/synd-contracts/test/SyndicateSequencingChainTest.t.sol b/synd-contracts/test/SyndicateSequencingChainTest.t.sol index c7501bd0a..cc3457002 100644 --- a/synd-contracts/test/SyndicateSequencingChainTest.t.sol +++ b/synd-contracts/test/SyndicateSequencingChainTest.t.sol @@ -2,13 +2,13 @@ pragma solidity 0.8.28; import {SyndicateSequencingChain, SequencingModuleChecker} from "src/SyndicateSequencingChain.sol"; -import {SyndicateFactory} from "src/factory/SyndicateFactory.sol"; -import { - SyndicateSequencingChain, L2MessageType_SignedTx, SequencingModuleChecker -} from "src/SyndicateSequencingChain.sol"; +import {L2MessageType_SignedTx, SequencingModuleChecker} from "src/SyndicateSequencingChain.sol"; import {RequireAndModule} from "src/requirement-modules/RequireAndModule.sol"; import {RequireOrModule} from "src/requirement-modules/RequireOrModule.sol"; import {IPermissionModule} from "src/interfaces/IPermissionModule.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import {GasMeter} from "src/staking/GasMeter.sol"; import {Test} from "forge-std/Test.sol"; import {Vm} from "forge-std/Vm.sol"; @@ -44,18 +44,27 @@ contract DirectMockModule is IPermissionModule { contract SyndicateSequencingChainTestSetUp is Test { SyndicateSequencingChain public chain; - SyndicateFactory public factory; RequireAndModule public permissionModule; RequireOrModule public permissionModuleAny; + address public admin; + address public gasMeter; - function deployFromFactory(RequireAndModule _permissionModule) public returns (SyndicateSequencingChain) { + function deployChain(RequireAndModule _permissionModule) public returns (SyndicateSequencingChain) { uint256 appchainId = 10042001; vm.startPrank(admin); - factory = new SyndicateFactory(admin); - (address chainAddress,) = factory.createSyndicateSequencingChain( - appchainId, admin, _permissionModule, keccak256(abi.encodePacked("test-salt")) + + address gasMeterImpl = address(new GasMeter()); + gasMeter = address(new ERC1967Proxy(gasMeterImpl, abi.encodeCall(GasMeter.initialize, ()))); + + address sequencingChainImpl = address(new SyndicateSequencingChain(gasMeter)); + address chainAddress = address( + new ERC1967Proxy( + sequencingChainImpl, + abi.encodeCall(SyndicateSequencingChain.initialize, (admin, address(_permissionModule), appchainId)) + ) ); + vm.stopPrank(); return SyndicateSequencingChain(chainAddress); } @@ -67,7 +76,7 @@ contract SyndicateSequencingChainTestSetUp is Test { admin = address(0x1); permissionModule = new RequireAndModule(admin); permissionModuleAny = new RequireOrModule(admin); - chain = deployFromFactory(permissionModule); + chain = deployChain(permissionModule); } } @@ -124,7 +133,7 @@ contract SyndicateSequencingChainTest is SyndicateSequencingChainTestSetUp { chain.processTransaction(validTxn); } - function testProcessTransaction() public { + function testProcessTransaction_blah() public { bytes memory data = abi.encode("raw transaction"); vm.startPrank(admin); @@ -161,8 +170,48 @@ contract SyndicateSequencingChainTest is SyndicateSequencingChainTestSetUp { } function testConstructorWithZeroAppChainId() public { + address chainImpl = address(new SyndicateSequencingChain(gasMeter)); + address chainProxy = address(new ERC1967Proxy(chainImpl, bytes(""))); + vm.expectRevert("App chain ID cannot be 0"); - new SyndicateSequencingChain(0); + SyndicateSequencingChain(chainProxy).initialize(admin, address(permissionModule), 0); + } + + function testUpgradeBadguy() public { + address chainImpl = address(new SyndicateSequencingChain(gasMeter)); + address chainProxy = address(new ERC1967Proxy(chainImpl, bytes(""))); + SyndicateSequencingChain(chainProxy).initialize(admin, address(permissionModule), 1); + + address badguy = makeAddr("badguy"); + vm.prank(badguy); + vm.expectRevert(); + UUPSUpgradeable(chainProxy).upgradeToAndCall(chainImpl, bytes("")); + } + + function testUpgradeOwner() public { + address chainImpl = address(new SyndicateSequencingChain(gasMeter)); + address chainProxy = address(new ERC1967Proxy(chainImpl, bytes(""))); + SyndicateSequencingChain(chainProxy).initialize(admin, address(permissionModule), 1); + + vm.prank(admin); + UUPSUpgradeable(chainProxy).upgradeToAndCall(chainImpl, bytes("")); + } + + function testUpgradeAuthorizationOnlyOwner() public { + SyndicateSequencingChain newImpl = new SyndicateSequencingChain(gasMeter); + + // Deploy chain + RequireAndModule testPermissionModule = new RequireAndModule(admin); + + address chainAddr = address(deployChain(testPermissionModule)); + vm.stopPrank(); + + address nonOwner = makeAddr("nonOwner"); + + // Non-owner should not be able to perform upgrade + vm.prank(nonOwner); + vm.expectRevert(); // Ownable revert from _authorizeUpgrade + SyndicateSequencingChain(chainAddr).upgradeToAndCall(address(newImpl), ""); } function testProcessTransactionsBulkAllAllowed() public { @@ -236,7 +285,7 @@ contract SyndicateSequencingChainTest is SyndicateSequencingChainTestSetUp { } function testProcessTransactionsBulkOnlyEmitsValidTransactionsAsEvents() public { - chain = deployFromFactory(RequireAndModule(address(new MockIsAllowedWithInvalidData()))); + chain = deployChain(RequireAndModule(address(new MockIsAllowedWithInvalidData()))); bytes[] memory txns = new bytes[](3); txns[0] = abi.encodePacked("valid"); @@ -300,72 +349,6 @@ contract SyndicateSequencingChainTest is SyndicateSequencingChainTestSetUp { vm.expectRevert(SyndicateSequencingChain.NoTxData.selector); chain.processTransactionsBulk(emptyArray); } - - function testEmissionsReceiver() public { - // Test defaults to owner - assertEq(chain.getEmissionsReceiver(), admin); - - // Test only owner can set it - address newReceiver = address(0x999); - address nonOwner = address(0x123); - vm.prank(nonOwner); - vm.expectRevert(abi.encodeWithSignature("OwnableUnauthorizedAccount(address)", nonOwner)); - chain.setEmissionsReceiver(newReceiver); - - // Test owner can set it and it returns correct value with proper event - vm.prank(admin); - vm.expectEmit(true, true, false, false); - emit SyndicateSequencingChain.EmissionsReceiverUpdated(address(0), newReceiver); - chain.setEmissionsReceiver(newReceiver); - assertEq(chain.getEmissionsReceiver(), newReceiver); - - // falls back to owner if emissionsReceiver is set to address(0) - vm.prank(admin); - vm.expectEmit(true, true, false, false); - emit SyndicateSequencingChain.EmissionsReceiverUpdated(newReceiver, admin); - chain.setEmissionsReceiver(address(0)); - assertEq(chain.getEmissionsReceiver(), admin); - } - - function testTransferOwnershipEmitsEmissionsReceiverUpdated() public { - // Test that transferOwnership emits EmissionsReceiverUpdated when emissionsReceiver is not set - address newOwner = address(0x888); - - vm.prank(admin); - vm.expectEmit(true, true, false, false); - emit SyndicateSequencingChain.EmissionsReceiverUpdated(admin, newOwner); - chain.transferOwnership(newOwner); - - // Verify the emissions receiver changed - assertEq(chain.getEmissionsReceiver(), newOwner); - assertEq(chain.owner(), newOwner); - - // Test that transferOwnership does NOT emit EmissionsReceiverUpdated when emissionsReceiver is explicitly set - address explicitReceiver = address(0x777); - vm.prank(newOwner); - chain.setEmissionsReceiver(explicitReceiver); - - address anotherNewOwner = address(0x666); - vm.prank(newOwner); - // Should NOT emit EmissionsReceiverUpdated - vm.recordLogs(); - chain.transferOwnership(anotherNewOwner); - - Vm.Log[] memory logs = vm.getRecordedLogs(); - // Should only have OwnershipTransferred event, not EmissionsReceiverUpdated - bool foundEmissionsEvent = false; - for (uint256 i = 0; i < logs.length; i++) { - if (logs[i].topics[0] == keccak256("EmissionsReceiverUpdated(address,address)")) { - foundEmissionsEvent = true; - break; - } - } - assertFalse(foundEmissionsEvent, "Should not emit EmissionsReceiverUpdated when explicit receiver is set"); - - // Verify emissions receiver stayed the same - assertEq(chain.getEmissionsReceiver(), explicitReceiver); - assertEq(chain.owner(), anotherNewOwner); - } } contract SyndicateSequencingChainViewRequireAllTest is SyndicateSequencingChainTestSetUp { @@ -415,4 +398,10 @@ contract SyndicateSequencingChainViewRequireAnyTest is SyndicateSequencingChainT assertEq(allChecks[0], address(mockRequireAny1)); assertEq(allChecks[1], address(mockRequireAny2)); } + + // ================== VERSION TRACKING TESTS ================== + + function testInitialVersionInSyndicateSequencingChain() public view { + assertEq(chain.VERSION(), 1_000_000, "Initial version should be 1.0.0"); + } } diff --git a/synd-contracts/test/atomic-sequencer/AtomicSequencerTest.t.sol b/synd-contracts/test/atomic-sequencer/AtomicSequencerTest.t.sol index d1e1fa602..6de9f1666 100644 --- a/synd-contracts/test/atomic-sequencer/AtomicSequencerTest.t.sol +++ b/synd-contracts/test/atomic-sequencer/AtomicSequencerTest.t.sol @@ -2,11 +2,12 @@ pragma solidity 0.8.28; import {Test} from "forge-std/Test.sol"; -import {SyndicateFactory} from "src/factory/SyndicateFactory.sol"; import {AtomicSequencer, AtomicSequencerImplementation} from "src/atomic-sequencer/AtomicSequencer.sol"; import {SyndicateSequencingChain} from "src/SyndicateSequencingChain.sol"; +import {GasMeter} from "src/staking/GasMeter.sol"; import {RequireAndModule} from "src/requirement-modules/RequireAndModule.sol"; import {IPermissionModule} from "src/interfaces/IPermissionModule.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; contract MockIsAllowed is IPermissionModule { bool allowed; @@ -41,18 +42,25 @@ contract AtomicSequencerTest is Test { vm.startPrank(admin); permissionModule = new RequireAndModule(admin); - chainA = deployFromFactory(appchainIdA); - chainB = deployFromFactory(appchainIdB); + chainA = deployChain(appchainIdA); + chainB = deployChain(appchainIdB); atomicSequencer = new AtomicSequencer(); permissionModule.addPermissionCheck(address(new MockIsAllowed(true)), false); vm.stopPrank(); } - function deployFromFactory(uint256 appchainId) public returns (SyndicateSequencingChain) { - SyndicateFactory factory = new SyndicateFactory(admin); - (address chainAddress,) = factory.createSyndicateSequencingChain( - appchainId, admin, permissionModule, keccak256(abi.encodePacked("test-salt")) + function deployChain(uint256 appchainId) public returns (SyndicateSequencingChain) { + address gasMeterImpl = address(new GasMeter()); + address gasMeter = address(new ERC1967Proxy(gasMeterImpl, abi.encodeCall(GasMeter.initialize, ()))); + + address sequencingChainImpl = address(new SyndicateSequencingChain(gasMeter)); + address chainAddress = address( + new ERC1967Proxy( + sequencingChainImpl, + abi.encodeCall(SyndicateSequencingChain.initialize, (admin, address(permissionModule), appchainId)) + ) ); + return SyndicateSequencingChain(chainAddress); } @@ -102,9 +110,9 @@ contract AtomicSequencerTest is Test { } function testProcessMultipleChains() public { - SyndicateSequencingChain chainC = new SyndicateSequencingChain(10042003); - chainC.updateRequirementModule(address(permissionModule)); - chainC.transferOwnership(admin); + vm.startPrank(admin); + SyndicateSequencingChain chainC = deployChain(10042003); + vm.stopPrank(); SyndicateSequencingChain[] memory chains = new SyndicateSequencingChain[](3); chains[0] = chainA; diff --git a/synd-contracts/test/config/ArbChainConfigTest.t.sol b/synd-contracts/test/config/ArbChainConfigTest.t.sol index c8f19809a..167df8dc6 100644 --- a/synd-contracts/test/config/ArbChainConfigTest.t.sol +++ b/synd-contracts/test/config/ArbChainConfigTest.t.sol @@ -480,4 +480,147 @@ contract ArbConfigManagerTests is ArbChainConfigTestBase { vm.expectRevert(); // OpenZeppelin's Ownable error manager.upgradeImplementation(address(0x1234)); } + + // ================== VERSION TRACKING TESTS ================== + + function testInitialVersionInArbChainConfig() public { + ArbConfigManager manager = _createArbConfigManager(); + + vm.startPrank(owner); + address configAddress = manager.createArbChainConfig( + owner, + CHAIN_ID + 1000, + SEQUENCING_CHAIN_ID, + ARBITRUM_BRIDGE_ADDRESS, + ARBITRUM_INBOX_ADDRESS, + SETTLEMENT_DELAY, + SETTLEMENT_START_BLOCK, + SEQUENCING_CONTRACT_ADDRESS, + SEQUENCING_START_BLOCK, + appchainOwner, + DEFAULT_WS_RPC_URL, + APPCHAIN_BLOCK_EXPLORER_URL + ); + vm.stopPrank(); + + ArbChainConfig config = ArbChainConfig(configAddress); + assertEq(config.version(), "1.0.0", "Initial version should be 1.0.0"); + } + + function testUpdateVersionInArbChainConfig() public { + ArbConfigManager manager = _createArbConfigManager(); + + vm.startPrank(owner); + address configAddress = manager.createArbChainConfig( + owner, + CHAIN_ID + 2000, + SEQUENCING_CHAIN_ID, + ARBITRUM_BRIDGE_ADDRESS, + ARBITRUM_INBOX_ADDRESS, + SETTLEMENT_DELAY, + SETTLEMENT_START_BLOCK, + SEQUENCING_CONTRACT_ADDRESS, + SEQUENCING_START_BLOCK, + appchainOwner, + DEFAULT_WS_RPC_URL, + APPCHAIN_BLOCK_EXPLORER_URL + ); + vm.stopPrank(); + + ArbChainConfig config = ArbChainConfig(configAddress); + + vm.prank(owner); + config.updateVersion("1.2.0"); + + assertEq(config.version(), "1.2.0", "Version should be updated to 1.2.0"); + } + + function testUpdateVersionOnlyOwner() public { + ArbConfigManager manager = _createArbConfigManager(); + + vm.startPrank(owner); + address configAddress = manager.createArbChainConfig( + owner, + CHAIN_ID + 3000, + SEQUENCING_CHAIN_ID, + ARBITRUM_BRIDGE_ADDRESS, + ARBITRUM_INBOX_ADDRESS, + SETTLEMENT_DELAY, + SETTLEMENT_START_BLOCK, + SEQUENCING_CONTRACT_ADDRESS, + SEQUENCING_START_BLOCK, + appchainOwner, + DEFAULT_WS_RPC_URL, + APPCHAIN_BLOCK_EXPLORER_URL + ); + vm.stopPrank(); + + ArbChainConfig config = ArbChainConfig(configAddress); + address nonOwner = address(999); + + vm.prank(nonOwner); + vm.expectRevert(); // OpenZeppelin's Ownable error + config.updateVersion("1.1.0"); + } + + function testVersionPersistsAfterConfigUpdates() public { + ArbConfigManager manager = _createArbConfigManager(); + + vm.startPrank(owner); + address configAddress = manager.createArbChainConfig( + owner, + CHAIN_ID + 4000, + SEQUENCING_CHAIN_ID, + ARBITRUM_BRIDGE_ADDRESS, + ARBITRUM_INBOX_ADDRESS, + SETTLEMENT_DELAY, + SETTLEMENT_START_BLOCK, + SEQUENCING_CONTRACT_ADDRESS, + SEQUENCING_START_BLOCK, + appchainOwner, + DEFAULT_WS_RPC_URL, + APPCHAIN_BLOCK_EXPLORER_URL + ); + vm.stopPrank(); + + ArbChainConfig config = ArbChainConfig(configAddress); + + // Update version + vm.prank(owner); + config.updateVersion("2.1.0"); + + // Perform other operations + vm.prank(owner); + config.updateDefaultSequencingChainWsRpcUrl("wss://new-url.com"); + + vm.prank(owner); + config.updateAppchainBlockExplorerUrl("https://new-explorer.com"); + + // Version should still be the same + assertEq(config.version(), "2.1.0", "Version should persist after config updates"); + } + + function testVersionInManagerCreatedConfig() public { + ArbConfigManager manager = _createArbConfigManager(); + + vm.startPrank(owner); + address configAddress = manager.createArbChainConfig( + owner, + CHAIN_ID + 5000, + SEQUENCING_CHAIN_ID, + ARBITRUM_BRIDGE_ADDRESS, + ARBITRUM_INBOX_ADDRESS, + SETTLEMENT_DELAY, + SETTLEMENT_START_BLOCK, + SEQUENCING_CONTRACT_ADDRESS, + SEQUENCING_START_BLOCK, + appchainOwner, + DEFAULT_WS_RPC_URL, + APPCHAIN_BLOCK_EXPLORER_URL + ); + vm.stopPrank(); + + ArbChainConfig config = ArbChainConfig(configAddress); + assertEq(config.version(), "1.0.0", "Manager-created config should have initial version"); + } } diff --git a/synd-contracts/test/deployment/DeployerParentTest.t.sol b/synd-contracts/test/deployment/DeployerParentTest.t.sol new file mode 100644 index 000000000..4573b3890 --- /dev/null +++ b/synd-contracts/test/deployment/DeployerParentTest.t.sol @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.28; + +import {Test, console} from "forge-std/Test.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import {DeployerParent} from "src/deployment/DeployerParent.sol"; + +contract MockContract { + function foo() external {} +} + +contract MockForwarder { + function call(address dest, bytes calldata data) external payable {} + + function deploy(bytes32 salt, address impl, bytes calldata init) external payable returns (address) { + return address(0); + } +} + +contract ChainRegistry is UUPSUpgradeable { + function _authorizeUpgrade(address newImplementation) internal override {} + + function chainRegistry() external returns (bool) { + return true; + } +} + +contract DeployerParentTest is Test { + address public admin; + + DeployerParent public deployerParent; + MockForwarder public mockForwarder; + MockContract public mockContract; + + function setUp() public { + admin = makeAddr("admin"); + mockForwarder = new MockForwarder(); + mockContract = new MockContract(); + address deployerParentImpl = address(new DeployerParent(admin, address(mockForwarder))); + + deployerParent = DeployerParent(payable(new ERC1967Proxy(address(deployerParentImpl), ""))); + } + + function testInitialDeployment() external { + assertEq(deployerParent.owner(), admin); + assertEq(address(deployerParent.forwarder()), address(mockForwarder)); + } + + function testNonOwnerCannotCall() external { + vm.prank(address(0x1)); + vm.expectRevert(); + deployerParent.call(address(mockContract), abi.encodeWithSelector(MockContract.foo.selector)); + + vm.prank(address(0x1)); + vm.expectRevert(); + deployerParent.deploy(bytes32(0), address(mockContract), ""); + + vm.prank(address(0x1)); + vm.expectRevert(); + deployerParent.upgradeToAndCall(address(mockContract), ""); + } + + function testCall() external { + vm.prank(admin); + deployerParent.call(address(mockContract), abi.encodeWithSelector(MockContract.foo.selector)); + + vm.prank(admin); + deployerParent.deploy(bytes32(0), address(mockContract), ""); + } + + function testUpgrade() external { + address chainRegistryImpl = address(new ChainRegistry()); + + vm.prank(admin); + deployerParent.upgradeToAndCall(chainRegistryImpl, ""); + + assertTrue(ChainRegistry(address(deployerParent)).chainRegistry()); + } +} diff --git a/synd-contracts/test/deployment/DeploymentTest.t.sol b/synd-contracts/test/deployment/DeploymentTest.t.sol new file mode 100644 index 000000000..822343369 --- /dev/null +++ b/synd-contracts/test/deployment/DeploymentTest.t.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.28; + +import {Test, console} from "forge-std/Test.sol"; +import {SyndForwarder} from "src/deployment/SyndForwarder.sol"; + +contract MockContract { + function foo() external {} +} + +contract DeploymentTest is Test { + address public admin; + + SyndForwarder public syndForwarder; + SyndForwarder public syndForwarderL2; + + MockContract public mockContract; + + function setUp() public { + admin = address(0x1); + + syndForwarder = new SyndForwarder(admin, block.chainid); + syndForwarderL2 = new SyndForwarder(admin, block.chainid + 1); + + mockContract = new MockContract(); + } + + function getAlias(SyndForwarder addr) internal pure returns (address) { + return address(uint160(address(addr)) + uint160(0x1111000000000000000000000000000000001111)); + } + + function testInitialDeployment() external { + assertEq(syndForwarder.allowedSender(), admin); + + assertEq(syndForwarderL2.allowedSender(), getAlias(syndForwarderL2)); + } + + function testAllowedSender() external { + vm.prank(admin); + syndForwarder.call(address(mockContract), abi.encodeWithSelector(MockContract.foo.selector)); + + vm.prank(getAlias(syndForwarder)); + vm.expectRevert(); + syndForwarder.call(address(mockContract), abi.encodeWithSelector(MockContract.foo.selector)); + + vm.prank(getAlias(syndForwarderL2)); + syndForwarderL2.call(address(mockContract), abi.encodeWithSelector(MockContract.foo.selector)); + + vm.prank(admin); + vm.expectRevert(); + syndForwarderL2.call(address(mockContract), abi.encodeWithSelector(MockContract.foo.selector)); + } +} diff --git a/synd-contracts/test/factory/PermissionModuleFactoriesTest.t.sol b/synd-contracts/test/factory/PermissionModuleFactoriesTest.t.sol deleted file mode 100644 index 60264e922..000000000 --- a/synd-contracts/test/factory/PermissionModuleFactoriesTest.t.sol +++ /dev/null @@ -1,631 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.28; - -import {Test} from "forge-std/Test.sol"; -import { - RequireAndModuleFactory, - RequireOrModuleFactory, - RequireCompositeModuleFactory -} from "src/factory/PermissionModuleFactories.sol"; -import {RequireAndModule} from "src/requirement-modules/RequireAndModule.sol"; -import {RequireOrModule} from "src/requirement-modules/RequireOrModule.sol"; -import {RequireCompositeModule} from "src/requirement-modules/RequireCompositeModule.sol"; - -/// @notice Tests for PermissionModuleFactories using CREATE2 pattern -/// @dev Uses CREATE2 deployment with admin encoded in bytecode for proper ownership -contract PermissionModuleFactoriesTest is Test { - RequireAndModuleFactory public andFactory; - RequireOrModuleFactory public orFactory; - RequireCompositeModuleFactory public compositeFactory; - - address public admin; - address public manager; - address public user1; - address public user2; - address public nonManager; - - // Constants for role checking - bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; - bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); - - // Events to test - event RequireAndModuleCreated(address indexed module, address indexed admin); - event RequireOrModuleCreated(address indexed module, address indexed admin); - event RequireCompositeModuleCreated(address indexed module, address indexed admin); - - function setUp() public { - admin = address(0x1); - manager = address(0x2); - user1 = address(0x3); - user2 = address(0x4); - nonManager = address(0x5); - - // Deploy factories with admin - andFactory = new RequireAndModuleFactory(admin); - orFactory = new RequireOrModuleFactory(admin); - compositeFactory = new RequireCompositeModuleFactory(admin); - - // Grant manager roles - vm.startPrank(admin); - andFactory.grantRole(MANAGER_ROLE, manager); - orFactory.grantRole(MANAGER_ROLE, manager); - compositeFactory.grantRole(MANAGER_ROLE, manager); - vm.stopPrank(); - } - - // RequireAndModuleFactory Tests - function testCreateRequireAndModule() public { - bytes32 salt = keccak256(abi.encodePacked("test-salt-1")); - address expectedAddress = andFactory.computeModuleAddress(user1, salt); - - vm.expectEmit(true, true, false, true); - emit RequireAndModuleCreated(expectedAddress, user1); - - address moduleAddress = andFactory.createRequireAndModule(user1, salt); - - assertTrue(moduleAddress != address(0)); - assertEq(moduleAddress, expectedAddress); - - RequireAndModule module = RequireAndModule(moduleAddress); - // With CREATE2 and proper constructor, the admin should be the owner - assertEq(module.owner(), user1); - } - - function testCreateRequireAndModuleWithZeroAddressReverts() public { - bytes32 salt = keccak256(abi.encodePacked("test-salt-zero")); - - vm.expectRevert(RequireAndModuleFactory.ZeroAddress.selector); - andFactory.createRequireAndModule(address(0), salt); - } - - function testComputeRequireAndModuleAddress() public { - bytes32 salt = keccak256(abi.encodePacked("test-salt-compute")); - - address computedAddress = andFactory.computeModuleAddress(user1, salt); - address actualAddress = andFactory.createRequireAndModule(user1, salt); - - assertEq(computedAddress, actualAddress); - } - - function testRequireAndModuleDifferentSaltsDifferentAddresses() public { - bytes32 salt1 = keccak256(abi.encodePacked("salt-1")); - bytes32 salt2 = keccak256(abi.encodePacked("salt-2")); - - address addr1 = andFactory.createRequireAndModule(user1, salt1); - address addr2 = andFactory.createRequireAndModule(user1, salt2); - - assertTrue(addr1 != addr2); - } - - function testRequireAndModuleSameParametersRevert() public { - bytes32 salt = keccak256(abi.encodePacked("collision-salt")); - - // First deployment should succeed - address addr1 = andFactory.createRequireAndModule(user1, salt); - assertTrue(addr1 != address(0)); - - // Second deployment with same admin and salt should revert due to CREATE2 collision - vm.expectRevert(); - andFactory.createRequireAndModule(user1, salt); - } - - function testRequireAndModuleSameSaltDifferentUsers() public { - bytes32 salt1 = keccak256(abi.encodePacked("same-salt-1")); - bytes32 salt2 = keccak256(abi.encodePacked("same-salt-2")); - - address addr1 = andFactory.createRequireAndModule(user1, salt1); - address addr2 = andFactory.createRequireAndModule(user2, salt2); - - // Both deployments should succeed and produce different addresses - assertTrue(addr1 != address(0)); - assertTrue(addr2 != address(0)); - assertTrue(addr1 != addr2); - - // With CREATE2 and different admins, each module should have the correct owner - RequireAndModule module1 = RequireAndModule(addr1); - RequireAndModule module2 = RequireAndModule(addr2); - assertEq(module1.owner(), user1); - assertEq(module2.owner(), user2); - - // Computed addresses should also be different since admin is part of bytecode - address computedAddr1 = andFactory.computeModuleAddress(user1, salt1); - address computedAddr2 = andFactory.computeModuleAddress(user2, salt2); - assertEq(addr1, computedAddr1); - assertEq(addr2, computedAddr2); - assertTrue(computedAddr1 != computedAddr2); - } - - // Pausability Tests for RequireAndModuleFactory - function testAndFactoryPauseUnpause() public { - // Initially not paused - assertFalse(andFactory.paused()); - - // Admin can pause - vm.prank(admin); - andFactory.pause(); - assertTrue(andFactory.paused()); - - // Admin can unpause - vm.prank(admin); - andFactory.unpause(); - assertFalse(andFactory.paused()); - } - - function testAndFactoryPauseNonAdminReverts() public { - vm.prank(manager); - vm.expectRevert(); // AccessControl will revert - andFactory.pause(); - - vm.prank(nonManager); - vm.expectRevert(); // AccessControl will revert - andFactory.pause(); - } - - function testAndFactoryCreateWhenPausedReverts() public { - bytes32 salt = keccak256(abi.encodePacked("paused-test")); - - // Pause the factory - vm.prank(admin); - andFactory.pause(); - - // Try to create module - vm.expectRevert(); // Pausable will revert - andFactory.createRequireAndModule(user1, salt); - } - - function testAndFactoryCreateAfterUnpauseWorks() public { - bytes32 salt = keccak256(abi.encodePacked("unpause-test")); - - // Pause then unpause - vm.prank(admin); - andFactory.pause(); - vm.prank(admin); - andFactory.unpause(); - - // Should work after unpause - address moduleAddress = andFactory.createRequireAndModule(user1, salt); - assertTrue(moduleAddress != address(0)); - } - - // Access Control Tests for RequireAndModuleFactory - function testAndFactoryRoleSetup() public view { - // Admin should have both roles - assertTrue(andFactory.hasRole(DEFAULT_ADMIN_ROLE, admin)); - assertTrue(andFactory.hasRole(MANAGER_ROLE, admin)); - - // Manager should have manager role - assertTrue(andFactory.hasRole(MANAGER_ROLE, manager)); - - // Non-manager should not have any roles - assertFalse(andFactory.hasRole(DEFAULT_ADMIN_ROLE, nonManager)); - assertFalse(andFactory.hasRole(MANAGER_ROLE, nonManager)); - } - - // RequireOrModuleFactory Tests - function testCreateRequireOrModule() public { - bytes32 salt = keccak256(abi.encodePacked("test-salt-or-1")); - address expectedAddress = orFactory.computeModuleAddress(user1, salt); - - vm.expectEmit(true, true, false, true); - emit RequireOrModuleCreated(expectedAddress, user1); - - address moduleAddress = orFactory.createRequireOrModule(user1, salt); - - assertTrue(moduleAddress != address(0)); - assertEq(moduleAddress, expectedAddress); - } - - function testCreateRequireOrModuleWithZeroAddressReverts() public { - bytes32 salt = keccak256(abi.encodePacked("test-salt-or-zero")); - - vm.expectRevert(RequireOrModuleFactory.ZeroAddress.selector); - orFactory.createRequireOrModule(address(0), salt); - } - - function testComputeRequireOrModuleAddress() public { - bytes32 salt = keccak256(abi.encodePacked("test-salt-or-compute")); - - address computedAddress = orFactory.computeModuleAddress(user1, salt); - address actualAddress = orFactory.createRequireOrModule(user1, salt); - - assertEq(computedAddress, actualAddress); - } - - function testRequireOrModuleDifferentSaltsDifferentAddresses() public { - bytes32 salt1 = keccak256(abi.encodePacked("or-salt-1")); - bytes32 salt2 = keccak256(abi.encodePacked("or-salt-2")); - - address addr1 = orFactory.createRequireOrModule(user1, salt1); - address addr2 = orFactory.createRequireOrModule(user1, salt2); - - assertTrue(addr1 != addr2); - } - - function testRequireOrModuleSameParametersRevert() public { - bytes32 salt = keccak256(abi.encodePacked("or-collision-salt")); - - // First deployment should succeed - address addr1 = orFactory.createRequireOrModule(user1, salt); - assertTrue(addr1 != address(0)); - - // Second deployment with same admin and salt should revert - vm.expectRevert(); - orFactory.createRequireOrModule(user1, salt); - } - - // Pausability Tests for RequireOrModuleFactory - function testOrFactoryPauseUnpause() public { - assertFalse(orFactory.paused()); - - vm.prank(admin); - orFactory.pause(); - assertTrue(orFactory.paused()); - - vm.prank(admin); - orFactory.unpause(); - assertFalse(orFactory.paused()); - } - - function testOrFactoryCreateWhenPausedReverts() public { - bytes32 salt = keccak256(abi.encodePacked("or-paused-test")); - - vm.prank(admin); - orFactory.pause(); - - vm.expectRevert(); - orFactory.createRequireOrModule(user1, salt); - } - - // RequireCompositeModuleFactory Tests - function testCreateRequireCompositeModule() public { - bytes32 salt = keccak256(abi.encodePacked("test-salt-composite-1")); - address expectedAddress = compositeFactory.computeModuleAddress(user1, salt); - - vm.expectEmit(true, true, false, true); - emit RequireCompositeModuleCreated(expectedAddress, user1); - - address moduleAddress = compositeFactory.createRequireCompositeModule(user1, salt); - - assertTrue(moduleAddress != address(0)); - assertEq(moduleAddress, expectedAddress); - - RequireCompositeModule module = RequireCompositeModule(moduleAddress); - assertEq(module.owner(), user1); - } - - function testCreateRequireCompositeModuleWithZeroAddressReverts() public { - bytes32 salt = keccak256(abi.encodePacked("test-salt-composite-zero")); - - vm.expectRevert(RequireCompositeModuleFactory.ZeroAddress.selector); - compositeFactory.createRequireCompositeModule(address(0), salt); - } - - function testComputeRequireCompositeModuleAddress() public { - bytes32 salt = keccak256(abi.encodePacked("test-salt-composite-compute")); - - address computedAddress = compositeFactory.computeModuleAddress(user1, salt); - address actualAddress = compositeFactory.createRequireCompositeModule(user1, salt); - - assertEq(computedAddress, actualAddress); - } - - function testRequireCompositeModuleDifferentSaltsDifferentAddresses() public { - bytes32 salt1 = keccak256(abi.encodePacked("composite-salt-1")); - bytes32 salt2 = keccak256(abi.encodePacked("composite-salt-2")); - - address addr1 = compositeFactory.createRequireCompositeModule(user1, salt1); - address addr2 = compositeFactory.createRequireCompositeModule(user1, salt2); - - assertTrue(addr1 != addr2); - } - - function testRequireCompositeModuleSameParametersRevert() public { - bytes32 salt = keccak256(abi.encodePacked("composite-collision-salt")); - - // First deployment should succeed - address addr1 = compositeFactory.createRequireCompositeModule(user1, salt); - assertTrue(addr1 != address(0)); - - // Second deployment with same admin and salt should revert due to CREATE2 collision - vm.expectRevert(); - compositeFactory.createRequireCompositeModule(user1, salt); - } - - // Pausability Tests for RequireCompositeModuleFactory - function testCompositeFactoryPauseUnpause() public { - assertFalse(compositeFactory.paused()); - - vm.prank(admin); - compositeFactory.pause(); - assertTrue(compositeFactory.paused()); - - vm.prank(admin); - compositeFactory.unpause(); - assertFalse(compositeFactory.paused()); - } - - function testCompositeFactoryCreateWhenPausedReverts() public { - bytes32 salt = keccak256(abi.encodePacked("composite-paused-test")); - - vm.prank(admin); - compositeFactory.pause(); - - vm.expectRevert(); - compositeFactory.createRequireCompositeModule(user1, salt); - } - - // Cross-factory tests to ensure different module types produce different addresses - function testDifferentFactoriesSameSaltDifferentAddresses() public { - bytes32 salt = keccak256(abi.encodePacked("cross-factory-salt")); - - address andAddr = andFactory.createRequireAndModule(user1, salt); - - // Different factories will produce different addresses even with same salt and admin - // because they use different contract bytecode - address orAddr = orFactory.createRequireOrModule(user1, salt); - address compositeAddr = compositeFactory.createRequireCompositeModule(user1, salt); - - // All addresses should be different due to different contract types - assertTrue(andAddr != orAddr); - assertTrue(andAddr != compositeAddr); - assertTrue(orAddr != compositeAddr); - } - - // Functional tests to ensure modules work correctly - function testAndModuleFunctionality() public { - bytes32 salt = keccak256(abi.encodePacked("functional-and")); - address moduleAddr = andFactory.createRequireAndModule(user1, salt); - - RequireAndModule module = RequireAndModule(moduleAddr); - - // Test that we can get the permission checks (should be empty initially) - address[] memory checks = module.getAllPermissionChecks(); - assertEq(checks.length, 0); - - // Owner should be the admin passed to the function - assertEq(module.owner(), user1); - } - - function testOrModuleFunctionality() public { - bytes32 salt = keccak256(abi.encodePacked("functional-or")); - address moduleAddr = orFactory.createRequireOrModule(user1, salt); - - RequireOrModule module = RequireOrModule(moduleAddr); - - // Test that we can get the permission checks (should be empty initially) - address[] memory checks = module.getAllPermissionChecks(); - assertEq(checks.length, 0); - - // Owner should be the admin passed to the function - assertEq(module.owner(), user1); - } - - function testCompositeModuleFunctionality() public { - bytes32 salt = keccak256(abi.encodePacked("functional-composite")); - address moduleAddr = compositeFactory.createRequireCompositeModule(user1, salt); - - RequireCompositeModule module = RequireCompositeModule(moduleAddr); - - // Test that we can get the permission checks (should be empty initially) - address[] memory checks = module.getAllPermissionChecks(); - assertEq(checks.length, 0); - - // Owner should be the admin passed to the function - assertEq(module.owner(), user1); - } - - // Gas optimization tests - CREATE2 is different from clones but still efficient - function testCreateRequireAndModuleGasUsage() public { - bytes32 salt = keccak256(abi.encodePacked("gas-test-and")); - - uint256 gasBefore = gasleft(); - andFactory.createRequireAndModule(user1, salt); - uint256 gasAfter = gasleft(); - - uint256 gasUsed = gasBefore - gasAfter; - - // Should use reasonable amount of gas (CREATE2 deployment) - assertTrue(gasUsed < 5_000_000); // Increased limit for CREATE2 - assertTrue(gasUsed > 0); - } - - function testCreateRequireOrModuleGasUsage() public { - bytes32 salt = keccak256(abi.encodePacked("gas-test-or")); - - uint256 gasBefore = gasleft(); - orFactory.createRequireOrModule(user1, salt); - uint256 gasAfter = gasleft(); - - uint256 gasUsed = gasBefore - gasAfter; - - // Should use reasonable amount of gas (CREATE2 deployment) - assertTrue(gasUsed < 5_000_000); // Increased limit for CREATE2 - assertTrue(gasUsed > 0); - } - - function testCreateRequireCompositeModuleGasUsage() public { - bytes32 salt = keccak256(abi.encodePacked("gas-test-composite")); - - uint256 gasBefore = gasleft(); - compositeFactory.createRequireCompositeModule(user1, salt); - uint256 gasAfter = gasleft(); - - uint256 gasUsed = gasBefore - gasAfter; - - // Should use reasonable amount of gas (CREATE2 deployment) - assertTrue(gasUsed < 5_000_000); // Increased limit for CREATE2 - assertTrue(gasUsed > 0); - } - - // Edge case tests - function testCreateWithMaxUint256Salt() public { - bytes32 salt = bytes32(type(uint256).max); - - address andAddr = andFactory.createRequireAndModule(user1, salt); - assertTrue(andAddr != address(0)); - } - - function testCreateWithZeroSalt() public { - bytes32 salt = bytes32(0); - - address andAddr = andFactory.createRequireAndModule(user1, salt); - assertTrue(andAddr != address(0)); - } - - // Constructor tests - function testFactoryConstructorWithZeroAddressReverts() public { - vm.expectRevert(RequireAndModuleFactory.ZeroAddress.selector); - new RequireAndModuleFactory(address(0)); - - vm.expectRevert(RequireOrModuleFactory.ZeroAddress.selector); - new RequireOrModuleFactory(address(0)); - - vm.expectRevert(RequireCompositeModuleFactory.ZeroAddress.selector); - new RequireCompositeModuleFactory(address(0)); - } - - // Ownership verification tests - function testFactoryCannotControlDeployedModules() public { - bytes32 salt = keccak256(abi.encodePacked("factory-control-test")); - - address moduleAddr = andFactory.createRequireAndModule(user1, salt); - RequireAndModule module = RequireAndModule(moduleAddr); - - // Factory should not be able to control the module since user1 is the owner - vm.prank(address(andFactory)); - vm.expectRevert(); // Should revert with Ownable unauthorized error - module.addPermissionCheck(user2, true); - - // But user1 should be able to - vm.prank(user1); - module.addPermissionCheck(user2, true); - - address[] memory checks = module.getAllPermissionChecks(); - assertEq(checks.length, 1); - assertEq(checks[0], user2); - } - - // Comprehensive access control tests - function testAllFactoriesAccessControl() public view { - // Test all factories have correct role setup using their AccessControl interface - assertTrue(andFactory.hasRole(DEFAULT_ADMIN_ROLE, admin)); - assertTrue(andFactory.hasRole(MANAGER_ROLE, admin)); - assertTrue(andFactory.hasRole(MANAGER_ROLE, manager)); - assertFalse(andFactory.hasRole(DEFAULT_ADMIN_ROLE, nonManager)); - assertFalse(andFactory.hasRole(MANAGER_ROLE, nonManager)); - - assertTrue(orFactory.hasRole(DEFAULT_ADMIN_ROLE, admin)); - assertTrue(orFactory.hasRole(MANAGER_ROLE, admin)); - assertTrue(orFactory.hasRole(MANAGER_ROLE, manager)); - assertFalse(orFactory.hasRole(DEFAULT_ADMIN_ROLE, nonManager)); - assertFalse(orFactory.hasRole(MANAGER_ROLE, nonManager)); - - assertTrue(compositeFactory.hasRole(DEFAULT_ADMIN_ROLE, admin)); - assertTrue(compositeFactory.hasRole(MANAGER_ROLE, admin)); - assertTrue(compositeFactory.hasRole(MANAGER_ROLE, manager)); - assertFalse(compositeFactory.hasRole(DEFAULT_ADMIN_ROLE, nonManager)); - assertFalse(compositeFactory.hasRole(MANAGER_ROLE, nonManager)); - } - - // Fuzz testing - function testFuzzCreateRequireAndModule(address _admin, bytes32 _salt) public { - vm.assume(_admin != address(0)); - - address moduleAddr = andFactory.createRequireAndModule(_admin, _salt); - assertTrue(moduleAddr != address(0)); - } - - function testFuzzCreateRequireOrModule(address _admin, bytes32 _salt) public { - vm.assume(_admin != address(0)); - - address moduleAddr = orFactory.createRequireOrModule(_admin, _salt); - assertTrue(moduleAddr != address(0)); - } - - function testFuzzCreateRequireCompositeModule(address _admin, bytes32 _salt) public { - vm.assume(_admin != address(0)); - - address moduleAddr = compositeFactory.createRequireCompositeModule(_admin, _salt); - assertTrue(moduleAddr != address(0)); - } - - // Multiple deployment tests - function testMultipleDeploymentsWithDifferentSalts() public { - uint256 deploymentCount = 10; - address[] memory andModules = new address[](deploymentCount); - address[] memory orModules = new address[](deploymentCount); - address[] memory compositeModules = new address[](deploymentCount); - - for (uint256 i = 0; i < deploymentCount; i++) { - bytes32 salt = keccak256(abi.encodePacked("multiple-test", i)); - - andModules[i] = andFactory.createRequireAndModule(user1, salt); - - salt = keccak256(abi.encodePacked("multiple-test-or", i)); - orModules[i] = orFactory.createRequireOrModule(user1, salt); - - salt = keccak256(abi.encodePacked("multiple-test-composite", i)); - compositeModules[i] = compositeFactory.createRequireCompositeModule(user1, salt); - } - - // Verify all addresses are unique and valid - for (uint256 i = 0; i < deploymentCount; i++) { - assertTrue(andModules[i] != address(0)); - assertTrue(orModules[i] != address(0)); - assertTrue(compositeModules[i] != address(0)); - - for (uint256 j = i + 1; j < deploymentCount; j++) { - assertTrue(andModules[i] != andModules[j]); - assertTrue(orModules[i] != orModules[j]); - assertTrue(compositeModules[i] != compositeModules[j]); - } - } - } - - // Additional comprehensive tests for edge cases and robustness - function testDeployedModulesHaveCorrectBytecode() public { - bytes32 salt = keccak256(abi.encodePacked("bytecode-test")); - - address moduleAddr = andFactory.createRequireAndModule(user1, salt); - RequireAndModule module = RequireAndModule(moduleAddr); - - // Should be able to call module functions without issues - address[] memory checks = module.getAllPermissionChecks(); - assertEq(checks.length, 0); - - // Should be able to get the owner - address owner = module.owner(); - assertEq(owner, user1); - } - - function testFactoryCannotBeReinitialized() public { - // Factories should not be upgradeable or reinitializable - // Test that CREATE2 consistently produces same results - bytes32 salt1 = keccak256("test1"); - bytes32 salt2 = keccak256("test2"); - - // Deploy modules with different salts - address addr1 = andFactory.createRequireAndModule(user1, salt1); - address addr2 = andFactory.createRequireAndModule(user1, salt2); - - // Addresses should be different - assertTrue(addr1 != addr2); - - // But computed addresses should be consistent - assertEq(addr1, andFactory.computeModuleAddress(user1, salt1)); - assertEq(addr2, andFactory.computeModuleAddress(user1, salt2)); - } - - function testComputeAddressConsistency() public { - bytes32 salt = keccak256(abi.encodePacked("consistency-test")); - - // Computing address multiple times should give same result - address computed1 = andFactory.computeModuleAddress(user1, salt); - address computed2 = andFactory.computeModuleAddress(user1, salt); - assertEq(computed1, computed2); - - // Actual deployment should match computed address - address actual = andFactory.createRequireAndModule(user1, salt); - assertEq(actual, computed1); - } -} diff --git a/synd-contracts/test/factory/SyndicateFactoryTest.t.sol b/synd-contracts/test/factory/SyndicateFactoryTest.t.sol deleted file mode 100644 index 27e92bca2..000000000 --- a/synd-contracts/test/factory/SyndicateFactoryTest.t.sol +++ /dev/null @@ -1,663 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.28; - -import {Test} from "forge-std/Test.sol"; -import {SyndicateFactory} from "src/factory/SyndicateFactory.sol"; -import {SyndicateSequencingChain} from "src/SyndicateSequencingChain.sol"; -import {RequireAndModule} from "src/requirement-modules/RequireAndModule.sol"; -import {RequireOrModule} from "src/requirement-modules/RequireOrModule.sol"; -import {RequireCompositeModule} from "src/requirement-modules/RequireCompositeModule.sol"; -import {IRequirementModule} from "src/interfaces/IRequirementModule.sol"; - -contract SyndicateFactoryTest is Test { - SyndicateFactory public factory; - address public admin; - address public manager; - address public nonManager; - uint256 public appchainId = 10042001; - - // Constants for role checking - bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; - bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); - - // Events - event SyndicateSequencingChainCreated( - uint256 indexed appchainId, address indexed sequencingChainAddress, address indexed permissionModuleAddress - ); - - event NamespaceConfigUpdated(uint256 oldNamespacePrefix, uint256 newNamespacePrefix); - - event ChainIdManuallyMarked(uint256 indexed chainId); - - function setUp() public { - admin = address(0x1); - manager = address(0x2); - nonManager = address(0x3); - factory = new SyndicateFactory(admin); - - // Grant manager role to the manager address - vm.prank(admin); - factory.grantRole(MANAGER_ROLE, manager); - } - - function testCreateSequencingChainWithRequireAndModule() public { - RequireAndModule permissionModule = new RequireAndModule(admin); - address permissionModuleAddress = address(permissionModule); - - bytes32 salt = keccak256(abi.encodePacked("salt-for-test-1")); - address expectedAddress = factory.computeSequencingChainAddress(salt, appchainId); - - vm.expectEmit(true, true, true, true); - emit SyndicateSequencingChainCreated(appchainId, expectedAddress, permissionModuleAddress); - - (address sequencingChainAddress, uint256 actualChainId) = - factory.createSyndicateSequencingChain(appchainId, admin, permissionModule, salt); - - assertTrue(sequencingChainAddress != address(0)); - assertTrue(permissionModuleAddress != address(0)); - assertEq(actualChainId, appchainId); - assertEq(sequencingChainAddress, expectedAddress); - - SyndicateSequencingChain sequencingChain = SyndicateSequencingChain(sequencingChainAddress); - - // Verify sequencer setup - assertEq(address(sequencingChain), sequencingChainAddress); - assertEq(sequencingChain.appchainId(), appchainId); - - // Verify permission module setup - assertEq(address(sequencingChain.permissionRequirementModule()), permissionModuleAddress); - assertEq(permissionModule.owner(), admin); - } - - function testCreateSequencingChainWithRequireOrModule() public { - RequireOrModule permissionModule = new RequireOrModule(admin); - address permissionModuleAddress = address(permissionModule); - - bytes32 salt = keccak256(abi.encodePacked("salt-for-test-2")); - address expectedAddress = factory.computeSequencingChainAddress(salt, appchainId); - - vm.expectEmit(true, true, true, true); - emit SyndicateSequencingChainCreated(appchainId, expectedAddress, permissionModuleAddress); - - (address sequencingChainAddress, uint256 actualChainId) = - factory.createSyndicateSequencingChain(appchainId, admin, IRequirementModule(permissionModule), salt); - - assertTrue(sequencingChainAddress != address(0)); - assertTrue(permissionModuleAddress != address(0)); - assertEq(actualChainId, appchainId); - assertEq(sequencingChainAddress, expectedAddress); - - SyndicateSequencingChain sequencingChain = SyndicateSequencingChain(sequencingChainAddress); - - // Verify sequencer setup - assertEq(address(sequencingChain), sequencingChainAddress); - assertEq(sequencingChain.appchainId(), appchainId); - - // Verify permission module setup - assertEq(address(sequencingChain.permissionRequirementModule()), permissionModuleAddress); - assertEq(permissionModule.owner(), admin); - } - - function testCreateSequencingChainWithRequireCompositeModule() public { - RequireCompositeModule permissionModule = new RequireCompositeModule(admin); - address permissionModuleAddress = address(permissionModule); - - bytes32 salt = keccak256(abi.encodePacked("salt-for-test-composite")); - (address sequencingChainAddress, uint256 actualChainId) = - factory.createSyndicateSequencingChain(appchainId, admin, IRequirementModule(permissionModule), salt); - - assertTrue(sequencingChainAddress != address(0)); - assertEq(actualChainId, appchainId); - - SyndicateSequencingChain sequencingChain = SyndicateSequencingChain(sequencingChainAddress); - assertEq(sequencingChain.appchainId(), appchainId); - assertEq(address(sequencingChain.permissionRequirementModule()), permissionModuleAddress); - assertEq(permissionModule.owner(), admin); - } - - function testCorrectAppChainIdAssignment() public { - RequireAndModule permissionModule = new RequireAndModule(admin); - RequireOrModule permissionModule2 = new RequireOrModule(admin); - uint256 differentChainId = 10042002; - - bytes32 salt1 = keccak256(abi.encodePacked("salt-for-test-7")); - bytes32 salt2 = keccak256(abi.encodePacked("salt-for-test-8")); - - (address sequencingChain1, uint256 actualChainId1) = factory.createSyndicateSequencingChain( - appchainId, admin, IRequirementModule(address(permissionModule)), salt1 - ); - (address sequencingChain2, uint256 actualChainId2) = factory.createSyndicateSequencingChain( - differentChainId, admin, IRequirementModule(address(permissionModule2)), salt2 - ); - - assertEq(SyndicateSequencingChain(sequencingChain1).appchainId(), appchainId); - assertEq(SyndicateSequencingChain(sequencingChain2).appchainId(), differentChainId); - assertEq(actualChainId1, appchainId); - assertEq(actualChainId2, differentChainId); - } - - function testRevertsOnZeroAdmin() public { - RequireAndModule permissionModule = new RequireAndModule(admin); - bytes32 salt = keccak256(abi.encodePacked("salt-for-test-9")); - - vm.expectRevert(SyndicateFactory.ZeroAddress.selector); - factory.createSyndicateSequencingChain( - appchainId, address(0), IRequirementModule(address(permissionModule)), salt - ); - } - - function testRevertsOnZeroPermissionModule() public { - bytes32 salt = keccak256(abi.encodePacked("salt-for-test-10")); - - vm.expectRevert(SyndicateFactory.ZeroAddress.selector); - factory.createSyndicateSequencingChain(appchainId, admin, IRequirementModule(address(0)), salt); - } - - function testAutoIncrementOnZeroChainId() public { - RequireAndModule permissionModule = new RequireAndModule(admin); - - // Fetch dynamic values from contract - uint256 namespacePrefix = factory.namespacePrefix(); - uint256 expectedChainId = (namespacePrefix * 10) + 1; - - bytes32 salt = keccak256(abi.encodePacked("salt-for-auto-increment")); - (address sequencingChainAddress, uint256 actualChainId) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule)), salt); - - assertTrue(sequencingChainAddress != address(0)); - assertEq(actualChainId, expectedChainId); - assertEq(SyndicateSequencingChain(sequencingChainAddress).appchainId(), expectedChainId); - - // Verify next chain ID incremented - uint256 nextExpectedChainId = (namespacePrefix * 10) + 2; - assertEq(factory.getNextChainId(), nextExpectedChainId); - } - - function testCreateSequencingChainAddressIsDeterministic() public { - RequireAndModule permissionModule = new RequireAndModule(admin); - bytes32 salt = keccak256(abi.encodePacked("salt-for-deterministic")); - - address expectedAddress = factory.computeSequencingChainAddress(salt, appchainId); - (address sequencingChainAddress,) = factory.createSyndicateSequencingChain( - appchainId, admin, IRequirementModule(address(permissionModule)), salt - ); - - assertEq(sequencingChainAddress, expectedAddress); - } - - function testGetBytecode() public view { - bytes memory bytecode = factory.getBytecode(appchainId); - bytes memory expectedBytecode = - abi.encodePacked(type(SyndicateSequencingChain).creationCode, abi.encode(appchainId, false)); - assertEq(bytecode, expectedBytecode); - } - - function testAutoIncrementChainIds() public { - RequireAndModule permissionModule1 = new RequireAndModule(admin); - RequireOrModule permissionModule2 = new RequireOrModule(admin); - RequireCompositeModule permissionModule3 = new RequireCompositeModule(admin); - - // First auto-incremented chain ID - bytes32 salt1 = keccak256(abi.encodePacked("salt-for-auto-1")); - (, uint256 id1) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule1)), salt1); - - // Fetch dynamic values from contract - uint256 namespacePrefix = factory.namespacePrefix(); - uint256 expectedId1 = (namespacePrefix * 10) + 1; - assertEq(id1, expectedId1); - - // Second auto-incremented chain ID - bytes32 salt2 = keccak256(abi.encodePacked("salt-for-auto-2")); - (, uint256 id2) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule2)), salt2); - uint256 expectedId2 = (namespacePrefix * 10) + 2; - assertEq(id2, expectedId2); - - // Third auto-incremented chain ID - bytes32 salt3 = keccak256(abi.encodePacked("salt-for-auto-3")); - (, uint256 id3) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule3)), salt3); - uint256 expectedId3 = (namespacePrefix * 10) + 3; - assertEq(id3, expectedId3); - } - - function testMixedAutoAndManualChainIds() public { - RequireAndModule permissionModule1 = new RequireAndModule(admin); - RequireOrModule permissionModule2 = new RequireOrModule(admin); - RequireCompositeModule permissionModule3 = new RequireCompositeModule(admin); - - // Auto chain ID - bytes32 salt1 = keccak256(abi.encodePacked("salt-for-mixed-1")); - (, uint256 id1) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule1)), salt1); - - // Fetch dynamic values from contract - uint256 namespacePrefix = factory.namespacePrefix(); - uint256 expectedId1 = (namespacePrefix * 10) + 1; - assertEq(id1, expectedId1); - - // Manual chain ID - uint256 manualId = 42000; - bytes32 salt2 = keccak256(abi.encodePacked("salt-for-mixed-2")); - (, uint256 id2) = factory.createSyndicateSequencingChain( - manualId, admin, IRequirementModule(address(permissionModule2)), salt2 - ); - assertEq(id2, manualId); - - // Back to auto chain ID - bytes32 salt3 = keccak256(abi.encodePacked("salt-for-mixed-3")); - (, uint256 id3) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule3)), salt3); - // Should be next auto ID since we only used one auto ID so far - uint256 expectedId3 = (namespacePrefix * 10) + 2; - assertEq(id3, expectedId3); - } - - function testChainIdAlreadyExists() public { - RequireAndModule permissionModule1 = new RequireAndModule(admin); - RequireOrModule permissionModule2 = new RequireOrModule(admin); - - // Create first chain - bytes32 salt1 = keccak256(abi.encodePacked("salt-for-duplicate-1")); - factory.createSyndicateSequencingChain(appchainId, admin, IRequirementModule(address(permissionModule1)), salt1); - - // Try to create another with same chain ID - bytes32 salt2 = keccak256(abi.encodePacked("salt-for-duplicate-2")); - vm.expectRevert(SyndicateFactory.ChainIdAlreadyExists.selector); - factory.createSyndicateSequencingChain(appchainId, admin, IRequirementModule(address(permissionModule2)), salt2); - } - - function testIsChainIdUsed() public { - RequireAndModule permissionModule1 = new RequireAndModule(admin); - RequireOrModule permissionModule2 = new RequireOrModule(admin); - - // Initially no chain IDs used - assertEq(factory.isChainIdUsed(appchainId), false); - - // Create chain - bytes32 salt1 = keccak256(abi.encodePacked("salt-for-used-1")); - factory.createSyndicateSequencingChain(appchainId, admin, IRequirementModule(address(permissionModule1)), salt1); - - // Now chain ID should be marked as used - assertEq(factory.isChainIdUsed(appchainId), true); - - // Auto-incremented ID should also be marked as used - bytes32 salt2 = keccak256(abi.encodePacked("salt-for-used-2")); - (, uint256 id2) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule2)), salt2); - assertEq(factory.isChainIdUsed(id2), true); - } - - // Pausability Tests - function testPauseUnpause() public { - // Initially not paused - assertFalse(factory.paused()); - - // Admin can pause - vm.prank(admin); - factory.pause(); - assertTrue(factory.paused()); - - // Admin can unpause - vm.prank(admin); - factory.unpause(); - assertFalse(factory.paused()); - } - - function testPauseNonAdminReverts() public { - vm.prank(manager); - vm.expectRevert(); // AccessControl will revert - factory.pause(); - - vm.prank(nonManager); - vm.expectRevert(); // AccessControl will revert - factory.pause(); - } - - function testUnpauseNonAdminReverts() public { - // Pause first - vm.prank(admin); - factory.pause(); - - vm.prank(manager); - vm.expectRevert(); // AccessControl will revert - factory.unpause(); - - vm.prank(nonManager); - vm.expectRevert(); // AccessControl will revert - factory.unpause(); - } - - function testCreateSequencingChainWhenPausedReverts() public { - RequireAndModule permissionModule = new RequireAndModule(admin); - bytes32 salt = keccak256(abi.encodePacked("salt-for-paused")); - - // Pause the factory - vm.prank(admin); - factory.pause(); - - // Try to create sequencing chain - vm.expectRevert(); // Pausable will revert with "Pausable: paused" - factory.createSyndicateSequencingChain(appchainId, admin, IRequirementModule(address(permissionModule)), salt); - } - - function testCreateSequencingChainAfterUnpauseWorks() public { - RequireAndModule permissionModule = new RequireAndModule(admin); - bytes32 salt = keccak256(abi.encodePacked("salt-for-unpause")); - - // Pause then unpause - vm.prank(admin); - factory.pause(); - vm.prank(admin); - factory.unpause(); - - // Should work after unpause - (address sequencingChainAddress, uint256 actualChainId) = factory.createSyndicateSequencingChain( - appchainId, admin, IRequirementModule(address(permissionModule)), salt - ); - - assertTrue(sequencingChainAddress != address(0)); - assertEq(actualChainId, appchainId); - } - - // Access Control tests - function testRoleSetup() public view { - // Admin should have the default admin role - assertTrue(factory.hasRole(DEFAULT_ADMIN_ROLE, admin)); - - // Admin should have the manager role - assertTrue(factory.hasRole(MANAGER_ROLE, admin)); - - // Manager should have the manager role - assertTrue(factory.hasRole(MANAGER_ROLE, manager)); - - // Non-manager should not have any roles - assertFalse(factory.hasRole(DEFAULT_ADMIN_ROLE, nonManager)); - assertFalse(factory.hasRole(MANAGER_ROLE, nonManager)); - } - - function testNamespaceConfigGetters() public view { - // Initial values - assertEq(factory.namespacePrefix(), 510); - // Note: namespaceMultiplier no longer exists - } - - function testPublicVariables() public view { - // Test that variables are publicly accessible - assertEq(factory.namespacePrefix(), 510); - assertEq(factory.nextAutoChainId(), 1); - assertEq(factory.appchainContracts(appchainId), address(0)); - } - - function testUpdateNamespaceConfig() public { - uint256 newPrefix = 511; - - // Manager can update namespace config - vm.prank(manager); - vm.expectEmit(true, true, false, true); - emit NamespaceConfigUpdated( - 510, // old prefix - newPrefix - ); - factory.updateNamespaceConfig(newPrefix); - - // Check new values - assertEq(factory.namespacePrefix(), newPrefix); - } - - function testUpdateNamespaceConfigAsNonManagerReverts() public { - uint256 newPrefix = 511; - - // Non-manager cannot update namespace config - vm.prank(nonManager); - vm.expectRevert(); // AccessControl will revert with a specific message - factory.updateNamespaceConfig(newPrefix); - } - - function testNamespaceUpdateAffectsAutoIncrementChainIds() public { - RequireAndModule permissionModule1 = new RequireAndModule(admin); - RequireOrModule permissionModule2 = new RequireOrModule(admin); - - // Create a chain with old namespace - bytes32 salt1 = keccak256(abi.encodePacked("salt-for-namespace-1")); - (, uint256 id1) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule1)), salt1); - - // Verify chain ID follows current formula - uint256 namespacePrefix = factory.namespacePrefix(); - uint256 expectedId1 = (namespacePrefix * 10) + 1; - assertEq(id1, expectedId1); - - // Update namespace config - uint256 newPrefix = 600; - - vm.prank(admin); - factory.updateNamespaceConfig(newPrefix); - - // Create a chain with new namespace - bytes32 salt2 = keccak256(abi.encodePacked("salt-for-namespace-2")); - (, uint256 id2) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule2)), salt2); - - // New namespace: (600 * 10) + 2 (counter is at 2 now) - uint256 expectedId2 = (newPrefix * 10) + 2; - assertEq(id2, expectedId2); - } - - function testConstructorWithZeroAddressReverts() public { - vm.expectRevert(SyndicateFactory.ZeroAddress.selector); - new SyndicateFactory(address(0)); - } - - function testGetNextChainIdFunction() public view { - // Test that the public function works correctly - uint256 namespacePrefix = factory.namespacePrefix(); - uint256 nextAutoChainId = factory.nextAutoChainId(); - - uint256 expectedNextId = (namespacePrefix * 10) + nextAutoChainId; - uint256 actualNextId = factory.getNextChainId(); - assertEq(actualNextId, expectedNextId); - } - - function testChainIdArithmeticLogic() public { - // Test arithmetic-based chain ID generation (replacement for old concatenation logic) - RequireAndModule permissionModule1 = new RequireAndModule(admin); - RequireOrModule permissionModule2 = new RequireOrModule(admin); - - // First: dynamic calculation - uint256 namespacePrefix = factory.namespacePrefix(); - - bytes32 salt1 = keccak256(abi.encodePacked("arithmetic-1")); - (, uint256 id1) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule1)), salt1); - uint256 expectedId1 = (namespacePrefix * 10) + 1; - assertEq(id1, expectedId1); - - // Second: dynamic calculation - bytes32 salt2 = keccak256(abi.encodePacked("arithmetic-2")); - (, uint256 id2) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule2)), salt2); - uint256 expectedId2 = (namespacePrefix * 10) + 2; - assertEq(id2, expectedId2); - - // Create several more to test sequential generation - for (uint256 i = 3; i <= 5; i++) { - RequireAndModule pm = new RequireAndModule(admin); - bytes32 salt = keccak256(abi.encodePacked("arithmetic-loop", i)); - (, uint256 id) = factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(pm)), salt); - - // Expected: (namespacePrefix * 10) + i - uint256 expectedId = (namespacePrefix * 10) + i; - assertEq(id, expectedId); - } - } - - function testLargeChainIdNumbers() public { - RequireAndModule permissionModule = new RequireAndModule(admin); - - // Update to higher starting point to test larger arithmetic calculations - vm.prank(admin); - factory.updateNamespaceConfig(999); - - // Create auto chain with dynamic calculation - uint256 newNamespacePrefix = factory.namespacePrefix(); // 999 after update - uint256 expectedId = (newNamespacePrefix * 10) + 1; - - bytes32 salt = keccak256(abi.encodePacked("large-number")); - (, uint256 id) = - factory.createSyndicateSequencingChain(0, admin, IRequirementModule(address(permissionModule)), salt); - assertEq(id, expectedId); - } - - function testSequencingChainImplementationAddress() public view { - // Test that implementation address is set and not zero - bytes32 salt = keccak256(abi.encodePacked("impl-test")); - uint256 chainId = 510_000_000_001; // Use an auto-generated ID - address impl = factory.computeSequencingChainAddress(salt, chainId); - assertTrue(impl != address(0)); - } - - // Edge cases and fuzz tests - function testFuzzManualChainIds(uint256 chainId) public { - // Skip already used chain IDs and auto-generated ones - vm.assume(chainId != 0); - // Skip first auto-generated ID based on current formula - uint256 firstAutoId = (factory.namespacePrefix() * 10) + 1; - vm.assume(chainId != firstAutoId); - vm.assume(factory.isChainIdUsed(chainId) == false); - - RequireAndModule permissionModule = new RequireAndModule(admin); - bytes32 salt = keccak256(abi.encodePacked("fuzz-test", chainId)); - - (address sequencingChainAddress, uint256 actualChainId) = - factory.createSyndicateSequencingChain(chainId, admin, IRequirementModule(address(permissionModule)), salt); - - assertTrue(sequencingChainAddress != address(0)); - assertEq(actualChainId, chainId); - assertEq(factory.isChainIdUsed(chainId), true); - } - - function testFuzzSalts(bytes32 salt) public { - RequireAndModule permissionModule = new RequireAndModule(admin); - - (address sequencingChainAddress,) = factory.createSyndicateSequencingChain( - appchainId, admin, IRequirementModule(address(permissionModule)), salt - ); - - assertTrue(sequencingChainAddress != address(0)); - assertEq(sequencingChainAddress, factory.computeSequencingChainAddress(salt, appchainId)); - } - - function testNewChainIdGenerationFormat() public view { - uint256 namespacePrefix = factory.namespacePrefix(); - uint256 nextAutoChainId = factory.nextAutoChainId(); - - uint256 expectedChainId = (namespacePrefix * 10) + nextAutoChainId; - uint256 actualChainId = factory.getNextChainId(); - assertEq(actualChainId, expectedChainId); - } - - function testChainIdNoCollisions() public { - // Test that different namespace/autoId combinations produce different results - - vm.startPrank(manager); - - // Test scenario 1: namespace=12, simple autoId - factory.updateNamespaceConfig(12); - uint256 chainId1 = factory.getNextChainId(); - // Expected: (12 * 10) + 1 - - // Test scenario 2: namespace=123 - vm.expectRevert(); - factory.updateNamespaceConfig(123); - - // Test scenario 3: namespace=1 - vm.expectRevert(); - factory.updateNamespaceConfig(1); - - // Test scenario 3: namespace=133, simple autoId (same counter value) - factory.updateNamespaceConfig(133); - - uint256 chainId2 = factory.getNextChainId(); - // Expected: (133 * 10) + 1 - // Note: nextAutoChainId is still 1 since we didn't create any chains yet - - vm.stopPrank(); - - // These should be completely different, demonstrating no collision - assertTrue(chainId1 != chainId2); - assertEq(chainId1, (12 * 10) + 1); - assertEq(chainId2, (133 * 10) + 1); - } - - function testGetContractsForAppchains() public { - // Create a few chains with non-sequential chain IDs - RequireAndModule permissionModule = new RequireAndModule(admin); - bytes32 salt1 = keccak256(abi.encodePacked("salt-for-test-9a")); - bytes32 salt2 = keccak256(abi.encodePacked("salt-for-test-9b")); - bytes32 salt3 = keccak256(abi.encodePacked("salt-for-test-9c")); - - uint256 appchainId1 = 100; - uint256 appchainId2 = 200; - uint256 appchainId3 = 300; - - vm.prank(nonManager); - (address chain1,) = factory.createSyndicateSequencingChain(appchainId1, admin, permissionModule, salt1); - - vm.prank(nonManager); - (address chain2,) = factory.createSyndicateSequencingChain(appchainId2, admin, permissionModule, salt2); - - vm.prank(nonManager); - (address chain3,) = factory.createSyndicateSequencingChain(appchainId3, admin, permissionModule, salt3); - - // Test getContractsForAppchains with specific chain IDs - uint256[] memory chainIDs = new uint256[](2); - chainIDs[0] = appchainId2; // 200 - chainIDs[1] = appchainId1; // 100 - - address[] memory contracts = factory.getContractsForAppchains(chainIDs); - - // Verify that the correct contracts are returned for each chain ID - // This is the regression test for the bug where it was using the loop index instead of the chain ID - assertEq(contracts.length, 2); - assertEq(contracts[0], chain2); // Contract for chain ID 200 - assertEq(contracts[1], chain1); // Contract for chain ID 100 - - // Test with a single chain ID - uint256[] memory singleChainID = new uint256[](1); - singleChainID[0] = appchainId3; // 300 - - address[] memory singleContract = factory.getContractsForAppchains(singleChainID); - - assertEq(singleContract.length, 1); - assertEq(singleContract[0], chain3); // Contract for chain ID 300 - } - - function testGetAppchainsAndContracts() public { - RequireAndModule permissionModule = new RequireAndModule(admin); - bytes32 salt1 = keccak256(abi.encodePacked("salt-for-bug-test-1")); - bytes32 salt2 = keccak256(abi.encodePacked("salt-for-bug-test-2")); - bytes32 salt3 = keccak256(abi.encodePacked("salt-for-bug-test-3")); - - uint256 appchainId1 = 1000; - uint256 appchainId2 = 2000; - uint256 appchainId3 = 3000; - - (address chain1Addr,) = factory.createSyndicateSequencingChain(appchainId1, admin, permissionModule, salt1); - (address chain2Addr,) = factory.createSyndicateSequencingChain(appchainId2, admin, permissionModule, salt2); - (address chain3Addr,) = factory.createSyndicateSequencingChain(appchainId3, admin, permissionModule, salt3); - - (uint256[] memory chainIDs, address[] memory contracts) = factory.getAppchainsAndContracts(); - assertEq(chainIDs.length, 3); - assertEq(contracts.length, 3); - assertEq(contracts[0], chain1Addr); - assertEq(contracts[1], chain2Addr); - assertEq(contracts[2], chain3Addr); - - // ensure the mapping is consistent - for (uint256 i = 0; i < chainIDs.length; i++) { - assertEq(contracts[i], factory.appchainContracts(chainIDs[i])); - } - } -} diff --git a/synd-contracts/test/factory/SyndicateFactoryWrapperTest.t.sol b/synd-contracts/test/factory/SyndicateFactoryWrapperTest.t.sol deleted file mode 100644 index 8e66df3e9..000000000 --- a/synd-contracts/test/factory/SyndicateFactoryWrapperTest.t.sol +++ /dev/null @@ -1,416 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity 0.8.28; - -import {Test} from "forge-std/Test.sol"; -import {SyndicateFactoryWrapper} from "src/factory/SyndicateFactoryWrapper.sol"; -import {SyndicateFactory} from "src/factory/SyndicateFactory.sol"; -import {RequireAndModuleFactory, RequireOrModuleFactory} from "src/factory/PermissionModuleFactories.sol"; -import {SyndicateSequencingChain} from "src/SyndicateSequencingChain.sol"; -import {RequireAndModule} from "src/requirement-modules/RequireAndModule.sol"; -import {RequireOrModule} from "src/requirement-modules/RequireOrModule.sol"; - -contract SyndicateFactoryWrapperTest is Test { - SyndicateFactoryWrapper public wrapper; - SyndicateFactory public syndicateFactory; - RequireAndModuleFactory public andFactory; - RequireOrModuleFactory public orFactory; - - address public admin; - address public manager; - address public user1; - address public user2; - address public nonManager; - - uint256 public appchainId = 12345; - - // Constants for role checking - bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; - bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); - - // Events to test - event CompleteSyndicateDeployed( - uint256 indexed chainId, - address indexed sequencingChain, - address indexed permissionModule, - SyndicateFactoryWrapper.ModuleType moduleType, - address admin - ); - - function setUp() public { - admin = address(0x1); - manager = address(0x2); - user1 = address(0x3); - user2 = address(0x4); - nonManager = address(0x5); - - // Deploy individual factories - syndicateFactory = new SyndicateFactory(admin); - andFactory = new RequireAndModuleFactory(admin); - orFactory = new RequireOrModuleFactory(admin); - - // Deploy wrapper - wrapper = new SyndicateFactoryWrapper(admin, address(syndicateFactory), address(andFactory), address(orFactory)); - - // Grant manager roles - vm.startPrank(admin); - wrapper.grantRole(MANAGER_ROLE, manager); - vm.stopPrank(); - } - - // Basic deployment tests - function testDeployCompleteSyndicateWithRequireAndModule() public { - bytes32 moduleSalt = keccak256(abi.encodePacked("module-salt-and")); - bytes32 chainSalt = keccak256(abi.encodePacked("chain-salt-and")); - - // Compute expected addresses - address expectedModuleAddr = andFactory.computeModuleAddress(user1, moduleSalt); - address expectedChainAddr = syndicateFactory.computeSequencingChainAddress(chainSalt, appchainId); - - vm.expectEmit(true, true, true, true); - emit CompleteSyndicateDeployed( - appchainId, expectedChainAddr, expectedModuleAddr, SyndicateFactoryWrapper.ModuleType.RequireAnd, user1 - ); - - (address sequencingChain, address permissionModule, uint256 actualChainId) = wrapper.deployCompleteSyndicate( - appchainId, user1, SyndicateFactoryWrapper.ModuleType.RequireAnd, moduleSalt, chainSalt - ); - - // Verify addresses match expectations - assertEq(sequencingChain, expectedChainAddr); - assertEq(permissionModule, expectedModuleAddr); - assertEq(actualChainId, appchainId); - - // Verify the deployed contracts work - RequireAndModule module = RequireAndModule(permissionModule); - assertEq(module.owner(), user1); - - SyndicateSequencingChain chain = SyndicateSequencingChain(sequencingChain); - assertEq(chain.appchainId(), appchainId); - assertEq(address(chain.permissionRequirementModule()), permissionModule); - } - - function testDeployCompleteSyndicateWithRequireOrModule() public { - bytes32 moduleSalt = keccak256(abi.encodePacked("module-salt-or")); - bytes32 chainSalt = keccak256(abi.encodePacked("chain-salt-or")); - - // Compute expected addresses - address expectedModuleAddr = orFactory.computeModuleAddress(user1, moduleSalt); - address expectedChainAddr = syndicateFactory.computeSequencingChainAddress(chainSalt, appchainId); - - vm.expectEmit(true, true, true, true); - emit CompleteSyndicateDeployed( - appchainId, expectedChainAddr, expectedModuleAddr, SyndicateFactoryWrapper.ModuleType.RequireOr, user1 - ); - - (address sequencingChain, address permissionModule, uint256 actualChainId) = wrapper.deployCompleteSyndicate( - appchainId, user1, SyndicateFactoryWrapper.ModuleType.RequireOr, moduleSalt, chainSalt - ); - - // Verify addresses match expectations - assertEq(sequencingChain, expectedChainAddr); - assertEq(permissionModule, expectedModuleAddr); - assertEq(actualChainId, appchainId); - - // Verify the deployed contracts work - RequireOrModule module = RequireOrModule(permissionModule); - assertEq(module.owner(), user1); - - SyndicateSequencingChain chain = SyndicateSequencingChain(sequencingChain); - assertEq(chain.appchainId(), appchainId); - assertEq(address(chain.permissionRequirementModule()), permissionModule); - } - - // Convenience function tests - function testDeployWithRequireAndModule() public { - bytes32 moduleSalt = keccak256(abi.encodePacked("convenience-and-module")); - bytes32 chainSalt = keccak256(abi.encodePacked("convenience-and-chain")); - - (address sequencingChain, address permissionModule, uint256 actualChainId) = - wrapper.deployWithRequireAndModule(appchainId, user1, moduleSalt, chainSalt); - - assertTrue(sequencingChain != address(0)); - assertTrue(permissionModule != address(0)); - assertEq(actualChainId, appchainId); - - // Verify it's a RequireAndModule - RequireAndModule module = RequireAndModule(permissionModule); - assertEq(module.owner(), user1); - } - - function testDeployWithRequireOrModule() public { - bytes32 moduleSalt = keccak256(abi.encodePacked("convenience-or-module")); - bytes32 chainSalt = keccak256(abi.encodePacked("convenience-or-chain")); - - (address sequencingChain, address permissionModule, uint256 actualChainId) = - wrapper.deployWithRequireOrModule(appchainId, user1, moduleSalt, chainSalt); - - assertTrue(sequencingChain != address(0)); - assertTrue(permissionModule != address(0)); - assertEq(actualChainId, appchainId); - - // Verify it's a RequireOrModule - RequireOrModule module = RequireOrModule(permissionModule); - assertEq(module.owner(), user1); - } - - // Auto-increment chain ID tests - function testDeployWithAutoIncrementChainId() public { - bytes32 moduleSalt = keccak256(abi.encodePacked("auto-increment-module")); - bytes32 chainSalt = keccak256(abi.encodePacked("auto-increment-chain")); - - uint256 expectedChainId = wrapper.getNextAutoChainId(); - - (address sequencingChain, address permissionModule, uint256 actualChainId) = wrapper.deployCompleteSyndicate( - 0, // Auto-increment - user1, - SyndicateFactoryWrapper.ModuleType.RequireAnd, - moduleSalt, - chainSalt - ); - - assertTrue(sequencingChain != address(0)); - assertTrue(permissionModule != address(0)); - assertEq(actualChainId, expectedChainId); - - // Verify chain ID is marked as used - assertEq(wrapper.isChainIdUsed(actualChainId), true); - } - - // Address computation tests - function testComputeCompleteSyndicateAddresses() public { - bytes32 moduleSalt = keccak256(abi.encodePacked("compute-module")); - bytes32 chainSalt = keccak256(abi.encodePacked("compute-chain")); - - (address expectedModuleAddr, address expectedChainAddr) = wrapper.computeCompleteSyndicateAddresses( - user1, SyndicateFactoryWrapper.ModuleType.RequireAnd, moduleSalt, chainSalt, appchainId - ); - - // Deploy and verify addresses match - (address sequencingChain, address permissionModule,) = wrapper.deployCompleteSyndicate( - appchainId, user1, SyndicateFactoryWrapper.ModuleType.RequireAnd, moduleSalt, chainSalt - ); - - assertEq(permissionModule, expectedModuleAddr); - assertEq(sequencingChain, expectedChainAddr); - } - - function testComputeAddressesForDifferentModuleTypes() public view { - bytes32 moduleSalt = keccak256(abi.encodePacked("diff-types-module")); - bytes32 chainSalt = keccak256(abi.encodePacked("diff-types-chain")); - - (address andModuleAddr, address chainAddr1) = wrapper.computeCompleteSyndicateAddresses( - user1, SyndicateFactoryWrapper.ModuleType.RequireAnd, moduleSalt, chainSalt, appchainId - ); - - (address orModuleAddr, address chainAddr2) = wrapper.computeCompleteSyndicateAddresses( - user1, SyndicateFactoryWrapper.ModuleType.RequireOr, moduleSalt, chainSalt, appchainId - ); - - // Module addresses should be different (different contract types) - assertTrue(andModuleAddr != orModuleAddr); - // Chain addresses should be the same (same salt and chain ID) - assertEq(chainAddr1, chainAddr2); - } - - // Error handling tests - function testDeployWithZeroAddressReverts() public { - bytes32 moduleSalt = keccak256(abi.encodePacked("zero-addr-module")); - bytes32 chainSalt = keccak256(abi.encodePacked("zero-addr-chain")); - - vm.expectRevert(SyndicateFactoryWrapper.ZeroAddress.selector); - wrapper.deployCompleteSyndicate( - appchainId, address(0), SyndicateFactoryWrapper.ModuleType.RequireAnd, moduleSalt, chainSalt - ); - } - - // Pausability tests - function testPauseUnpause() public { - // Initially not paused - assertFalse(wrapper.paused()); - - // Admin can pause - vm.prank(admin); - wrapper.pause(); - assertTrue(wrapper.paused()); - - // Admin can unpause - vm.prank(admin); - wrapper.unpause(); - assertFalse(wrapper.paused()); - } - - function testPauseNonAdminReverts() public { - vm.prank(manager); - vm.expectRevert(); // AccessControl will revert - wrapper.pause(); - - vm.prank(nonManager); - vm.expectRevert(); // AccessControl will revert - wrapper.pause(); - } - - function testDeployWhenPausedReverts() public { - bytes32 moduleSalt = keccak256(abi.encodePacked("paused-module")); - bytes32 chainSalt = keccak256(abi.encodePacked("paused-chain")); - - // Pause the wrapper - vm.prank(admin); - wrapper.pause(); - - // Try to deploy - vm.expectRevert(); // Pausable will revert - wrapper.deployCompleteSyndicate( - appchainId, user1, SyndicateFactoryWrapper.ModuleType.RequireAnd, moduleSalt, chainSalt - ); - } - - function testDeployAfterUnpauseWorks() public { - bytes32 moduleSalt = keccak256(abi.encodePacked("unpause-module")); - bytes32 chainSalt = keccak256(abi.encodePacked("unpause-chain")); - - // Pause then unpause - vm.prank(admin); - wrapper.pause(); - vm.prank(admin); - wrapper.unpause(); - - // Should work after unpause - (address sequencingChain, address permissionModule, uint256 actualChainId) = wrapper.deployCompleteSyndicate( - appchainId, user1, SyndicateFactoryWrapper.ModuleType.RequireAnd, moduleSalt, chainSalt - ); - - assertTrue(sequencingChain != address(0)); - assertTrue(permissionModule != address(0)); - assertEq(actualChainId, appchainId); - } - - // Access control tests - function testRoleSetup() public view { - // Admin should have both roles - assertTrue(wrapper.hasRole(DEFAULT_ADMIN_ROLE, admin)); - assertTrue(wrapper.hasRole(MANAGER_ROLE, admin)); - - // Manager should have manager role - assertTrue(wrapper.hasRole(MANAGER_ROLE, manager)); - - // Non-manager should not have any roles - assertFalse(wrapper.hasRole(DEFAULT_ADMIN_ROLE, nonManager)); - assertFalse(wrapper.hasRole(MANAGER_ROLE, nonManager)); - } - - // Helper function tests - function testGetNextAutoChainId() public view { - uint256 nextId = wrapper.getNextAutoChainId(); - assertEq(nextId, 5101); // Should match syndicate factory default - } - - function testGetNamespacePrefix() public view { - uint256 prefix = wrapper.getNamespacePrefix(); - assertEq(prefix, 510); // Should match syndicate factory default - } - - function testIsChainIdUsed() public { - // Initially not used - assertEq(wrapper.isChainIdUsed(appchainId), false); - - // Deploy something - bytes32 moduleSalt = keccak256(abi.encodePacked("used-module")); - bytes32 chainSalt = keccak256(abi.encodePacked("used-chain")); - - wrapper.deployCompleteSyndicate( - appchainId, user1, SyndicateFactoryWrapper.ModuleType.RequireAnd, moduleSalt, chainSalt - ); - - // Now should be used - assertEq(wrapper.isChainIdUsed(appchainId), true); - } - - // Constructor tests - function testConstructorWithZeroAddressReverts() public { - vm.expectRevert(SyndicateFactoryWrapper.ZeroAddress.selector); - new SyndicateFactoryWrapper( - address(0), // zero admin - address(syndicateFactory), - address(andFactory), - address(orFactory) - ); - - vm.expectRevert(SyndicateFactoryWrapper.ZeroAddress.selector); - new SyndicateFactoryWrapper( - admin, - address(0), // zero syndicate factory - address(andFactory), - address(orFactory) - ); - - vm.expectRevert(SyndicateFactoryWrapper.ZeroAddress.selector); - new SyndicateFactoryWrapper( - admin, - address(syndicateFactory), - address(0), // zero and factory - address(orFactory) - ); - - vm.expectRevert(SyndicateFactoryWrapper.ZeroAddress.selector); - new SyndicateFactoryWrapper( - admin, - address(syndicateFactory), - address(andFactory), - address(0) // zero or factory - ); - } - - // Integration tests - function testMultipleDeploymentsDifferentTypes() public { - bytes32 moduleSalt1 = keccak256(abi.encodePacked("multi-module-1")); - bytes32 chainSalt1 = keccak256(abi.encodePacked("multi-chain-1")); - bytes32 moduleSalt2 = keccak256(abi.encodePacked("multi-module-2")); - bytes32 chainSalt2 = keccak256(abi.encodePacked("multi-chain-2")); - - // Deploy with RequireAndModule - (address chain1, address module1, uint256 chainId1) = wrapper.deployCompleteSyndicate( - 12001, user1, SyndicateFactoryWrapper.ModuleType.RequireAnd, moduleSalt1, chainSalt1 - ); - - // Deploy with RequireOrModule - (address chain2, address module2, uint256 chainId2) = wrapper.deployCompleteSyndicate( - 12002, user2, SyndicateFactoryWrapper.ModuleType.RequireOr, moduleSalt2, chainSalt2 - ); - - // All addresses should be different - assertTrue(chain1 != chain2); - assertTrue(module1 != module2); - assertTrue(chainId1 != chainId2); - - // Verify each module type - RequireAndModule andModule = RequireAndModule(module1); - RequireOrModule orModule = RequireOrModule(module2); - - assertEq(andModule.owner(), user1); - assertEq(orModule.owner(), user2); - } - - // Fuzz testing - function testFuzzDeployWithDifferentParameters( - address _admin, - uint256 _chainId, - bytes32 _moduleSalt, - bytes32 _chainSalt - ) public { - vm.assume(_admin != address(0)); - vm.assume(_chainId != 0); - vm.assume(_chainId < type(uint256).max / 2); // Avoid overflow in chain ID logic - vm.assume(wrapper.isChainIdUsed(_chainId) == false); // Not already used - - (address sequencingChain, address permissionModule, uint256 actualChainId) = wrapper.deployCompleteSyndicate( - _chainId, _admin, SyndicateFactoryWrapper.ModuleType.RequireAnd, _moduleSalt, _chainSalt - ); - - assertTrue(sequencingChain != address(0)); - assertTrue(permissionModule != address(0)); - assertEq(actualChainId, _chainId); - - RequireAndModule module = RequireAndModule(permissionModule); - assertEq(module.owner(), _admin); - } -} diff --git a/synd-contracts/test/gas-tracking/GasTrackingTest.t.sol b/synd-contracts/test/gas-tracking/GasTrackingTest.t.sol index 9adc9293d..5f62ceab0 100644 --- a/synd-contracts/test/gas-tracking/GasTrackingTest.t.sol +++ b/synd-contracts/test/gas-tracking/GasTrackingTest.t.sol @@ -4,13 +4,6 @@ pragma solidity 0.8.28; import {Test} from "forge-std/Test.sol"; import {console} from "forge-std/console.sol"; import {GasAggregator, GasAggregatorUtils} from "../../src/staking/GasAggregator.sol"; -import {EpochTracker} from "../../src/staking/EpochTracker.sol"; -import {SyndicateFactory} from "../../src/factory/SyndicateFactory.sol"; -import {SyndicateSequencingChain} from "../../src/SyndicateSequencingChain.sol"; -import {AlwaysAllowedModule} from "../../src/sequencing-modules/AlwaysAllowedModule.sol"; -import {RequireAndModule} from "../../src/requirement-modules/RequireAndModule.sol"; -import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; -import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import {Arrays} from "@openzeppelin/contracts/utils/Arrays.sol"; import {Comparators} from "@openzeppelin/contracts/utils/Comparators.sol"; @@ -24,6 +17,12 @@ contract MockGasCounter { contract MockAppchainFactory {} +contract MockGasMeter { + function gasUsed(uint256 epoch, address chainContract) external view returns (uint256) { + return 100 ether; + } +} + contract GasAggregatorTest is Test { GasAggregator public gasAggregator; MockAppchainFactory public mockFactory; @@ -31,6 +30,8 @@ contract GasAggregatorTest is Test { MockGasCounter public mockGasCounter2; MockGasCounter public mockGasCounter3; + MockGasMeter public mockGasMeter; + address public admin = address(0x1); address public user = address(0x2); @@ -45,9 +46,11 @@ contract GasAggregatorTest is Test { mockGasCounter2 = new MockGasCounter(); mockGasCounter3 = new MockGasCounter(); + mockGasMeter = new MockGasMeter(); + // Deploy GasAggregator contract vm.prank(admin); - gasAggregator = new GasAggregator(1, 0, 2); + gasAggregator = new GasAggregator(address(mockGasMeter), 1, 0, 2); assertEq(gasAggregator.currentEpoch(), 1); vm.warp(gasAggregator.getEpochStart(1)); @@ -72,7 +75,7 @@ contract GasAggregatorTest is Test { } vm.prank(admin); - gasAggregator.addLegacyChain(chainId, mockContract); + gasAggregator.adminAddChain(chainId, mockContract, true); } } diff --git a/synd-contracts/test/staking/AppchainPoolTest.t.sol b/synd-contracts/test/staking/AppchainPoolTest.t.sol index 5b9d66273..3b727df9d 100644 --- a/synd-contracts/test/staking/AppchainPoolTest.t.sol +++ b/synd-contracts/test/staking/AppchainPoolTest.t.sol @@ -7,8 +7,7 @@ import {Vm} from "forge-std/Vm.sol"; import {SyndStaking} from "src/staking/SyndStaking.sol"; import {AppchainPool} from "src/staking/AppchainPool.sol"; import {RewardPoolBase} from "src/staking/RewardPoolBase.sol"; -import {IGasDataProvider} from "src/staking/interfaces/IGasDataProvider.sol"; -import {UD60x18, ud, convert} from "@prb/math/src/UD60x18.sol"; +import {ud, convert} from "@prb/math/src/UD60x18.sol"; import {MockGasProvider} from "./MockGasProvider.t.sol"; import {EmissionsReceiver} from "src/staking/EmissionsReceiver.sol"; import {GasArchive} from "src/staking/GasArchive.sol"; diff --git a/synd-contracts/test/staking/BasePoolTest.t.sol b/synd-contracts/test/staking/BasePoolTest.t.sol index ffde1634c..c41ee175d 100644 --- a/synd-contracts/test/staking/BasePoolTest.t.sol +++ b/synd-contracts/test/staking/BasePoolTest.t.sol @@ -3,7 +3,6 @@ pragma solidity 0.8.28; import {SyndStaking} from "src/staking/SyndStaking.sol"; import {BasePool} from "src/staking/BasePool.sol"; -import {EpochTracker} from "src/staking/EpochTracker.sol"; import {Test} from "forge-std/Test.sol"; import {Vm} from "forge-std/Vm.sol"; diff --git a/synd-contracts/test/staking/GasAggregatorTest.t.sol b/synd-contracts/test/staking/GasAggregatorTest.t.sol new file mode 100644 index 000000000..201d0f75d --- /dev/null +++ b/synd-contracts/test/staking/GasAggregatorTest.t.sol @@ -0,0 +1,575 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +import {Test} from "forge-std/Test.sol"; +import {GasAggregator} from "src/staking/GasAggregator.sol"; +import {EpochTracker} from "src/staking/EpochTracker.sol"; + +contract MockSyndicateProxy { + mapping(uint256 => uint256) public tokensUsedPerEpoch; + + function setTokensUsedPerEpoch(uint256 epoch, uint256 tokens) external { + tokensUsedPerEpoch[epoch] = tokens; + } +} + +contract MockGasMeter { + function gasUsed(uint256 epoch, address chainContract) external view returns (uint256) { + return 100 ether; + } +} + +contract GasAggregatorTest is Test, EpochTracker { + GasAggregator public gasAggregator; + MockSyndicateProxy public mockProxy1; + MockSyndicateProxy public mockProxy2; + MockSyndicateProxy public mockProxy3; + + MockGasMeter public mockGasMeter; + + address public owner; + address public user; + + uint256 public constant START_EPOCH = 1; + uint256 public constant ADD_CHAIN_FEE = 5 ether; + uint256 public constant MAX_APPCHAINS_TO_QUERY = 100; + + event ChainAdded(uint256 indexed epoch, uint256 indexed chainId, address chainContract, address indexed addedBy); + event ChainRemoved(uint256 indexed epoch, uint256 indexed chainId); + event AddChainFeeUpdated(uint256 oldFee, uint256 newFee); + event AggregationPending(uint256 indexed epoch, uint256 remainingChains); + event AggregatedTokens(uint256 indexed epoch, uint256[] chainIds, uint256[] tokens); + event UpdateMaxAppchainsToQuery(uint256 indexed epoch, uint256 maxAppchainsToQuery); + + function setUp() public { + owner = address(this); + user = address(0x1234); + + // Set timestamp to after epoch start + vm.warp(getEpochStart(START_EPOCH) + 1 days); + + mockGasMeter = new MockGasMeter(); + + // Deploy GasAggregator + gasAggregator = new GasAggregator(address(mockGasMeter), START_EPOCH, ADD_CHAIN_FEE, MAX_APPCHAINS_TO_QUERY); + + // Deploy mock proxies + mockProxy1 = new MockSyndicateProxy(); + mockProxy2 = new MockSyndicateProxy(); + mockProxy3 = new MockSyndicateProxy(); + + vm.deal(user, 100 ether); + } + + /*////////////////////////////////////////////////////////////// + CONSTRUCTOR TESTS + //////////////////////////////////////////////////////////////*/ + + function testConstructor() public view { + assertEq(gasAggregator.currentEpoch(), START_EPOCH); + assertEq(gasAggregator.addChainFee(), ADD_CHAIN_FEE); + assertEq(gasAggregator.maxAppchainsToQuery(), MAX_APPCHAINS_TO_QUERY); + assertEq(gasAggregator.VERSION(), 1_001_000); + assertEq(gasAggregator.owner(), owner); + } + + function testConstructorWithDefaults() public { + GasAggregator agg = new GasAggregator(address(mockGasMeter), 1, 0, 0); + assertEq(agg.addChainFee(), 5 ether); + assertEq(agg.maxAppchainsToQuery(), 100); + } + + function testConstructorRevertsOnZeroEpoch() public { + vm.expectRevert(); + new GasAggregator(address(mockGasMeter), 0, ADD_CHAIN_FEE, MAX_APPCHAINS_TO_QUERY); + } + + /*////////////////////////////////////////////////////////////// + ADD LEGACY CHAIN TESTS + //////////////////////////////////////////////////////////////*/ + + function testAdminAddChain() public { + uint256 chainId = 1; + + vm.expectEmit(true, true, true, true); + emit ChainAdded(START_EPOCH, chainId, address(mockProxy1), owner); + + gasAggregator.adminAddChain(chainId, address(mockProxy1), true); + + assertEq(gasAggregator.getTrackedChainCount(), 1); + assertEq(gasAggregator.getTrackedChainId(0), chainId); + assertEq(gasAggregator.appchainContract(chainId), address(mockProxy1)); + } + + function testAdminAddChainMultiple() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + gasAggregator.adminAddChain(2, address(mockProxy2), true); + gasAggregator.adminAddChain(3, address(mockProxy3), true); + + assertEq(gasAggregator.getTrackedChainCount(), 3); + + uint256[] memory chainIds = gasAggregator.getTrackedChainIds(); + assertEq(chainIds.length, 3); + } + + function testAdminAddChainRevertsOnZeroChainId() public { + vm.expectRevert(abi.encodeWithSelector(GasAggregator.ZeroChainId.selector)); + gasAggregator.adminAddChain(0, address(mockProxy1), true); + } + + function testAdminAddChainRevertsOnDuplicate() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + + vm.expectRevert(abi.encodeWithSelector(GasAggregator.ChainAlreadyTracked.selector, 1)); + gasAggregator.adminAddChain(1, address(mockProxy2), true); + } + + function testAdminAddChainRevertsOnNoCode() public { + address emptyAddress = address(0x9999); + + vm.expectRevert(abi.encodeWithSelector(GasAggregator.ChainNotFound.selector, 1)); + gasAggregator.adminAddChain(1, emptyAddress, true); + } + + function testAdminAddChainRevertsOnNonOwner() public { + vm.prank(user); + vm.expectRevert(); + gasAggregator.adminAddChain(1, address(mockProxy1), true); + } + + function testAdminAddChainRevertsWhenPaused() public { + gasAggregator.pause(); + + vm.expectRevert(); + gasAggregator.adminAddChain(1, address(mockProxy1), true); + } + + /*////////////////////////////////////////////////////////////// + AGGREGATION TESTS + //////////////////////////////////////////////////////////////*/ + + function testAggregateTokensSimple() public { + // Add chains + gasAggregator.adminAddChain(1, address(mockProxy1), true); + gasAggregator.adminAddChain(2, address(mockProxy2), true); + + // Set token usage + mockProxy1.setTokensUsedPerEpoch(START_EPOCH, 100 ether); + mockProxy2.setTokensUsedPerEpoch(START_EPOCH, 200 ether); + + // Move to next epoch + vm.warp(getEpochStart(START_EPOCH + 1) + 1 days); + + // Aggregate + uint256[] memory emptyChainIds = new uint256[](0); + uint256[] memory emptyTokens = new uint256[](0); + + uint256[] memory expectedChainIds = new uint256[](2); + expectedChainIds[0] = 1; + expectedChainIds[1] = 2; + uint256[] memory expectedTokens = new uint256[](2); + expectedTokens[0] = 100 ether; + expectedTokens[1] = 200 ether; + + vm.expectEmit(true, true, true, true); + emit AggregatedTokens(START_EPOCH, expectedChainIds, expectedTokens); + + gasAggregator.aggregateTokens(emptyChainIds, emptyTokens); + + assertEq(gasAggregator.currentEpoch(), START_EPOCH + 1); + assertFalse(gasAggregator.paused()); + + bytes32 expectedHash = keccak256(abi.encode(expectedChainIds, expectedTokens)); + assertEq(gasAggregator.aggregatedEpochDataHash(START_EPOCH), expectedHash); + } + + function testAggregateTokensSkipsZeroGasUsage() public { + // Add chains + gasAggregator.adminAddChain(1, address(mockProxy1), true); + gasAggregator.adminAddChain(2, address(mockProxy2), true); + gasAggregator.adminAddChain(3, address(mockProxy3), true); + + // Set token usage (chain 2 has zero usage) + mockProxy1.setTokensUsedPerEpoch(START_EPOCH, 100 ether); + mockProxy2.setTokensUsedPerEpoch(START_EPOCH, 0); + mockProxy3.setTokensUsedPerEpoch(START_EPOCH, 300 ether); + + // Move to next epoch + vm.warp(getEpochStart(START_EPOCH + 1) + 1 days); + + // Aggregate + uint256[] memory emptyChainIds = new uint256[](0); + uint256[] memory emptyTokens = new uint256[](0); + + gasAggregator.aggregateTokens(emptyChainIds, emptyTokens); + + // Only 2 chains should be in the result (chain 2 is skipped) + uint256[] memory expectedChainIds = new uint256[](2); + expectedChainIds[0] = 1; + expectedChainIds[1] = 3; + uint256[] memory expectedTokens = new uint256[](2); + expectedTokens[0] = 100 ether; + expectedTokens[1] = 300 ether; + + bytes32 expectedHash = keccak256(abi.encode(expectedChainIds, expectedTokens)); + assertEq(gasAggregator.aggregatedEpochDataHash(START_EPOCH), expectedHash); + } + + function testAggregateTokensRevertsWhenEpochNotOver() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + + uint256[] memory emptyChainIds = new uint256[](0); + uint256[] memory emptyTokens = new uint256[](0); + + vm.expectRevert(); + gasAggregator.aggregateTokens(emptyChainIds, emptyTokens); + } + + function testAggregateTokensRevertsWithNoChains() public { + // Move to next epoch + vm.warp(getEpochStart(START_EPOCH + 1) + 1 days); + + uint256[] memory emptyChainIds = new uint256[](0); + uint256[] memory emptyTokens = new uint256[](0); + + vm.expectRevert(abi.encodeWithSelector(GasAggregator.NoChainsAdded.selector)); + gasAggregator.aggregateTokens(emptyChainIds, emptyTokens); + } + + function testAggregateTokensPausesAndUnpauses() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + mockProxy1.setTokensUsedPerEpoch(START_EPOCH, 100 ether); + + // Move to next epoch + vm.warp(getEpochStart(START_EPOCH + 1) + 1 days); + + assertFalse(gasAggregator.paused()); + + uint256[] memory emptyChainIds = new uint256[](0); + uint256[] memory emptyTokens = new uint256[](0); + + // First call pauses + gasAggregator.aggregateTokens(emptyChainIds, emptyTokens); + + // After aggregation completes, it should unpause + assertFalse(gasAggregator.paused()); + } + + /*////////////////////////////////////////////////////////////// + ADMIN FUNCTIONS TESTS + //////////////////////////////////////////////////////////////*/ + + function testSetAddChainFee() public { + uint256 newFee = 10 ether; + + vm.expectEmit(true, true, true, true); + emit AddChainFeeUpdated(ADD_CHAIN_FEE, newFee); + + gasAggregator.setAddChainFee(newFee); + + assertEq(gasAggregator.addChainFee(), newFee); + } + + function testSetAddChainFeeRevertsOnNonOwner() public { + vm.prank(user); + vm.expectRevert(); + gasAggregator.setAddChainFee(10 ether); + } + + function testSetMaxAppchainsToQuery() public { + uint256 newMax = 50; + + vm.expectEmit(true, true, true, true); + emit UpdateMaxAppchainsToQuery(START_EPOCH, newMax); + + gasAggregator.setMaxAppchainsToQuery(newMax); + + assertEq(gasAggregator.maxAppchainsToQuery(), newMax); + } + + function testSetMaxAppchainsToQueryRevertsOnNonOwner() public { + vm.prank(user); + vm.expectRevert(); + gasAggregator.setMaxAppchainsToQuery(50); + } + + function testSetMaxAppchainsToQueryRevertsWhenPaused() public { + gasAggregator.pause(); + + vm.expectRevert(); + gasAggregator.setMaxAppchainsToQuery(50); + } + + function testRemoveAppchains() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + gasAggregator.adminAddChain(2, address(mockProxy2), true); + + assertEq(gasAggregator.getTrackedChainCount(), 2); + + uint256[] memory chainsToRemove = new uint256[](1); + chainsToRemove[0] = 1; + + vm.expectEmit(true, true, true, true); + emit ChainRemoved(START_EPOCH, 1); + + gasAggregator.removeAppchains(chainsToRemove); + + assertEq(gasAggregator.getTrackedChainCount(), 1); + assertEq(gasAggregator.getTrackedChainId(0), 2); + } + + function testRemoveAppchainsMultiple() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + gasAggregator.adminAddChain(2, address(mockProxy2), true); + gasAggregator.adminAddChain(3, address(mockProxy3), true); + + uint256[] memory chainsToRemove = new uint256[](2); + chainsToRemove[0] = 1; + chainsToRemove[1] = 3; + + gasAggregator.removeAppchains(chainsToRemove); + + assertEq(gasAggregator.getTrackedChainCount(), 1); + assertEq(gasAggregator.getTrackedChainId(0), 2); + } + + function testRemoveAppchainsRevertsOnNonOwner() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + + uint256[] memory chainsToRemove = new uint256[](1); + chainsToRemove[0] = 1; + + vm.prank(user); + vm.expectRevert(); + gasAggregator.removeAppchains(chainsToRemove); + } + + function testRemoveAppchainsRevertsWhenPaused() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + gasAggregator.pause(); + + uint256[] memory chainsToRemove = new uint256[](1); + chainsToRemove[0] = 1; + + vm.expectRevert(); + gasAggregator.removeAppchains(chainsToRemove); + } + + function testRemoveAppchainsRevertsOnNonExistent() public { + uint256[] memory chainsToRemove = new uint256[](1); + chainsToRemove[0] = 999; + + vm.expectRevert(); + gasAggregator.removeAppchains(chainsToRemove); + } + + function testWithdrawFees() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + + // Simulate some fees collected + vm.deal(address(gasAggregator), 10 ether); + + address payable recipient = payable(address(0xdead)); + uint256 balanceBefore = recipient.balance; + + gasAggregator.withdrawFees(recipient, 5 ether); + + assertEq(recipient.balance, balanceBefore + 5 ether); + assertEq(address(gasAggregator).balance, 5 ether); + } + + function testWithdrawFeesAll() public { + vm.deal(address(gasAggregator), 10 ether); + + address payable recipient = payable(address(0xdead)); + uint256 balanceBefore = recipient.balance; + + // Passing 0 withdraws all + gasAggregator.withdrawFees(recipient, 0); + + assertEq(recipient.balance, balanceBefore + 10 ether); + assertEq(address(gasAggregator).balance, 0); + } + + function testWithdrawFeesRevertsOnZeroAddress() public { + vm.deal(address(gasAggregator), 10 ether); + + vm.expectRevert(abi.encodeWithSelector(GasAggregator.ZeroAddress.selector)); + gasAggregator.withdrawFees(payable(address(0)), 5 ether); + } + + function testWithdrawFeesRevertsOnInsufficientBalance() public { + vm.deal(address(gasAggregator), 5 ether); + + vm.expectRevert(); + gasAggregator.withdrawFees(payable(address(0xdead)), 10 ether); + } + + function testWithdrawFeesRevertsOnNonOwner() public { + vm.deal(address(gasAggregator), 10 ether); + + vm.prank(user); + vm.expectRevert(); + gasAggregator.withdrawFees(payable(address(0xdead)), 5 ether); + } + + function testSetFactory() public { + address factoryAddress = address(0x1234); + bytes32 bytecodeHash = keccak256("test"); + + gasAggregator.setFactory(factoryAddress, bytecodeHash); + + assertEq(gasAggregator.factory(), factoryAddress); + assertEq(gasAggregator.syndicateProxyBytecodeHash(), bytecodeHash); + } + + function testSetFactoryRevertsOnZeroAddress() public { + bytes32 bytecodeHash = keccak256("test"); + + vm.expectRevert(abi.encodeWithSelector(GasAggregator.ZeroAddress.selector)); + gasAggregator.setFactory(address(0), bytecodeHash); + } + + function testSetFactoryRevertsOnZeroHash() public { + address factoryAddress = address(0x1234); + + vm.expectRevert(abi.encodeWithSelector(GasAggregator.InvalidDataHash.selector)); + gasAggregator.setFactory(factoryAddress, bytes32(0)); + } + + function testSetFactoryRevertsOnAlreadySet() public { + address factoryAddress = address(0x1234); + bytes32 bytecodeHash = keccak256("test"); + + gasAggregator.setFactory(factoryAddress, bytecodeHash); + + vm.expectRevert(abi.encodeWithSelector(GasAggregator.FactoryAlreadySet.selector)); + gasAggregator.setFactory(address(0x5678), bytecodeHash); + } + + function testSetFactoryRevertsOnNonOwner() public { + address factoryAddress = address(0x1234); + bytes32 bytecodeHash = keccak256("test"); + + vm.prank(user); + vm.expectRevert(); + gasAggregator.setFactory(factoryAddress, bytecodeHash); + } + + /*////////////////////////////////////////////////////////////// + PAUSE/UNPAUSE TESTS + //////////////////////////////////////////////////////////////*/ + + function testPause() public { + assertFalse(gasAggregator.paused()); + + gasAggregator.pause(); + + assertTrue(gasAggregator.paused()); + } + + function testUnpause() public { + gasAggregator.pause(); + assertTrue(gasAggregator.paused()); + + gasAggregator.unpause(); + + assertFalse(gasAggregator.paused()); + assertEq(gasAggregator.currentAggregateIndex(), 0); + assertEq(gasAggregator.pendingDataHash(), bytes32(0)); + } + + function testPauseRevertsOnNonOwner() public { + vm.prank(user); + vm.expectRevert(); + gasAggregator.pause(); + } + + function testUnpauseRevertsOnNonOwner() public { + gasAggregator.pause(); + + vm.prank(user); + vm.expectRevert(); + gasAggregator.unpause(); + } + + /*////////////////////////////////////////////////////////////// + VIEW FUNCTIONS TESTS + //////////////////////////////////////////////////////////////*/ + + function testGetTrackedChainCount() public { + assertEq(gasAggregator.getTrackedChainCount(), 0); + + gasAggregator.adminAddChain(1, address(mockProxy1), true); + assertEq(gasAggregator.getTrackedChainCount(), 1); + + gasAggregator.adminAddChain(2, address(mockProxy2), true); + assertEq(gasAggregator.getTrackedChainCount(), 2); + } + + function testGetTrackedChainIds() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + gasAggregator.adminAddChain(2, address(mockProxy2), true); + gasAggregator.adminAddChain(3, address(mockProxy3), true); + + uint256[] memory chainIds = gasAggregator.getTrackedChainIds(); + + assertEq(chainIds.length, 3); + assertEq(chainIds[0], 1); + assertEq(chainIds[1], 2); + assertEq(chainIds[2], 3); + } + + function testGetTrackedChainId() public { + gasAggregator.adminAddChain(10, address(mockProxy1), true); + gasAggregator.adminAddChain(20, address(mockProxy2), true); + + assertEq(gasAggregator.getTrackedChainId(0), 10); + assertEq(gasAggregator.getTrackedChainId(1), 20); + } + + function testAggregatedEpochDataHash() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + mockProxy1.setTokensUsedPerEpoch(START_EPOCH, 100 ether); + + // Move to next epoch and aggregate + vm.warp(getEpochStart(START_EPOCH + 1) + 1 days); + + uint256[] memory emptyChainIds = new uint256[](0); + uint256[] memory emptyTokens = new uint256[](0); + + gasAggregator.aggregateTokens(emptyChainIds, emptyTokens); + + bytes32 hash = gasAggregator.aggregatedEpochDataHash(START_EPOCH); + assertTrue(hash != bytes32(0)); + } + + /*////////////////////////////////////////////////////////////// + SIMULATE AGGREGATE TESTS + //////////////////////////////////////////////////////////////*/ + + function testSimulateAggregateTokens() public { + gasAggregator.adminAddChain(1, address(mockProxy1), true); + gasAggregator.adminAddChain(2, address(mockProxy2), true); + + mockProxy1.setTokensUsedPerEpoch(START_EPOCH, 100 ether); + mockProxy2.setTokensUsedPerEpoch(START_EPOCH, 200 ether); + + // Move to next epoch + vm.warp(getEpochStart(START_EPOCH + 1) + 1 days); + + uint256[] memory emptyChainIds = new uint256[](0); + uint256[] memory emptyTokens = new uint256[](0); + + (uint256 nextIndex, uint256[] memory chainIds, uint256[] memory tokens) = + gasAggregator.simulateAggregateTokens(0, emptyChainIds, emptyTokens); + + assertEq(nextIndex, 0); // All chains processed in one go + assertEq(chainIds.length, 2); + assertEq(tokens.length, 2); + assertEq(chainIds[0], 1); + assertEq(chainIds[1], 2); + assertEq(tokens[0], 100 ether); + assertEq(tokens[1], 200 ether); + } +} diff --git a/synd-contracts/test/staking/GasArchiveTest.t.sol b/synd-contracts/test/staking/GasArchiveTest.t.sol index 8c441c0d9..b70d05a2c 100644 --- a/synd-contracts/test/staking/GasArchiveTest.t.sol +++ b/synd-contracts/test/staking/GasArchiveTest.t.sol @@ -1,7 +1,7 @@ pragma solidity 0.8.28; import {Test} from "forge-std/Test.sol"; -import {GasArchive} from "../../src/staking/GasArchive.sol"; +import {GasArchive, GasArchiveStorage} from "../../src/staking/GasArchive.sol"; import {RLPReader} from "../../src/staking/lib/RLPReader.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; @@ -11,8 +11,9 @@ contract GasArchiveTestHelper is GasArchive { {} function setEpochDataHashForTesting(uint256 newEpoch, uint256 seqChainId, bytes32 hash) external { - require(newEpoch <= epoch, "cannot set future epoch data hash"); - epochVerifiedDataHash[epoch][seqChainId] = hash; + GasArchiveStorage storage $ = _getGasArchiveStorage(); + require(newEpoch <= $.epoch, "cannot set future epoch data hash"); + $.epochVerifiedDataHash[$.epoch][seqChainId] = hash; } } diff --git a/synd-contracts/test/staking/GasMeter.t.sol b/synd-contracts/test/staking/GasMeter.t.sol new file mode 100644 index 000000000..9b688095b --- /dev/null +++ b/synd-contracts/test/staking/GasMeter.t.sol @@ -0,0 +1,96 @@ +pragma solidity 0.8.28; + +import {Test} from "forge-std/Test.sol"; +import {GasMeter} from "../../src/staking/GasMeter.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; + +contract GasMeterTestHelper { + GasMeter public gasMeter; + + event Sequence(address indexed sequencer, uint256 loops); + + event RawData(bytes data, uint256 length); + + constructor(GasMeter _gasMeter) { + gasMeter = _gasMeter; + } + + function callTrackCall(uint256 loops) external { + bytes memory meteredCall = abi.encodeWithSelector(this.sequence.selector, msg.sender, loops); + gasMeter.meterCall(meteredCall); + } + + function sequence(address sequencer, uint256 loops) external { + require(msg.sender == address(gasMeter), "Only callable by GasMeter"); + for (uint256 i = 0; i < loops; i++) { + // Loop to use gas + } + emit Sequence(sequencer, loops); + } + + function trackedSequence(uint256 loops) external returns (uint256) { + uint256 startGas = gasleft(); + for (uint256 i = 0; i < loops; i++) { + // Loop to use gas + } + emit Sequence(msg.sender, loops); + return startGas - gasleft(); + } +} + +contract GasMeterTest is Test { + address public gasMeterImpl; + GasMeter public gasMeter; + GasMeterTestHelper public gasMeterTestHelper; + + address public admin; + uint256 public epoch = 1; + + function setUp() public { + admin = makeAddr("admin"); + + // Deploy GasTracker implementation + gasMeterImpl = address(new GasMeter()); + + // Deploy GasTracker proxy + vm.prank(admin); + gasMeter = GasMeter(address(new ERC1967Proxy(gasMeterImpl, abi.encodeCall(GasMeter.initialize, ())))); + + gasMeterTestHelper = new GasMeterTestHelper(gasMeter); + + vm.warp(gasMeter.getEpochStart(epoch)); + } + + function testMeteredCall() public { + gasMeterTestHelper.callTrackCall(1000); + uint256 result = gasMeter.gasUsed(epoch, address(gasMeterTestHelper)); + + assertApproxEqAbs(result, gasMeterTestHelper.trackedSequence(1000), 1000); + } + + function testEpochTracking() public { + gasMeterTestHelper.callTrackCall(1000); + uint256 result = gasMeter.gasUsed(epoch, address(gasMeterTestHelper)); + assertApproxEqAbs(result, gasMeterTestHelper.trackedSequence(1000), 1000); + + epoch++; + vm.warp(gasMeter.getEpochStart(epoch)); + gasMeterTestHelper.callTrackCall(10000); + result = gasMeter.gasUsed(epoch, address(gasMeterTestHelper)); + assertApproxEqAbs(result, gasMeterTestHelper.trackedSequence(10000), 1000); + + result = gasMeter.gasUsed(epoch + 1, address(gasMeterTestHelper)); + assertEq(result, 0); + } + + function testDifferentChains() public { + GasMeterTestHelper gasMeterTestHelper2 = new GasMeterTestHelper(gasMeter); + gasMeterTestHelper2.callTrackCall(1000); + uint256 result = gasMeter.gasUsed(epoch, address(gasMeterTestHelper2)); + assertApproxEqAbs(result, gasMeterTestHelper2.trackedSequence(1000), 1000); + + gasMeterTestHelper.callTrackCall(1000); + result = gasMeter.gasUsed(epoch, address(gasMeterTestHelper)); + assertApproxEqAbs(result, gasMeterTestHelper.trackedSequence(1000), 1000); + } +} diff --git a/synd-contracts/test/staking/PerformancePoolTest.t.sol b/synd-contracts/test/staking/PerformancePoolTest.t.sol index c452d3e1f..52bc806b4 100644 --- a/synd-contracts/test/staking/PerformancePoolTest.t.sol +++ b/synd-contracts/test/staking/PerformancePoolTest.t.sol @@ -7,8 +7,7 @@ import {Vm} from "forge-std/Vm.sol"; import {SyndStaking} from "src/staking/SyndStaking.sol"; import {PerformancePool} from "src/staking/PerformancePool.sol"; import {RewardPoolBase} from "src/staking/RewardPoolBase.sol"; -import {UD60x18, ud, convert} from "@prb/math/src/UD60x18.sol"; -import {IGasDataProvider} from "src/staking/interfaces/IGasDataProvider.sol"; +import {ud} from "@prb/math/src/UD60x18.sol"; import {MockGasProvider} from "./MockGasProvider.t.sol"; import {GasArchive} from "src/staking/GasArchive.sol"; diff --git a/synd-contracts/test/staking/RewardPoolBaseTest.t.sol b/synd-contracts/test/staking/RewardPoolBaseTest.t.sol index c28528b63..0910ac610 100644 --- a/synd-contracts/test/staking/RewardPoolBaseTest.t.sol +++ b/synd-contracts/test/staking/RewardPoolBaseTest.t.sol @@ -6,8 +6,7 @@ import {Vm} from "forge-std/Vm.sol"; import {SyndStaking} from "src/staking/SyndStaking.sol"; import {RewardPoolBase} from "src/staking/RewardPoolBase.sol"; -import {UD60x18, ud, convert} from "@prb/math/src/UD60x18.sol"; -import {IGasDataProvider} from "src/staking/interfaces/IGasDataProvider.sol"; +import {convert} from "@prb/math/src/UD60x18.sol"; import {MockGasProvider} from "./MockGasProvider.t.sol"; contract MockRewardPoolBase is RewardPoolBase { diff --git a/synd-contracts/test/staking/SyndStakingTest.t.sol b/synd-contracts/test/staking/SyndStakingTest.t.sol index 75d525f57..cf4df32a2 100644 --- a/synd-contracts/test/staking/SyndStakingTest.t.sol +++ b/synd-contracts/test/staking/SyndStakingTest.t.sol @@ -4,10 +4,8 @@ pragma solidity 0.8.28; import {SyndStaking} from "src/staking/SyndStaking.sol"; import {BasePool} from "src/staking/BasePool.sol"; import {PerformancePool} from "src/staking/PerformancePool.sol"; -import {EpochTracker} from "src/staking/EpochTracker.sol"; import {Test} from "forge-std/Test.sol"; import {Vm} from "forge-std/Vm.sol"; -import {IGasDataProvider} from "src/staking/interfaces/IGasDataProvider.sol"; import {MockGasProvider} from "./MockGasProvider.t.sol"; contract ReentrantContract { diff --git a/synd-contracts/test/token/bridges/ArbitrumBridgeProxyTest.t.sol b/synd-contracts/test/token/bridges/ArbitrumBridgeProxyTest.t.sol index 4eec9938f..828eee6ed 100644 --- a/synd-contracts/test/token/bridges/ArbitrumBridgeProxyTest.t.sol +++ b/synd-contracts/test/token/bridges/ArbitrumBridgeProxyTest.t.sol @@ -661,9 +661,10 @@ contract ArbitrumBridgeProxyTest is Test { // If the test call succeeds, reset and do the actual test vm.deal(address(bridgeProxy), 10 ether); // Reset bridge balance - uint256 withdrawAmount = 1 ether; - uint256 initialBridgeBalance = address(bridgeProxy).balance; - uint256 initialRecipientBalance = recipient_.balance; + // Reassign values after resetting bridge balance + withdrawAmount = 1 ether; + initialBridgeBalance = address(bridgeProxy).balance; + initialRecipientBalance = recipient_.balance; vm.prank(admin); bridgeProxy.withdrawEth(payable(recipient_), withdrawAmount); diff --git a/synd-contracts/test/token/emissions/EmissionsForkTest.t.sol b/synd-contracts/test/token/emissions/EmissionsForkTest.t.sol index 02a7c08f2..8dcc6bd9a 100644 --- a/synd-contracts/test/token/emissions/EmissionsForkTest.t.sol +++ b/synd-contracts/test/token/emissions/EmissionsForkTest.t.sol @@ -64,54 +64,54 @@ contract EmissionsForkTest is Test, EpochTracker { // Token amounts per epoch based on the provided data (in wei) uint256[48] memory tokensPerEpoch = [ - uint256(1306706), // Epoch 0 - uint256(1319773), // Epoch 1 - uint256(1332971), // Epoch 2 - uint256(1346301), // Epoch 3 - uint256(1359764), // Epoch 4 - uint256(1373362), // Epoch 5 - uint256(1387095), // Epoch 6 - uint256(1400966), // Epoch 7 - uint256(1414976), // Epoch 8 - uint256(1429126), // Epoch 9 - uint256(1443417), // Epoch 10 - uint256(1457851), // Epoch 11 - uint256(1472430), // Epoch 12 - uint256(1487154), // Epoch 13 - uint256(1502025), // Epoch 14 - uint256(1517046), // Epoch 15 - uint256(1532216), // Epoch 16 - uint256(1547538), // Epoch 17 - uint256(1563014), // Epoch 18 - uint256(1578644), // Epoch 19 - uint256(1594430), // Epoch 20 - uint256(1610375), // Epoch 21 - uint256(1626479), // Epoch 22 - uint256(1642743), // Epoch 23 - uint256(1659171), // Epoch 24 - uint256(1675762), // Epoch 25 - uint256(1692520), // Epoch 26 - uint256(1709445), // Epoch 27 - uint256(1726540), // Epoch 28 - uint256(1743805), // Epoch 29 - uint256(1761243), // Epoch 30 - uint256(1778856), // Epoch 31 - uint256(1796645), // Epoch 32 - uint256(1814611), // Epoch 33 - uint256(1832757), // Epoch 34 - uint256(1851085), // Epoch 35 - uint256(1869596), // Epoch 36 - uint256(1888292), // Epoch 37 - uint256(1907174), // Epoch 38 - uint256(1926246), // Epoch 39 - uint256(1945509), // Epoch 40 - uint256(1964964), // Epoch 41 - uint256(1984614), // Epoch 42 - uint256(2004460), // Epoch 43 - uint256(2024505), // Epoch 44 - uint256(2044750), // Epoch 45 - uint256(2065198), // Epoch 46 - uint256(2085850) // Epoch 47 + uint256(1279482), // Epoch 0 + uint256(1292277), // Epoch 1 + uint256(1305200), // Epoch 2 + uint256(1318253), // Epoch 3 + uint256(1331435), // Epoch 4 + uint256(1344750), // Epoch 5 + uint256(1358197), // Epoch 6 + uint256(1371779), // Epoch 7 + uint256(1385497), // Epoch 8 + uint256(1399352), // Epoch 9 + uint256(1413345), // Epoch 10 + uint256(1427479), // Epoch 11 + uint256(1441754), // Epoch 12 + uint256(1456171), // Epoch 13 + uint256(1470732), // Epoch 14 + uint256(1485440), // Epoch 15 + uint256(1500294), // Epoch 16 + uint256(1515297), // Epoch 17 + uint256(1530451), // Epoch 18 + uint256(1545755), // Epoch 19 + uint256(1561212), // Epoch 20 + uint256(1576825), // Epoch 21 + uint256(1592594), // Epoch 22 + uint256(1608519), // Epoch 23 + uint256(1624604), // Epoch 24 + uint256(1640850), // Epoch 25 + uint256(1657259), // Epoch 26 + uint256(1673831), // Epoch 27 + uint256(1690570), // Epoch 28 + uint256(1707475), // Epoch 29 + uint256(1724550), // Epoch 30 + uint256(1741796), // Epoch 31 + uint256(1759214), // Epoch 32 + uint256(1776806), // Epoch 33 + uint256(1794574), // Epoch 34 + uint256(1812520), // Epoch 35 + uint256(1830646), // Epoch 36 + uint256(1848952), // Epoch 37 + uint256(1867441), // Epoch 38 + uint256(1886115), // Epoch 39 + uint256(1904977), // Epoch 40 + uint256(1924027), // Epoch 41 + uint256(1943267), // Epoch 42 + uint256(1962700), // Epoch 43 + uint256(1982327), // Epoch 44 + uint256(2002151), // Epoch 45 + uint256(2022173), // Epoch 46 + uint256(2042394) // Epoch 47 ]; if (epoch >= 48) { @@ -124,54 +124,54 @@ contract EmissionsForkTest is Test, EpochTracker { function expectedMintAmount_ChangeFactor098(uint256 epoch) public pure returns (uint256) { // Token amounts per epoch based on the provided data (in wei) uint256[48] memory tokensPerEpoch = [ - uint256(2577259), // Epoch 0 - uint256(2525713), // Epoch 1 - uint256(2475199), // Epoch 2 - uint256(2425695), // Epoch 3 - uint256(2377181), // Epoch 4 - uint256(2329638), // Epoch 5 - uint256(2283045), // Epoch 6 - uint256(2237384), // Epoch 7 - uint256(2192636), // Epoch 8 - uint256(2148784), // Epoch 9 - uint256(2105808), // Epoch 10 - uint256(2063692), // Epoch 11 - uint256(2022418), // Epoch 12 - uint256(1981970), // Epoch 13 - uint256(1942330), // Epoch 14 - uint256(1903484), // Epoch 15 - uint256(1865414), // Epoch 16 - uint256(1828106), // Epoch 17 - uint256(1791544), // Epoch 18 - uint256(1755713), // Epoch 19 - uint256(1720598), // Epoch 20 - uint256(1686187), // Epoch 21 - uint256(1652463), // Epoch 22 - uint256(1619414), // Epoch 23 - uint256(1587025), // Epoch 24 - uint256(1555285), // Epoch 25 - uint256(1524179), // Epoch 26 - uint256(1493696), // Epoch 27 - uint256(1463822), // Epoch 28 - uint256(1434545), // Epoch 29 - uint256(1405854), // Epoch 30 - uint256(1377737), // Epoch 31 - uint256(1350183), // Epoch 32 - uint256(1323179), // Epoch 33 - uint256(1296715), // Epoch 34 - uint256(1270781), // Epoch 35 - uint256(1245366), // Epoch 36 - uint256(1220458), // Epoch 37 - uint256(1196049), // Epoch 38 - uint256(1172128), // Epoch 39 - uint256(1148686), // Epoch 40 - uint256(1125712), // Epoch 41 - uint256(1103198), // Epoch 42 - uint256(1081134), // Epoch 43 - uint256(1059511), // Epoch 44 - uint256(1038321), // Epoch 45 - uint256(1017556), // Epoch 46 - uint256(997205) // Epoch 47 + uint256(2523566), // Epoch 0 + uint256(2473093), // Epoch 1 + uint256(2423632), // Epoch 2 + uint256(2375159), // Epoch 3 + uint256(2327656), // Epoch 4 + uint256(2281103), // Epoch 5 + uint256(2235481), // Epoch 6 + uint256(2190771), // Epoch 7 + uint256(2146956), // Epoch 8 + uint256(2104017), // Epoch 9 + uint256(2061937), // Epoch 10 + uint256(2020698), // Epoch 11 + uint256(1980284), // Epoch 12 + uint256(1940678), // Epoch 13 + uint256(1901864), // Epoch 14 + uint256(1863828), // Epoch 15 + uint256(1826551), // Epoch 16 + uint256(1790020), // Epoch 17 + uint256(1754220), // Epoch 18 + uint256(1719135), // Epoch 19 + uint256(1684752), // Epoch 20 + uint256(1651058), // Epoch 21 + uint256(1618036), // Epoch 22 + uint256(1585676), // Epoch 23 + uint256(1553961), // Epoch 24 + uint256(1522883), // Epoch 25 + uint256(1492425), // Epoch 26 + uint256(1462577), // Epoch 27 + uint256(1433325), // Epoch 28 + uint256(1404658), // Epoch 29 + uint256(1376565), // Epoch 30 + uint256(1349034), // Epoch 31 + uint256(1322054), // Epoch 32 + uint256(1295612), // Epoch 33 + uint256(1269700), // Epoch 34 + uint256(1244306), // Epoch 35 + uint256(1219420), // Epoch 36 + uint256(1195031), // Epoch 37 + uint256(1171131), // Epoch 38 + uint256(1147708), // Epoch 39 + uint256(1124755), // Epoch 40 + uint256(1102259), // Epoch 41 + uint256(1080214), // Epoch 42 + uint256(1058610), // Epoch 43 + uint256(1037437), // Epoch 44 + uint256(1016689), // Epoch 45 + uint256(996356), // Epoch 46 + uint256(976429) // Epoch 47 ]; if (epoch >= 48) { @@ -184,56 +184,54 @@ contract EmissionsForkTest is Test, EpochTracker { function expectedMintAmount_ChangeFactorMultiple(uint256 epoch) public pure returns (uint256) { // Token amounts per epoch based on the provided data (in wei) uint256[48] memory tokensPerEpoch = [ - uint256(1666667), // Epoch 0 - uint256(1666667), // Epoch 1 - uint256(1666667), // Epoch 2 - uint256(1666667), // Epoch 3 - // CHANGE FACTOR: 1.015 - uint256(1188761), // Epoch 4 - uint256(1206592), // Epoch 5 - uint256(1224691), // Epoch 6 - uint256(1243061), // Epoch 7 - uint256(1261707), // Epoch 8 - uint256(1280633), // Epoch 9 - uint256(1299843), // Epoch 10 - uint256(1319340), // Epoch 11 - uint256(1339130), // Epoch 12 - uint256(1359217), // Epoch 13 - uint256(1379606), // Epoch 14 - uint256(1400300), // Epoch 15 - uint256(1421304), // Epoch 16 - uint256(1442624), // Epoch 17 - uint256(1464263), // Epoch 18 - uint256(1486227), // Epoch 19 - uint256(1508520), // Epoch 20 - // CHANGE FACTOR: 0.995 - uint256(1995084), // Epoch 21 - uint256(1985108), // Epoch 22 - uint256(1975183), // Epoch 23 - uint256(1965307), // Epoch 24 - uint256(1955480), // Epoch 25 - uint256(1945703), // Epoch 26 - uint256(1935975), // Epoch 27 - uint256(1926295), // Epoch 28 - uint256(1916663), // Epoch 29 - uint256(1907080), // Epoch 30 - uint256(1897545), // Epoch 31 - uint256(1888057), // Epoch 32 - uint256(1878617), // Epoch 33 - uint256(1869223), // Epoch 34 - uint256(1859877), // Epoch 35 - uint256(1850578), // Epoch 36 - uint256(1841325), // Epoch 37 - uint256(1832119), // Epoch 38 - uint256(1822958), // Epoch 39 - uint256(1813843), // Epoch 40 - uint256(1804774), // Epoch 41 - uint256(1795751), // Epoch 42 - uint256(1786772), // Epoch 43 - uint256(1777838), // Epoch 44 - uint256(1768949), // Epoch 45 - uint256(1760105), // Epoch 46 - uint256(1751305) // Epoch 47 + uint256(1631944), // Epoch 0 + uint256(1631944), // Epoch 1 + uint256(1631944), // Epoch 2 + uint256(1631944), // Epoch 3 + uint256(1163995), // Epoch 4 + uint256(1181454), // Epoch 5 + uint256(1199176), // Epoch 6 + uint256(1217163), // Epoch 7 + uint256(1235421), // Epoch 8 + uint256(1253953), // Epoch 9 + uint256(1272762), // Epoch 10 + uint256(1291853), // Epoch 11 + uint256(1311231), // Epoch 12 + uint256(1330899), // Epoch 13 + uint256(1350864), // Epoch 14 + uint256(1371127), // Epoch 15 + uint256(1391693), // Epoch 16 + uint256(1412569), // Epoch 17 + uint256(1433757), // Epoch 18 + uint256(1455263), // Epoch 19 + uint256(1477092), // Epoch 20 + uint256(1953519), // Epoch 21 + uint256(1943751), // Epoch 22 + uint256(1934033), // Epoch 23 + uint256(1924363), // Epoch 24 + uint256(1914740), // Epoch 25 + uint256(1905167), // Epoch 26 + uint256(1895642), // Epoch 27 + uint256(1886163), // Epoch 28 + uint256(1876732), // Epoch 29 + uint256(1867349), // Epoch 30 + uint256(1858012), // Epoch 31 + uint256(1848722), // Epoch 32 + uint256(1839479), // Epoch 33 + uint256(1830280), // Epoch 34 + uint256(1821129), // Epoch 35 + uint256(1812024), // Epoch 36 + uint256(1802964), // Epoch 37 + uint256(1793949), // Epoch 38 + uint256(1784979), // Epoch 39 + uint256(1776054), // Epoch 40 + uint256(1767174), // Epoch 41 + uint256(1758339), // Epoch 42 + uint256(1749547), // Epoch 43 + uint256(1740799), // Epoch 44 + uint256(1732095), // Epoch 45 + uint256(1723436), // Epoch 46 + uint256(1714819) // Epoch 47 ]; if (epoch >= 48) { @@ -356,7 +354,7 @@ contract EmissionsForkTest is Test, EpochTracker { vm.roll(blockNumber + i); emissionsScheduler.mintEmission(); uint256 mintAmount = round(emissionsScheduler.totalEmissionsMinted() - totalMinted); - uint256 expected = uint256(1666667); + uint256 expected = uint256(1631944); if (mintAmount != expected) { console2.log("Epoch %s: Expected %s, Actual %s", i, expected, mintAmount); if (mintAmount > expected + acceptedDiff || mintAmount < expected - acceptedDiff) { diff --git a/synd-contracts/test/upgrade/StorageUpgradeTest.t.sol b/synd-contracts/test/upgrade/StorageUpgradeTest.t.sol new file mode 100644 index 000000000..9a252ceaa --- /dev/null +++ b/synd-contracts/test/upgrade/StorageUpgradeTest.t.sol @@ -0,0 +1,260 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +import {Test} from "forge-std/Test.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; + +import {SyndicateSequencingChain} from "../../src/SyndicateSequencingChain.sol"; +import {SyndicateSequencingChainTestingUpgradeability} from + "./helpers/SyndicateSequencingChainTestingUpgradeability.sol"; + +/// @title StorageUpgradeTest +/// @notice Comprehensive test for storage layout safety during contract upgrades +/// @dev Tests both traditional storage append and ERC-7201 namespaced storage patterns +contract StorageUpgradeTest is Test { + // Constants for testing + uint256 constant TEST_APPCHAIN_ID = 12345; + address constant ADMIN = address(0x9999); + address constant PERMISSION_MODULE = address(1); // Always allow module + address constant GAS_METER = address(2); + + // Contract instances + SyndicateSequencingChain syndicateV1; + SyndicateSequencingChainTestingUpgradeability syndicateV2; + ERC1967Proxy proxy; + + // Storage verification data + struct OriginalStorageData { + uint256 appchainId; + address permissionModule; + } + + event TransactionProcessed(address indexed sender, bytes data); + event MaxGasPerTransactionUpdated(uint256 newMax); + + function setUp() public { + vm.startPrank(ADMIN); + // Deploy V1 implementation + syndicateV1 = new SyndicateSequencingChain(GAS_METER); + + // Deploy proxy pointing to V1 + bytes memory initData = + abi.encodeCall(SyndicateSequencingChain.initialize, (ADMIN, PERMISSION_MODULE, TEST_APPCHAIN_ID)); + + proxy = new ERC1967Proxy(address(syndicateV1), initData); + syndicateV1 = SyndicateSequencingChain(address(proxy)); + + vm.stopPrank(); + } + + /*////////////////////////////////////////////////////////////// + STORAGE LAYOUT VERIFICATION + //////////////////////////////////////////////////////////////*/ + + /// @notice Test that all V1 storage is preserved after upgrade to V2 + function testStoragePreservationAfterUpgrade() public { + vm.startPrank(ADMIN); + + // Capture original storage state + OriginalStorageData memory originalData = OriginalStorageData({ + appchainId: syndicateV1.appchainId(), + permissionModule: address(syndicateV1.permissionRequirementModule()) + }); + + // Deploy V2 implementation + syndicateV2 = new SyndicateSequencingChainTestingUpgradeability(); + + // Upgrade proxy to V2 + syndicateV1.upgradeToAndCall(address(syndicateV2), ""); + + // Cast proxy to V2 interface + syndicateV2 = SyndicateSequencingChainTestingUpgradeability(address(proxy)); + + // Verify all original storage is preserved + assertEq(syndicateV2.appchainId(), originalData.appchainId, "appchainId should be preserved"); + assertEq( + address(syndicateV2.permissionRequirementModule()), + originalData.permissionModule, + "permissionRequirementModule should be preserved" + ); + + vm.stopPrank(); + } + + /*////////////////////////////////////////////////////////////// + NAMESPACED STORAGE SAFETY TESTS + //////////////////////////////////////////////////////////////*/ + + /// @notice Test that namespaced storage (ERC-7201) works correctly after upgrade + function testNamespacedStorageAfterUpgrade() public { + vm.startPrank(ADMIN); + + // Deploy V2 and upgrade + syndicateV2 = new SyndicateSequencingChainTestingUpgradeability(); + syndicateV1.upgradeToAndCall(address(syndicateV2), ""); + syndicateV2 = SyndicateSequencingChainTestingUpgradeability(address(proxy)); + + // Test namespaced storage fields work correctly + // Note: These should be zero-initialized since they're new fields added during upgrade + assertEq(syndicateV2.maxTransactionsPerBatch(), 0, "maxTransactionsPerBatch should be zero-initialized"); + assertFalse(syndicateV2.batchProcessingEnabled(), "batchProcessingEnabled should be false (zero-initialized)"); + assertEq(syndicateV2.lastPermissionUpdate(), 0, "lastPermissionUpdate should be zero-initialized"); + + // Test that we can modify namespaced storage + syndicateV2.toggleBatchProcessing(); // Enable batch processing first + assertTrue(syndicateV2.batchProcessingEnabled(), "batchProcessingEnabled should be enabled"); + + syndicateV2.setMaxTransactionsPerBatch(50); + assertEq(syndicateV2.maxTransactionsPerBatch(), 50, "maxTransactionsPerBatch should be updated"); + + vm.stopPrank(); + } + + /*////////////////////////////////////////////////////////////// + TRADITIONAL STORAGE SAFETY TESTS + //////////////////////////////////////////////////////////////*/ + + /// @notice Test that new traditional storage fields work correctly + function testNewTraditionalStorageFields() public { + vm.startPrank(ADMIN); + + // Deploy V2 and upgrade + syndicateV2 = new SyndicateSequencingChainTestingUpgradeability(); + syndicateV1.upgradeToAndCall(address(syndicateV2), ""); + syndicateV2 = SyndicateSequencingChainTestingUpgradeability(address(proxy)); + + // Test new traditional storage fields are zero-initialized during upgrade + assertEq(syndicateV2.maxGasPerTransaction(), 0, "maxGasPerTransaction should be zero-initialized"); + assertFalse(syndicateV2.replayProtectionEnabled(), "replayProtectionEnabled should be false (zero-initialized)"); + assertEq(syndicateV2.minTimeBetweenTxs(), 0, "minTimeBetweenTxs should be zero-initialized"); + + // Test that we can modify new fields + vm.expectEmit(true, true, true, true); + emit MaxGasPerTransactionUpdated(500000); + syndicateV2.setMaxGasPerTransaction(500000); + assertEq(syndicateV2.maxGasPerTransaction(), 500000, "maxGasPerTransaction should be updated"); + + syndicateV2.toggleReplayProtection(); + assertTrue(syndicateV2.replayProtectionEnabled(), "replayProtectionEnabled should be toggled to true"); + + syndicateV2.setMinTimeBetweenTxs(60); // 1 minute + assertEq(syndicateV2.minTimeBetweenTxs(), 60, "minTimeBetweenTxs should be updated"); + + vm.stopPrank(); + } + + /*////////////////////////////////////////////////////////////// + FUNCTIONALITY TESTS + //////////////////////////////////////////////////////////////*/ + + /// @notice Test that V1 functionality still works after upgrade + function testV1FunctionalityAfterUpgrade() public { + vm.startPrank(ADMIN); + + // Deploy V2 and upgrade + syndicateV2 = new SyndicateSequencingChainTestingUpgradeability(); + syndicateV1.upgradeToAndCall(address(syndicateV2), ""); + syndicateV2 = SyndicateSequencingChainTestingUpgradeability(address(proxy)); + + // Enable batch processing for V2 functionality + syndicateV2.toggleBatchProcessing(); + syndicateV2.setMaxTransactionsPerBatch(10); // Set a reasonable limit + + vm.stopPrank(); + + // Test transaction processing still works + bytes memory testData = "test transaction data"; + + vm.expectEmit(true, true, true, true); + emit TransactionProcessed(address(this), testData); + syndicateV2.processTransaction(testData); + + // Test batch processing still works + bytes[] memory batchData = new bytes[](2); + batchData[0] = "tx1"; + batchData[1] = "tx2"; + + vm.expectEmit(true, true, true, true); + emit TransactionProcessed(address(this), batchData[0]); + vm.expectEmit(true, true, true, true); + emit TransactionProcessed(address(this), batchData[1]); + syndicateV2.processTransactionsBulk(batchData); + } + + /// @notice Test new V2 functionality works correctly + function testV2NewFunctionality() public { + vm.startPrank(ADMIN); + + // Deploy V2 and upgrade + syndicateV2 = new SyndicateSequencingChainTestingUpgradeability(); + syndicateV1.upgradeToAndCall(address(syndicateV2), ""); + syndicateV2 = SyndicateSequencingChainTestingUpgradeability(address(proxy)); + + // Enable batch processing first, then test batch limit enforcement + syndicateV2.toggleBatchProcessing(); + syndicateV2.setMaxTransactionsPerBatch(1); + + bytes[] memory largeBatch = new bytes[](2); + largeBatch[0] = "tx1"; + largeBatch[1] = "tx2"; + + vm.stopPrank(); + + vm.expectRevert("Too many transactions in batch"); + syndicateV2.processTransactionsBulk(largeBatch); + + // Test replay protection + vm.startPrank(ADMIN); + syndicateV2.toggleReplayProtection(); // Enable replay protection first + syndicateV2.setMinTimeBetweenTxs(5); // 5 seconds (less than current timestamp) + vm.stopPrank(); + + // Set timestamp to something reasonable for testing + vm.warp(100); + + bytes memory txData = "replay test"; + + // Use a completely fresh address for replay protection test + address replayTester = address(0xDEADBEEF); + vm.prank(replayTester); + syndicateV2.processTransaction(txData); // First tx should work + + vm.expectRevert("Transaction too soon after previous"); + vm.prank(replayTester); + syndicateV2.processTransaction(txData); // Immediate second tx should fail + + // Should work after time passes + vm.warp(block.timestamp + 6); // Wait longer than minTimeBetweenTxs (5) + vm.prank(replayTester); + syndicateV2.processTransaction(txData); + } + + /*////////////////////////////////////////////////////////////// + STORAGE COLLISION TESTS + //////////////////////////////////////////////////////////////*/ + + /// @notice Test that there are no storage collisions between V1 and V2 + function testNoStorageCollisions() public { + vm.startPrank(ADMIN); + + // Deploy V2 and upgrade + syndicateV2 = new SyndicateSequencingChainTestingUpgradeability(); + syndicateV1.upgradeToAndCall(address(syndicateV2), ""); + syndicateV2 = SyndicateSequencingChainTestingUpgradeability(address(proxy)); + + // Set new V2 values + syndicateV2.setMaxGasPerTransaction(999999); + syndicateV2.setMaxTransactionsPerBatch(77); + syndicateV2.setMinTimeBetweenTxs(123); + + // Verify V1 storage is still intact after V2 modifications + assertEq(syndicateV2.appchainId(), TEST_APPCHAIN_ID, "V1 storage should remain intact"); + + // Verify V2 storage is working correctly + assertEq(syndicateV2.maxGasPerTransaction(), 999999, "V2 storage should work correctly"); + assertEq(syndicateV2.maxTransactionsPerBatch(), 77, "V2 namespaced storage should work correctly"); + assertEq(syndicateV2.minTimeBetweenTxs(), 123, "V2 storage should work correctly"); + + vm.stopPrank(); + } +} diff --git a/synd-contracts/test/upgrade/UpgradeFlowIntegrationTest.t.sol b/synd-contracts/test/upgrade/UpgradeFlowIntegrationTest.t.sol new file mode 100644 index 000000000..a32138d55 --- /dev/null +++ b/synd-contracts/test/upgrade/UpgradeFlowIntegrationTest.t.sol @@ -0,0 +1,346 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +import {Test, console2} from "forge-std/Test.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; + +// Core contracts +import {SyndicateSequencingChain} from "src/SyndicateSequencingChain.sol"; +import {GasAggregator} from "src/staking/GasAggregator.sol"; +import {EpochTracker} from "src/staking/EpochTracker.sol"; +import {GasMeter} from "src/staking/GasMeter.sol"; + +// Test upgrades +import {SyndicateSequencingChainUpgradeV2} from "./helpers/SyndicateSequencingChainUpgradeV2.sol"; + +// Interfaces and modules +import {IRequirementModule} from "src/interfaces/IRequirementModule.sol"; +import {AlwaysAllowedModule} from "src/sequencing-modules/AlwaysAllowedModule.sol"; + +/// @title UpgradeFlowIntegrationTest +/// @notice Comprehensive integration test for the full upgrade flow +/// @dev Tests the complete upgrade process: +/// 1. Create sequencing chains +/// 2. Upgrade sequencing chain to V2 +/// 3. Verify all storage preserved and new functionality works +/// @dev This test runs as a fork test against risa_devnet +/// @dev Run with: forge test --match-contract UpgradeFlowIntegrationTest --fork-url risa_devnet -vv +contract UpgradeFlowIntegrationTest is Test, EpochTracker { + /*////////////////////////////////////////////////////////////// + TEST CONSTANTS + //////////////////////////////////////////////////////////////*/ + + address constant ADMIN = address(0x1111); + address constant USER = address(0x2222); + uint256 constant TEST_NONCE_1 = 1; + uint256 constant TEST_NONCE_2 = 2; + + /*////////////////////////////////////////////////////////////// + CONTRACT INSTANCES + //////////////////////////////////////////////////////////////*/ + + // V1 Contracts + GasAggregator gasAggregator; + address sequencingChainImpl; + AlwaysAllowedModule permissionModule; + address gasMeter; + + // Created chains + SyndicateSequencingChain chain1; + uint256 chain1Id; + + // V2 Upgrades + SyndicateSequencingChainUpgradeV2 chainV2; + + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event SyndicateSequencingChainCreated( + uint256 indexed appchainId, address indexed sequencingChainAddress, address indexed permissionModuleAddress + ); + event TransactionProcessed(address indexed sender, bytes data); + event ProcessingFeeUpdated(uint256 newFee); + event ChainCreationToggled(bool enabled); + + /*////////////////////////////////////////////////////////////// + SETUP + //////////////////////////////////////////////////////////////*/ + + function setUp() public { + // Skip test in CI since the RPC is flaky + vm.skip(true); + + // Create fork from risa_devnet + vm.createSelectFork("risa_devnet"); + + // Fund test accounts with native currency + vm.deal(ADMIN, 100 ether); + vm.deal(USER, 100 ether); + + // Set timestamp to start of epoch 1 + 1 day to ensure we're in a valid epoch + vm.warp(getEpochStart(1) + 1 days); + + // Deploy as ADMIN (simulating the deterministic deployment process) + vm.startPrank(ADMIN); + + // 1. Deploy GasMeter + GasMeter gasMeterImpl = new GasMeter(); + gasMeter = address(new ERC1967Proxy(address(gasMeterImpl), abi.encodeCall(GasMeter.initialize, ()))); + + // 2. Deploy SyndicateSequencingChain implementation + sequencingChainImpl = address(new SyndicateSequencingChain(gasMeter)); + console2.log("Sequencing chain implementation deployed:", address(sequencingChainImpl)); + + // 3. Deploy permission module + permissionModule = new AlwaysAllowedModule(); + console2.log("Permission module deployed:", address(permissionModule)); + + vm.stopPrank(); + } + + function deployChain(address admin, address _permissionModule, uint256 nonce) + public + returns (SyndicateSequencingChain) + { + return SyndicateSequencingChain( + address( + new ERC1967Proxy( + sequencingChainImpl, + abi.encodeCall(SyndicateSequencingChain.initialize, (admin, _permissionModule, nonce)) + ) + ) + ); + } + + /*////////////////////////////////////////////////////////////// + TEST: INITIAL DEPLOYMENT + //////////////////////////////////////////////////////////////*/ + + function test_InitialDeployment() public view { + // Verify gas meter + assertTrue(gasMeter != address(0), "GasMeter should be deployed"); + assertEq(GasMeter(gasMeter).VERSION(), 1_000_000, "GasMeter VERSION should be 1.0.0"); + } + + /*////////////////////////////////////////////////////////////// + TEST: CREATE SEQUENCING CHAIN + //////////////////////////////////////////////////////////////*/ + + function test_CreateSequencingChain() public { + vm.startPrank(ADMIN); + + // Create chain + chain1 = deployChain(ADMIN, address(permissionModule), TEST_NONCE_1); + chain1Id = chain1.appchainId(); + + console2.log("Chain created:", address(chain1)); + console2.log("Chain ID:", chain1Id); + + // Verify chain + assertEq(chain1.appchainId(), chain1Id, "Chain ID should match"); + assertEq(chain1.owner(), ADMIN, "Chain owner should be admin"); + assertEq( + address(chain1.permissionRequirementModule()), address(permissionModule), "Permission module should match" + ); + vm.stopPrank(); + } + + /*////////////////////////////////////////////////////////////// + TEST: PROCESS TRANSACTIONS ON V1 CHAIN + //////////////////////////////////////////////////////////////*/ + + function test_ProcessTransactionV1() public { + // Create chain first + vm.prank(ADMIN); + chain1 = deployChain(ADMIN, address(permissionModule), TEST_NONCE_1); + + // Process transaction + bytes memory txData = hex"1234567890"; + + vm.prank(USER); + chain1.processTransaction(txData); + } + + /*////////////////////////////////////////////////////////////// + TEST: UPGRADE SEQUENCING CHAIN TO V2 + //////////////////////////////////////////////////////////////*/ + + function test_UpgradeSequencingChainToV2() public { + // Create chain first + vm.prank(ADMIN); + chain1 = deployChain(ADMIN, address(permissionModule), TEST_NONCE_1); + + // Store pre-upgrade state + uint256 preAppchainId = chain1.appchainId(); + address preOwner = chain1.owner(); + address prePermissionModule = address(chain1.permissionRequirementModule()); + + vm.startPrank(ADMIN); + + // Deploy V2 implementation + chainV2 = new SyndicateSequencingChainUpgradeV2(gasMeter); + console2.log("Chain V2 implementation deployed:", address(chainV2)); + + // Upgrade chain + chain1.upgradeToAndCall(address(chainV2), ""); + console2.log("Chain upgraded to V2"); + + // Cast to V2 interface + SyndicateSequencingChainUpgradeV2 chainProxyV2 = SyndicateSequencingChainUpgradeV2(address(chain1)); + + vm.stopPrank(); + + // Verify storage preserved + assertEq(chainProxyV2.appchainId(), preAppchainId, "AppchainId should be preserved"); + assertEq(chainProxyV2.owner(), preOwner, "Owner should be preserved"); + assertEq( + address(chainProxyV2.permissionRequirementModule()), + prePermissionModule, + "Permission module should be preserved" + ); + + // Verify new V2 functionality + assertEq(chainProxyV2.contractVersion(), "2.0.0", "Chain V2 version should be 2.0.0"); + assertEq(chainProxyV2.processingFee(), 0, "Initial processing fee should be 0"); + assertFalse(chainProxyV2.feeCollectionEnabled(), "Fee collection should be disabled by default"); + assertEq(chainProxyV2.totalFeesCollected(), 0, "Initial total fees should be 0"); + } + + /*////////////////////////////////////////////////////////////// + TEST: FULL UPGRADE FLOW WITH FUNCTIONALITY + //////////////////////////////////////////////////////////////*/ + + function test_FullUpgradeFlowWithFunctionality() public { + // 1. Create chain on V1 + vm.prank(ADMIN); + chain1 = deployChain(ADMIN, address(permissionModule), TEST_NONCE_1); + chain1Id = chain1.appchainId(); + console2.log("=== Step 1: Chain created on V1 ==="); + + // 2. Process transaction on V1 + bytes memory txData = hex"1234567890"; + vm.prank(USER); + chain1.processTransaction(txData); + console2.log("=== Step 2: Transaction processed on V1 ==="); + + // 5. Upgrade Chain to V2 + chainV2 = new SyndicateSequencingChainUpgradeV2(gasMeter); + chain1.upgradeToAndCall(address(chainV2), ""); + SyndicateSequencingChainUpgradeV2 chainProxyV2 = SyndicateSequencingChainUpgradeV2(address(chain1)); + console2.log("=== Step 5: Chain upgraded to V2 ==="); + + // 6. Test new Chain V2 functionality + uint256 testFee = 0.01 ether; + vm.expectEmit(true, true, true, true); + emit ProcessingFeeUpdated(testFee); + chainProxyV2.setProcessingFee(testFee); + assertEq(chainProxyV2.processingFee(), testFee, "Processing fee should be set"); + + chainProxyV2.toggleFeeCollection(); + assertTrue(chainProxyV2.feeCollectionEnabled(), "Fee collection should be enabled"); + console2.log("=== Step 6: Chain V2 functionality configured ==="); + + vm.stopPrank(); + + // 7. Process transaction with fee on V2 + vm.deal(USER, 1 ether); + vm.prank(USER); + chainProxyV2.processTransactionWithFee{value: testFee}(txData); + assertEq(chainProxyV2.totalFeesCollected(), testFee, "Fee should be collected"); + console2.log("=== Step 7: Transaction with fee processed on V2 ==="); + + // 8. Verify old functionality still works + vm.prank(USER); + chainProxyV2.processTransaction(hex"abcdef"); + console2.log("=== Step 8: Old functionality verified ==="); + + // 9. Verify all storage preserved + assertEq(chainProxyV2.appchainId(), chain1Id, "AppchainId should be preserved"); + assertEq(chainProxyV2.owner(), ADMIN, "Owner should be preserved"); + console2.log("=== Step 9: All storage verified ==="); + + console2.log("\n=== FULL UPGRADE FLOW COMPLETED SUCCESSFULLY ==="); + } + + /*////////////////////////////////////////////////////////////// + TEST: MULTIPLE CHAINS UPGRADE + //////////////////////////////////////////////////////////////*/ + + function test_MultipleSequencingChainsUpgrade() public { + vm.startPrank(ADMIN); + + // Create multiple chains on V1 + address chain1Addr = address(deployChain(ADMIN, address(permissionModule), TEST_NONCE_1)); + address chain2Addr = address(deployChain(ADMIN, address(permissionModule), TEST_NONCE_2)); + + console2.log("Two chains created"); + + // Deploy V2 implementation + chainV2 = new SyndicateSequencingChainUpgradeV2(gasMeter); + + // Upgrade both chains + SyndicateSequencingChain(chain1Addr).upgradeToAndCall(address(chainV2), ""); + SyndicateSequencingChain(chain2Addr).upgradeToAndCall(address(chainV2), ""); + + console2.log("Both chains upgraded to V2"); + + vm.stopPrank(); + + // Verify both chains + SyndicateSequencingChainUpgradeV2 chain1V2 = SyndicateSequencingChainUpgradeV2(chain1Addr); + SyndicateSequencingChainUpgradeV2 chain2V2 = SyndicateSequencingChainUpgradeV2(chain2Addr); + + assertEq(chain1V2.contractVersion(), "2.0.0", "Chain 1 should be V2"); + assertEq(chain2V2.contractVersion(), "2.0.0", "Chain 2 should be V2"); + assertEq(chain1V2.owner(), ADMIN, "Chain 1 owner preserved"); + assertEq(chain2V2.owner(), ADMIN, "Chain 2 owner preserved"); + + console2.log("Multiple chains upgrade verified"); + } + + /*////////////////////////////////////////////////////////////// + TEST: UPGRADE AUTHORIZATION + //////////////////////////////////////////////////////////////*/ + + function test_RevertWhen_UnauthorizedUpgradeAttempt() public { + vm.prank(ADMIN); + chain1 = deployChain(ADMIN, address(permissionModule), TEST_NONCE_1); + + // Deploy V2 + vm.prank(ADMIN); + chainV2 = new SyndicateSequencingChainUpgradeV2(gasMeter); + + // Try to upgrade as non-owner + vm.prank(USER); + vm.expectRevert(); + chain1.upgradeToAndCall(address(chainV2), ""); + } + + /*////////////////////////////////////////////////////////////// + TEST: STORAGE LAYOUT VALIDATION + //////////////////////////////////////////////////////////////*/ + + function test_StorageLayoutPreservation() public { + // Create chain and set various storage values + vm.startPrank(ADMIN); + chain1 = deployChain(ADMIN, address(permissionModule), TEST_NONCE_1); + + // Capture all storage + uint256 preAppchainId = chain1.appchainId(); + address preOwner = chain1.owner(); + address preGasMeter = chain1.gasMeter(); + + // Upgrade + chainV2 = new SyndicateSequencingChainUpgradeV2(gasMeter); + chain1.upgradeToAndCall(address(chainV2), ""); + SyndicateSequencingChainUpgradeV2 chainProxyV2 = SyndicateSequencingChainUpgradeV2(address(chain1)); + + vm.stopPrank(); + + // Verify ALL storage preserved + assertEq(chainProxyV2.appchainId(), preAppchainId, "AppchainId must be preserved"); + assertEq(chainProxyV2.owner(), preOwner, "Owner must be preserved"); + assertEq(chainProxyV2.gasMeter(), preGasMeter, "GasMeter must be preserved"); + } +} diff --git a/synd-contracts/test/upgrade/helpers/SequencingModuleCheckerTestingUpgradeability.sol b/synd-contracts/test/upgrade/helpers/SequencingModuleCheckerTestingUpgradeability.sol new file mode 100644 index 000000000..ea1bc23e1 --- /dev/null +++ b/synd-contracts/test/upgrade/helpers/SequencingModuleCheckerTestingUpgradeability.sol @@ -0,0 +1,109 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +import {IPermissionModule} from "src/interfaces/IPermissionModule.sol"; +import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {DataTooLarge} from "@arbitrum/nitro-contracts/src/libraries/Error.sol"; + +/// @custom:storage-location erc7201:syndicate.storage.SequencingModule +struct SequencingModuleStorage { + /// @notice The requirement module that handles checks + IPermissionModule permissionRequirementModule; + /// @notice NEW FIELD: Maximum number of transactions per batch + uint256 maxTransactionsPerBatch; + /// @notice NEW FIELD: Enable/disable batch processing + bool batchProcessingEnabled; + /// @notice NEW FIELD: Timestamp of last permission update + uint256 lastPermissionUpdate; +} + +/// @title SequencingModuleCheckerTestingUpgradeability +/// @notice Upgraded version with additional storage fields - tests namespaced storage safety +abstract contract SequencingModuleCheckerTestingUpgradeability is + Initializable, + OwnableUpgradeable, + IPermissionModule +{ + event RequirementModuleUpdated(address indexed newModule); + event MaxTransactionsPerBatchUpdated(uint256 newMax); + event BatchProcessingToggled(bool enabled); + + // Just in case, limit the amount of tx data sent to the isAllowed function. + uint256 public constant maxDataSize = 200000; + + // cast index-erc7201 syndicate.storage.SequencingModule + bytes32 public constant SEQUENCING_MODULE_STORAGE_LOCATION = + 0x5c6d1774bdd69d8d16847c3c97b51ea7343257b8f5ace5da9e25ab3bafd7d500; + + function _getSequencingModuleStorage() private pure returns (SequencingModuleStorage storage $) { + assembly { + $.slot := SEQUENCING_MODULE_STORAGE_LOCATION + } + } + + function permissionRequirementModule() public view returns (IPermissionModule) { + SequencingModuleStorage storage $ = _getSequencingModuleStorage(); + return $.permissionRequirementModule; + } + + /// @notice NEW GETTER: Get max transactions per batch + function maxTransactionsPerBatch() public view returns (uint256) { + SequencingModuleStorage storage $ = _getSequencingModuleStorage(); + return $.maxTransactionsPerBatch; + } + + /// @notice NEW GETTER: Check if batch processing is enabled + function batchProcessingEnabled() public view returns (bool) { + SequencingModuleStorage storage $ = _getSequencingModuleStorage(); + return $.batchProcessingEnabled; + } + + /// @notice NEW GETTER: Get last permission update timestamp + function lastPermissionUpdate() public view returns (uint256) { + SequencingModuleStorage storage $ = _getSequencingModuleStorage(); + return $.lastPermissionUpdate; + } + + function __SequencingModuleChecker_init(address admin, address _permissionRequirementModule) + internal + onlyInitializing + { + __Ownable_init(admin); + _getSequencingModuleStorage().permissionRequirementModule = IPermissionModule(_permissionRequirementModule); + // Initialize new fields with default values + _getSequencingModuleStorage().maxTransactionsPerBatch = 100; + _getSequencingModuleStorage().batchProcessingEnabled = true; + _getSequencingModuleStorage().lastPermissionUpdate = block.timestamp; + } + + /// @notice Updates the requirement module + /// @param _newModule The address of the new requirement module + function updateRequirementModule(address _newModule) external onlyOwner { + _getSequencingModuleStorage().permissionRequirementModule = IPermissionModule(_newModule); + _getSequencingModuleStorage().lastPermissionUpdate = block.timestamp; // NEW: Track update time + + emit RequirementModuleUpdated(_newModule); + } + + /// @notice NEW FUNCTION: Set max transactions per batch + function setMaxTransactionsPerBatch(uint256 _max) external onlyOwner { + require(_max > 0, "Max must be greater than 0"); + _getSequencingModuleStorage().maxTransactionsPerBatch = _max; + emit MaxTransactionsPerBatchUpdated(_max); + } + + /// @notice NEW FUNCTION: Toggle batch processing + function toggleBatchProcessing() external onlyOwner { + SequencingModuleStorage storage $ = _getSequencingModuleStorage(); + $.batchProcessingEnabled = !$.batchProcessingEnabled; + emit BatchProcessingToggled($.batchProcessingEnabled); + } + + /// @notice Checks if both the proposer and calldata are allowed + function isAllowed(address proposer, address originator, bytes memory data) public view returns (bool) { + require(data.length <= maxDataSize, DataTooLarge(data.length, maxDataSize)); + return address(permissionRequirementModule()) == address(1) + || permissionRequirementModule().isAllowed(proposer, originator, data); + } +} diff --git a/synd-contracts/test/upgrade/helpers/SyndicateSequencingChainTestingUpgradeability.sol b/synd-contracts/test/upgrade/helpers/SyndicateSequencingChainTestingUpgradeability.sol new file mode 100644 index 000000000..ca11e2baa --- /dev/null +++ b/synd-contracts/test/upgrade/helpers/SyndicateSequencingChainTestingUpgradeability.sol @@ -0,0 +1,216 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import {ISyndicateSequencingChain} from "src/interfaces/ISyndicateSequencingChain.sol"; +import {GasCounter} from "src/staking/GasCounter.sol"; +import "./SequencingModuleCheckerTestingUpgradeability.sol"; + +/// @custom:storage-location erc7201:syndicate.storage.SyndicateSequencingChain +struct SyndicateSequencingChainStorage { + /// @notice The ID of the App chain that this contract is sequencing transactions for. + uint256 appchainId; + /// @notice Version of the SyndicateSequencingChain contract (updatable during upgrades) + uint256 version; +} + +/// @title SyndicateSequencingChainTestingUpgradeability +/// @notice Upgraded version with additional storage fields - tests upgrade safety +/// @dev This tests both traditional storage (appended to end) and namespaced storage safety +contract SyndicateSequencingChainTestingUpgradeability is + Initializable, + SequencingModuleCheckerTestingUpgradeability, + ISyndicateSequencingChain, + GasCounter, + UUPSUpgradeable +{ + error NoTxData(); + error TransactionOrSenderNotAllowed(); + + /*////////////////////////////////////////////////////////////// + NAMESPACED STORAGE + //////////////////////////////////////////////////////////////*/ + + // cast index-erc7201 syndicate.storage.SyndicateSequencingChain + bytes32 public constant SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION = + 0xc541a3613bd22a8da1c897658e95c42e6bb9158c83d62ac963646ba27200a400; + + function _getSyndicateSequencingChainStorage() private pure returns (SyndicateSequencingChainStorage storage $) { + assembly { + $.slot := SYNDICATE_SEQUENCING_CHAIN_STORAGE_LOCATION + } + } + + function appchainId() public view returns (uint256) { + SyndicateSequencingChainStorage storage $ = _getSyndicateSequencingChainStorage(); + return $.appchainId; + } + + function version() public view returns (uint256) { + SyndicateSequencingChainStorage storage $ = _getSyndicateSequencingChainStorage(); + return $.version; + } + + /*////////////////////////////////////////////////////////////// + NEW V2 GLOBAL VARIABLES - APPENDED SAFELY + //////////////////////////////////////////////////////////////*/ + + /// @notice V2: Maximum gas limit per transaction + uint256 public maxGasPerTransaction; + + /// @notice V2: Enable/disable transaction replay protection + bool public replayProtectionEnabled; + + /// @notice V2: Minimum time between transactions from same address + uint256 public minTimeBetweenTxs; + + /// @notice V2: Mapping of address to last transaction timestamp + mapping(address => uint256) public lastTransactionTime; + + /*////////////////////////////////////////////////////////////// + EVENTS + //////////////////////////////////////////////////////////////*/ + + event TransactionProcessed(address indexed sender, bytes data); + event MaxGasPerTransactionUpdated(uint256 newMax); + event ReplayProtectionToggled(bool enabled); + event MinTimeBetweenTxsUpdated(uint256 newMin); + + /*////////////////////////////////////////////////////////////// + INITIALIZATION + //////////////////////////////////////////////////////////////*/ + + function initialize(address admin, address, address _permissionRequirementModule, address, uint256 _appchainId) + external + initializer + { + // Initialize parent contracts + __SequencingModuleChecker_init(admin, _permissionRequirementModule); + __UUPSUpgradeable_init(); + + // Initialize namespaced storage variables + SyndicateSequencingChainStorage storage $ = _getSyndicateSequencingChainStorage(); + $.appchainId = _appchainId; + $.version = 1_000_000; // 1.0.0 + + // Enable gas tracking + _enableGasTracking(); + + // Initialize new V2 fields with default values + maxGasPerTransaction = 1000000; // 1M gas default + replayProtectionEnabled = true; + minTimeBetweenTxs = 0; // No minimum by default + } + + /*////////////////////////////////////////////////////////////// + NEW V2 FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + /// @notice NEW FUNCTION: Set maximum gas per transaction + function setMaxGasPerTransaction(uint256 _maxGas) external onlyOwner { + require(_maxGas > 0, "Max gas must be greater than 0"); + maxGasPerTransaction = _maxGas; + emit MaxGasPerTransactionUpdated(_maxGas); + } + + /// @notice NEW FUNCTION: Toggle replay protection + function toggleReplayProtection() external onlyOwner { + replayProtectionEnabled = !replayProtectionEnabled; + emit ReplayProtectionToggled(replayProtectionEnabled); + } + + /// @notice NEW FUNCTION: Set minimum time between transactions + function setMinTimeBetweenTxs(uint256 _minTime) external onlyOwner { + minTimeBetweenTxs = _minTime; + emit MinTimeBetweenTxsUpdated(_minTime); + } + + /*////////////////////////////////////////////////////////////// + TRANSACTION PROCESSING + //////////////////////////////////////////////////////////////*/ + + modifier onlyWhenAllowed(bytes calldata data) { + if (!isAllowed(msg.sender, tx.origin, data)) { + revert TransactionOrSenderNotAllowed(); + } + _; + } + + modifier checkReplayProtection() { + if (replayProtectionEnabled && minTimeBetweenTxs > 0) { + require( + block.timestamp >= lastTransactionTime[msg.sender] + minTimeBetweenTxs, + "Transaction too soon after previous" + ); + lastTransactionTime[msg.sender] = block.timestamp; + } + _; + } + + function processTransaction(bytes calldata data) + external + onlyWhenAllowed(data) + checkReplayProtection // NEW: Check replay protection + { + if (data.length == 0) { + revert NoTxData(); + } + + // NEW: Check gas limit if set + if (maxGasPerTransaction > 0) { + require(gasleft() <= maxGasPerTransaction, "Transaction exceeds gas limit"); + } + + emit TransactionProcessed(msg.sender, data); + } + + function processTransactionsBulk(bytes[] calldata data) + external + checkReplayProtection // NEW: Check replay protection + { + // Check permission for bulk transaction + bytes memory bulkData = abi.encode(data); + if (!isAllowed(msg.sender, tx.origin, bulkData)) { + revert TransactionOrSenderNotAllowed(); + } + + require(batchProcessingEnabled(), "Batch processing is disabled"); // NEW: Check if batch processing enabled + + uint256 length = data.length; + require(length > 0, "No transactions provided"); + require(length <= maxTransactionsPerBatch(), "Too many transactions in batch"); // NEW: Check batch limit + + for (uint256 i = 0; i < length; i++) { + if (data[i].length > 0) { + emit TransactionProcessed(msg.sender, data[i]); + } + } + } + + /*////////////////////////////////////////////////////////////// + EMISSIONS & OWNERSHIP + //////////////////////////////////////////////////////////////*/ + + function _authorizeUpgrade(address newImplementation) internal override onlyOwner {} + + /*////////////////////////////////////////////////////////////// + GAS TRACKING ADMIN FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + function disableGasTracking() external onlyOwner { + _disableGasTracking(); + } + + function enableGasTracking() external onlyOwner { + _enableGasTracking(); + } + + /*////////////////////////////////////////////////////////////// + UTILITY FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + function encodeTransaction(bytes calldata data) public pure returns (bytes memory) { + return data; + } +} diff --git a/synd-contracts/test/upgrade/helpers/SyndicateSequencingChainUpgradeV2.sol b/synd-contracts/test/upgrade/helpers/SyndicateSequencingChainUpgradeV2.sol new file mode 100644 index 000000000..9423b75c8 --- /dev/null +++ b/synd-contracts/test/upgrade/helpers/SyndicateSequencingChainUpgradeV2.sol @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity 0.8.28; + +import {SyndicateSequencingChain} from "src/SyndicateSequencingChain.sol"; + +/// @title SyndicateSequencingChainUpgradeV2 +/// @notice V2 upgrade for testing - adds new functionality safely +/// @dev This demonstrates safe upgrade patterns: +/// - Traditional storage: New variables appended at end +/// - Namespaced storage: New fields in ERC-7201 namespace +contract SyndicateSequencingChainUpgradeV2 is SyndicateSequencingChain { + constructor(address _gasMeter) SyndicateSequencingChain(_gasMeter) {} + + /*////////////////////////////////////////////////////////////// + NEW V2 STORAGE - APPENDED SAFELY + //////////////////////////////////////////////////////////////*/ + + /// @notice V2: Transaction processing fee in wei + uint256 public processingFee; + + /// @notice V2: Enable/disable fee collection + bool public feeCollectionEnabled; + + /// @notice V2: Total fees collected + uint256 public totalFeesCollected; + + /*////////////////////////////////////////////////////////////// + NEW V2 EVENTS + //////////////////////////////////////////////////////////////*/ + + event ProcessingFeeUpdated(uint256 newFee); + event FeeCollectionToggled(bool enabled); + event FeeCollected(address indexed payer, uint256 amount); + + /*////////////////////////////////////////////////////////////// + NEW V2 FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + /// @notice Set the processing fee for transactions + /// @param _fee New fee amount in wei + function setProcessingFee(uint256 _fee) external onlyOwner { + processingFee = _fee; + emit ProcessingFeeUpdated(_fee); + } + + /// @notice Toggle fee collection on/off + function toggleFeeCollection() external onlyOwner { + feeCollectionEnabled = !feeCollectionEnabled; + emit FeeCollectionToggled(feeCollectionEnabled); + } + + /// @notice Process transaction with fee (new V2 functionality) + /// @dev Adds fee collection to existing functionality + function processTransactionWithFee(bytes calldata data) external payable { + require(data.length > 0, NoTxData()); + + // Encode transaction + bytes memory transaction = encodeTransaction(data); + + // Check authorization + require(isAllowed(msg.sender, tx.origin, transaction), TransactionOrSenderNotAllowed()); + + // Collect fee if enabled + if (feeCollectionEnabled && processingFee > 0) { + require(msg.value >= processingFee, "Insufficient fee"); + totalFeesCollected += msg.value; + emit FeeCollected(msg.sender, msg.value); + } + + emit TransactionProcessed(msg.sender, transaction); + } + + /// @notice Withdraw collected fees + /// @param recipient Address to receive fees + function withdrawFees(address payable recipient) external onlyOwner { + require(recipient != address(0), "Invalid recipient"); + uint256 amount = address(this).balance; + require(amount > 0, "No fees to withdraw"); + + (bool success,) = recipient.call{value: amount}(""); + require(success, "Transfer failed"); + } + + /// @notice Get contract version + /// @return Version string + function contractVersion() external pure returns (string memory) { + return "2.0.0"; + } +} diff --git a/synd-stake-cli/src/proofs.rs b/synd-stake-cli/src/proofs.rs index f2fd8a85b..28ef5d5f7 100644 --- a/synd-stake-cli/src/proofs.rs +++ b/synd-stake-cli/src/proofs.rs @@ -22,6 +22,14 @@ use shared::{ use tracing::{debug, info}; use url::Url; +// Legacy interface for Sequencing Chain +sol! { + #[sol(rpc)] + contract ILegacySequencingChain { + function getTokensForEpoch(uint256 epoch) external view returns (uint256); + } +} + /// Arguments for updating base and ethereum block hashes #[derive(Args, Debug)] pub struct UpdateBaseAndEthereumBlockHashesArgs { @@ -358,7 +366,32 @@ async fn get_aggregated_chain_data( let logs = filter.query().await.unwrap_or_else(|e| panic!("failed to get logs: {e}")); assert_eq!(logs.len(), 1); - (logs[0].0.chainIds.clone(), logs[0].0.tokens.clone()) + let appchains = gas_aggregator + .getTrackedChainIds() + .call() + .await + .unwrap_or_else(|e| panic!("failed to get tracked chain IDs: {e}")); + let mut tokens = vec![]; + + for chain_id in appchains.iter().copied() { + // Prefer any explicit override set in the aggregator; otherwise use factory computation + let appchain_addr = + gas_aggregator.appchainContract(chain_id).call().await.unwrap_or_else(|e| { + panic!("failed to get appchain contract override for {chain_id}: {e}") + }); + + // TODO: Handle legacy and new sequencing chain implementations + let appchain = + ILegacySequencingChain::new(appchain_addr, gas_aggregator.provider().clone()); + tokens.push( + appchain + .getTokensForEpoch(epoch) + .call() + .await + .unwrap_or_else(|e| panic!("failed to get tokens for epoch {epoch}: {e}")), + ); + } + (appchains, tokens) } /// Arguments for running both `update_base_and_ethereum_block_hashes` and `submit_gas_proofs` diff --git a/test-framework/src/components/test_components.rs b/test-framework/src/components/test_components.rs index 472dd98e4..935c52067 100644 --- a/test-framework/src/components/test_components.rs +++ b/test-framework/src/components/test_components.rs @@ -12,15 +12,18 @@ use crate::components::{ use alloy::{ consensus::{EthereumTxEnvelope, TxEip4844Variant}, eips::{BlockNumberOrTag, Encodable2718}, - primitives::{address, hex, keccak256, utils::parse_ether, Address, Bytes, TxHash, U160, U256}, + primitives::{address, hex, keccak256, utils::parse_ether, Address, Bytes, TxHash, U256}, providers::{ext::AnvilApi, Provider, WalletProvider}, rpc::types::{anvil::MineOptions, TransactionReceipt}, sol_types::SolCall, }; use contract_bindings::synd::{ assertion_poster::AssertionPoster, + erc1967_proxy::ERC1967Proxy, + gas_meter::GasMeter, i_inbox::IInbox, i_upgrade_executor::IUpgradeExecutor, + r#always_allowed_module::AlwaysAllowedModule, rollup::Rollup, syndicate_sequencing_chain::SyndicateSequencingChain::{ self, SyndicateSequencingChainInstance, @@ -42,7 +45,7 @@ use synd_mchain::{ methods::common::{APPCHAIN_CONTRACT, MCHAIN_ID}, }; use test_utils::{ - anvil::{mine_block, start_anvil, start_anvil_with_args}, + anvil::{mine_block, mine_block_at_ts, start_anvil, start_anvil_with_args}, chain_info::{ test_account1, test_account3, test_account8, test_account9, ChainInfo, ProcessInstance, PRIVATE_KEY, PRIVATE_KEY8, PRIVATE_KEY9, @@ -190,16 +193,13 @@ impl TestComponents { provider: seq_provider, http_url: _, } = match options.base_chains_type { - BaseChainsType::Anvil => { + BaseChainsType::Anvil | BaseChainsType::PreLoaded(_) => { start_anvil_with_args( SEQUENCING_CHAIN_ID, &["--timestamp", 1756209109.to_string().as_str()], ) .await? } - BaseChainsType::PreLoaded(_) => { - start_anvil_with_args(SEQUENCING_CHAIN_ID, &["--timestamp", "0"]).await? - } BaseChainsType::Nitro | BaseChainsType::NitroWithEigenda => { let chain_id = SEQUENCING_CHAIN_ID; let l1_info = l1_info.as_ref().unwrap(); @@ -253,30 +253,50 @@ impl TestComponents { info!("Sequencing chain Nitro URL: {}", seq_rpc_ws_url); - let _ = SyndicateSequencingChain::deploy_builder( + let _ = GasMeter::deploy_builder(&seq_provider).send().await?; + let gas_meter_address_impl = seq_provider.default_signer_address().create(0); + + let _ = ERC1967Proxy::deploy_builder(&seq_provider, gas_meter_address_impl, Bytes::new()) + .send() + .await?; + let gas_meter_address = seq_provider.default_signer_address().create(1); + + let _ = SyndicateSequencingChain::deploy_builder(&seq_provider, gas_meter_address) + .send() + .await?; + let sequencing_contract_address_impl = seq_provider.default_signer_address().create(2); + + let _ = ERC1967Proxy::deploy_builder( &seq_provider, - U256::from(options.appchain_chain_id), + sequencing_contract_address_impl, + Bytes::new(), ) .send() .await?; - let sequencing_contract_address = seq_provider.default_signer_address().create(0); + let sequencing_contract_address = seq_provider.default_signer_address().create(3); + + let _ = AlwaysAllowedModule::deploy_builder(&seq_provider).send().await?; + let always_allowed_module_address = seq_provider.default_signer_address().create(4); + + // Setup Gas Meter + let gas_meter = GasMeter::new(gas_meter_address, &seq_provider); + let _ = gas_meter.initialize().send().await?; // Setup the sequencing contract let provider_clone = seq_provider.clone(); let sequencing_contract = SyndicateSequencingChain::new(sequencing_contract_address, provider_clone); - - // Set the requirement module to address(1) to allow all transactions - let _ = sequencing_contract.updateRequirementModule(U160::from(1).into()).send().await?; + let _ = sequencing_contract + .initialize( + seq_provider.default_signer_address(), + always_allowed_module_address, + U256::from(options.appchain_chain_id), + ) + .send() + .await?; match options.base_chains_type { - BaseChainsType::Anvil => { - mine_block(&seq_provider, 0).await?; - } - BaseChainsType::PreLoaded(_) => { - // disable gas tracking, otherwise there will be an underflow error with anvil - // timstamp 0 - let _ = sequencing_contract.disableGasTracking().send().await?; + BaseChainsType::Anvil | BaseChainsType::PreLoaded(_) => { mine_block(&seq_provider, 0).await?; } _ => {} @@ -374,11 +394,16 @@ impl TestComponents { .join("config") .join(get_anvil_file(&version)); - start_anvil_with_args( + let chain_info = start_anvil_with_args( SETTLEMENT_CHAIN_ID, &["--load-state", state_file.to_str().unwrap(), "--timestamp", "0"], // snapshots expect timestamp to be 0 ) - .await? + .await?; + + // set timestamp to epoch start time + mine_block_at_ts(&chain_info.provider, 1756209109).await?; + + chain_info } };