diff --git a/.env b/.env index 3a1924a04c..a5073aa489 100644 --- a/.env +++ b/.env @@ -88,6 +88,8 @@ ESPRESSO_SEQUENCER_STAKE_TABLE_CAPACITY=10 # Foundry # The mnemonic used by foundry to deploy contracts. MNEMONIC="test test test test test test test test test test test junk" +# The mnemonic offset, starts at zero +MNEMONIC_OFFSET=0 # The RPC URL for deploying to the sepolia network. SEPOLIA_RPC_URL= diff --git a/.env.contracts.example b/.env.contracts.example index 78aa3ede0d..91122af992 100644 --- a/.env.contracts.example +++ b/.env.contracts.example @@ -6,8 +6,6 @@ export DEFENDER_KEY= export DEFENDER_SECRET= export FEE_CONTRACT_SALT= export LIGHT_CLIENT_SALT= -export FEE_CONTRACT_UPGRADE_NAME= #e.g "FeeContract.sol" -export LIGHT_CLIENT_UPGRADE_NAME= export FOUNDRY_OUT=contracts/out # The Ethereum address of the safe multisig wallet used to deploy and operate the contracts. @@ -15,31 +13,41 @@ export SAFE_MULTISIG_ADDRESS= # The Ethereum private key of the wallet used for the proposing multisig transactions. export SAFE_ORCHESTRATOR_PRIVATE_KEY= +export RPC_URL= + + +# Plonk Verifier +export PLONK_VERIFIER_SALT= +export PLONK_VERIFIER_ADDRESS= + # Light Client export LIGHT_CLIENT_PROXY_CONTRACT_ADDRESS= export APPROVED_PROVER_ADDRESS= - -# Plonk Verification Library Deployment with Defender -export PLONK_VERIFIER_SALT=# Openzeppelin Defender Deployment Profile -export DEFENDER_KEY= -export DEFENDER_SECRET= -export FEE_CONTRACT_SALT= +export LIGHT_CLIENT_CONTRACT_UPGRADE_NAME= +export LIGHT_CLIENT_ORIGINAL_CONTRACT_NAME = export LIGHT_CLIENT_SALT= + + +# Fee Contract +export FEE_CONTRACT_PROXY_ADDRESS= export FEE_CONTRACT_UPGRADE_NAME= #e.g "FeeContract.sol" -export LIGHT_CLIENT_UPGRADE_NAME= -export FOUNDRY_OUT=contracts/out +export FEE_CONTRACT_ORIGINAL_NAME= +export FEE_CONTRACT_SALT= -# The Ethereum address of the safe multisig wallet used to deploy and operate the contracts. -export SAFE_MULTISIG_ADDRESS= -# The Ethereum private key of the wallet used for the proposing multisig transactions. -export SAFE_ORCHESTRATOR_PRIVATE_KEY= -# Light Client -export LIGHT_CLIENT_PROXY_CONTRACT_ADDRESS= -export APPROVED_PROVER_ADDRESS= -# Plonk Verification Library Deployment with Defender -export PLONK_VERIFIER_SALT= +# Deployment with Defender +export DEFENDER_KEY= +export DEFENDER_SECRET= +export FOUNDRY_OUT=contracts/out # The etherscan API key is needed to verify contracts on etherscan. -export ETHERSCAN_API_KEY= \ No newline at end of file +export ETHERSCAN_API_KEY= +export SOLC_VERSION= + +# foundry scripts +export DEPLOYER_PRIVATE_KEY= #include the 0x prefixg +export DEPLOYER_MNEMONIC= +export DEPLOYER_MNEMONIC_OFFSET= +export STATE_HISTORY_RETENTION_PERIOD= #in seconds +export NUM_INIT_VALIDATORS= diff --git a/.gitignore b/.gitignore index 55c630b0e1..8fac0f1bba 100644 --- a/.gitignore +++ b/.gitignore @@ -47,3 +47,6 @@ data/*-actual.bin # Generated by nix-direnv .direnv/ + +# Deployments to Sepolia +contracts/broadcast/*/11155111/ \ No newline at end of file diff --git a/contracts/.gitignore b/contracts/.gitignore index b68c24227d..13467f55ca 100644 --- a/contracts/.gitignore +++ b/contracts/.gitignore @@ -9,7 +9,7 @@ out/ /broadcast/*/900/ /broadcast/**/dry-run/ /broadcast/LightClientCallNewFinalizedState.s.sol -/broadcast/DeployLightClientTestScript.s.sol +/broadcast/LightClientTestScript.s.sol # Dotenv file .env diff --git a/contracts/broadcast/FeeContract.s.sol/11155111/run-1723219248.json b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723219248.json new file mode 100644 index 0000000000..f22864e121 --- /dev/null +++ b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723219248.json @@ -0,0 +1,59 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE", + "contractName": "FeeContract", + "contractAddress": "0xf1d9d1d4f664cbb2e39c5e07523ae8c11cdece5c", + "function": null, + "arguments": null, + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0xe9d1e", + "value": "0x0", + "input": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610be56100fd6000396000818161050d0152818161053601526106ad0152610be56000f3fe60806040526004361061009b5760003560e01c80630d8e6e2c146100d257806327e235e3146101045780634f1ef2861461013f57806352d1902d14610154578063645006ca14610169578063715018a61461017f5780638da5cb5b146101945780638ed83271146101b6578063ad3cb1cc146101cc578063c4d66de81461020a578063f2fde38b1461022a578063f340fa011461024a576100b9565b366100b95760405163bc8eca1b60e01b815260040160405180910390fd5b604051631535ac5f60e31b815260040160405180910390fd5b3480156100de57600080fd5b506040805160018152600060208201819052918101919091526060015b60405180910390f35b34801561011057600080fd5b5061013161011f366004610a05565b60026020526000908152604090205481565b6040519081526020016100fb565b61015261014d366004610a36565b61025d565b005b34801561016057600080fd5b5061013161027c565b34801561017557600080fd5b5061013160015481565b34801561018b57600080fd5b50610152610299565b3480156101a057600080fd5b506101a96102ad565b6040516100fb9190610af7565b3480156101c257600080fd5b5061013160005481565b3480156101d857600080fd5b506101fd604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100fb9190610b2f565b34801561021657600080fd5b50610152610225366004610a05565b6102c8565b34801561023657600080fd5b50610152610245366004610a05565b6103e0565b610152610258366004610a05565b610427565b610265610502565b61026e826105a7565b61027882826105e9565b5050565b60006102866106a2565b50600080516020610bb983398151915290565b6102a16106eb565b6102ab600061071d565b565b6000806102b8610779565b546001600160a01b031692915050565b60006102d261079d565b805490915060ff600160401b82041615906001600160401b03166000811580156102f95750825b90506000826001600160401b031660011480156103155750303b155b905081158015610323575080155b156103415760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561036a57845460ff60401b1916600160401b1785555b610373866107c1565b61037b6107d2565b670de0b6b3a764000060005566038d7ea4c6800060015583156103d857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6103e86106eb565b6001600160a01b03811661041b576000604051631e4fbdf760e01b81526004016104129190610af7565b60405180910390fd5b6104248161071d565b50565b60015434101561044a57604051636ba4a1c760e01b815260040160405180910390fd5b60005434111561046d5760405163c56d46d360e01b815260040160405180910390fd5b6001600160a01b03811661049457604051630702b3d960e41b815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812080543492906104bc908490610b62565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061058957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661057d600080516020610bb9833981519152546001600160a01b031690565b6001600160a01b031614155b156102ab5760405163703e46dd60e11b815260040160405180910390fd5b6105af6106eb565b7ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d816040516105de9190610af7565b60405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610643575060408051601f3d908101601f1916820190925261064091810190610b83565b60015b6106625781604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb9833981519152811461069357604051632a87526960e21b815260048101829052602401610412565b61069d83836107da565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102ab5760405163703e46dd60e11b815260040160405180910390fd5b336106f46102ad565b6001600160a01b0316146102ab573360405163118cdaa760e01b81526004016104129190610af7565b6000610727610779565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b6107c9610830565b61042481610855565b6102ab610830565b6107e38261085d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156108285761069d82826108b9565b610278610931565b610838610950565b6102ab57604051631afcd79f60e31b815260040160405180910390fd5b6103e8610830565b806001600160a01b03163b60000361088a5780604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516108d69190610b9c565b600060405180830381855af49150503d8060008114610911576040519150601f19603f3d011682016040523d82523d6000602084013e610916565b606091505b509150915061092685838361096a565b925050505b92915050565b34156102ab5760405163b398979f60e01b815260040160405180910390fd5b600061095a61079d565b54600160401b900460ff16919050565b60608261097f5761097a826109c0565b6109b9565b815115801561099657506001600160a01b0384163b155b156109b65783604051639996b31560e01b81526004016104129190610af7565b50805b9392505050565b8051156109d05780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114610a0057600080fd5b919050565b600060208284031215610a1757600080fd5b6109b9826109e9565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a4957600080fd5b610a52836109e9565b915060208301356001600160401b0380821115610a6e57600080fd5b818501915085601f830112610a8257600080fd5b813581811115610a9457610a94610a20565b604051601f8201601f19908116603f01168101908382118183101715610abc57610abc610a20565b81604052828152886020848701011115610ad557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6001600160a01b0391909116815260200190565b60005b83811015610b26578181015183820152602001610b0e565b50506000910152565b6020815260008251806020840152610b4e816040850160208701610b0b565b601f01601f19169190910160400192915050565b8082018082111561092b57634e487b7160e01b600052601160045260246000fd5b600060208284031215610b9557600080fd5b5051919050565b60008251610bae818460208701610b0b565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c6343000817000a", + "nonce": "0x37", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE", + "contractName": "ERC1967Proxy", + "contractAddress": "0xbcaf67958f7155afa9e86aea9148cc65477ae54c", + "function": null, + "arguments": [ + "0xF1D9D1d4F664CbB2E39C5E07523Ae8C11CdecE5c", + "0xc4d66de8000000000000000000000000c56fa6505d10bf322e01327e22479de78c3bf1ce" + ], + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0x44b15", + "value": "0x0", + "input": "0x60806040526040516103e73803806103e78339810160408190526100229161025a565b61002c8282610033565b5050610358565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610086576100818282610109565b505050565b61008e610180565b5050565b806001600160a01b03163b6000036100c85780604051634c9c8ce360e01b81526004016100bf9190610328565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051610126919061033c565b600060405180830381855af49150503d8060008114610161576040519150601f19603f3d011682016040523d82523d6000602084013e610166565b606091505b5090925090506101778583836101a1565b95945050505050565b341561019f5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101b6576101b1826101f7565b6101f0565b81511580156101cd57506001600160a01b0384163b155b156101ed5783604051639996b31560e01b81526004016100bf9190610328565b50805b9392505050565b8051156102075780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b83811015610251578181015183820152602001610239565b50506000910152565b6000806040838503121561026d57600080fd5b82516001600160a01b038116811461028457600080fd5b60208401519092506001600160401b03808211156102a157600080fd5b818501915085601f8301126102b557600080fd5b8151818111156102c7576102c7610220565b604051601f8201601f19908116603f011681019083821181831017156102ef576102ef610220565b8160405282815288602084870101111561030857600080fd5b610319836020830160208801610236565b80955050505050509250929050565b6001600160a01b0391909116815260200190565b6000825161034e818460208701610236565b9190910192915050565b6081806103666000396000f3fe6080604052600a600c565b005b60186014601a565b6051565b565b6000604c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015606f573d6000f35b3d6000fdfea164736f6c6343000817000a000000000000000000000000f1d9d1d4f664cbb2e39c5e07523ae8c11cdece5c00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000024c4d66de8000000000000000000000000c56fa6505d10bf322e01327e22479de78c3bf1ce00000000000000000000000000000000000000000000000000000000", + "nonce": "0x38", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": { + "implementationAddress": { + "internal_type": "address", + "value": "0xF1D9D1d4F664CbB2E39C5E07523Ae8C11CdecE5c" + }, + "proxy": { + "internal_type": "address payable", + "value": "0xbCaf67958f7155afa9e86aEA9148CC65477Ae54C" + } + }, + "timestamp": 1723219248, + "chain": 11155111, + "commit": "a82aa8b3" +} \ No newline at end of file diff --git a/contracts/broadcast/FeeContract.s.sol/11155111/run-1723474456.json b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723474456.json new file mode 100644 index 0000000000..9da18aa07f --- /dev/null +++ b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723474456.json @@ -0,0 +1,53 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE", + "contractName": "FeeContract", + "contractAddress": "0x3032632514e96cc920fc5acbe5f500a4e0c780ab", + "function": null, + "arguments": null, + "transaction": { + "from": "0xc56fa6505d10bf322e01327e22479de78c3bf1ce", + "gas": "0xe9d1e", + "value": "0x0", + "input": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610be56100fd6000396000818161050d0152818161053601526106ad0152610be56000f3fe60806040526004361061009b5760003560e01c80630d8e6e2c146100d257806327e235e3146101045780634f1ef2861461013f57806352d1902d14610154578063645006ca14610169578063715018a61461017f5780638da5cb5b146101945780638ed83271146101b6578063ad3cb1cc146101cc578063c4d66de81461020a578063f2fde38b1461022a578063f340fa011461024a576100b9565b366100b95760405163bc8eca1b60e01b815260040160405180910390fd5b604051631535ac5f60e31b815260040160405180910390fd5b3480156100de57600080fd5b506040805160018152600060208201819052918101919091526060015b60405180910390f35b34801561011057600080fd5b5061013161011f366004610a05565b60026020526000908152604090205481565b6040519081526020016100fb565b61015261014d366004610a36565b61025d565b005b34801561016057600080fd5b5061013161027c565b34801561017557600080fd5b5061013160015481565b34801561018b57600080fd5b50610152610299565b3480156101a057600080fd5b506101a96102ad565b6040516100fb9190610af7565b3480156101c257600080fd5b5061013160005481565b3480156101d857600080fd5b506101fd604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100fb9190610b2f565b34801561021657600080fd5b50610152610225366004610a05565b6102c8565b34801561023657600080fd5b50610152610245366004610a05565b6103e0565b610152610258366004610a05565b610427565b610265610502565b61026e826105a7565b61027882826105e9565b5050565b60006102866106a2565b50600080516020610bb983398151915290565b6102a16106eb565b6102ab600061071d565b565b6000806102b8610779565b546001600160a01b031692915050565b60006102d261079d565b805490915060ff600160401b82041615906001600160401b03166000811580156102f95750825b90506000826001600160401b031660011480156103155750303b155b905081158015610323575080155b156103415760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561036a57845460ff60401b1916600160401b1785555b610373866107c1565b61037b6107d2565b670de0b6b3a764000060005566038d7ea4c6800060015583156103d857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6103e86106eb565b6001600160a01b03811661041b576000604051631e4fbdf760e01b81526004016104129190610af7565b60405180910390fd5b6104248161071d565b50565b60015434101561044a57604051636ba4a1c760e01b815260040160405180910390fd5b60005434111561046d5760405163c56d46d360e01b815260040160405180910390fd5b6001600160a01b03811661049457604051630702b3d960e41b815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812080543492906104bc908490610b62565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061058957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661057d600080516020610bb9833981519152546001600160a01b031690565b6001600160a01b031614155b156102ab5760405163703e46dd60e11b815260040160405180910390fd5b6105af6106eb565b7ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d816040516105de9190610af7565b60405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610643575060408051601f3d908101601f1916820190925261064091810190610b83565b60015b6106625781604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb9833981519152811461069357604051632a87526960e21b815260048101829052602401610412565b61069d83836107da565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102ab5760405163703e46dd60e11b815260040160405180910390fd5b336106f46102ad565b6001600160a01b0316146102ab573360405163118cdaa760e01b81526004016104129190610af7565b6000610727610779565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b6107c9610830565b61042481610855565b6102ab610830565b6107e38261085d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156108285761069d82826108b9565b610278610931565b610838610950565b6102ab57604051631afcd79f60e31b815260040160405180910390fd5b6103e8610830565b806001600160a01b03163b60000361088a5780604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516108d69190610b9c565b600060405180830381855af49150503d8060008114610911576040519150601f19603f3d011682016040523d82523d6000602084013e610916565b606091505b509150915061092685838361096a565b925050505b92915050565b34156102ab5760405163b398979f60e01b815260040160405180910390fd5b600061095a61079d565b54600160401b900460ff16919050565b60608261097f5761097a826109c0565b6109b9565b815115801561099657506001600160a01b0384163b155b156109b65783604051639996b31560e01b81526004016104129190610af7565b50805b9392505050565b8051156109d05780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114610a0057600080fd5b919050565b600060208284031215610a1757600080fd5b6109b9826109e9565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a4957600080fd5b610a52836109e9565b915060208301356001600160401b0380821115610a6e57600080fd5b818501915085601f830112610a8257600080fd5b813581811115610a9457610a94610a20565b604051601f8201601f19908116603f01168101908382118183101715610abc57610abc610a20565b81604052828152886020848701011115610ad557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6001600160a01b0391909116815260200190565b60005b83811015610b26578181015183820152602001610b0e565b50506000910152565b6020815260008251806020840152610b4e816040850160208701610b0b565b601f01601f19169190910160400192915050565b8082018082111561092b57634e487b7160e01b600052601160045260246000fd5b600060208284031215610b9557600080fd5b5051919050565b60008251610bae818460208701610b0b565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c6343000817000a", + "nonce": "0x1", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "ERC1967Proxy", + "contractAddress": "0xbcaf67958f7155afa9e86aea9148cc65477ae54c", + "function": null, + "arguments": null, + "transaction": { + "from": "0xc56fa6505d10bf322e01327e22479de78c3bf1ce", + "to": "0xbcaf67958f7155afa9e86aea9148cc65477ae54c", + "gas": "0xde4e", + "value": "0x0", + "input": "0x4f1ef2860000000000000000000000003032632514e96cc920fc5acbe5f500a4e0c780ab00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x2", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": { + "implementationAddress": { + "internal_type": "address", + "value": "0x3032632514E96cC920fc5AcBe5f500A4E0C780AB" + } + }, + "timestamp": 1723474456, + "chain": 11155111, + "commit": "eeb5487b" +} \ No newline at end of file diff --git a/contracts/broadcast/FeeContract.s.sol/11155111/run-1723495220.json b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723495220.json new file mode 100644 index 0000000000..6ed0d5e1f7 --- /dev/null +++ b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723495220.json @@ -0,0 +1,65 @@ +{ + "transactions": [ + { + "hash": "0x55ee9403d4c620900cb1afaa445101fa846869d2bef8b3844ecc052b3873028a", + "transactionType": "CREATE", + "contractName": "FeeContract", + "contractAddress": "0x21f2c493043ae193ff542fa3488d76c66b0ba95d", + "function": null, + "arguments": null, + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0xe9d1e", + "value": "0x0", + "input": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610be56100fd6000396000818161050d0152818161053601526106ad0152610be56000f3fe60806040526004361061009b5760003560e01c80630d8e6e2c146100d257806327e235e3146101045780634f1ef2861461013f57806352d1902d14610154578063645006ca14610169578063715018a61461017f5780638da5cb5b146101945780638ed83271146101b6578063ad3cb1cc146101cc578063c4d66de81461020a578063f2fde38b1461022a578063f340fa011461024a576100b9565b366100b95760405163bc8eca1b60e01b815260040160405180910390fd5b604051631535ac5f60e31b815260040160405180910390fd5b3480156100de57600080fd5b506040805160018152600060208201819052918101919091526060015b60405180910390f35b34801561011057600080fd5b5061013161011f366004610a05565b60026020526000908152604090205481565b6040519081526020016100fb565b61015261014d366004610a36565b61025d565b005b34801561016057600080fd5b5061013161027c565b34801561017557600080fd5b5061013160015481565b34801561018b57600080fd5b50610152610299565b3480156101a057600080fd5b506101a96102ad565b6040516100fb9190610af7565b3480156101c257600080fd5b5061013160005481565b3480156101d857600080fd5b506101fd604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100fb9190610b2f565b34801561021657600080fd5b50610152610225366004610a05565b6102c8565b34801561023657600080fd5b50610152610245366004610a05565b6103e0565b610152610258366004610a05565b610427565b610265610502565b61026e826105a7565b61027882826105e9565b5050565b60006102866106a2565b50600080516020610bb983398151915290565b6102a16106eb565b6102ab600061071d565b565b6000806102b8610779565b546001600160a01b031692915050565b60006102d261079d565b805490915060ff600160401b82041615906001600160401b03166000811580156102f95750825b90506000826001600160401b031660011480156103155750303b155b905081158015610323575080155b156103415760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561036a57845460ff60401b1916600160401b1785555b610373866107c1565b61037b6107d2565b670de0b6b3a764000060005566038d7ea4c6800060015583156103d857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6103e86106eb565b6001600160a01b03811661041b576000604051631e4fbdf760e01b81526004016104129190610af7565b60405180910390fd5b6104248161071d565b50565b60015434101561044a57604051636ba4a1c760e01b815260040160405180910390fd5b60005434111561046d5760405163c56d46d360e01b815260040160405180910390fd5b6001600160a01b03811661049457604051630702b3d960e41b815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812080543492906104bc908490610b62565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061058957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661057d600080516020610bb9833981519152546001600160a01b031690565b6001600160a01b031614155b156102ab5760405163703e46dd60e11b815260040160405180910390fd5b6105af6106eb565b7ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d816040516105de9190610af7565b60405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610643575060408051601f3d908101601f1916820190925261064091810190610b83565b60015b6106625781604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb9833981519152811461069357604051632a87526960e21b815260048101829052602401610412565b61069d83836107da565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102ab5760405163703e46dd60e11b815260040160405180910390fd5b336106f46102ad565b6001600160a01b0316146102ab573360405163118cdaa760e01b81526004016104129190610af7565b6000610727610779565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b6107c9610830565b61042481610855565b6102ab610830565b6107e38261085d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156108285761069d82826108b9565b610278610931565b610838610950565b6102ab57604051631afcd79f60e31b815260040160405180910390fd5b6103e8610830565b806001600160a01b03163b60000361088a5780604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516108d69190610b9c565b600060405180830381855af49150503d8060008114610911576040519150601f19603f3d011682016040523d82523d6000602084013e610916565b606091505b509150915061092685838361096a565b925050505b92915050565b34156102ab5760405163b398979f60e01b815260040160405180910390fd5b600061095a61079d565b54600160401b900460ff16919050565b60608261097f5761097a826109c0565b6109b9565b815115801561099657506001600160a01b0384163b155b156109b65783604051639996b31560e01b81526004016104129190610af7565b50805b9392505050565b8051156109d05780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114610a0057600080fd5b919050565b600060208284031215610a1757600080fd5b6109b9826109e9565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a4957600080fd5b610a52836109e9565b915060208301356001600160401b0380821115610a6e57600080fd5b818501915085601f830112610a8257600080fd5b813581811115610a9457610a94610a20565b604051601f8201601f19908116603f01168101908382118183101715610abc57610abc610a20565b81604052828152886020848701011115610ad557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6001600160a01b0391909116815260200190565b60005b83811015610b26578181015183820152602001610b0e565b50506000910152565b6020815260008251806020840152610b4e816040850160208701610b0b565b601f01601f19169190910160400192915050565b8082018082111561092b57634e487b7160e01b600052601160045260246000fd5b600060208284031215610b9557600080fd5b5051919050565b60008251610bae818460208701610b0b565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c6343000817000a", + "nonce": "0x3c", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x9b4997", + "logs": [ + { + "address": "0x21f2c493043ae193ff542fa3488d76c66b0ba95d", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x705abea68e1887dcd0e3f5c7740aedd2aff45b28d39ecf025ea33adbf32a8bc2", + "blockNumber": "0x62ffcf", + "transactionHash": "0x55ee9403d4c620900cb1afaa445101fa846869d2bef8b3844ecc052b3873028a", + "transactionIndex": "0x3a", + "logIndex": "0x80", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x55ee9403d4c620900cb1afaa445101fa846869d2bef8b3844ecc052b3873028a", + "transactionIndex": "0x3a", + "blockHash": "0x705abea68e1887dcd0e3f5c7740aedd2aff45b28d39ecf025ea33adbf32a8bc2", + "blockNumber": "0x62ffcf", + "gasUsed": "0xb3e99", + "effectiveGasPrice": "0x2516f9bc", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0x21f2c493043ae193ff542fa3488d76c66b0ba95d" + } + ], + "libraries": [], + "pending": [], + "returns": { + "implementationAddress": { + "internal_type": "address", + "value": "0x21f2c493043aE193ff542FA3488D76c66B0Ba95d" + } + }, + "timestamp": 1723495220, + "chain": 11155111, + "commit": "eeb5487b" +} \ No newline at end of file diff --git a/contracts/broadcast/FeeContract.s.sol/11155111/run-1723500934.json b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723500934.json new file mode 100644 index 0000000000..95d93a034c --- /dev/null +++ b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723500934.json @@ -0,0 +1,69 @@ +{ + "transactions": [ + { + "hash": "0xba7875beb533c9110e33a5494b93a79f89a5713ba96ead75d5e44fd0b8fd8af1", + "transactionType": "CREATE", + "contractName": "FeeContract", + "contractAddress": "0x07235cdc24988c47adbd92fa0910ac8c65e00898", + "function": null, + "arguments": null, + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0xe9d1e", + "value": "0x0", + "input": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610be56100fd6000396000818161050d0152818161053601526106ad0152610be56000f3fe60806040526004361061009b5760003560e01c80630d8e6e2c146100d257806327e235e3146101045780634f1ef2861461013f57806352d1902d14610154578063645006ca14610169578063715018a61461017f5780638da5cb5b146101945780638ed83271146101b6578063ad3cb1cc146101cc578063c4d66de81461020a578063f2fde38b1461022a578063f340fa011461024a576100b9565b366100b95760405163bc8eca1b60e01b815260040160405180910390fd5b604051631535ac5f60e31b815260040160405180910390fd5b3480156100de57600080fd5b506040805160018152600060208201819052918101919091526060015b60405180910390f35b34801561011057600080fd5b5061013161011f366004610a05565b60026020526000908152604090205481565b6040519081526020016100fb565b61015261014d366004610a36565b61025d565b005b34801561016057600080fd5b5061013161027c565b34801561017557600080fd5b5061013160015481565b34801561018b57600080fd5b50610152610299565b3480156101a057600080fd5b506101a96102ad565b6040516100fb9190610af7565b3480156101c257600080fd5b5061013160005481565b3480156101d857600080fd5b506101fd604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100fb9190610b2f565b34801561021657600080fd5b50610152610225366004610a05565b6102c8565b34801561023657600080fd5b50610152610245366004610a05565b6103e0565b610152610258366004610a05565b610427565b610265610502565b61026e826105a7565b61027882826105e9565b5050565b60006102866106a2565b50600080516020610bb983398151915290565b6102a16106eb565b6102ab600061071d565b565b6000806102b8610779565b546001600160a01b031692915050565b60006102d261079d565b805490915060ff600160401b82041615906001600160401b03166000811580156102f95750825b90506000826001600160401b031660011480156103155750303b155b905081158015610323575080155b156103415760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561036a57845460ff60401b1916600160401b1785555b610373866107c1565b61037b6107d2565b670de0b6b3a764000060005566038d7ea4c6800060015583156103d857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6103e86106eb565b6001600160a01b03811661041b576000604051631e4fbdf760e01b81526004016104129190610af7565b60405180910390fd5b6104248161071d565b50565b60015434101561044a57604051636ba4a1c760e01b815260040160405180910390fd5b60005434111561046d5760405163c56d46d360e01b815260040160405180910390fd5b6001600160a01b03811661049457604051630702b3d960e41b815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812080543492906104bc908490610b62565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061058957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661057d600080516020610bb9833981519152546001600160a01b031690565b6001600160a01b031614155b156102ab5760405163703e46dd60e11b815260040160405180910390fd5b6105af6106eb565b7ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d816040516105de9190610af7565b60405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610643575060408051601f3d908101601f1916820190925261064091810190610b83565b60015b6106625781604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb9833981519152811461069357604051632a87526960e21b815260048101829052602401610412565b61069d83836107da565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102ab5760405163703e46dd60e11b815260040160405180910390fd5b336106f46102ad565b6001600160a01b0316146102ab573360405163118cdaa760e01b81526004016104129190610af7565b6000610727610779565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b6107c9610830565b61042481610855565b6102ab610830565b6107e38261085d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156108285761069d82826108b9565b610278610931565b610838610950565b6102ab57604051631afcd79f60e31b815260040160405180910390fd5b6103e8610830565b806001600160a01b03163b60000361088a5780604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516108d69190610b9c565b600060405180830381855af49150503d8060008114610911576040519150601f19603f3d011682016040523d82523d6000602084013e610916565b606091505b509150915061092685838361096a565b925050505b92915050565b34156102ab5760405163b398979f60e01b815260040160405180910390fd5b600061095a61079d565b54600160401b900460ff16919050565b60608261097f5761097a826109c0565b6109b9565b815115801561099657506001600160a01b0384163b155b156109b65783604051639996b31560e01b81526004016104129190610af7565b50805b9392505050565b8051156109d05780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114610a0057600080fd5b919050565b600060208284031215610a1757600080fd5b6109b9826109e9565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a4957600080fd5b610a52836109e9565b915060208301356001600160401b0380821115610a6e57600080fd5b818501915085601f830112610a8257600080fd5b813581811115610a9457610a94610a20565b604051601f8201601f19908116603f01168101908382118183101715610abc57610abc610a20565b81604052828152886020848701011115610ad557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6001600160a01b0391909116815260200190565b60005b83811015610b26578181015183820152602001610b0e565b50506000910152565b6020815260008251806020840152610b4e816040850160208701610b0b565b601f01601f19169190910160400192915050565b8082018082111561092b57634e487b7160e01b600052601160045260246000fd5b600060208284031215610b9557600080fd5b5051919050565b60008251610bae818460208701610b0b565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c6343000817000a", + "nonce": "0x41", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x84c267", + "logs": [ + { + "address": "0x07235cdc24988c47adbd92fa0910ac8c65e00898", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0xce6753c3e9dfb56fa252890878a20ba1af804bfddac5e0595115c96a23cd6ed4", + "blockNumber": "0x630172", + "transactionHash": "0xba7875beb533c9110e33a5494b93a79f89a5713ba96ead75d5e44fd0b8fd8af1", + "transactionIndex": "0x3c", + "logIndex": "0x50", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000001000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xba7875beb533c9110e33a5494b93a79f89a5713ba96ead75d5e44fd0b8fd8af1", + "transactionIndex": "0x3c", + "blockHash": "0xce6753c3e9dfb56fa252890878a20ba1af804bfddac5e0595115c96a23cd6ed4", + "blockNumber": "0x630172", + "gasUsed": "0xb3e99", + "effectiveGasPrice": "0x1767491", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0x07235cdc24988c47adbd92fa0910ac8c65e00898" + } + ], + "libraries": [], + "pending": [], + "returns": { + "result": { + "internal_type": "bytes", + "value": "0x7570677261646550726f7879" + }, + "implementationAddress": { + "internal_type": "address", + "value": "0x07235Cdc24988C47adBD92Fa0910Ac8C65e00898" + } + }, + "timestamp": 1723500934, + "chain": 11155111, + "commit": "eeb5487b" +} \ No newline at end of file diff --git a/contracts/broadcast/FeeContract.s.sol/11155111/run-1723501185.json b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723501185.json new file mode 100644 index 0000000000..78e5b229ee --- /dev/null +++ b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723501185.json @@ -0,0 +1,69 @@ +{ + "transactions": [ + { + "hash": "0x696be2519bd48c2d9625007f327d6e90bfb39a867538c9378686793125ef1415", + "transactionType": "CREATE", + "contractName": "FeeContract", + "contractAddress": "0x1784dbfb6304a00141e015ca1b2b20d20853a958", + "function": null, + "arguments": null, + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0xe9d1e", + "value": "0x0", + "input": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610be56100fd6000396000818161050d0152818161053601526106ad0152610be56000f3fe60806040526004361061009b5760003560e01c80630d8e6e2c146100d257806327e235e3146101045780634f1ef2861461013f57806352d1902d14610154578063645006ca14610169578063715018a61461017f5780638da5cb5b146101945780638ed83271146101b6578063ad3cb1cc146101cc578063c4d66de81461020a578063f2fde38b1461022a578063f340fa011461024a576100b9565b366100b95760405163bc8eca1b60e01b815260040160405180910390fd5b604051631535ac5f60e31b815260040160405180910390fd5b3480156100de57600080fd5b506040805160018152600060208201819052918101919091526060015b60405180910390f35b34801561011057600080fd5b5061013161011f366004610a05565b60026020526000908152604090205481565b6040519081526020016100fb565b61015261014d366004610a36565b61025d565b005b34801561016057600080fd5b5061013161027c565b34801561017557600080fd5b5061013160015481565b34801561018b57600080fd5b50610152610299565b3480156101a057600080fd5b506101a96102ad565b6040516100fb9190610af7565b3480156101c257600080fd5b5061013160005481565b3480156101d857600080fd5b506101fd604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100fb9190610b2f565b34801561021657600080fd5b50610152610225366004610a05565b6102c8565b34801561023657600080fd5b50610152610245366004610a05565b6103e0565b610152610258366004610a05565b610427565b610265610502565b61026e826105a7565b61027882826105e9565b5050565b60006102866106a2565b50600080516020610bb983398151915290565b6102a16106eb565b6102ab600061071d565b565b6000806102b8610779565b546001600160a01b031692915050565b60006102d261079d565b805490915060ff600160401b82041615906001600160401b03166000811580156102f95750825b90506000826001600160401b031660011480156103155750303b155b905081158015610323575080155b156103415760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561036a57845460ff60401b1916600160401b1785555b610373866107c1565b61037b6107d2565b670de0b6b3a764000060005566038d7ea4c6800060015583156103d857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6103e86106eb565b6001600160a01b03811661041b576000604051631e4fbdf760e01b81526004016104129190610af7565b60405180910390fd5b6104248161071d565b50565b60015434101561044a57604051636ba4a1c760e01b815260040160405180910390fd5b60005434111561046d5760405163c56d46d360e01b815260040160405180910390fd5b6001600160a01b03811661049457604051630702b3d960e41b815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812080543492906104bc908490610b62565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061058957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661057d600080516020610bb9833981519152546001600160a01b031690565b6001600160a01b031614155b156102ab5760405163703e46dd60e11b815260040160405180910390fd5b6105af6106eb565b7ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d816040516105de9190610af7565b60405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610643575060408051601f3d908101601f1916820190925261064091810190610b83565b60015b6106625781604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb9833981519152811461069357604051632a87526960e21b815260048101829052602401610412565b61069d83836107da565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102ab5760405163703e46dd60e11b815260040160405180910390fd5b336106f46102ad565b6001600160a01b0316146102ab573360405163118cdaa760e01b81526004016104129190610af7565b6000610727610779565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b6107c9610830565b61042481610855565b6102ab610830565b6107e38261085d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156108285761069d82826108b9565b610278610931565b610838610950565b6102ab57604051631afcd79f60e31b815260040160405180910390fd5b6103e8610830565b806001600160a01b03163b60000361088a5780604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516108d69190610b9c565b600060405180830381855af49150503d8060008114610911576040519150601f19603f3d011682016040523d82523d6000602084013e610916565b606091505b509150915061092685838361096a565b925050505b92915050565b34156102ab5760405163b398979f60e01b815260040160405180910390fd5b600061095a61079d565b54600160401b900460ff16919050565b60608261097f5761097a826109c0565b6109b9565b815115801561099657506001600160a01b0384163b155b156109b65783604051639996b31560e01b81526004016104129190610af7565b50805b9392505050565b8051156109d05780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114610a0057600080fd5b919050565b600060208284031215610a1757600080fd5b6109b9826109e9565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a4957600080fd5b610a52836109e9565b915060208301356001600160401b0380821115610a6e57600080fd5b818501915085601f830112610a8257600080fd5b813581811115610a9457610a94610a20565b604051601f8201601f19908116603f01168101908382118183101715610abc57610abc610a20565b81604052828152886020848701011115610ad557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6001600160a01b0391909116815260200190565b60005b83811015610b26578181015183820152602001610b0e565b50506000910152565b6020815260008251806020840152610b4e816040850160208701610b0b565b601f01601f19169190910160400192915050565b8082018082111561092b57634e487b7160e01b600052601160045260246000fd5b600060208284031215610b9557600080fd5b5051919050565b60008251610bae818460208701610b0b565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c6343000817000a", + "nonce": "0x42", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x89e345", + "logs": [ + { + "address": "0x1784dbfb6304a00141e015ca1b2b20d20853a958", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x6d97a2eba5589c0fcfff9e36854e2c220c353a2a98fa3f04267a9a0624f25632", + "blockNumber": "0x630186", + "transactionHash": "0x696be2519bd48c2d9625007f327d6e90bfb39a867538c9378686793125ef1415", + "transactionIndex": "0x31", + "logIndex": "0x4e", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000200000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x696be2519bd48c2d9625007f327d6e90bfb39a867538c9378686793125ef1415", + "transactionIndex": "0x31", + "blockHash": "0x6d97a2eba5589c0fcfff9e36854e2c220c353a2a98fa3f04267a9a0624f25632", + "blockNumber": "0x630186", + "gasUsed": "0xb3e99", + "effectiveGasPrice": "0x1727d4f", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0x1784dbfb6304a00141e015ca1b2b20d20853a958" + } + ], + "libraries": [], + "pending": [], + "returns": { + "result": { + "internal_type": "bytes", + "value": "0x7570677261646550726f78790a3078313738346462666236333034613030313431653031356361316232623230643230383533613935380a7b0a202073616665416464726573733a2027307863353666413635303564313062463332326530313332376532323437394445373843334266316345272c0a2020736166655472616e73616374696f6e446174613a207b0a20202020746f3a2027307862436166363739353866373135356166613965383661454139313438434336353437374165353443272c0a2020202076616c75653a202730272c0a20202020646174613a202730783466316566323836303030303030303030303030303030303030303030303030313738346462666236333034613030313431653031356361316232623230643230383533613935383030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030343030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030272c0a202020206f7065726174696f6e3a20302c0a20202020626173654761733a202730272c0a2020202067617350726963653a202730272c0a20202020676173546f6b656e3a2027307830303030303030303030303030303030303030303030303030303030303030303030303030303030272c0a20202020726566756e6452656365697665723a2027307830303030303030303030303030303030303030303030303030303030303030303030303030303030272c0a202020206e6f6e63653a203130312c0a202020207361666554784761733a202730270a20207d2c0a2020736166655478486173683a2027307838303162363038343761646233353931613035336537343934326164363062646562623261663466303739376333613137653065303232306635363139616661272c0a202073656e646572416464726573733a2027307831313361666133353037373661303233343939413946423937654535653632436336333338323537272c0a202073656e6465725369676e61747572653a2027307832366666643763376262333464376266346639303764333236313061346564313033373262633632363734616533383432646439346131303136376231643865356163663530326666343731663235333633653566646663313134376332396439663266643737383238356466333731356134383262373933643130343461363230270a7d0a546865206f74686572206f776e657273206f66207468652053616665204d756c74697369672077616c6c6574206e65656420746f207369676e20746865207472616e73616374696f6e207669612074686520536166652055492068747470733a2f2f6170702e736166652e676c6f62616c2f7472616e73616374696f6e732f71756575653f736166653d7365703a307863353666413635303564313062463332326530313332376532323437394445373843334266316345" + }, + "implementationAddress": { + "internal_type": "address", + "value": "0x1784dBFB6304a00141e015Ca1B2b20D20853a958" + } + }, + "timestamp": 1723501185, + "chain": 11155111, + "commit": "eeb5487b" +} \ No newline at end of file diff --git a/contracts/broadcast/FeeContract.s.sol/11155111/run-1723519478.json b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723519478.json new file mode 100644 index 0000000000..8d3173c7ca --- /dev/null +++ b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723519478.json @@ -0,0 +1,69 @@ +{ + "transactions": [ + { + "hash": "0xf7fa94ad2494a9d9ca63761aa015943a76aaa9916bc3ba059ddfac5fd717fb69", + "transactionType": "CREATE", + "contractName": "FeeContract", + "contractAddress": "0x68d6921d29b63c6bc45383c75b2315adc1f14037", + "function": null, + "arguments": null, + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0xe9d1e", + "value": "0x0", + "input": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610be56100fd6000396000818161050d0152818161053601526106ad0152610be56000f3fe60806040526004361061009b5760003560e01c80630d8e6e2c146100d257806327e235e3146101045780634f1ef2861461013f57806352d1902d14610154578063645006ca14610169578063715018a61461017f5780638da5cb5b146101945780638ed83271146101b6578063ad3cb1cc146101cc578063c4d66de81461020a578063f2fde38b1461022a578063f340fa011461024a576100b9565b366100b95760405163bc8eca1b60e01b815260040160405180910390fd5b604051631535ac5f60e31b815260040160405180910390fd5b3480156100de57600080fd5b506040805160018152600060208201819052918101919091526060015b60405180910390f35b34801561011057600080fd5b5061013161011f366004610a05565b60026020526000908152604090205481565b6040519081526020016100fb565b61015261014d366004610a36565b61025d565b005b34801561016057600080fd5b5061013161027c565b34801561017557600080fd5b5061013160015481565b34801561018b57600080fd5b50610152610299565b3480156101a057600080fd5b506101a96102ad565b6040516100fb9190610af7565b3480156101c257600080fd5b5061013160005481565b3480156101d857600080fd5b506101fd604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100fb9190610b2f565b34801561021657600080fd5b50610152610225366004610a05565b6102c8565b34801561023657600080fd5b50610152610245366004610a05565b6103e0565b610152610258366004610a05565b610427565b610265610502565b61026e826105a7565b61027882826105e9565b5050565b60006102866106a2565b50600080516020610bb983398151915290565b6102a16106eb565b6102ab600061071d565b565b6000806102b8610779565b546001600160a01b031692915050565b60006102d261079d565b805490915060ff600160401b82041615906001600160401b03166000811580156102f95750825b90506000826001600160401b031660011480156103155750303b155b905081158015610323575080155b156103415760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561036a57845460ff60401b1916600160401b1785555b610373866107c1565b61037b6107d2565b670de0b6b3a764000060005566038d7ea4c6800060015583156103d857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6103e86106eb565b6001600160a01b03811661041b576000604051631e4fbdf760e01b81526004016104129190610af7565b60405180910390fd5b6104248161071d565b50565b60015434101561044a57604051636ba4a1c760e01b815260040160405180910390fd5b60005434111561046d5760405163c56d46d360e01b815260040160405180910390fd5b6001600160a01b03811661049457604051630702b3d960e41b815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812080543492906104bc908490610b62565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061058957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661057d600080516020610bb9833981519152546001600160a01b031690565b6001600160a01b031614155b156102ab5760405163703e46dd60e11b815260040160405180910390fd5b6105af6106eb565b7ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d816040516105de9190610af7565b60405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610643575060408051601f3d908101601f1916820190925261064091810190610b83565b60015b6106625781604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb9833981519152811461069357604051632a87526960e21b815260048101829052602401610412565b61069d83836107da565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102ab5760405163703e46dd60e11b815260040160405180910390fd5b336106f46102ad565b6001600160a01b0316146102ab573360405163118cdaa760e01b81526004016104129190610af7565b6000610727610779565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b6107c9610830565b61042481610855565b6102ab610830565b6107e38261085d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156108285761069d82826108b9565b610278610931565b610838610950565b6102ab57604051631afcd79f60e31b815260040160405180910390fd5b6103e8610830565b806001600160a01b03163b60000361088a5780604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516108d69190610b9c565b600060405180830381855af49150503d8060008114610911576040519150601f19603f3d011682016040523d82523d6000602084013e610916565b606091505b509150915061092685838361096a565b925050505b92915050565b34156102ab5760405163b398979f60e01b815260040160405180910390fd5b600061095a61079d565b54600160401b900460ff16919050565b60608261097f5761097a826109c0565b6109b9565b815115801561099657506001600160a01b0384163b155b156109b65783604051639996b31560e01b81526004016104129190610af7565b50805b9392505050565b8051156109d05780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114610a0057600080fd5b919050565b600060208284031215610a1757600080fd5b6109b9826109e9565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a4957600080fd5b610a52836109e9565b915060208301356001600160401b0380821115610a6e57600080fd5b818501915085601f830112610a8257600080fd5b813581811115610a9457610a94610a20565b604051601f8201601f19908116603f01168101908382118183101715610abc57610abc610a20565b81604052828152886020848701011115610ad557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6001600160a01b0391909116815260200190565b60005b83811015610b26578181015183820152602001610b0e565b50506000910152565b6020815260008251806020840152610b4e816040850160208701610b0b565b601f01601f19169190910160400192915050565b8082018082111561092b57634e487b7160e01b600052601160045260246000fd5b600060208284031215610b9557600080fd5b5051919050565b60008251610bae818460208701610b0b565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c6343000817000a", + "nonce": "0x44", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x198cfb5", + "logs": [ + { + "address": "0x68d6921d29b63c6bc45383c75b2315adc1f14037", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x4f76a2644192e5d9a356bc88d09b114ea9c585550ab2a57dd71afe37feff589c", + "blockNumber": "0x6306dc", + "transactionHash": "0xf7fa94ad2494a9d9ca63761aa015943a76aaa9916bc3ba059ddfac5fd717fb69", + "transactionIndex": "0x6b", + "logIndex": "0x1e9", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000900000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xf7fa94ad2494a9d9ca63761aa015943a76aaa9916bc3ba059ddfac5fd717fb69", + "transactionIndex": "0x6b", + "blockHash": "0x4f76a2644192e5d9a356bc88d09b114ea9c585550ab2a57dd71afe37feff589c", + "blockNumber": "0x6306dc", + "gasUsed": "0xb3e99", + "effectiveGasPrice": "0x4dae502d2", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0x68d6921d29b63c6bc45383c75b2315adc1f14037" + } + ], + "libraries": [], + "pending": [], + "returns": { + "implementationAddress": { + "internal_type": "address", + "value": "0x68D6921D29b63c6BC45383c75b2315AdC1f14037" + }, + "result": { + "internal_type": "bytes", + "value": "0x" + } + }, + "timestamp": 1723519478, + "chain": 11155111, + "commit": "eeb5487b" +} \ No newline at end of file diff --git a/contracts/broadcast/FeeContract.s.sol/11155111/run-1723543762.json b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723543762.json new file mode 100644 index 0000000000..5583ccfa58 --- /dev/null +++ b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723543762.json @@ -0,0 +1,69 @@ +{ + "transactions": [ + { + "hash": "0xef2cce273958304eceedff571f67e4d4a178c3ea5f04dfd7a163456ccf2b0cf3", + "transactionType": "CREATE", + "contractName": "FeeContract", + "contractAddress": "0x6e9dd75371bac7b86af9e3de5b6e8d460dbc9bb0", + "function": null, + "arguments": null, + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0xe9d1e", + "value": "0x0", + "input": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610be56100fd6000396000818161050d0152818161053601526106ad0152610be56000f3fe60806040526004361061009b5760003560e01c80630d8e6e2c146100d257806327e235e3146101045780634f1ef2861461013f57806352d1902d14610154578063645006ca14610169578063715018a61461017f5780638da5cb5b146101945780638ed83271146101b6578063ad3cb1cc146101cc578063c4d66de81461020a578063f2fde38b1461022a578063f340fa011461024a576100b9565b366100b95760405163bc8eca1b60e01b815260040160405180910390fd5b604051631535ac5f60e31b815260040160405180910390fd5b3480156100de57600080fd5b506040805160018152600060208201819052918101919091526060015b60405180910390f35b34801561011057600080fd5b5061013161011f366004610a05565b60026020526000908152604090205481565b6040519081526020016100fb565b61015261014d366004610a36565b61025d565b005b34801561016057600080fd5b5061013161027c565b34801561017557600080fd5b5061013160015481565b34801561018b57600080fd5b50610152610299565b3480156101a057600080fd5b506101a96102ad565b6040516100fb9190610af7565b3480156101c257600080fd5b5061013160005481565b3480156101d857600080fd5b506101fd604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100fb9190610b2f565b34801561021657600080fd5b50610152610225366004610a05565b6102c8565b34801561023657600080fd5b50610152610245366004610a05565b6103e0565b610152610258366004610a05565b610427565b610265610502565b61026e826105a7565b61027882826105e9565b5050565b60006102866106a2565b50600080516020610bb983398151915290565b6102a16106eb565b6102ab600061071d565b565b6000806102b8610779565b546001600160a01b031692915050565b60006102d261079d565b805490915060ff600160401b82041615906001600160401b03166000811580156102f95750825b90506000826001600160401b031660011480156103155750303b155b905081158015610323575080155b156103415760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561036a57845460ff60401b1916600160401b1785555b610373866107c1565b61037b6107d2565b670de0b6b3a764000060005566038d7ea4c6800060015583156103d857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6103e86106eb565b6001600160a01b03811661041b576000604051631e4fbdf760e01b81526004016104129190610af7565b60405180910390fd5b6104248161071d565b50565b60015434101561044a57604051636ba4a1c760e01b815260040160405180910390fd5b60005434111561046d5760405163c56d46d360e01b815260040160405180910390fd5b6001600160a01b03811661049457604051630702b3d960e41b815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812080543492906104bc908490610b62565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061058957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661057d600080516020610bb9833981519152546001600160a01b031690565b6001600160a01b031614155b156102ab5760405163703e46dd60e11b815260040160405180910390fd5b6105af6106eb565b7ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d816040516105de9190610af7565b60405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610643575060408051601f3d908101601f1916820190925261064091810190610b83565b60015b6106625781604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb9833981519152811461069357604051632a87526960e21b815260048101829052602401610412565b61069d83836107da565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102ab5760405163703e46dd60e11b815260040160405180910390fd5b336106f46102ad565b6001600160a01b0316146102ab573360405163118cdaa760e01b81526004016104129190610af7565b6000610727610779565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b6107c9610830565b61042481610855565b6102ab610830565b6107e38261085d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156108285761069d82826108b9565b610278610931565b610838610950565b6102ab57604051631afcd79f60e31b815260040160405180910390fd5b6103e8610830565b806001600160a01b03163b60000361088a5780604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516108d69190610b9c565b600060405180830381855af49150503d8060008114610911576040519150601f19603f3d011682016040523d82523d6000602084013e610916565b606091505b509150915061092685838361096a565b925050505b92915050565b34156102ab5760405163b398979f60e01b815260040160405180910390fd5b600061095a61079d565b54600160401b900460ff16919050565b60608261097f5761097a826109c0565b6109b9565b815115801561099657506001600160a01b0384163b155b156109b65783604051639996b31560e01b81526004016104129190610af7565b50805b9392505050565b8051156109d05780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114610a0057600080fd5b919050565b600060208284031215610a1757600080fd5b6109b9826109e9565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a4957600080fd5b610a52836109e9565b915060208301356001600160401b0380821115610a6e57600080fd5b818501915085601f830112610a8257600080fd5b813581811115610a9457610a94610a20565b604051601f8201601f19908116603f01168101908382118183101715610abc57610abc610a20565b81604052828152886020848701011115610ad557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6001600160a01b0391909116815260200190565b60005b83811015610b26578181015183820152602001610b0e565b50506000910152565b6020815260008251806020840152610b4e816040850160208701610b0b565b601f01601f19169190910160400192915050565b8082018082111561092b57634e487b7160e01b600052601160045260246000fd5b600060208284031215610b9557600080fd5b5051919050565b60008251610bae818460208701610b0b565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c6343000817000a", + "nonce": "0x45", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x629310", + "logs": [ + { + "address": "0x6e9dd75371bac7b86af9e3de5b6e8d460dbc9bb0", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x3b7e3c4ff26d5cbd92c6c7f29d63cc085d23d458b6544d3468e158c3d9487219", + "blockNumber": "0x630da7", + "transactionHash": "0xef2cce273958304eceedff571f67e4d4a178c3ea5f04dfd7a163456ccf2b0cf3", + "transactionIndex": "0x44", + "logIndex": "0x5d", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000001000000000000000100000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xef2cce273958304eceedff571f67e4d4a178c3ea5f04dfd7a163456ccf2b0cf3", + "transactionIndex": "0x44", + "blockHash": "0x3b7e3c4ff26d5cbd92c6c7f29d63cc085d23d458b6544d3468e158c3d9487219", + "blockNumber": "0x630da7", + "gasUsed": "0xb3e99", + "effectiveGasPrice": "0x7b7e016dd", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0x6e9dd75371bac7b86af9e3de5b6e8d460dbc9bb0" + } + ], + "libraries": [], + "pending": [], + "returns": { + "result": { + "internal_type": "bytes", + "value": "0x546865206f74686572206f776e657273206f66207468652053616665204d756c74697369672077616c6c6574206e65656420746f207369676e20746865207472616e73616374696f6e207669612074686520536166652055492068747470733a2f2f6170702e736166652e676c6f62616c2f7472616e73616374696f6e732f71756575653f736166653d7365703a307863353666413635303564313062463332326530313332376532323437394445373843334266316345" + }, + "implementationAddress": { + "internal_type": "address", + "value": "0x6E9dd75371bAc7b86AF9e3DE5B6e8d460DbC9BB0" + } + }, + "timestamp": 1723543762, + "chain": 11155111, + "commit": "eb3b5498" +} \ No newline at end of file diff --git a/contracts/broadcast/FeeContract.s.sol/11155111/run-1723585080.json b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723585080.json new file mode 100644 index 0000000000..f13e0e417d --- /dev/null +++ b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723585080.json @@ -0,0 +1,69 @@ +{ + "transactions": [ + { + "hash": "0xec3d64aef712bc5a9f60a13760494612d3e0e80c25863a19d7c51fc2e27d0cf7", + "transactionType": "CREATE", + "contractName": "FeeContract", + "contractAddress": "0xa2b4891df28df20d9b5567a5ff5a3c76562d72c2", + "function": null, + "arguments": null, + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0xe9d1e", + "value": "0x0", + "input": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610be56100fd6000396000818161050d0152818161053601526106ad0152610be56000f3fe60806040526004361061009b5760003560e01c80630d8e6e2c146100d257806327e235e3146101045780634f1ef2861461013f57806352d1902d14610154578063645006ca14610169578063715018a61461017f5780638da5cb5b146101945780638ed83271146101b6578063ad3cb1cc146101cc578063c4d66de81461020a578063f2fde38b1461022a578063f340fa011461024a576100b9565b366100b95760405163bc8eca1b60e01b815260040160405180910390fd5b604051631535ac5f60e31b815260040160405180910390fd5b3480156100de57600080fd5b506040805160018152600060208201819052918101919091526060015b60405180910390f35b34801561011057600080fd5b5061013161011f366004610a05565b60026020526000908152604090205481565b6040519081526020016100fb565b61015261014d366004610a36565b61025d565b005b34801561016057600080fd5b5061013161027c565b34801561017557600080fd5b5061013160015481565b34801561018b57600080fd5b50610152610299565b3480156101a057600080fd5b506101a96102ad565b6040516100fb9190610af7565b3480156101c257600080fd5b5061013160005481565b3480156101d857600080fd5b506101fd604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100fb9190610b2f565b34801561021657600080fd5b50610152610225366004610a05565b6102c8565b34801561023657600080fd5b50610152610245366004610a05565b6103e0565b610152610258366004610a05565b610427565b610265610502565b61026e826105a7565b61027882826105e9565b5050565b60006102866106a2565b50600080516020610bb983398151915290565b6102a16106eb565b6102ab600061071d565b565b6000806102b8610779565b546001600160a01b031692915050565b60006102d261079d565b805490915060ff600160401b82041615906001600160401b03166000811580156102f95750825b90506000826001600160401b031660011480156103155750303b155b905081158015610323575080155b156103415760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561036a57845460ff60401b1916600160401b1785555b610373866107c1565b61037b6107d2565b670de0b6b3a764000060005566038d7ea4c6800060015583156103d857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6103e86106eb565b6001600160a01b03811661041b576000604051631e4fbdf760e01b81526004016104129190610af7565b60405180910390fd5b6104248161071d565b50565b60015434101561044a57604051636ba4a1c760e01b815260040160405180910390fd5b60005434111561046d5760405163c56d46d360e01b815260040160405180910390fd5b6001600160a01b03811661049457604051630702b3d960e41b815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812080543492906104bc908490610b62565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061058957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661057d600080516020610bb9833981519152546001600160a01b031690565b6001600160a01b031614155b156102ab5760405163703e46dd60e11b815260040160405180910390fd5b6105af6106eb565b7ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d816040516105de9190610af7565b60405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610643575060408051601f3d908101601f1916820190925261064091810190610b83565b60015b6106625781604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb9833981519152811461069357604051632a87526960e21b815260048101829052602401610412565b61069d83836107da565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102ab5760405163703e46dd60e11b815260040160405180910390fd5b336106f46102ad565b6001600160a01b0316146102ab573360405163118cdaa760e01b81526004016104129190610af7565b6000610727610779565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b6107c9610830565b61042481610855565b6102ab610830565b6107e38261085d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156108285761069d82826108b9565b610278610931565b610838610950565b6102ab57604051631afcd79f60e31b815260040160405180910390fd5b6103e8610830565b806001600160a01b03163b60000361088a5780604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516108d69190610b9c565b600060405180830381855af49150503d8060008114610911576040519150601f19603f3d011682016040523d82523d6000602084013e610916565b606091505b509150915061092685838361096a565b925050505b92915050565b34156102ab5760405163b398979f60e01b815260040160405180910390fd5b600061095a61079d565b54600160401b900460ff16919050565b60608261097f5761097a826109c0565b6109b9565b815115801561099657506001600160a01b0384163b155b156109b65783604051639996b31560e01b81526004016104129190610af7565b50805b9392505050565b8051156109d05780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114610a0057600080fd5b919050565b600060208284031215610a1757600080fd5b6109b9826109e9565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a4957600080fd5b610a52836109e9565b915060208301356001600160401b0380821115610a6e57600080fd5b818501915085601f830112610a8257600080fd5b813581811115610a9457610a94610a20565b604051601f8201601f19908116603f01168101908382118183101715610abc57610abc610a20565b81604052828152886020848701011115610ad557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6001600160a01b0391909116815260200190565b60005b83811015610b26578181015183820152602001610b0e565b50506000910152565b6020815260008251806020840152610b4e816040850160208701610b0b565b601f01601f19169190910160400192915050565b8082018082111561092b57634e487b7160e01b600052601160045260246000fd5b600060208284031215610b9557600080fd5b5051919050565b60008251610bae818460208701610b0b565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c6343000817000a", + "nonce": "0x4d", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xbadaa2", + "logs": [ + { + "address": "0xa2b4891df28df20d9b5567a5ff5a3c76562d72c2", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x8eab9e01fea3c7a2def4d34ef38d8d008c44d08f382a068e317812c282b5365f", + "blockNumber": "0x63199a", + "transactionHash": "0xec3d64aef712bc5a9f60a13760494612d3e0e80c25863a19d7c51fc2e27d0cf7", + "transactionIndex": "0x55", + "logIndex": "0x9c", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xec3d64aef712bc5a9f60a13760494612d3e0e80c25863a19d7c51fc2e27d0cf7", + "transactionIndex": "0x55", + "blockHash": "0x8eab9e01fea3c7a2def4d34ef38d8d008c44d08f382a068e317812c282b5365f", + "blockNumber": "0x63199a", + "gasUsed": "0xb3e99", + "effectiveGasPrice": "0x2357413c", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0xa2b4891df28df20d9b5567a5ff5a3c76562d72c2" + } + ], + "libraries": [], + "pending": [], + "returns": { + "implementationAddress": { + "internal_type": "address", + "value": "0xa2B4891DF28Df20d9b5567a5fF5a3C76562D72c2" + }, + "result": { + "internal_type": "bytes", + "value": "0x546865206f74686572206f776e657273206f66207468652053616665204d756c74697369672077616c6c6574206e65656420746f207369676e20746865207472616e73616374696f6e207669612074686520536166652055492068747470733a2f2f6170702e736166652e676c6f62616c2f7472616e73616374696f6e732f71756575653f736166653d7365703a307863353666413635303564313062463332326530313332376532323437394445373843334266316345" + } + }, + "timestamp": 1723585080, + "chain": 11155111, + "commit": "286c14d9" +} \ No newline at end of file diff --git a/contracts/broadcast/FeeContract.s.sol/11155111/run-1723585342.json b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723585342.json new file mode 100644 index 0000000000..4967510b14 --- /dev/null +++ b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723585342.json @@ -0,0 +1,149 @@ +{ + "transactions": [ + { + "hash": "0x337dcefa4a416d408f345f9a2cb2d7268e3eed45facedf0ddebd5b881825efe8", + "transactionType": "CREATE", + "contractName": "FeeContract", + "contractAddress": "0xba0af6a1a22815e20422dabe6c9471e56ff7d78b", + "function": null, + "arguments": null, + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0xe9d1e", + "value": "0x0", + "input": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610be56100fd6000396000818161050d0152818161053601526106ad0152610be56000f3fe60806040526004361061009b5760003560e01c80630d8e6e2c146100d257806327e235e3146101045780634f1ef2861461013f57806352d1902d14610154578063645006ca14610169578063715018a61461017f5780638da5cb5b146101945780638ed83271146101b6578063ad3cb1cc146101cc578063c4d66de81461020a578063f2fde38b1461022a578063f340fa011461024a576100b9565b366100b95760405163bc8eca1b60e01b815260040160405180910390fd5b604051631535ac5f60e31b815260040160405180910390fd5b3480156100de57600080fd5b506040805160018152600060208201819052918101919091526060015b60405180910390f35b34801561011057600080fd5b5061013161011f366004610a05565b60026020526000908152604090205481565b6040519081526020016100fb565b61015261014d366004610a36565b61025d565b005b34801561016057600080fd5b5061013161027c565b34801561017557600080fd5b5061013160015481565b34801561018b57600080fd5b50610152610299565b3480156101a057600080fd5b506101a96102ad565b6040516100fb9190610af7565b3480156101c257600080fd5b5061013160005481565b3480156101d857600080fd5b506101fd604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100fb9190610b2f565b34801561021657600080fd5b50610152610225366004610a05565b6102c8565b34801561023657600080fd5b50610152610245366004610a05565b6103e0565b610152610258366004610a05565b610427565b610265610502565b61026e826105a7565b61027882826105e9565b5050565b60006102866106a2565b50600080516020610bb983398151915290565b6102a16106eb565b6102ab600061071d565b565b6000806102b8610779565b546001600160a01b031692915050565b60006102d261079d565b805490915060ff600160401b82041615906001600160401b03166000811580156102f95750825b90506000826001600160401b031660011480156103155750303b155b905081158015610323575080155b156103415760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561036a57845460ff60401b1916600160401b1785555b610373866107c1565b61037b6107d2565b670de0b6b3a764000060005566038d7ea4c6800060015583156103d857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6103e86106eb565b6001600160a01b03811661041b576000604051631e4fbdf760e01b81526004016104129190610af7565b60405180910390fd5b6104248161071d565b50565b60015434101561044a57604051636ba4a1c760e01b815260040160405180910390fd5b60005434111561046d5760405163c56d46d360e01b815260040160405180910390fd5b6001600160a01b03811661049457604051630702b3d960e41b815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812080543492906104bc908490610b62565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061058957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661057d600080516020610bb9833981519152546001600160a01b031690565b6001600160a01b031614155b156102ab5760405163703e46dd60e11b815260040160405180910390fd5b6105af6106eb565b7ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d816040516105de9190610af7565b60405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610643575060408051601f3d908101601f1916820190925261064091810190610b83565b60015b6106625781604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb9833981519152811461069357604051632a87526960e21b815260048101829052602401610412565b61069d83836107da565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102ab5760405163703e46dd60e11b815260040160405180910390fd5b336106f46102ad565b6001600160a01b0316146102ab573360405163118cdaa760e01b81526004016104129190610af7565b6000610727610779565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b6107c9610830565b61042481610855565b6102ab610830565b6107e38261085d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156108285761069d82826108b9565b610278610931565b610838610950565b6102ab57604051631afcd79f60e31b815260040160405180910390fd5b6103e8610830565b806001600160a01b03163b60000361088a5780604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516108d69190610b9c565b600060405180830381855af49150503d8060008114610911576040519150601f19603f3d011682016040523d82523d6000602084013e610916565b606091505b509150915061092685838361096a565b925050505b92915050565b34156102ab5760405163b398979f60e01b815260040160405180910390fd5b600061095a61079d565b54600160401b900460ff16919050565b60608261097f5761097a826109c0565b6109b9565b815115801561099657506001600160a01b0384163b155b156109b65783604051639996b31560e01b81526004016104129190610af7565b50805b9392505050565b8051156109d05780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114610a0057600080fd5b919050565b600060208284031215610a1757600080fd5b6109b9826109e9565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a4957600080fd5b610a52836109e9565b915060208301356001600160401b0380821115610a6e57600080fd5b818501915085601f830112610a8257600080fd5b813581811115610a9457610a94610a20565b604051601f8201601f19908116603f01168101908382118183101715610abc57610abc610a20565b81604052828152886020848701011115610ad557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6001600160a01b0391909116815260200190565b60005b83811015610b26578181015183820152602001610b0e565b50506000910152565b6020815260008251806020840152610b4e816040850160208701610b0b565b601f01601f19169190910160400192915050565b8082018082111561092b57634e487b7160e01b600052601160045260246000fd5b600060208284031215610b9557600080fd5b5051919050565b60008251610bae818460208701610b0b565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c6343000817000a", + "nonce": "0x4e", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x739e872e3e28ddd9d1b32e1f5793c40a54c1295ce21f882c0ec3f8ffbffcf505", + "transactionType": "CREATE", + "contractName": "ERC1967Proxy", + "contractAddress": "0x00aee426f8558929102df1eba983b5c439e37d18", + "function": null, + "arguments": [ + "0xbA0aF6A1a22815E20422DABe6C9471E56ff7D78b", + "0xc4d66de8000000000000000000000000c56fa6505d10bf322e01327e22479de78c3bf1ce" + ], + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0x44b15", + "value": "0x0", + "input": "0x60806040526040516103e73803806103e78339810160408190526100229161025a565b61002c8282610033565b5050610358565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610086576100818282610109565b505050565b61008e610180565b5050565b806001600160a01b03163b6000036100c85780604051634c9c8ce360e01b81526004016100bf9190610328565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051610126919061033c565b600060405180830381855af49150503d8060008114610161576040519150601f19603f3d011682016040523d82523d6000602084013e610166565b606091505b5090925090506101778583836101a1565b95945050505050565b341561019f5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101b6576101b1826101f7565b6101f0565b81511580156101cd57506001600160a01b0384163b155b156101ed5783604051639996b31560e01b81526004016100bf9190610328565b50805b9392505050565b8051156102075780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b83811015610251578181015183820152602001610239565b50506000910152565b6000806040838503121561026d57600080fd5b82516001600160a01b038116811461028457600080fd5b60208401519092506001600160401b03808211156102a157600080fd5b818501915085601f8301126102b557600080fd5b8151818111156102c7576102c7610220565b604051601f8201601f19908116603f011681019083821181831017156102ef576102ef610220565b8160405282815288602084870101111561030857600080fd5b610319836020830160208801610236565b80955050505050509250929050565b6001600160a01b0391909116815260200190565b6000825161034e818460208701610236565b9190910192915050565b6081806103666000396000f3fe6080604052600a600c565b005b60186014601a565b6051565b565b6000604c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015606f573d6000f35b3d6000fdfea164736f6c6343000817000a000000000000000000000000ba0af6a1a22815e20422dabe6c9471e56ff7d78b00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000024c4d66de8000000000000000000000000c56fa6505d10bf322e01327e22479de78c3bf1ce00000000000000000000000000000000000000000000000000000000", + "nonce": "0x4f", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xb60cc7", + "logs": [ + { + "address": "0xba0af6a1a22815e20422dabe6c9471e56ff7d78b", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0xffff2334bb5305b361947beb59f4e79b0331a96433a893e3326798d43b9b587e", + "blockNumber": "0x6319ae", + "transactionHash": "0x337dcefa4a416d408f345f9a2cb2d7268e3eed45facedf0ddebd5b881825efe8", + "transactionIndex": "0x5e", + "logIndex": "0x93", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000004000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x337dcefa4a416d408f345f9a2cb2d7268e3eed45facedf0ddebd5b881825efe8", + "transactionIndex": "0x5e", + "blockHash": "0xffff2334bb5305b361947beb59f4e79b0331a96433a893e3326798d43b9b587e", + "blockNumber": "0x6319ae", + "gasUsed": "0xb3e99", + "effectiveGasPrice": "0x211d365d", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0xba0af6a1a22815e20422dabe6c9471e56ff7d78b" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x115ad6f", + "logs": [ + { + "address": "0x00aee426f8558929102df1eba983b5c439e37d18", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000ba0af6a1a22815e20422dabe6c9471e56ff7d78b" + ], + "data": "0x", + "blockHash": "0x8f37940d4608a2dd58e59f5e0626bd2a000c88cd09a7ed5def72e9cfbf8dd637", + "blockNumber": "0x6319af", + "transactionHash": "0x739e872e3e28ddd9d1b32e1f5793c40a54c1295ce21f882c0ec3f8ffbffcf505", + "transactionIndex": "0x58", + "logIndex": "0x7b", + "removed": false + }, + { + "address": "0x00aee426f8558929102df1eba983b5c439e37d18", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000c56fa6505d10bf322e01327e22479de78c3bf1ce" + ], + "data": "0x", + "blockHash": "0x8f37940d4608a2dd58e59f5e0626bd2a000c88cd09a7ed5def72e9cfbf8dd637", + "blockNumber": "0x6319af", + "transactionHash": "0x739e872e3e28ddd9d1b32e1f5793c40a54c1295ce21f882c0ec3f8ffbffcf505", + "transactionIndex": "0x58", + "logIndex": "0x7c", + "removed": false + }, + { + "address": "0x00aee426f8558929102df1eba983b5c439e37d18", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x8f37940d4608a2dd58e59f5e0626bd2a000c88cd09a7ed5def72e9cfbf8dd637", + "blockNumber": "0x6319af", + "transactionHash": "0x739e872e3e28ddd9d1b32e1f5793c40a54c1295ce21f882c0ec3f8ffbffcf505", + "transactionIndex": "0x58", + "logIndex": "0x7d", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000020000400000000000000000800000000000000000000000200000000000000000000000000010000000000000000000000000000000000200000000000000000002000001000000000000000000000000000000000000020020000000000000000800000000000000000000040000000000500000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000004000000000000000020000000000004400000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x739e872e3e28ddd9d1b32e1f5793c40a54c1295ce21f882c0ec3f8ffbffcf505", + "transactionIndex": "0x58", + "blockHash": "0x8f37940d4608a2dd58e59f5e0626bd2a000c88cd09a7ed5def72e9cfbf8dd637", + "blockNumber": "0x6319af", + "gasUsed": "0x34dbd", + "effectiveGasPrice": "0x211d365d", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0x00aee426f8558929102df1eba983b5c439e37d18" + } + ], + "libraries": [], + "pending": [], + "returns": { + "proxy": { + "internal_type": "address payable", + "value": "0x00AeE426f8558929102df1eBA983B5C439E37D18" + }, + "implementationAddress": { + "internal_type": "address", + "value": "0xbA0aF6A1a22815E20422DABe6C9471E56ff7D78b" + } + }, + "timestamp": 1723585342, + "chain": 11155111, + "commit": "286c14d9" +} \ No newline at end of file diff --git a/contracts/broadcast/FeeContract.s.sol/11155111/run-1723585786.json b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723585786.json new file mode 100644 index 0000000000..23f127d0f7 --- /dev/null +++ b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723585786.json @@ -0,0 +1,69 @@ +{ + "transactions": [ + { + "hash": "0x2476c2759934e9ab28b64952ef76cc76ac7e2b4edd6bd2f74a2ef6a75621511b", + "transactionType": "CREATE", + "contractName": "FeeContract", + "contractAddress": "0xced78009e94d34ba2547b8d97ce334c25dc713d4", + "function": null, + "arguments": null, + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0xe9d1e", + "value": "0x0", + "input": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610be56100fd6000396000818161050d0152818161053601526106ad0152610be56000f3fe60806040526004361061009b5760003560e01c80630d8e6e2c146100d257806327e235e3146101045780634f1ef2861461013f57806352d1902d14610154578063645006ca14610169578063715018a61461017f5780638da5cb5b146101945780638ed83271146101b6578063ad3cb1cc146101cc578063c4d66de81461020a578063f2fde38b1461022a578063f340fa011461024a576100b9565b366100b95760405163bc8eca1b60e01b815260040160405180910390fd5b604051631535ac5f60e31b815260040160405180910390fd5b3480156100de57600080fd5b506040805160018152600060208201819052918101919091526060015b60405180910390f35b34801561011057600080fd5b5061013161011f366004610a05565b60026020526000908152604090205481565b6040519081526020016100fb565b61015261014d366004610a36565b61025d565b005b34801561016057600080fd5b5061013161027c565b34801561017557600080fd5b5061013160015481565b34801561018b57600080fd5b50610152610299565b3480156101a057600080fd5b506101a96102ad565b6040516100fb9190610af7565b3480156101c257600080fd5b5061013160005481565b3480156101d857600080fd5b506101fd604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100fb9190610b2f565b34801561021657600080fd5b50610152610225366004610a05565b6102c8565b34801561023657600080fd5b50610152610245366004610a05565b6103e0565b610152610258366004610a05565b610427565b610265610502565b61026e826105a7565b61027882826105e9565b5050565b60006102866106a2565b50600080516020610bb983398151915290565b6102a16106eb565b6102ab600061071d565b565b6000806102b8610779565b546001600160a01b031692915050565b60006102d261079d565b805490915060ff600160401b82041615906001600160401b03166000811580156102f95750825b90506000826001600160401b031660011480156103155750303b155b905081158015610323575080155b156103415760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561036a57845460ff60401b1916600160401b1785555b610373866107c1565b61037b6107d2565b670de0b6b3a764000060005566038d7ea4c6800060015583156103d857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6103e86106eb565b6001600160a01b03811661041b576000604051631e4fbdf760e01b81526004016104129190610af7565b60405180910390fd5b6104248161071d565b50565b60015434101561044a57604051636ba4a1c760e01b815260040160405180910390fd5b60005434111561046d5760405163c56d46d360e01b815260040160405180910390fd5b6001600160a01b03811661049457604051630702b3d960e41b815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812080543492906104bc908490610b62565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061058957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661057d600080516020610bb9833981519152546001600160a01b031690565b6001600160a01b031614155b156102ab5760405163703e46dd60e11b815260040160405180910390fd5b6105af6106eb565b7ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d816040516105de9190610af7565b60405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610643575060408051601f3d908101601f1916820190925261064091810190610b83565b60015b6106625781604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb9833981519152811461069357604051632a87526960e21b815260048101829052602401610412565b61069d83836107da565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102ab5760405163703e46dd60e11b815260040160405180910390fd5b336106f46102ad565b6001600160a01b0316146102ab573360405163118cdaa760e01b81526004016104129190610af7565b6000610727610779565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b6107c9610830565b61042481610855565b6102ab610830565b6107e38261085d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156108285761069d82826108b9565b610278610931565b610838610950565b6102ab57604051631afcd79f60e31b815260040160405180910390fd5b6103e8610830565b806001600160a01b03163b60000361088a5780604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516108d69190610b9c565b600060405180830381855af49150503d8060008114610911576040519150601f19603f3d011682016040523d82523d6000602084013e610916565b606091505b509150915061092685838361096a565b925050505b92915050565b34156102ab5760405163b398979f60e01b815260040160405180910390fd5b600061095a61079d565b54600160401b900460ff16919050565b60608261097f5761097a826109c0565b6109b9565b815115801561099657506001600160a01b0384163b155b156109b65783604051639996b31560e01b81526004016104129190610af7565b50805b9392505050565b8051156109d05780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114610a0057600080fd5b919050565b600060208284031215610a1757600080fd5b6109b9826109e9565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a4957600080fd5b610a52836109e9565b915060208301356001600160401b0380821115610a6e57600080fd5b818501915085601f830112610a8257600080fd5b813581811115610a9457610a94610a20565b604051601f8201601f19908116603f01168101908382118183101715610abc57610abc610a20565b81604052828152886020848701011115610ad557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6001600160a01b0391909116815260200190565b60005b83811015610b26578181015183820152602001610b0e565b50506000910152565b6020815260008251806020840152610b4e816040850160208701610b0b565b601f01601f19169190910160400192915050565b8082018082111561092b57634e487b7160e01b600052601160045260246000fd5b600060208284031215610b9557600080fd5b5051919050565b60008251610bae818460208701610b0b565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c6343000817000a", + "nonce": "0x50", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x59708c", + "logs": [ + { + "address": "0xced78009e94d34ba2547b8d97ce334c25dc713d4", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x4ef15c140a935d73e7c0fd65f141fd72e7141505a942bd7f2e12f38ec6056df2", + "blockNumber": "0x6319d1", + "transactionHash": "0x2476c2759934e9ab28b64952ef76cc76ac7e2b4edd6bd2f74a2ef6a75621511b", + "transactionIndex": "0x43", + "logIndex": "0x4b", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000080000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000008000000000000000000000000", + "type": "0x0", + "transactionHash": "0x2476c2759934e9ab28b64952ef76cc76ac7e2b4edd6bd2f74a2ef6a75621511b", + "transactionIndex": "0x43", + "blockHash": "0x4ef15c140a935d73e7c0fd65f141fd72e7141505a942bd7f2e12f38ec6056df2", + "blockNumber": "0x6319d1", + "gasUsed": "0xb3e99", + "effectiveGasPrice": "0x259854ce", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0xced78009e94d34ba2547b8d97ce334c25dc713d4" + } + ], + "libraries": [], + "pending": [], + "returns": { + "implementationAddress": { + "internal_type": "address", + "value": "0xcEd78009E94d34bA2547b8D97ce334c25Dc713d4" + }, + "result": { + "internal_type": "bytes", + "value": "0x546865206f74686572206f776e657273206f66207468652053616665204d756c74697369672077616c6c6574206e65656420746f207369676e20746865207472616e73616374696f6e207669612074686520536166652055492068747470733a2f2f6170702e736166652e676c6f62616c2f7472616e73616374696f6e732f71756575653f736166653d7365703a307863353666413635303564313062463332326530313332376532323437394445373843334266316345" + } + }, + "timestamp": 1723585786, + "chain": 11155111, + "commit": "286c14d9" +} \ No newline at end of file diff --git a/contracts/broadcast/FeeContract.s.sol/11155111/run-1723587309.json b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723587309.json new file mode 100644 index 0000000000..50e2cee489 --- /dev/null +++ b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723587309.json @@ -0,0 +1,69 @@ +{ + "transactions": [ + { + "hash": "0x285413a24879f405e4902a7d8c52c00fb6f7f07856e146555a9d98ade13145f5", + "transactionType": "CREATE", + "contractName": "FeeContract", + "contractAddress": "0x04742396f94148d1d877159ea8fa75229f8821ed", + "function": null, + "arguments": null, + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0xe9d1e", + "value": "0x0", + "input": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610be56100fd6000396000818161050d0152818161053601526106ad0152610be56000f3fe60806040526004361061009b5760003560e01c80630d8e6e2c146100d257806327e235e3146101045780634f1ef2861461013f57806352d1902d14610154578063645006ca14610169578063715018a61461017f5780638da5cb5b146101945780638ed83271146101b6578063ad3cb1cc146101cc578063c4d66de81461020a578063f2fde38b1461022a578063f340fa011461024a576100b9565b366100b95760405163bc8eca1b60e01b815260040160405180910390fd5b604051631535ac5f60e31b815260040160405180910390fd5b3480156100de57600080fd5b506040805160018152600060208201819052918101919091526060015b60405180910390f35b34801561011057600080fd5b5061013161011f366004610a05565b60026020526000908152604090205481565b6040519081526020016100fb565b61015261014d366004610a36565b61025d565b005b34801561016057600080fd5b5061013161027c565b34801561017557600080fd5b5061013160015481565b34801561018b57600080fd5b50610152610299565b3480156101a057600080fd5b506101a96102ad565b6040516100fb9190610af7565b3480156101c257600080fd5b5061013160005481565b3480156101d857600080fd5b506101fd604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100fb9190610b2f565b34801561021657600080fd5b50610152610225366004610a05565b6102c8565b34801561023657600080fd5b50610152610245366004610a05565b6103e0565b610152610258366004610a05565b610427565b610265610502565b61026e826105a7565b61027882826105e9565b5050565b60006102866106a2565b50600080516020610bb983398151915290565b6102a16106eb565b6102ab600061071d565b565b6000806102b8610779565b546001600160a01b031692915050565b60006102d261079d565b805490915060ff600160401b82041615906001600160401b03166000811580156102f95750825b90506000826001600160401b031660011480156103155750303b155b905081158015610323575080155b156103415760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561036a57845460ff60401b1916600160401b1785555b610373866107c1565b61037b6107d2565b670de0b6b3a764000060005566038d7ea4c6800060015583156103d857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6103e86106eb565b6001600160a01b03811661041b576000604051631e4fbdf760e01b81526004016104129190610af7565b60405180910390fd5b6104248161071d565b50565b60015434101561044a57604051636ba4a1c760e01b815260040160405180910390fd5b60005434111561046d5760405163c56d46d360e01b815260040160405180910390fd5b6001600160a01b03811661049457604051630702b3d960e41b815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812080543492906104bc908490610b62565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061058957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661057d600080516020610bb9833981519152546001600160a01b031690565b6001600160a01b031614155b156102ab5760405163703e46dd60e11b815260040160405180910390fd5b6105af6106eb565b7ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d816040516105de9190610af7565b60405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610643575060408051601f3d908101601f1916820190925261064091810190610b83565b60015b6106625781604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb9833981519152811461069357604051632a87526960e21b815260048101829052602401610412565b61069d83836107da565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102ab5760405163703e46dd60e11b815260040160405180910390fd5b336106f46102ad565b6001600160a01b0316146102ab573360405163118cdaa760e01b81526004016104129190610af7565b6000610727610779565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b6107c9610830565b61042481610855565b6102ab610830565b6107e38261085d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156108285761069d82826108b9565b610278610931565b610838610950565b6102ab57604051631afcd79f60e31b815260040160405180910390fd5b6103e8610830565b806001600160a01b03163b60000361088a5780604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516108d69190610b9c565b600060405180830381855af49150503d8060008114610911576040519150601f19603f3d011682016040523d82523d6000602084013e610916565b606091505b509150915061092685838361096a565b925050505b92915050565b34156102ab5760405163b398979f60e01b815260040160405180910390fd5b600061095a61079d565b54600160401b900460ff16919050565b60608261097f5761097a826109c0565b6109b9565b815115801561099657506001600160a01b0384163b155b156109b65783604051639996b31560e01b81526004016104129190610af7565b50805b9392505050565b8051156109d05780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114610a0057600080fd5b919050565b600060208284031215610a1757600080fd5b6109b9826109e9565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a4957600080fd5b610a52836109e9565b915060208301356001600160401b0380821115610a6e57600080fd5b818501915085601f830112610a8257600080fd5b813581811115610a9457610a94610a20565b604051601f8201601f19908116603f01168101908382118183101715610abc57610abc610a20565b81604052828152886020848701011115610ad557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6001600160a01b0391909116815260200190565b60005b83811015610b26578181015183820152602001610b0e565b50506000910152565b6020815260008251806020840152610b4e816040850160208701610b0b565b601f01601f19169190910160400192915050565b8082018082111561092b57634e487b7160e01b600052601160045260246000fd5b600060208284031215610b9557600080fd5b5051919050565b60008251610bae818460208701610b0b565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c6343000817000a", + "nonce": "0x51", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xf8b9f7", + "logs": [ + { + "address": "0x04742396f94148d1d877159ea8fa75229f8821ed", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x942a683b63dc0bd4b24a99993df65a8472e6406b35bd926ecb584f021d490999", + "blockNumber": "0x631a3e", + "transactionHash": "0x285413a24879f405e4902a7d8c52c00fb6f7f07856e146555a9d98ade13145f5", + "transactionIndex": "0x56", + "logIndex": "0xa5", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000004000000000000000000000000000000000000004000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x285413a24879f405e4902a7d8c52c00fb6f7f07856e146555a9d98ade13145f5", + "transactionIndex": "0x56", + "blockHash": "0x942a683b63dc0bd4b24a99993df65a8472e6406b35bd926ecb584f021d490999", + "blockNumber": "0x631a3e", + "gasUsed": "0xb3e99", + "effectiveGasPrice": "0x24a60953", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0x04742396f94148d1d877159ea8fa75229f8821ed" + } + ], + "libraries": [], + "pending": [], + "returns": { + "result": { + "internal_type": "bytes", + "value": "0x546865206f74686572206f776e657273206f66207468652053616665204d756c74697369672077616c6c6574206e65656420746f207369676e20746865207472616e73616374696f6e207669612074686520536166652055492068747470733a2f2f6170702e736166652e676c6f62616c2f7472616e73616374696f6e732f71756575653f736166653d7365703a307863353666413635303564313062463332326530313332376532323437394445373843334266316345" + }, + "implementationAddress": { + "internal_type": "address", + "value": "0x04742396f94148d1D877159EA8fa75229F8821ed" + } + }, + "timestamp": 1723587309, + "chain": 11155111, + "commit": "286c14d9" +} \ No newline at end of file diff --git a/contracts/broadcast/FeeContract.s.sol/11155111/run-1723587658.json b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723587658.json new file mode 100644 index 0000000000..de8ab21ae6 --- /dev/null +++ b/contracts/broadcast/FeeContract.s.sol/11155111/run-1723587658.json @@ -0,0 +1,69 @@ +{ + "transactions": [ + { + "hash": "0xf91bb683022a2d516664ef5c99a6b3b88a47319e95c593fc1bdd18bb18ff9129", + "transactionType": "CREATE", + "contractName": "FeeContract", + "contractAddress": "0x61edb7f593d3f118726c9da019563e91c6857c22", + "function": null, + "arguments": null, + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0xe9d1e", + "value": "0x0", + "input": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610be56100fd6000396000818161050d0152818161053601526106ad0152610be56000f3fe60806040526004361061009b5760003560e01c80630d8e6e2c146100d257806327e235e3146101045780634f1ef2861461013f57806352d1902d14610154578063645006ca14610169578063715018a61461017f5780638da5cb5b146101945780638ed83271146101b6578063ad3cb1cc146101cc578063c4d66de81461020a578063f2fde38b1461022a578063f340fa011461024a576100b9565b366100b95760405163bc8eca1b60e01b815260040160405180910390fd5b604051631535ac5f60e31b815260040160405180910390fd5b3480156100de57600080fd5b506040805160018152600060208201819052918101919091526060015b60405180910390f35b34801561011057600080fd5b5061013161011f366004610a05565b60026020526000908152604090205481565b6040519081526020016100fb565b61015261014d366004610a36565b61025d565b005b34801561016057600080fd5b5061013161027c565b34801561017557600080fd5b5061013160015481565b34801561018b57600080fd5b50610152610299565b3480156101a057600080fd5b506101a96102ad565b6040516100fb9190610af7565b3480156101c257600080fd5b5061013160005481565b3480156101d857600080fd5b506101fd604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100fb9190610b2f565b34801561021657600080fd5b50610152610225366004610a05565b6102c8565b34801561023657600080fd5b50610152610245366004610a05565b6103e0565b610152610258366004610a05565b610427565b610265610502565b61026e826105a7565b61027882826105e9565b5050565b60006102866106a2565b50600080516020610bb983398151915290565b6102a16106eb565b6102ab600061071d565b565b6000806102b8610779565b546001600160a01b031692915050565b60006102d261079d565b805490915060ff600160401b82041615906001600160401b03166000811580156102f95750825b90506000826001600160401b031660011480156103155750303b155b905081158015610323575080155b156103415760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561036a57845460ff60401b1916600160401b1785555b610373866107c1565b61037b6107d2565b670de0b6b3a764000060005566038d7ea4c6800060015583156103d857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6103e86106eb565b6001600160a01b03811661041b576000604051631e4fbdf760e01b81526004016104129190610af7565b60405180910390fd5b6104248161071d565b50565b60015434101561044a57604051636ba4a1c760e01b815260040160405180910390fd5b60005434111561046d5760405163c56d46d360e01b815260040160405180910390fd5b6001600160a01b03811661049457604051630702b3d960e41b815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812080543492906104bc908490610b62565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061058957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661057d600080516020610bb9833981519152546001600160a01b031690565b6001600160a01b031614155b156102ab5760405163703e46dd60e11b815260040160405180910390fd5b6105af6106eb565b7ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d816040516105de9190610af7565b60405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610643575060408051601f3d908101601f1916820190925261064091810190610b83565b60015b6106625781604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb9833981519152811461069357604051632a87526960e21b815260048101829052602401610412565b61069d83836107da565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102ab5760405163703e46dd60e11b815260040160405180910390fd5b336106f46102ad565b6001600160a01b0316146102ab573360405163118cdaa760e01b81526004016104129190610af7565b6000610727610779565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b6107c9610830565b61042481610855565b6102ab610830565b6107e38261085d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156108285761069d82826108b9565b610278610931565b610838610950565b6102ab57604051631afcd79f60e31b815260040160405180910390fd5b6103e8610830565b806001600160a01b03163b60000361088a5780604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516108d69190610b9c565b600060405180830381855af49150503d8060008114610911576040519150601f19603f3d011682016040523d82523d6000602084013e610916565b606091505b509150915061092685838361096a565b925050505b92915050565b34156102ab5760405163b398979f60e01b815260040160405180910390fd5b600061095a61079d565b54600160401b900460ff16919050565b60608261097f5761097a826109c0565b6109b9565b815115801561099657506001600160a01b0384163b155b156109b65783604051639996b31560e01b81526004016104129190610af7565b50805b9392505050565b8051156109d05780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114610a0057600080fd5b919050565b600060208284031215610a1757600080fd5b6109b9826109e9565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a4957600080fd5b610a52836109e9565b915060208301356001600160401b0380821115610a6e57600080fd5b818501915085601f830112610a8257600080fd5b813581811115610a9457610a94610a20565b604051601f8201601f19908116603f01168101908382118183101715610abc57610abc610a20565b81604052828152886020848701011115610ad557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6001600160a01b0391909116815260200190565b60005b83811015610b26578181015183820152602001610b0e565b50506000910152565b6020815260008251806020840152610b4e816040850160208701610b0b565b601f01601f19169190910160400192915050565b8082018082111561092b57634e487b7160e01b600052601160045260246000fd5b600060208284031215610b9557600080fd5b5051919050565b60008251610bae818460208701610b0b565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c6343000817000a", + "nonce": "0x52", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xf0ec49", + "logs": [ + { + "address": "0x61edb7f593d3f118726c9da019563e91c6857c22", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x445b44c03a93214b3fe8bf8204d9b40f0994a246b97c28ce93b75464942e93d4", + "blockNumber": "0x631a56", + "transactionHash": "0xf91bb683022a2d516664ef5c99a6b3b88a47319e95c593fc1bdd18bb18ff9129", + "transactionIndex": "0x5b", + "logIndex": "0xc8", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000800000000000", + "type": "0x0", + "transactionHash": "0xf91bb683022a2d516664ef5c99a6b3b88a47319e95c593fc1bdd18bb18ff9129", + "transactionIndex": "0x5b", + "blockHash": "0x445b44c03a93214b3fe8bf8204d9b40f0994a246b97c28ce93b75464942e93d4", + "blockNumber": "0x631a56", + "gasUsed": "0xb3e99", + "effectiveGasPrice": "0x24ebd89a", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0x61edb7f593d3f118726c9da019563e91c6857c22" + } + ], + "libraries": [], + "pending": [], + "returns": { + "implementationAddress": { + "internal_type": "address", + "value": "0x61eDB7f593d3F118726C9Da019563E91c6857C22" + }, + "result": { + "internal_type": "bytes", + "value": "0x546865206f74686572206f776e657273206f66207468652053616665204d756c74697369672077616c6c6574206e65656420746f207369676e20746865207472616e73616374696f6e207669612074686520536166652055492068747470733a2f2f6170702e736166652e676c6f62616c2f7472616e73616374696f6e732f71756575653f736166653d7365703a307863353666413635303564313062463332326530313332376532323437394445373843334266316345" + } + }, + "timestamp": 1723587658, + "chain": 11155111, + "commit": "286c14d9" +} \ No newline at end of file diff --git a/contracts/broadcast/FeeContract.s.sol/11155111/run-latest.json b/contracts/broadcast/FeeContract.s.sol/11155111/run-latest.json new file mode 100644 index 0000000000..8001cc1683 --- /dev/null +++ b/contracts/broadcast/FeeContract.s.sol/11155111/run-latest.json @@ -0,0 +1,149 @@ +{ + "transactions": [ + { + "hash": "0x76cd33870ecc34c1de1d35612695642d56ff63a315a002bacbdab06757f7630d", + "transactionType": "CREATE", + "contractName": "FeeContract", + "contractAddress": "0x7cfcae3606670d3da43878c7d118634627c7d0d5", + "function": null, + "arguments": null, + "transaction": { + "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "gas": "0xedcf3", + "value": "0x0", + "input": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610c1f6100fd6000396000818161053a0152818161056301526106e80152610c1f6000f3fe6080604052600436106100ab5760003560e01c80638da5cb5b116100645780638da5cb5b146101a45780638ed83271146101eb578063ad3cb1cc14610201578063c4d66de81461023f578063f2fde38b1461025f578063f340fa011461027f576100c9565b80630d8e6e2c146100e257806327e235e3146101145780634f1ef2861461014f57806352d1902d14610164578063645006ca14610179578063715018a61461018f576100c9565b366100c95760405163bc8eca1b60e01b815260040160405180910390fd5b604051631535ac5f60e31b815260040160405180910390fd5b3480156100ee57600080fd5b506040805160018152600060208201819052918101919091526060015b60405180910390f35b34801561012057600080fd5b5061014161012f366004610a52565b60026020526000908152604090205481565b60405190815260200161010b565b61016261015d366004610a83565b610292565b005b34801561017057600080fd5b506101416102b1565b34801561018557600080fd5b5061014160015481565b34801561019b57600080fd5b506101626102ce565b3480156101b057600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116815260200161010b565b3480156101f757600080fd5b5061014160005481565b34801561020d57600080fd5b50610232604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161010b9190610b69565b34801561024b57600080fd5b5061016261025a366004610a52565b6102e2565b34801561026b57600080fd5b5061016261027a366004610a52565b610411565b61016261028d366004610a52565b610454565b61029a61052f565b6102a3826105d4565b6102ad828261061b565b5050565b60006102bb6106dd565b50600080516020610bf383398151915290565b6102d6610726565b6102e06000610781565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156103285750825b905060008267ffffffffffffffff1660011480156103455750303b155b905081158015610353575080155b156103715760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561039b57845460ff60401b1916600160401b1785555b6103a4866107f2565b6103ac610803565b670de0b6b3a764000060005566038d7ea4c68000600155831561040957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b610419610726565b6001600160a01b03811661044857604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61045181610781565b50565b60015434101561047757604051636ba4a1c760e01b815260040160405180910390fd5b60005434111561049a5760405163c56d46d360e01b815260040160405180910390fd5b6001600160a01b0381166104c157604051630702b3d960e41b815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812080543492906104e9908490610b9c565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806105b657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166105aa600080516020610bf3833981519152546001600160a01b031690565b6001600160a01b031614155b156102e05760405163703e46dd60e11b815260040160405180910390fd5b6105dc610726565b6040516001600160a01b03821681527ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d9060200160405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610675575060408051601f3d908101601f1916820190925261067291810190610bbd565b60015b61069d57604051634c9c8ce360e01b81526001600160a01b038316600482015260240161043f565b600080516020610bf383398151915281146106ce57604051632a87526960e21b81526004810182905260240161043f565b6106d8838361080b565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102e05760405163703e46dd60e11b815260040160405180910390fd5b336107587f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146102e05760405163118cdaa760e01b815233600482015260240161043f565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6107fa610861565b610451816108aa565b6102e0610861565b610814826108b2565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610859576106d88282610917565b6102ad61098f565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166102e057604051631afcd79f60e31b815260040160405180910390fd5b610419610861565b806001600160a01b03163b6000036108e857604051634c9c8ce360e01b81526001600160a01b038216600482015260240161043f565b600080516020610bf383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516109349190610bd6565b600060405180830381855af49150503d806000811461096f576040519150601f19603f3d011682016040523d82523d6000602084013e610974565b606091505b50915091506109848583836109ae565b925050505b92915050565b34156102e05760405163b398979f60e01b815260040160405180910390fd5b6060826109c3576109be82610a0d565b610a06565b81511580156109da57506001600160a01b0384163b155b15610a0357604051639996b31560e01b81526001600160a01b038516600482015260240161043f565b50805b9392505050565b805115610a1d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114610a4d57600080fd5b919050565b600060208284031215610a6457600080fd5b610a0682610a36565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a9657600080fd5b610a9f83610a36565b9150602083013567ffffffffffffffff80821115610abc57600080fd5b818501915085601f830112610ad057600080fd5b813581811115610ae257610ae2610a6d565b604051601f8201601f19908116603f01168101908382118183101715610b0a57610b0a610a6d565b81604052828152886020848701011115610b2357600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015610b60578181015183820152602001610b48565b50506000910152565b6020815260008251806020840152610b88816040850160208701610b45565b601f01601f19169190910160400192915050565b8082018082111561098957634e487b7160e01b600052601160045260246000fd5b600060208284031215610bcf57600080fd5b5051919050565b60008251610be8818460208701610b45565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c6343000817000a", + "nonce": "0x2bc0", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xfc062225b21f294e81d399b6f76820636c26928cb7a746780869ba9116f1d9d0", + "transactionType": "CREATE", + "contractName": "ERC1967Proxy", + "contractAddress": "0xe9609612698db1d403f5bc880e726a2f7e4628f8", + "function": null, + "arguments": [ + "0x7CFcAe3606670D3da43878C7D118634627C7d0d5", + "0xc4d66de8000000000000000000000000c56fa6505d10bf322e01327e22479de78c3bf1ce" + ], + "transaction": { + "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "gas": "0x44899", + "value": "0x0", + "input": "0x60806040526040516103e13803806103e183398101604081905261002291610268565b61002c8282610033565b5050610352565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561008657610081828261010e565b505050565b61008e610185565b5050565b806001600160a01b03163b6000036100cd57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161012b9190610336565b600060405180830381855af49150503d8060008114610166576040519150601f19603f3d011682016040523d82523d6000602084013e61016b565b606091505b50909250905061017c8583836101a6565b95945050505050565b34156101a45760405163b398979f60e01b815260040160405180910390fd5b565b6060826101bb576101b682610205565b6101fe565b81511580156101d257506001600160a01b0384163b155b156101fb57604051639996b31560e01b81526001600160a01b03851660048201526024016100c4565b50805b9392505050565b8051156102155780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b8381101561025f578181015183820152602001610247565b50506000910152565b6000806040838503121561027b57600080fd5b82516001600160a01b038116811461029257600080fd5b60208401519092506001600160401b03808211156102af57600080fd5b818501915085601f8301126102c357600080fd5b8151818111156102d5576102d561022e565b604051601f8201601f19908116603f011681019083821181831017156102fd576102fd61022e565b8160405282815288602084870101111561031657600080fd5b610327836020830160208801610244565b80955050505050509250929050565b60008251610348818460208701610244565b9190910192915050565b6081806103606000396000f3fe6080604052600a600c565b005b60186014601a565b6051565b565b6000604c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015606f573d6000f35b3d6000fdfea164736f6c6343000817000a0000000000000000000000007cfcae3606670d3da43878c7d118634627c7d0d500000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000024c4d66de8000000000000000000000000c56fa6505d10bf322e01327e22479de78c3bf1ce00000000000000000000000000000000000000000000000000000000", + "nonce": "0x2bc1", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x66384b", + "logs": [ + { + "address": "0x7cfcae3606670d3da43878c7d118634627c7d0d5", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x4971afa0b6fa9b40f6236ff5ab2f9d7cbe969c265af6162ea14094f00fd4a3ed", + "blockNumber": "0x65ac1a", + "transactionHash": "0x76cd33870ecc34c1de1d35612695642d56ff63a315a002bacbdab06757f7630d", + "transactionIndex": "0x35", + "logIndex": "0x48", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000001000000000000000000000000080000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x76cd33870ecc34c1de1d35612695642d56ff63a315a002bacbdab06757f7630d", + "transactionIndex": "0x35", + "blockHash": "0x4971afa0b6fa9b40f6236ff5ab2f9d7cbe969c265af6162ea14094f00fd4a3ed", + "blockNumber": "0x65ac1a", + "gasUsed": "0xb6fb5", + "effectiveGasPrice": "0x741e75b", + "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "to": null, + "contractAddress": "0x7cfcae3606670d3da43878c7d118634627c7d0d5" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x69841f", + "logs": [ + { + "address": "0xe9609612698db1d403f5bc880e726a2f7e4628f8", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000007cfcae3606670d3da43878c7d118634627c7d0d5" + ], + "data": "0x", + "blockHash": "0x4971afa0b6fa9b40f6236ff5ab2f9d7cbe969c265af6162ea14094f00fd4a3ed", + "blockNumber": "0x65ac1a", + "transactionHash": "0xfc062225b21f294e81d399b6f76820636c26928cb7a746780869ba9116f1d9d0", + "transactionIndex": "0x36", + "logIndex": "0x49", + "removed": false + }, + { + "address": "0xe9609612698db1d403f5bc880e726a2f7e4628f8", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000c56fa6505d10bf322e01327e22479de78c3bf1ce" + ], + "data": "0x", + "blockHash": "0x4971afa0b6fa9b40f6236ff5ab2f9d7cbe969c265af6162ea14094f00fd4a3ed", + "blockNumber": "0x65ac1a", + "transactionHash": "0xfc062225b21f294e81d399b6f76820636c26928cb7a746780869ba9116f1d9d0", + "transactionIndex": "0x36", + "logIndex": "0x4a", + "removed": false + }, + { + "address": "0xe9609612698db1d403f5bc880e726a2f7e4628f8", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x4971afa0b6fa9b40f6236ff5ab2f9d7cbe969c265af6162ea14094f00fd4a3ed", + "blockNumber": "0x65ac1a", + "transactionHash": "0xfc062225b21f294e81d399b6f76820636c26928cb7a746780869ba9116f1d9d0", + "transactionIndex": "0x36", + "logIndex": "0x4b", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000040000000000400000000000000000800000000000100000000000000000000000000000000000000010000000000000000000000000000000000000000000040000000002000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000800000040000000000000000000000000008020000000000000000000000000000000000004000000000000000020000000000004400000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xfc062225b21f294e81d399b6f76820636c26928cb7a746780869ba9116f1d9d0", + "transactionIndex": "0x36", + "blockHash": "0x4971afa0b6fa9b40f6236ff5ab2f9d7cbe969c265af6162ea14094f00fd4a3ed", + "blockNumber": "0x65ac1a", + "gasUsed": "0x34bd4", + "effectiveGasPrice": "0x741e75b", + "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "to": null, + "contractAddress": "0xe9609612698db1d403f5bc880e726a2f7e4628f8" + } + ], + "libraries": [], + "pending": [], + "returns": { + "proxy": { + "internal_type": "address payable", + "value": "0xe9609612698db1D403F5bc880E726A2F7e4628f8" + }, + "implementationAddress": { + "internal_type": "address", + "value": "0x7CFcAe3606670D3da43878C7D118634627C7d0d5" + } + }, + "timestamp": 1725918659, + "chain": 11155111, + "commit": "3085a658" +} \ No newline at end of file diff --git a/contracts/broadcast/FeeContractWithDefender.s.sol/11155111/run-1723151902.json b/contracts/broadcast/FeeContractWithDefender.s.sol/11155111/run-1723151902.json new file mode 100644 index 0000000000..4f3073bf0f --- /dev/null +++ b/contracts/broadcast/FeeContractWithDefender.s.sol/11155111/run-1723151902.json @@ -0,0 +1,149 @@ +{ + "transactions": [ + { + "hash": "0x8787e4526117f0fce28055b6ab6d3a2cda2546cd2889623b828198f6cc66791e", + "transactionType": "CREATE", + "contractName": "FeeContract", + "contractAddress": "0x18ee8783be201d81d32c149cf3b1e7ed436cb73f", + "function": null, + "arguments": null, + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0xe9d1e", + "value": "0x0", + "input": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610be56100fd6000396000818161050d0152818161053601526106ad0152610be56000f3fe60806040526004361061009b5760003560e01c80630d8e6e2c146100d257806327e235e3146101045780634f1ef2861461013f57806352d1902d14610154578063645006ca14610169578063715018a61461017f5780638da5cb5b146101945780638ed83271146101b6578063ad3cb1cc146101cc578063c4d66de81461020a578063f2fde38b1461022a578063f340fa011461024a576100b9565b366100b95760405163bc8eca1b60e01b815260040160405180910390fd5b604051631535ac5f60e31b815260040160405180910390fd5b3480156100de57600080fd5b506040805160018152600060208201819052918101919091526060015b60405180910390f35b34801561011057600080fd5b5061013161011f366004610a05565b60026020526000908152604090205481565b6040519081526020016100fb565b61015261014d366004610a36565b61025d565b005b34801561016057600080fd5b5061013161027c565b34801561017557600080fd5b5061013160015481565b34801561018b57600080fd5b50610152610299565b3480156101a057600080fd5b506101a96102ad565b6040516100fb9190610af7565b3480156101c257600080fd5b5061013160005481565b3480156101d857600080fd5b506101fd604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100fb9190610b2f565b34801561021657600080fd5b50610152610225366004610a05565b6102c8565b34801561023657600080fd5b50610152610245366004610a05565b6103e0565b610152610258366004610a05565b610427565b610265610502565b61026e826105a7565b61027882826105e9565b5050565b60006102866106a2565b50600080516020610bb983398151915290565b6102a16106eb565b6102ab600061071d565b565b6000806102b8610779565b546001600160a01b031692915050565b60006102d261079d565b805490915060ff600160401b82041615906001600160401b03166000811580156102f95750825b90506000826001600160401b031660011480156103155750303b155b905081158015610323575080155b156103415760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561036a57845460ff60401b1916600160401b1785555b610373866107c1565b61037b6107d2565b670de0b6b3a764000060005566038d7ea4c6800060015583156103d857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6103e86106eb565b6001600160a01b03811661041b576000604051631e4fbdf760e01b81526004016104129190610af7565b60405180910390fd5b6104248161071d565b50565b60015434101561044a57604051636ba4a1c760e01b815260040160405180910390fd5b60005434111561046d5760405163c56d46d360e01b815260040160405180910390fd5b6001600160a01b03811661049457604051630702b3d960e41b815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812080543492906104bc908490610b62565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061058957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661057d600080516020610bb9833981519152546001600160a01b031690565b6001600160a01b031614155b156102ab5760405163703e46dd60e11b815260040160405180910390fd5b6105af6106eb565b7ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d816040516105de9190610af7565b60405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610643575060408051601f3d908101601f1916820190925261064091810190610b83565b60015b6106625781604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb9833981519152811461069357604051632a87526960e21b815260048101829052602401610412565b61069d83836107da565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102ab5760405163703e46dd60e11b815260040160405180910390fd5b336106f46102ad565b6001600160a01b0316146102ab573360405163118cdaa760e01b81526004016104129190610af7565b6000610727610779565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b6107c9610830565b61042481610855565b6102ab610830565b6107e38261085d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156108285761069d82826108b9565b610278610931565b610838610950565b6102ab57604051631afcd79f60e31b815260040160405180910390fd5b6103e8610830565b806001600160a01b03163b60000361088a5780604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516108d69190610b9c565b600060405180830381855af49150503d8060008114610911576040519150601f19603f3d011682016040523d82523d6000602084013e610916565b606091505b509150915061092685838361096a565b925050505b92915050565b34156102ab5760405163b398979f60e01b815260040160405180910390fd5b600061095a61079d565b54600160401b900460ff16919050565b60608261097f5761097a826109c0565b6109b9565b815115801561099657506001600160a01b0384163b155b156109b65783604051639996b31560e01b81526004016104129190610af7565b50805b9392505050565b8051156109d05780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114610a0057600080fd5b919050565b600060208284031215610a1757600080fd5b6109b9826109e9565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a4957600080fd5b610a52836109e9565b915060208301356001600160401b0380821115610a6e57600080fd5b818501915085601f830112610a8257600080fd5b813581811115610a9457610a94610a20565b604051601f8201601f19908116603f01168101908382118183101715610abc57610abc610a20565b81604052828152886020848701011115610ad557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6001600160a01b0391909116815260200190565b60005b83811015610b26578181015183820152602001610b0e565b50506000910152565b6020815260008251806020840152610b4e816040850160208701610b0b565b601f01601f19169190910160400192915050565b8082018082111561092b57634e487b7160e01b600052601160045260246000fd5b600060208284031215610b9557600080fd5b5051919050565b60008251610bae818460208701610b0b565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c6343000817000a", + "nonce": "0x33", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x01dabdd77061fbfc8bc124099c5c0b26976f34d59ae17311a6e8c2c0ab7db1fa", + "transactionType": "CREATE", + "contractName": "ERC1967Proxy", + "contractAddress": "0x7c10f2718da92aecb8081c5eb3bc00fff2ebaaeb", + "function": null, + "arguments": [ + "0x18Ee8783be201D81D32c149Cf3B1e7ED436cb73F", + "0xc4d66de8000000000000000000000000c56fa6505d10bf322e01327e22479de78c3bf1ce" + ], + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0x44b15", + "value": "0x0", + "input": "0x60806040526040516103e73803806103e78339810160408190526100229161025a565b61002c8282610033565b5050610358565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610086576100818282610109565b505050565b61008e610180565b5050565b806001600160a01b03163b6000036100c85780604051634c9c8ce360e01b81526004016100bf9190610328565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051610126919061033c565b600060405180830381855af49150503d8060008114610161576040519150601f19603f3d011682016040523d82523d6000602084013e610166565b606091505b5090925090506101778583836101a1565b95945050505050565b341561019f5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101b6576101b1826101f7565b6101f0565b81511580156101cd57506001600160a01b0384163b155b156101ed5783604051639996b31560e01b81526004016100bf9190610328565b50805b9392505050565b8051156102075780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b83811015610251578181015183820152602001610239565b50506000910152565b6000806040838503121561026d57600080fd5b82516001600160a01b038116811461028457600080fd5b60208401519092506001600160401b03808211156102a157600080fd5b818501915085601f8301126102b557600080fd5b8151818111156102c7576102c7610220565b604051601f8201601f19908116603f011681019083821181831017156102ef576102ef610220565b8160405282815288602084870101111561030857600080fd5b610319836020830160208801610236565b80955050505050509250929050565b6001600160a01b0391909116815260200190565b6000825161034e818460208701610236565b9190910192915050565b6081806103666000396000f3fe6080604052600a600c565b005b60186014601a565b6051565b565b6000604c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015606f573d6000f35b3d6000fdfea164736f6c6343000817000a00000000000000000000000018ee8783be201d81d32c149cf3b1e7ed436cb73f00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000024c4d66de8000000000000000000000000c56fa6505d10bf322e01327e22479de78c3bf1ce00000000000000000000000000000000000000000000000000000000", + "nonce": "0x34", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1362945", + "logs": [ + { + "address": "0x18ee8783be201d81d32c149cf3b1e7ed436cb73f", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x77ee47a02217521272fca870c00bce8510b4b2e1268a1a261b07702c59aca6a6", + "blockNumber": "0x629db2", + "transactionHash": "0x8787e4526117f0fce28055b6ab6d3a2cda2546cd2889623b828198f6cc66791e", + "transactionIndex": "0x4b", + "logIndex": "0xe2", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000002000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x8787e4526117f0fce28055b6ab6d3a2cda2546cd2889623b828198f6cc66791e", + "transactionIndex": "0x4b", + "blockHash": "0x77ee47a02217521272fca870c00bce8510b4b2e1268a1a261b07702c59aca6a6", + "blockNumber": "0x629db2", + "gasUsed": "0xb3e99", + "effectiveGasPrice": "0xc1e8a532", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0x18ee8783be201d81d32c149cf3b1e7ed436cb73f" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1397702", + "logs": [ + { + "address": "0x7c10f2718da92aecb8081c5eb3bc00fff2ebaaeb", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000018ee8783be201d81d32c149cf3b1e7ed436cb73f" + ], + "data": "0x", + "blockHash": "0x77ee47a02217521272fca870c00bce8510b4b2e1268a1a261b07702c59aca6a6", + "blockNumber": "0x629db2", + "transactionHash": "0x01dabdd77061fbfc8bc124099c5c0b26976f34d59ae17311a6e8c2c0ab7db1fa", + "transactionIndex": "0x4c", + "logIndex": "0xe3", + "removed": false + }, + { + "address": "0x7c10f2718da92aecb8081c5eb3bc00fff2ebaaeb", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000c56fa6505d10bf322e01327e22479de78c3bf1ce" + ], + "data": "0x", + "blockHash": "0x77ee47a02217521272fca870c00bce8510b4b2e1268a1a261b07702c59aca6a6", + "blockNumber": "0x629db2", + "transactionHash": "0x01dabdd77061fbfc8bc124099c5c0b26976f34d59ae17311a6e8c2c0ab7db1fa", + "transactionIndex": "0x4c", + "logIndex": "0xe4", + "removed": false + }, + { + "address": "0x7c10f2718da92aecb8081c5eb3bc00fff2ebaaeb", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x77ee47a02217521272fca870c00bce8510b4b2e1268a1a261b07702c59aca6a6", + "blockNumber": "0x629db2", + "transactionHash": "0x01dabdd77061fbfc8bc124099c5c0b26976f34d59ae17311a6e8c2c0ab7db1fa", + "transactionIndex": "0x4c", + "logIndex": "0xe5", + "removed": false + } + ], + "logsBloom": "0x00000000000000000004000000000000400000000000000000800000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000002000001800000000000000000040000000000000000020000000000000000000800000000000000000010000000000000400000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000800000000000000000000004000000800000000020000000000004400000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x01dabdd77061fbfc8bc124099c5c0b26976f34d59ae17311a6e8c2c0ab7db1fa", + "transactionIndex": "0x4c", + "blockHash": "0x77ee47a02217521272fca870c00bce8510b4b2e1268a1a261b07702c59aca6a6", + "blockNumber": "0x629db2", + "gasUsed": "0x34dbd", + "effectiveGasPrice": "0xc1e8a532", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0x7c10f2718da92aecb8081c5eb3bc00fff2ebaaeb" + } + ], + "libraries": [], + "pending": [], + "returns": { + "1": { + "internal_type": "address", + "value": "0xc56fA6505d10bF322e01327e22479DE78C3Bf1cE" + }, + "proxy": { + "internal_type": "address payable", + "value": "0x7c10F2718Da92aEcB8081C5eB3bc00Fff2eBAAEb" + } + }, + "timestamp": 1723151902, + "chain": 11155111, + "commit": "e52425a0" +} \ No newline at end of file diff --git a/contracts/broadcast/FeeContractWithDefender.s.sol/11155111/run-1723152503.json b/contracts/broadcast/FeeContractWithDefender.s.sol/11155111/run-1723152503.json new file mode 100644 index 0000000000..715333a996 --- /dev/null +++ b/contracts/broadcast/FeeContractWithDefender.s.sol/11155111/run-1723152503.json @@ -0,0 +1,149 @@ +{ + "transactions": [ + { + "hash": "0xcf0b745307db948f23dd7e51eac0e64b79b07944722857b0273587c1a3e411a1", + "transactionType": "CREATE", + "contractName": "FeeContract", + "contractAddress": "0x1973f783265a1ec07446053ea11f956462e2a714", + "function": null, + "arguments": null, + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0xe9d1e", + "value": "0x0", + "input": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610be56100fd6000396000818161050d0152818161053601526106ad0152610be56000f3fe60806040526004361061009b5760003560e01c80630d8e6e2c146100d257806327e235e3146101045780634f1ef2861461013f57806352d1902d14610154578063645006ca14610169578063715018a61461017f5780638da5cb5b146101945780638ed83271146101b6578063ad3cb1cc146101cc578063c4d66de81461020a578063f2fde38b1461022a578063f340fa011461024a576100b9565b366100b95760405163bc8eca1b60e01b815260040160405180910390fd5b604051631535ac5f60e31b815260040160405180910390fd5b3480156100de57600080fd5b506040805160018152600060208201819052918101919091526060015b60405180910390f35b34801561011057600080fd5b5061013161011f366004610a05565b60026020526000908152604090205481565b6040519081526020016100fb565b61015261014d366004610a36565b61025d565b005b34801561016057600080fd5b5061013161027c565b34801561017557600080fd5b5061013160015481565b34801561018b57600080fd5b50610152610299565b3480156101a057600080fd5b506101a96102ad565b6040516100fb9190610af7565b3480156101c257600080fd5b5061013160005481565b3480156101d857600080fd5b506101fd604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100fb9190610b2f565b34801561021657600080fd5b50610152610225366004610a05565b6102c8565b34801561023657600080fd5b50610152610245366004610a05565b6103e0565b610152610258366004610a05565b610427565b610265610502565b61026e826105a7565b61027882826105e9565b5050565b60006102866106a2565b50600080516020610bb983398151915290565b6102a16106eb565b6102ab600061071d565b565b6000806102b8610779565b546001600160a01b031692915050565b60006102d261079d565b805490915060ff600160401b82041615906001600160401b03166000811580156102f95750825b90506000826001600160401b031660011480156103155750303b155b905081158015610323575080155b156103415760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561036a57845460ff60401b1916600160401b1785555b610373866107c1565b61037b6107d2565b670de0b6b3a764000060005566038d7ea4c6800060015583156103d857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6103e86106eb565b6001600160a01b03811661041b576000604051631e4fbdf760e01b81526004016104129190610af7565b60405180910390fd5b6104248161071d565b50565b60015434101561044a57604051636ba4a1c760e01b815260040160405180910390fd5b60005434111561046d5760405163c56d46d360e01b815260040160405180910390fd5b6001600160a01b03811661049457604051630702b3d960e41b815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812080543492906104bc908490610b62565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061058957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661057d600080516020610bb9833981519152546001600160a01b031690565b6001600160a01b031614155b156102ab5760405163703e46dd60e11b815260040160405180910390fd5b6105af6106eb565b7ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d816040516105de9190610af7565b60405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610643575060408051601f3d908101601f1916820190925261064091810190610b83565b60015b6106625781604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb9833981519152811461069357604051632a87526960e21b815260048101829052602401610412565b61069d83836107da565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102ab5760405163703e46dd60e11b815260040160405180910390fd5b336106f46102ad565b6001600160a01b0316146102ab573360405163118cdaa760e01b81526004016104129190610af7565b6000610727610779565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b6107c9610830565b61042481610855565b6102ab610830565b6107e38261085d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156108285761069d82826108b9565b610278610931565b610838610950565b6102ab57604051631afcd79f60e31b815260040160405180910390fd5b6103e8610830565b806001600160a01b03163b60000361088a5780604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516108d69190610b9c565b600060405180830381855af49150503d8060008114610911576040519150601f19603f3d011682016040523d82523d6000602084013e610916565b606091505b509150915061092685838361096a565b925050505b92915050565b34156102ab5760405163b398979f60e01b815260040160405180910390fd5b600061095a61079d565b54600160401b900460ff16919050565b60608261097f5761097a826109c0565b6109b9565b815115801561099657506001600160a01b0384163b155b156109b65783604051639996b31560e01b81526004016104129190610af7565b50805b9392505050565b8051156109d05780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114610a0057600080fd5b919050565b600060208284031215610a1757600080fd5b6109b9826109e9565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a4957600080fd5b610a52836109e9565b915060208301356001600160401b0380821115610a6e57600080fd5b818501915085601f830112610a8257600080fd5b813581811115610a9457610a94610a20565b604051601f8201601f19908116603f01168101908382118183101715610abc57610abc610a20565b81604052828152886020848701011115610ad557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6001600160a01b0391909116815260200190565b60005b83811015610b26578181015183820152602001610b0e565b50506000910152565b6020815260008251806020840152610b4e816040850160208701610b0b565b601f01601f19169190910160400192915050565b8082018082111561092b57634e487b7160e01b600052601160045260246000fd5b600060208284031215610b9557600080fd5b5051919050565b60008251610bae818460208701610b0b565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c6343000817000a", + "nonce": "0x35", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe5776b3005d8bda8413854910b088cd111ef8e5eb725e7ac872db45cd0c91194", + "transactionType": "CREATE", + "contractName": "ERC1967Proxy", + "contractAddress": "0x4409b85c2248adfe69350093a23ae0fb496d167e", + "function": null, + "arguments": [ + "0x1973f783265A1eC07446053ea11f956462e2A714", + "0xc4d66de8000000000000000000000000c56fa6505d10bf322e01327e22479de78c3bf1ce" + ], + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0x44b15", + "value": "0x0", + "input": "0x60806040526040516103e73803806103e78339810160408190526100229161025a565b61002c8282610033565b5050610358565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610086576100818282610109565b505050565b61008e610180565b5050565b806001600160a01b03163b6000036100c85780604051634c9c8ce360e01b81526004016100bf9190610328565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051610126919061033c565b600060405180830381855af49150503d8060008114610161576040519150601f19603f3d011682016040523d82523d6000602084013e610166565b606091505b5090925090506101778583836101a1565b95945050505050565b341561019f5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101b6576101b1826101f7565b6101f0565b81511580156101cd57506001600160a01b0384163b155b156101ed5783604051639996b31560e01b81526004016100bf9190610328565b50805b9392505050565b8051156102075780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b83811015610251578181015183820152602001610239565b50506000910152565b6000806040838503121561026d57600080fd5b82516001600160a01b038116811461028457600080fd5b60208401519092506001600160401b03808211156102a157600080fd5b818501915085601f8301126102b557600080fd5b8151818111156102c7576102c7610220565b604051601f8201601f19908116603f011681019083821181831017156102ef576102ef610220565b8160405282815288602084870101111561030857600080fd5b610319836020830160208801610236565b80955050505050509250929050565b6001600160a01b0391909116815260200190565b6000825161034e818460208701610236565b9190910192915050565b6081806103666000396000f3fe6080604052600a600c565b005b60186014601a565b6051565b565b6000604c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015606f573d6000f35b3d6000fdfea164736f6c6343000817000a0000000000000000000000001973f783265a1ec07446053ea11f956462e2a71400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000024c4d66de8000000000000000000000000c56fa6505d10bf322e01327e22479de78c3bf1ce00000000000000000000000000000000000000000000000000000000", + "nonce": "0x36", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x9ab91d", + "logs": [ + { + "address": "0x1973f783265a1ec07446053ea11f956462e2a714", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x3734923ef2b9fdddafb8b2dc2298b4f73ac8c460d87743b1d52bc2b1a43bd052", + "blockNumber": "0x629dde", + "transactionHash": "0xcf0b745307db948f23dd7e51eac0e64b79b07944722857b0273587c1a3e411a1", + "transactionIndex": "0x42", + "logIndex": "0x74", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000801000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000001000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xcf0b745307db948f23dd7e51eac0e64b79b07944722857b0273587c1a3e411a1", + "transactionIndex": "0x42", + "blockHash": "0x3734923ef2b9fdddafb8b2dc2298b4f73ac8c460d87743b1d52bc2b1a43bd052", + "blockNumber": "0x629dde", + "gasUsed": "0xb3e99", + "effectiveGasPrice": "0xef68385a", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0x1973f783265a1ec07446053ea11f956462e2a714" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x9e06da", + "logs": [ + { + "address": "0x4409b85c2248adfe69350093a23ae0fb496d167e", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000001973f783265a1ec07446053ea11f956462e2a714" + ], + "data": "0x", + "blockHash": "0x3734923ef2b9fdddafb8b2dc2298b4f73ac8c460d87743b1d52bc2b1a43bd052", + "blockNumber": "0x629dde", + "transactionHash": "0xe5776b3005d8bda8413854910b088cd111ef8e5eb725e7ac872db45cd0c91194", + "transactionIndex": "0x43", + "logIndex": "0x75", + "removed": false + }, + { + "address": "0x4409b85c2248adfe69350093a23ae0fb496d167e", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000c56fa6505d10bf322e01327e22479de78c3bf1ce" + ], + "data": "0x", + "blockHash": "0x3734923ef2b9fdddafb8b2dc2298b4f73ac8c460d87743b1d52bc2b1a43bd052", + "blockNumber": "0x629dde", + "transactionHash": "0xe5776b3005d8bda8413854910b088cd111ef8e5eb725e7ac872db45cd0c91194", + "transactionIndex": "0x43", + "logIndex": "0x76", + "removed": false + }, + { + "address": "0x4409b85c2248adfe69350093a23ae0fb496d167e", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x3734923ef2b9fdddafb8b2dc2298b4f73ac8c460d87743b1d52bc2b1a43bd052", + "blockNumber": "0x629dde", + "transactionHash": "0xe5776b3005d8bda8413854910b088cd111ef8e5eb725e7ac872db45cd0c91194", + "transactionIndex": "0x43", + "logIndex": "0x77", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000500000000000000000800000000000000000000000000000000000000000001000000010000000000000000000000000000000000000000000000000000002000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000800000000000000000000000080000000000000000000000000000000200000000000000000000000000010000000000000000000000000010020000000000000000000000000000000000004000000000000000020000000000004400000000000000000100000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xe5776b3005d8bda8413854910b088cd111ef8e5eb725e7ac872db45cd0c91194", + "transactionIndex": "0x43", + "blockHash": "0x3734923ef2b9fdddafb8b2dc2298b4f73ac8c460d87743b1d52bc2b1a43bd052", + "blockNumber": "0x629dde", + "gasUsed": "0x34dbd", + "effectiveGasPrice": "0xef68385a", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0x4409b85c2248adfe69350093a23ae0fb496d167e" + } + ], + "libraries": [], + "pending": [], + "returns": { + "proxy": { + "internal_type": "address payable", + "value": "0x4409b85C2248ADFE69350093a23aE0FB496D167E" + }, + "1": { + "internal_type": "address", + "value": "0xc56fA6505d10bF322e01327e22479DE78C3Bf1cE" + } + }, + "timestamp": 1723152503, + "chain": 11155111, + "commit": "e52425a0" +} \ No newline at end of file diff --git a/contracts/broadcast/FeeContractWithDefender.s.sol/11155111/run-latest.json b/contracts/broadcast/FeeContractWithDefender.s.sol/11155111/run-latest.json new file mode 100644 index 0000000000..715333a996 --- /dev/null +++ b/contracts/broadcast/FeeContractWithDefender.s.sol/11155111/run-latest.json @@ -0,0 +1,149 @@ +{ + "transactions": [ + { + "hash": "0xcf0b745307db948f23dd7e51eac0e64b79b07944722857b0273587c1a3e411a1", + "transactionType": "CREATE", + "contractName": "FeeContract", + "contractAddress": "0x1973f783265a1ec07446053ea11f956462e2a714", + "function": null, + "arguments": null, + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0xe9d1e", + "value": "0x0", + "input": "0x60a06040523060805234801561001457600080fd5b5061001d610022565b6100d4565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100725760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d15780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051610be56100fd6000396000818161050d0152818161053601526106ad0152610be56000f3fe60806040526004361061009b5760003560e01c80630d8e6e2c146100d257806327e235e3146101045780634f1ef2861461013f57806352d1902d14610154578063645006ca14610169578063715018a61461017f5780638da5cb5b146101945780638ed83271146101b6578063ad3cb1cc146101cc578063c4d66de81461020a578063f2fde38b1461022a578063f340fa011461024a576100b9565b366100b95760405163bc8eca1b60e01b815260040160405180910390fd5b604051631535ac5f60e31b815260040160405180910390fd5b3480156100de57600080fd5b506040805160018152600060208201819052918101919091526060015b60405180910390f35b34801561011057600080fd5b5061013161011f366004610a05565b60026020526000908152604090205481565b6040519081526020016100fb565b61015261014d366004610a36565b61025d565b005b34801561016057600080fd5b5061013161027c565b34801561017557600080fd5b5061013160015481565b34801561018b57600080fd5b50610152610299565b3480156101a057600080fd5b506101a96102ad565b6040516100fb9190610af7565b3480156101c257600080fd5b5061013160005481565b3480156101d857600080fd5b506101fd604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100fb9190610b2f565b34801561021657600080fd5b50610152610225366004610a05565b6102c8565b34801561023657600080fd5b50610152610245366004610a05565b6103e0565b610152610258366004610a05565b610427565b610265610502565b61026e826105a7565b61027882826105e9565b5050565b60006102866106a2565b50600080516020610bb983398151915290565b6102a16106eb565b6102ab600061071d565b565b6000806102b8610779565b546001600160a01b031692915050565b60006102d261079d565b805490915060ff600160401b82041615906001600160401b03166000811580156102f95750825b90506000826001600160401b031660011480156103155750303b155b905081158015610323575080155b156103415760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b0319166001178555831561036a57845460ff60401b1916600160401b1785555b610373866107c1565b61037b6107d2565b670de0b6b3a764000060005566038d7ea4c6800060015583156103d857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6103e86106eb565b6001600160a01b03811661041b576000604051631e4fbdf760e01b81526004016104129190610af7565b60405180910390fd5b6104248161071d565b50565b60015434101561044a57604051636ba4a1c760e01b815260040160405180910390fd5b60005434111561046d5760405163c56d46d360e01b815260040160405180910390fd5b6001600160a01b03811661049457604051630702b3d960e41b815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812080543492906104bc908490610b62565b90915550506040513481526001600160a01b038216907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a250565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061058957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661057d600080516020610bb9833981519152546001600160a01b031690565b6001600160a01b031614155b156102ab5760405163703e46dd60e11b815260040160405180910390fd5b6105af6106eb565b7ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d816040516105de9190610af7565b60405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610643575060408051601f3d908101601f1916820190925261064091810190610b83565b60015b6106625781604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb9833981519152811461069357604051632a87526960e21b815260048101829052602401610412565b61069d83836107da565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146102ab5760405163703e46dd60e11b815260040160405180910390fd5b336106f46102ad565b6001600160a01b0316146102ab573360405163118cdaa760e01b81526004016104129190610af7565b6000610727610779565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b6107c9610830565b61042481610855565b6102ab610830565b6107e38261085d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156108285761069d82826108b9565b610278610931565b610838610950565b6102ab57604051631afcd79f60e31b815260040160405180910390fd5b6103e8610830565b806001600160a01b03163b60000361088a5780604051634c9c8ce360e01b81526004016104129190610af7565b600080516020610bb983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516108d69190610b9c565b600060405180830381855af49150503d8060008114610911576040519150601f19603f3d011682016040523d82523d6000602084013e610916565b606091505b509150915061092685838361096a565b925050505b92915050565b34156102ab5760405163b398979f60e01b815260040160405180910390fd5b600061095a61079d565b54600160401b900460ff16919050565b60608261097f5761097a826109c0565b6109b9565b815115801561099657506001600160a01b0384163b155b156109b65783604051639996b31560e01b81526004016104129190610af7565b50805b9392505050565b8051156109d05780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114610a0057600080fd5b919050565b600060208284031215610a1757600080fd5b6109b9826109e9565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215610a4957600080fd5b610a52836109e9565b915060208301356001600160401b0380821115610a6e57600080fd5b818501915085601f830112610a8257600080fd5b813581811115610a9457610a94610a20565b604051601f8201601f19908116603f01168101908382118183101715610abc57610abc610a20565b81604052828152886020848701011115610ad557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6001600160a01b0391909116815260200190565b60005b83811015610b26578181015183820152602001610b0e565b50506000910152565b6020815260008251806020840152610b4e816040850160208701610b0b565b601f01601f19169190910160400192915050565b8082018082111561092b57634e487b7160e01b600052601160045260246000fd5b600060208284031215610b9557600080fd5b5051919050565b60008251610bae818460208701610b0b565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c6343000817000a", + "nonce": "0x35", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe5776b3005d8bda8413854910b088cd111ef8e5eb725e7ac872db45cd0c91194", + "transactionType": "CREATE", + "contractName": "ERC1967Proxy", + "contractAddress": "0x4409b85c2248adfe69350093a23ae0fb496d167e", + "function": null, + "arguments": [ + "0x1973f783265A1eC07446053ea11f956462e2A714", + "0xc4d66de8000000000000000000000000c56fa6505d10bf322e01327e22479de78c3bf1ce" + ], + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0x44b15", + "value": "0x0", + "input": "0x60806040526040516103e73803806103e78339810160408190526100229161025a565b61002c8282610033565b5050610358565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610086576100818282610109565b505050565b61008e610180565b5050565b806001600160a01b03163b6000036100c85780604051634c9c8ce360e01b81526004016100bf9190610328565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051610126919061033c565b600060405180830381855af49150503d8060008114610161576040519150601f19603f3d011682016040523d82523d6000602084013e610166565b606091505b5090925090506101778583836101a1565b95945050505050565b341561019f5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101b6576101b1826101f7565b6101f0565b81511580156101cd57506001600160a01b0384163b155b156101ed5783604051639996b31560e01b81526004016100bf9190610328565b50805b9392505050565b8051156102075780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b83811015610251578181015183820152602001610239565b50506000910152565b6000806040838503121561026d57600080fd5b82516001600160a01b038116811461028457600080fd5b60208401519092506001600160401b03808211156102a157600080fd5b818501915085601f8301126102b557600080fd5b8151818111156102c7576102c7610220565b604051601f8201601f19908116603f011681019083821181831017156102ef576102ef610220565b8160405282815288602084870101111561030857600080fd5b610319836020830160208801610236565b80955050505050509250929050565b6001600160a01b0391909116815260200190565b6000825161034e818460208701610236565b9190910192915050565b6081806103666000396000f3fe6080604052600a600c565b005b60186014601a565b6051565b565b6000604c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015606f573d6000f35b3d6000fdfea164736f6c6343000817000a0000000000000000000000001973f783265a1ec07446053ea11f956462e2a71400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000024c4d66de8000000000000000000000000c56fa6505d10bf322e01327e22479de78c3bf1ce00000000000000000000000000000000000000000000000000000000", + "nonce": "0x36", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x9ab91d", + "logs": [ + { + "address": "0x1973f783265a1ec07446053ea11f956462e2a714", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x3734923ef2b9fdddafb8b2dc2298b4f73ac8c460d87743b1d52bc2b1a43bd052", + "blockNumber": "0x629dde", + "transactionHash": "0xcf0b745307db948f23dd7e51eac0e64b79b07944722857b0273587c1a3e411a1", + "transactionIndex": "0x42", + "logIndex": "0x74", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000801000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000001000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xcf0b745307db948f23dd7e51eac0e64b79b07944722857b0273587c1a3e411a1", + "transactionIndex": "0x42", + "blockHash": "0x3734923ef2b9fdddafb8b2dc2298b4f73ac8c460d87743b1d52bc2b1a43bd052", + "blockNumber": "0x629dde", + "gasUsed": "0xb3e99", + "effectiveGasPrice": "0xef68385a", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0x1973f783265a1ec07446053ea11f956462e2a714" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x9e06da", + "logs": [ + { + "address": "0x4409b85c2248adfe69350093a23ae0fb496d167e", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000001973f783265a1ec07446053ea11f956462e2a714" + ], + "data": "0x", + "blockHash": "0x3734923ef2b9fdddafb8b2dc2298b4f73ac8c460d87743b1d52bc2b1a43bd052", + "blockNumber": "0x629dde", + "transactionHash": "0xe5776b3005d8bda8413854910b088cd111ef8e5eb725e7ac872db45cd0c91194", + "transactionIndex": "0x43", + "logIndex": "0x75", + "removed": false + }, + { + "address": "0x4409b85c2248adfe69350093a23ae0fb496d167e", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000c56fa6505d10bf322e01327e22479de78c3bf1ce" + ], + "data": "0x", + "blockHash": "0x3734923ef2b9fdddafb8b2dc2298b4f73ac8c460d87743b1d52bc2b1a43bd052", + "blockNumber": "0x629dde", + "transactionHash": "0xe5776b3005d8bda8413854910b088cd111ef8e5eb725e7ac872db45cd0c91194", + "transactionIndex": "0x43", + "logIndex": "0x76", + "removed": false + }, + { + "address": "0x4409b85c2248adfe69350093a23ae0fb496d167e", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0x3734923ef2b9fdddafb8b2dc2298b4f73ac8c460d87743b1d52bc2b1a43bd052", + "blockNumber": "0x629dde", + "transactionHash": "0xe5776b3005d8bda8413854910b088cd111ef8e5eb725e7ac872db45cd0c91194", + "transactionIndex": "0x43", + "logIndex": "0x77", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000500000000000000000800000000000000000000000000000000000000000001000000010000000000000000000000000000000000000000000000000000002000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000800000000000000000000000080000000000000000000000000000000200000000000000000000000000010000000000000000000000000010020000000000000000000000000000000000004000000000000000020000000000004400000000000000000100000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xe5776b3005d8bda8413854910b088cd111ef8e5eb725e7ac872db45cd0c91194", + "transactionIndex": "0x43", + "blockHash": "0x3734923ef2b9fdddafb8b2dc2298b4f73ac8c460d87743b1d52bc2b1a43bd052", + "blockNumber": "0x629dde", + "gasUsed": "0x34dbd", + "effectiveGasPrice": "0xef68385a", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0x4409b85c2248adfe69350093a23ae0fb496d167e" + } + ], + "libraries": [], + "pending": [], + "returns": { + "proxy": { + "internal_type": "address payable", + "value": "0x4409b85C2248ADFE69350093a23aE0FB496D167E" + }, + "1": { + "internal_type": "address", + "value": "0xc56fA6505d10bF322e01327e22479DE78C3Bf1cE" + } + }, + "timestamp": 1723152503, + "chain": 11155111, + "commit": "e52425a0" +} \ No newline at end of file diff --git a/contracts/broadcast/LightClient.s.sol/11155111/run-latest.json b/contracts/broadcast/LightClient.s.sol/11155111/run-latest.json index e4439f88a1..f66ffe3d62 100644 --- a/contracts/broadcast/LightClient.s.sol/11155111/run-latest.json +++ b/contracts/broadcast/LightClient.s.sol/11155111/run-latest.json @@ -1,153 +1,40 @@ { "transactions": [ { - "hash": "0xd3a615e5e1565625a38c1068a1f27f1813db90dbfb61ab93a273a06e32df2a23", + "hash": null, "transactionType": "CREATE", - "contractName": "LightClient", - "contractAddress": "0xad3ecffcb19bcb3464ec5e02af565bcc08b63aff", + "contractName": "LightClientV2", + "contractAddress": "0xc644a84734a7329ee46d3b6704746179d272f990", "function": null, "arguments": null, "transaction": { - "from": "0x42ba5a503f27f4d1e21a5a09c9edd3ea1d273876", - "gas": "0x640315", + "from": "0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "gas": "0x338de3", "value": "0x0", - "input": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516159c162000104600039600081816114320152818161145b01526115c701526159c16000f3fe6080604052600436106101525760003560e01c8063013fa5fc146101575780630d8e6e2c14610179578063313df7b1146101ab578063382b215a146101d8578063409939b7146101fc5780634847ae5d1461021c5780634f1ef2861461029e57806352d1902d146102b157806354646085146102c657806362827733146102db57806369cc6a04146102f15780637053fc5114610306578063715018a61461031b578063766718081461033057806376b6b7cb146103645780637f17baad1461037a57806382d07ff31461042d5780638584d23f146104425780638da5cb5b14610486578063a244d5961461049b578063a51e6fea146104bb578063aa922732146104db578063ad3cb1cc146104fb578063bd32519a14610539578063ca6fe8551461056a578063db13b60a14610580578063e0303301146105bf578063f0682054146105df578063f2fde38b14610611575b600080fd5b34801561016357600080fd5b50610177610172366004614f2f565b610631565b005b34801561018557600080fd5b506040805160018152600060208201819052918101919091526060015b60405180910390f35b3480156101b757600080fd5b506006546101cb906001600160a01b031681565b6040516101a29190614f4a565b3480156101e457600080fd5b506101ee60035481565b6040519081526020016101a2565b34801561020857600080fd5b506101776102173660046150cf565b6106f1565b34801561022857600080fd5b50610231610a1c565b6040516101a2919060006101008201905060018060401b038084511683528060208501511660208401525060408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015292915050565b6101776102ac366004615289565b610aae565b3480156102bd57600080fd5b506101ee610acd565b3480156102d257600080fd5b506008546101ee565b3480156102e757600080fd5b506101ee60025481565b3480156102fd57600080fd5b50610177610aea565b34801561031257600080fd5b506007546101ee565b34801561032757600080fd5b50610177610b5a565b34801561033c57600080fd5b5060005461035790600160601b90046001600160401b031681565b6040516101a2919061532e565b34801561037057600080fd5b506101ee60015481565b34801561038657600080fd5b506103e7610395366004615356565b600560208190526000918252604090912080546001820154600283015460038401546004850154958501546006909501546001600160401b0380861697600160401b9096041695939492939192919088565b604080516001600160401b03998a168152989097166020890152958701949094526060860192909252608085015260a084015260c083015260e0820152610100016101a2565b34801561043957600080fd5b50610231610b6c565b34801561044e57600080fd5b5061046261045d366004615371565b610bfc565b6040805182516001600160401b0316815260209283015192810192909252016101a2565b34801561049257600080fd5b506101cb610d56565b3480156104a757600080fd5b506101776104b636600461538a565b610d71565b3480156104c757600080fd5b506101ee6104d6366004615371565b610e9c565b3480156104e757600080fd5b506101ee6104f63660046153d1565b610ebd565b34801561050757600080fd5b5061052c604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101a29190615412565b34801561054557600080fd5b5060065461055a90600160a01b900460ff1681565b60405190151581526020016101a2565b34801561057657600080fd5b506101ee60045481565b34801561058c57600080fd5b506105a061059b366004615371565b610f05565b604080516001600160401b0390931683526020830191909152016101a2565b3480156105cb57600080fd5b5061055a6105da366004615445565b610f3d565b3480156105eb57600080fd5b506000546105fc9063ffffffff1681565b60405163ffffffff90911681526020016101a2565b34801561061d57600080fd5b5061017761062c366004614f2f565b611020565b61063961105e565b6001600160a01b0381166106605760405163e6c4247b60e01b815260040160405180910390fd5b6006546001600160a01b039081169082160361068f5760405163a863aec960e01b815260040160405180910390fd5b600680546001600160a81b0319166001600160a01b0380841691909117600160a01b17918290556040517f8017bb887fdf8fca4314a9d40f6e73b3b81002d67e5cfa85d88173af6aa46072926106e6921690614f4a565b60405180910390a150565b600654600160a01b900460ff16801561071557506006546001600160a01b03163314155b1561075c576006546001600160a01b0316610743576040516312e6d1e760e11b815260040160405180910390fd5b6040516301474c8f60e71b815260040160405180910390fd5b610764610b6c565b5182516001600160401b0391821691161115806107a25750610784610b6c565b602001516001600160401b031682602001516001600160401b031611155b156107c05760405163051c46ef60e01b815260040160405180910390fd5b600080546107e59063ffffffff811690600160601b90046001600160401b031661547d565b6000805463ffffffff600160401b91829004168252600560205260409091205491925090046001600160401b039081169082161480158161083b5750816001600160401b031684602001516001600160401b0316115b15610864578160405163036466bf60e31b815260040161085b919061532e565b60405180910390fd5b6108718460400151611090565b61087e8460600151611090565b61088b8460800151611090565b6108988460a00151611090565b6108a58460c00151611090565b80156108b3576108b36110ec565b6108bd8484611237565b60008054600160401b9081900463ffffffff168252600560208181526040808520895181548b850180516001600160401b039384166001600160801b0319909316929092179183169097021782558a8301805160018085019190915560608d015160028086019190915560808e0151600386015560a08e0151600486015560c08e01519785019790975560e08d01516006909401939093556007805480850182559089524360008051602061589583398151915290910155835180850185528751831681528151818701908152600880549586018155909952516000805160206159158339815191529390960292830180546001600160401b03191696831696909617909555955160008051602061595583398151915290910155925188519251935193845284169391909116917fa04a773924505a418564363725f56832f5772e6b8d0dbd6efce724dfe803dae6910160405180910390a350505050565b610a24614d2d565b5060008054600160201b900463ffffffff1681526005602081815260409283902083516101008101855281546001600160401b038082168352600160401b90910416928101929092526001810154938201939093526002830154606082015260038301546080820152600483015460a08201529082015460c082015260069091015460e082015290565b610ab6611427565b610abf826114cc565b610ac98282611503565b5050565b6000610ad76115bc565b506000805160206158d583398151915290565b610af261105e565b600654600160a01b900460ff1615610b3f57600680546001600160a81b03191690556040517f9a5f57de856dd668c54dd95e5c55df93432171cbca49a8776d5620ea59c0245090600090a1565b60405163a863aec960e01b815260040160405180910390fd5b565b610b6261105e565b610b586000611605565b610b74614d2d565b506000805463ffffffff600160401b918290041682526005602081815260409384902084516101008101865281546001600160401b038082168352959004909416918401919091526001810154938301939093526002830154606083015260038301546080830152600483015460a083015282015460c082015260069091015460e082015290565b60408051808201909152600080825260208201526008805490610c206001836154a0565b81548110610c3057610c306154b3565b60009182526020909120600290910201546001600160401b03168310610c6957604051631856a49960e21b815260040160405180910390fd5b60005b81811015610cfe578360088281548110610c8857610c886154b3565b60009182526020909120600290910201546001600160401b03161115610cf65760088181548110610cbb57610cbb6154b3565b60009182526020918290206040805180820190915260029092020180546001600160401b031682526001015491810191909152949350505050565b600101610c6c565b506008610d0c6001836154a0565b81548110610d1c57610d1c6154b3565b60009182526020918290206040805180820190915260029092020180546001600160401b0316825260010154918101919091529392505050565b600080610d61611661565b546001600160a01b031692915050565b6000610d7b611685565b805490915060ff600160401b82041615906001600160401b0316600081158015610da25750825b90506000826001600160401b03166001148015610dbe5750303b155b905081158015610dcc575080155b15610dea5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b03191660011785558315610e1357845460ff60401b1916600160401b1785555b610e1c866116a9565b610e246116ba565b60008054600160201b600160601b031916600160401b179055610e4788886116c2565b8315610e9257845460ff60401b191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610e899060019061532e565b60405180910390a15b5050505050505050565b60078181548110610eac57600080fd5b600091825260209091200154905081565b60808082015160a083015160c0840151604080516020810194909452830191909152606082015260009101604051602081830303815290604052805190602001209050919050565b60088181548110610f1557600080fd5b6000918252602090912060029091020180546001909101546001600160401b03909116915082565b60075460009043841180610f515750600381105b15610f6f5760405163b0b4387760e01b815260040160405180910390fd5b60008080610f7e6001856154a0565b90505b81610fe9578660078281548110610f9a57610f9a6154b3565b906000526020600020015411610fcf576001915060078181548110610fc157610fc16154b3565b906000526020600020015492505b60028110610fe95780610fe1816154c9565b915050610f81565b816110075760405163b0b4387760e01b815260040160405180910390fd5b8561101284896154a0565b119450505050505b92915050565b61102861105e565b6001600160a01b038116611052576000604051631e4fbdf760e01b815260040161085b9190614f4a565b61105b81611605565b50565b33611067610d56565b6001600160a01b031614610b58573360405163118cdaa760e01b815260040161085b9190614f4a565b6000805160206158f5833981519152811080610ac95760405162461bcd60e51b815260206004820152601b60248201527a109b8c8d4d0e881a5b9d985b1a59081cd8d85b185c88199a595b19602a1b604482015260640161085b565b6000805463ffffffff600160401b9182900416825260056020818152604080852081516101008101835281546001600160401b038082168352969004909516928501929092526001820154908401526002810154606084015260038101546080840152600481015460a08401529081015460c08301526006015460e082015261117490610ebd565b600380546001908155908290556004805460025560008054600160401b810463ffffffff16825260056020526040822060060154909255929350909190600c906111cf908490600160601b90046001600160401b03166154e0565b92506101000a8154816001600160401b0302191690836001600160401b031602179055507fdb3558259e039d7e50e816b9dcce30fb114d8a9c86eca5ab14b60194d6945d3f6000600c9054906101000a90046001600160401b03166040516106e6919061532e565b60006112416119e5565b604080516008808252610120820190925291925060009190602082016101008036833701905050905060025481600081518110611280576112806154b3565b60200260200101818152505083600001516001600160401b0316816001815181106112ad576112ad6154b3565b60200260200101818152505083602001516001600160401b0316816002815181106112da576112da6154b3565b6020026020010181815250508360400151816003815181106112fe576112fe6154b3565b602002602001018181525050836060015181600481518110611322576113226154b3565b60209081029190910181019190915260008054600160401b900463ffffffff16815260059182905260409020600301548251909183918110611366576113666154b3565b60209081029190910181019190915260008054600160401b900463ffffffff168152600590915260409020600401548151829060069081106113aa576113aa6154b3565b60209081029190910181019190915260008054600160401b900463ffffffff1681526005918290526040902001548151829060079081106113ed576113ed6154b3565b602002602001018181525050611404828285611fc7565b611421576040516309bde33960e01b815260040160405180910390fd5b50505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806114ae57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114a26000805160206158d5833981519152546001600160a01b031690565b6001600160a01b031614155b15610b585760405163703e46dd60e11b815260040160405180910390fd5b6114d461105e565b7ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d816040516106e69190614f4a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561155d575060408051601f3d908101601f1916820190925261155a91810190615500565b60015b61157c5781604051634c9c8ce360e01b815260040161085b9190614f4a565b6000805160206158d583398151915281146115ad57604051632a87526960e21b81526004810182905260240161085b565b6115b783836120b2565b505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b585760405163703e46dd60e11b815260040160405180910390fd5b600061160f611661565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b6116b1612108565b61105b8161212d565b610b58612108565b81516001600160401b03161515806116e6575060208201516001600160401b031615155b806116f357506080820151155b80611700575060a0820151155b8061170d575060c0820151155b8061171a575060e0820151155b80611729575063ffffffff8116155b15611747576040516350dd03f760e11b815260040160405180910390fd5b81600560008060049054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a8154816001600160401b0302191690836001600160401b0316021790555060208201518160000160086101000a8154816001600160401b0302191690836001600160401b0316021790555060408201518160010155606082015181600201556080820151816003015560a0820151816004015560c0820151816005015560e0820151816006015590505081600560008060089054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a8154816001600160401b0302191690836001600160401b0316021790555060208201518160000160086101000a8154816001600160401b0302191690836001600160401b0316021790555060408201518160010155606082015181600201556080820151816003015560a0820151816004015560c0820151816005015560e08201518160060155905050600080600c6101000a8154816001600160401b0302191690836001600160401b03160217905550806000806101000a81548163ffffffff021916908363ffffffff160217905550600061192d83610ebd565b600181815560e08501516002818155600393909355600455600780548083018255600091825243600080516020615895833981519152909101556040805180820182526020808901516001600160401b039081168352929098015197810197885260088054948501815590925290516000805160206159158339815191529290930291820180546001600160401b03191693909116929092179091559251600080516020615955833981519152909301929092555050565b6119ed614d84565b621000008152600860208201527f20c9403133dfde9a9d382df76fb0523571648725abc0a7c12830bb690ec83b336040820151527f03a0a9acc3e3815a7ed6cb1379f7d157e6343164729376392a693acbd3ec283c6020604083015101527f2866c18ad1df10ef13542cce6250ce02cb2a6b72ae00a9852e271187e9e4e0db6060820151527f21be232a42246a5663ebf483470cca666ffe9d4f0e63b929c596a7658714e9706020606083015101527f07d77873b9860074118e75808c79468b83c8ed64ba14db5cb5afa8e534de7b996080820151527f0be0f448839080132d47de17de0099b4cd74ae1e6b71cdda06cdebb868a50c6d6020608083015101527f13bd45a023491eadea44cc3f24cfbd1796eade9c0e39ee81d9f63ea0a580662560a0820151527f18f95cdda42ce11d9d10a3b335acc214e3807c578c5359405d810c208df60093602060a083015101527f0970d978763461f09e9ec63454073497386e4d282fedc2ac5b967cb9fd3fa8a960c0820151527f28c2217f7bacf6f8b2b8ee4a90fcf8b5bca04205ea84e8e1eb54b85dd41bde28602060c083015101527f02fe3d02988db718380052970aba46a3296df5f29b736ba1f2c4ccffc8b5969360e0820151527f202c3e390cee7c5c8525da2329a19f4936f6f71ca97dde6c6fa32b382d5acc03602060e083015101527f23ac10ae6ca5cacee8744bb939aaa835390954b91ae668a2c8d0edda558a89e7610100820151527f1c8c2b856cdade256ba3237f39afd5e170a9532012f7aecae49d459b29f6f6ad602061010083015101527f16ec03d260bd7ac1c50ffa63565d5274b4582ceea52ff40b81cdfe8f444f01e4610120820151527f29392152723097e07113c3d7786d245ec40c30928015cd50b5668a4f4ea17031602061012083015101527f2cdbfb3a4053c8489b0c94e74338ac19118df7a06bc56b1eb4d0e0dc4eae7248610140820151527f07fea127dae943b8dc148f1408d40cff465c9c4721943669b1e4fd5a39db7036602061014083015101527f031455a79a2e0ce78a6cb53526ec04ac19716a86b08a93df48d178f8b77e5619610160820151527f118623e6bc136ee6d3f9907cd4ad04a9418ea03ba99ad753227cdfee598e8415602061016083015101527f0861d1997761a852226aac7ba9717bf6ae56451099be774cdf02ef352a58cbc8610180820151527f0805e392bcbc12e40a722778632d73fe981e4bc6fa6d1178b70af7be1cb9a3a3602061018083015101527f101d1e3978cb9f1e303d413144ebe67682c9eb0cfe11242959aa6029d78cdbbc6101a0820151527f089eb9c727e6cb07082bc3e6f40cf04f439fe48000602b584774dad7efc6607c60206101a083015101527f2d489f2493263aa873bcd94f21efb45bf257a61d81c0c95c3297916506653b406101c0820151527f18e45d627aadd4df2794ecd9909fac1a753f0c6fa8a9c6654a7a58b0912fffd560206101c083015101527f0e43e3a4b13cb438e2ad924614261ad0240214fa1c83fcda6a0bf779eb39ffc56101e0820151527f0eaba9f429c5f6fc3103d4cc4056c500ff42425d8e6465c5b8e145219f9c5cd360206101e083015101527f29ae351d09dcf41c0a80ab05393738358baab37e6fbc464b3bb13258994a1fa4610200820151527f2b7bc74608d7ec7dadd0597d6a4010d8bfc2b31900281901cedc42bdbb0fb8fc602061020083015101527f066802c7ceb9e913d4f65433a20661e097acac1affecbb534a54f76a29782226610220820151527f27ec80e811e636f3348267923c8e641bd98a7e37c5216670cbff14ae323f9e0e602061022083015101527f12604d1f87c583f6c9710c73eaf590af9d07aa743d1381d0e9dff0eab2614239610240820151527f1588579e6c3378ea32cb641205ef762a63cd353a0bd670394528ad2081ee8dd4602061024083015101527f247d65261d3a4ab042ba937331f6d0c0c5eb9ea78753a92084db1a6939e19e82610260820151527f2ce6cc664a32147bfe6a0c94a95bf0496679405ccae01648cd4ec021145120d56020610260830151015290565b6000611fd282612135565b611ff583600081518110611fe857611fe86154b3565b6020026020010151611090565b61200b83600181518110611fe857611fe86154b3565b61202183600281518110611fe857611fe86154b3565b61203783600381518110611fe857611fe86154b3565b61204d83600481518110611fe857611fe86154b3565b61206383600581518110611fe857611fe86154b3565b61207983600681518110611fe857611fe86154b3565b61208f83600781518110611fe857611fe86154b3565b600061209c85858561226d565b90506120a7816123b7565b9150505b9392505050565b6120bb82612816565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612100576115b78282612872565b610ac96128e8565b612110612907565b610b5857604051631afcd79f60e31b815260040160405180910390fd5b611028612108565b805161214090612921565b61214d8160200151612921565b61215a8160400151612921565b6121678160600151612921565b6121748160800151612921565b6121818160a00151612921565b61218e8160c00151612921565b61219b8160e00151612921565b6121a9816101000151612921565b6121b7816101200151612921565b6121c5816101400151612921565b6121d3816101600151612921565b6121e1816101800151612921565b6121ef816101a00151611090565b6121fd816101c00151611090565b61220b816101e00151611090565b612219816102000151611090565b612227816102200151611090565b612235816102400151611090565b612243816102600151611090565b612251816102800151611090565b61225f816102a00151611090565b61105b816102c00151611090565b612275614e88565b836020015183511461229a576040516320fa9d8960e11b815260040160405180910390fd5b60006122a78585856129af565b905060006122b88660000151612cce565b905060006122cb828460a0015188613099565b60408051601e8082526103e0820190925291925060009190602082016103c080368337505060408051601e8082526103e082019092529293506000929150602082015b612316614ec2565b81526020019060019003908161230e579050509050600061233b8a858a8987876130f9565b60a08701516060870151919250906000805160206158f5833981519152600081838509604080516101008101825260e09c8d0151815260208101969096528501525050506060810191909152608081019290925260a082015261016086015160c082015261018090950151928501929092525091949350505050565b60006000805160206158f58339815191526123d0614ec2565b6123d8614ec2565b6040805160028082526060820183526000926020830190803683375050604080516002808252606082019092529293506000929150602082015b61241a614ec2565b8152602001906001900390816124125790505090506000600190508083600081518110612449576124496154b3565b6020026020010181815250508760c001518260008151811061246d5761246d6154b3565b6020026020010181905250876000015183600181518110612490576124906154b3565b6020026020010181815250508760e00151826001815181106124b4576124b46154b3565b60200260200101819052506124c9828461312e565b60808901515190955060609350839250905060006124e8826002615519565b6124f3906001615519565b9050806001600160401b0381111561250d5761250d614f5e565b604051908082528060200260200182016040528015612536578160200160208202803683370190505b509350806001600160401b0381111561255157612551614f5e565b60405190808252806020026020018201604052801561258a57816020015b612577614ec2565b81526020019060019003908161256f5790505b509250505060008060005b89608001515181101561262e57896080015181815181106125b8576125b86154b3565b60200260200101518583815181106125d2576125d26154b3565b6020026020010181815250508960a0015181815181106125f4576125f46154b3565b602002602001015184838151811061260e5761260e6154b3565b6020908102919091010152612624600183615519565b9150600101612595565b508860200151848281518110612646576126466154b3565b6020026020010181815250508860c00151838281518110612669576126696154b3565b602090810291909101015261267f600182615519565b895160408b0151919250906000898284099050808785815181106126a5576126a56154b3565b6020026020010181815250505050508860e001518382815181106126cb576126cb6154b3565b60209081029190910101526126e1600182615519565b60608a0151909150878184089250506126f98261321c565b84828151811061270b5761270b6154b3565b60200260200101818152505061271f61324e565b838281518110612731576127316154b3565b602002602001018190525061274e612749848661312e565b61326f565b945050505050600060405180608001604052807f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b081526020017f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c181526020017f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e5581526020017f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe4815250905061280c8382846128076132dc565b6133ad565b9695505050505050565b806001600160a01b03163b6000036128435780604051634c9c8ce360e01b815260040161085b9190614f4a565b6000805160206158d583398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161288f919061552c565b600060405180830381855af49150503d80600081146128ca576040519150601f19603f3d011682016040523d82523d6000602084013e6128cf565b606091505b50915091506128df858383613490565b95945050505050565b3415610b585760405163b398979f60e01b815260040160405180910390fd5b6000612911611685565b54600160401b900460ff16919050565b600060008051602061587583398151915261293b836134e3565b1561294557505050565b8251602084015182600384858586098509088382830914838210848410161693505050816115b75760405162461bcd60e51b8152602060048201526017602482015276109b8c8d4d0e881a5b9d985b1a590811cc481c1bda5b9d604a1b604482015260640161085b565b6129f760405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805180820190915260608152600060208201526000805160206158f5833981519152612a268287876134f2565b81518451612a339061388b565b612a40866020015161388b565b612a4d876040015161388b565b612a5a886060015161388b565b612a67896080015161388b565b604051602001612a7c96959493929190615548565b60408051601f198184030181529190528252612a9782613900565b50612aa182613900565b6060840152612aaf82613900565b6080840152815160a0850151612ac49061388b565b604051602001612ad59291906155c7565b60408051601f198184030181529190528252612af082613900565b8352815160c0850151612b029061388b565b612b0f8660e0015161388b565b612b1d87610100015161388b565b612b2b88610120015161388b565b612b3989610140015161388b565b604051602001612b4e96959493929190615548565b60408051601f198184030181529190528252612b6982613900565b60a084015281516101a0850151612b7f90613962565b612b8d866101c00151613962565b612b9b876101e00151613962565b612ba9886102000151613962565b612bb7896102200151613962565b604051602001612bcc969594939291906155f6565b60408051601f19818403018152919052808352610240850151612bee90613962565b612bfc866102600151613962565b612c0a876102800151613962565b612c18886102a00151613962565b612c26896102c00151613962565b604051602001612c3b969594939291906155f6565b60408051601f198184030181529190528252612c5682613900565b60c08401528151610160850151612c6c9061388b565b612c7a86610180015161388b565b604051602001612c8c93929190615632565b60408051601f198184030181529190528252612ca782613900565b60e08401528251818180098282820960208601919091526040850152509195945050505050565b612d006040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b816201000003612d9457506040805160a0810182526010815260208101929092527f30641e0e92bebef818268d663bcad6dbcfd6c0149170f6d7d350b1b1fa6c1001908201527eeeb2cb5981ed45649abebde081dcff16c8601de4347e7dd1628ba2daac43b760608201527f0b5d56b77fe704e8e92338c0082f37e091126414c830e4c6922d5ac802d842d4608082015290565b816202000003612e2957506040805160a0810182526011815260208101929092527f30643640b9f82f90e83b698e5ea6179c7c05542e859533b48b9953a2f5360801908201527f1bf82deba7d74902c3708cc6e70e61f30512eca95655210e276e5858ce8f58e560608201527f244cf010c43ca87237d8b00bf9dd50c4c01c7f086bd4e8c920e75251d96f0d22608082015290565b816204000003612ebe57506040805160a0810182526012815260208101929092527f30644259cd94e7dd5045d7a27013b7fcd21c9e3b7fa75222e7bda49b729b0401908201527f19ddbcaf3a8d46c15c0176fbb5b95e4dc57088ff13f4d1bd84c6bfa57dcdc0e060608201527f036853f083780e87f8d7c71d111119c57dbe118c22d5ad707a82317466c5174c608082015290565b816208000003612f5357506040805160a0810182526013815260208101929092527f3064486657634403844b0eac78ca882cfd284341fcb0615a15cfcd17b14d8201908201527f2260e724844bca5251829353968e4915305258418357473a5c1d597f613f6cbd60608201527f06e402c0a314fb67a15cf806664ae1b722dbc0efe66e6c81d98f9924ca535321608082015290565b816210000003612fe857506040805160a0810182526014815260208101929092527f30644b6c9c4a72169e4daa317d25f04512ae15c53b34e8f5acd8e155d0a6c101908201527f26125da10a0ed06327508aba06d1e303ac616632dbed349f53422da95333785760608201527f100c332d2100895fab6473bc2c51bfca521f45cb3baca6260852a8fde26c91f3608082015290565b8160200361307b57506040805160a0810182526005815260208101929092527f2ee12bff4a2813286a8dc388cd754d9a3ef2490635eba50cb9c2e5e750800001908201527f09c532c6306b93d29678200d47c0b2a99c18d51b838eeb1d3eed4c533bb512d060608201527f2724713603bfbd790aeaf3e7df25d8e7ef8f311334905b4d8c99980cf210979d608082015290565b60405163e2ef09e560e01b815260040160405180910390fd5b919050565b6130bd60405180606001604052806000815260200160008152602001600081525090565b6130c78484613a99565b8082526130d79085908590613aed565b602082015280516130ed90859084908690613b51565b60408201529392505050565b600080613107858789613ca7565b9050613117888689898888613d93565b61312281878661409f565b98975050505050505050565b613136614ec2565b82518251146131875760405162461bcd60e51b815260206004820181905260248201527f4d534d206572726f723a206c656e67746820646f6573206e6f74206d61746368604482015260640161085b565b6131c58360008151811061319d5761319d6154b3565b6020026020010151836000815181106131b8576131b86154b3565b60200260200101516140ef565b905060015b82518110156132155761320b826132068684815181106131ec576131ec6154b3565b60200260200101518685815181106131b8576131b86154b3565b614183565b91506001016131ca565b5092915050565b60006132366000805160206158f583398151915283615675565b61101a906000805160206158f58339815191526154a0565b613256614ec2565b5060408051808201909152600181526002602082015290565b613277614ec2565b613280826134e3565b15613289575090565b60405180604001604052808360000151815260200160008051602061587583398151915284602001516132bc9190615675565b6132d4906000805160206158758339815191526154a0565b905292915050565b6133076040518060800160405280600081526020016000815260200160008152602001600081525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b60008060006040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e08201526020850151610100820152845161012082015260608501516101408201526040850151610160820152602060006101808360085afa9150506000519150806134825760405162461bcd60e51b815260206004820152601c60248201527b426e3235343a2050616972696e6720636865636b206661696c65642160201b604482015260640161085b565b50151590505b949350505050565b6060826134a5576134a08261421e565b6120ab565b81511580156134bc57506001600160a01b0384163b155b156134dc5783604051639996b31560e01b815260040161085b9190614f4a565b50806120ab565b80516020909101511590151690565b825160fe9061352d61350383613962565b60405160200161351591815260200190565b60405160208183030381529060405260006004614247565b61356761353d8660000151613962565b60405160200161354f91815260200190565b60405160208183030381529060405260006008614247565b61357761353d8760200151613962565b60405160200161358a9493929190615697565b60408051601f198184030181529190528085526135a76001613962565b6135be600080516020615995833981519152613962565b6135d5600080516020615935833981519152613962565b6135ec600080516020615975833981519152613962565b6136036000805160206158b5833981519152613962565b604051602001613618969594939291906155f6565b60408051601f1981840301815291905280855260e08401516136399061388b565b61364785610100015161388b565b61365586610120015161388b565b61366387610140015161388b565b61367188610160015161388b565b61367f89610180015161388b565b61368d8a6101e0015161388b565b6040516020016136a49897969594939291906156ee565b60408051601f198184030181529190528085526102008401516136c69061388b565b6136d485610220015161388b565b6136e286610240015161388b565b6136f0876101a0015161388b565b6136fe886101c0015161388b565b61370c89610260015161388b565b6040516020016137229796959493929190615793565b60408051601f198184030181529181528186528401516137419061388b565b61374e856060015161388b565b61375b866080015161388b565b6137688760a0015161388b565b6137758860c0015161388b565b60405160200161378a96959493929190615548565b60408051601f1981840301815291905280855282516137c19084906000906137b4576137b46154b3565b6020026020010151613962565b6137d7846001815181106137b4576137b46154b3565b6137ed856002815181106137b4576137b46154b3565b613803866003815181106137b4576137b46154b3565b613819876004815181106137b4576137b46154b3565b61382f886005815181106137b4576137b46154b3565b613845896006815181106137b4576137b46154b3565b61385b8a6007815181106137b4576137b46154b3565b60405160200161387399989796959493929190615825565b60408051601f19818403018152919052909352505050565b60606000613898836134e3565b156138a457600160fe1b175b602083015160008051602061587583398151915260019190911b106138ca5750600160ff1b5b82516138d7908217613962565b6040516020016138e991815260200190565b604051602081830303815290604052915050919050565b602080820151825180516040518381526000948594939291908101855b83811015613937576020818601810151838301520161391d565b5050602091820190209086018190529250600061280c6000805160206158f583398151915285615675565b60008190506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b6008827fff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff0016901c1790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b6010827dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff1916901c1790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b6020827bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1916901c1790506040816001600160401b03600160801b03600160c01b0316901b6040826001600160401b03600160801b03600160c01b031916901c179050608081901b608082901c179050919050565b81516000906000805160206158f583398151915290838015613add5784935060005b82811015613ad157838586099450600101613abb565b50600184039350613ae4565b6001830393505b50505092915050565b600081600003613aff575060006120ab565b60408401516000805160206158f583398151915290600090828186099050858015613b2f57600187039250613b36565b6001840392505b50613b4082614354565b915082828209979650505050505050565b600081600003613b6357506000613488565b835160408601516000805160206158f58339815191529190600090819081908180613b8e8d886143fa565b90506000876001600160401b03811115613baa57613baa614f5e565b604051908082528060200260200182016040528015613bd3578160200160208202803683370190505b509050888b850993506001925060005b88811015613c1857602081026020840101519550898d878c030896508987850960208281028401018890529350600101613be3565b50613c2283614354565b925060005b88811015613c955760208102602084010151955089868609975089848909975060005b89811015613c7457808214613c6c576020810260208401015197508a888a0998505b600101613c4a565b506020810260208f010151955089868909975089888c089a50600101613c27565b50505050505050505050949350505050565b6000806000805160206158f58339815191529050600083602001519050600084604001519050600060019050606088015160808901516101a08901516102408a0151878889838709858501088609945050506101c08901516102608a0151878889838709858501088609945050506101e08901516102808a0151878889838709858501088609945050506102008901516102a08a01518788898387098585010886099450505061022089015191506102c0890151868782898587080985099350505050875160208901518586868309870385089650508485838309860387089998505050505050505050565b613da18686868685876144bf565b60c085015182516000805160206158f583398151915291908190819086906014908110613dd057613dd06154b3565b602002602001018181525050856000015184601481518110613df457613df46154b3565b60200260200101819052508282820990508085601581518110613e1957613e196154b3565b602002602001018181525050856020015184601581518110613e3d57613e3d6154b3565b60200260200101819052508282820990508085601681518110613e6257613e626154b3565b602002602001018181525050856040015184601681518110613e8657613e866154b3565b60200260200101819052508282820990508085601781518110613eab57613eab6154b3565b602002602001018181525050856060015184601781518110613ecf57613ecf6154b3565b60200260200101819052508282820990508085601881518110613ef457613ef46154b3565b602002602001018181525050856080015184601881518110613f1857613f186154b3565b60200260200101819052508282820990508085601981518110613f3d57613f3d6154b3565b602002602001018181525050886040015184601981518110613f6157613f616154b3565b60200260200101819052508282820990508085601a81518110613f8657613f866154b3565b602002602001018181525050886060015184601a81518110613faa57613faa6154b3565b60200260200101819052508282820990508085601b81518110613fcf57613fcf6154b3565b602002602001018181525050886080015184601b81518110613ff357613ff36154b3565b60200260200101819052508282820990508085601c81518110614018576140186154b3565b6020026020010181815250508860a0015184601c8151811061403c5761403c6154b3565b60200260200101819052508282820990508760e0015185601d81518110614065576140656154b3565b6020026020010181815250508560a0015184601d81518110614089576140896154b3565b6020026020010181905250505050505050505050565b6000805160206158f58339815191528381039060005b600a8110156140e65760206015820102840151602082026101a00186015183848284098608945050506001016140b5565b50509392505050565b6140f7614ec2565b6140ff614edc565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa9050808061413157600080fd5b508061417b5760405162461bcd60e51b8152602060048201526019602482015278426e3235343a207363616c6172206d756c206661696c65642160381b604482015260640161085b565b505092915050565b61418b614ec2565b614193614efa565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa905080806141d057600080fd5b508061417b5760405162461bcd60e51b815260206004820152601d60248201527f426e3235343a2067726f7570206164646974696f6e206661696c656421000000604482015260640161085b565b80511561422e5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60608161425581601f615519565b10156142945760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015260640161085b565b61429e8284615519565b845110156142e25760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015260640161085b565b606082158015614301576040519150600082526020820160405261434b565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561433a578051835260209283019201614322565b5050858452601f01601f1916604052505b50949350505050565b60008060006000805160206158f5833981519152905060405160208152602080820152602060408201528460608201526002820360808201528160a08201526020600060c08360055afa9250506000519250816143f35760405162461bcd60e51b815260206004820152601d60248201527f426e3235343a20706f7720707265636f6d70696c65206661696c656421000000604482015260640161085b565b5050919050565b6060826020015182111561442157604051638c5e11f160e01b815260040160405180910390fd5b606083015160016000805160206158f5833981519152846001600160401b0381111561444f5761444f614f5e565b604051908082528060200260200182016040528015614478578160200160208202803683370190505b50935084151915613ae45760208401856020028101600182526020820191505b808210156144b457828585099350838252602082019150614498565b505050505092915050565b6000806000806000806000805160206158f583398151915290508060208b015160208d01510995508a5193508060a08c015160608d0151099250806101a08a0151840891508060808c0151830891508084830993508060008051602061599583398151915284099150806101c08a0151830891508060808c0151830891508084830993508060008051602061593583398151915284099150806101e08a0151830891508060808c0151830891508084830993508060008051602061597583398151915284099150806102008a0151830891508060808c015183089150808483099350806000805160206158b583398151915284099150806102208a0151830891508060808c0151830891508084830993508084870895508860a00151886000815181106145ee576145ee6154b3565b6020026020010181905250858760008151811061460d5761460d6154b3565b6020026020010181815250508060608c01518c51099450806102c08a015186099450806102408a015160608d0151099250806101a08a0151840892508060808c015184089250808386099450806102608a015160608d0151099250806101c08a0151840892508060808c015184089250808386099450806102808a015160608d0151099250806101e08a0151840892508060808c015184089250808386099450806102a08a015160608d0151099250806102008a0151840892508060808c0151840892508083860994508b60c00151886001815181106146ef576146ef6154b3565b602090810291909101015261470485826154a0565b87600181518110614717576147176154b3565b602002602001018181525050886101a001518760028151811061473c5761473c6154b3565b602002602001018181525050886101c0015187600381518110614761576147616154b3565b602002602001018181525050886101e0015187600481518110614786576147866154b3565b602002602001018181525050886102000151876005815181106147ab576147ab6154b3565b6020026020010181815250508b60e00151886002815181106147cf576147cf6154b3565b60200260200101819052508b6101000151886003815181106147f3576147f36154b3565b60200260200101819052508b610120015188600481518110614817576148176154b3565b60200260200101819052508b61014001518860058151811061483b5761483b6154b3565b6020026020010181905250806101c08a01516101a08b0151099250828760068151811061486a5761486a6154b3565b6020026020010181815250508b61016001518860068151811061488f5761488f6154b3565b6020026020010181905250806102008a01516101e08b015109925082876007815181106148be576148be6154b3565b6020026020010181815250508b6101800151886007815181106148e3576148e36154b3565b60200260200101819052506101a08901519250808384099150808283099150808284099250828760088151811061491c5761491c6154b3565b6020026020010181815250508b6101e0015188600881518110614941576149416154b3565b60200260200101819052506101c08901519250808384099150808283099150808284099250828760098151811061497a5761497a6154b3565b6020026020010181815250508b61020001518860098151811061499f5761499f6154b3565b60200260200101819052506101e089015192508083840991508082830991508082840992508287600a815181106149d8576149d86154b3565b6020026020010181815250508b610220015188600a815181106149fd576149fd6154b3565b602002602001018190525061020089015192508083840991508082830991508082840992508287600b81518110614a3657614a366154b3565b6020026020010181815250508b610240015188600b81518110614a5b57614a5b6154b3565b602002602001018190525088610220015181614a7791906154a0565b87600c81518110614a8a57614a8a6154b3565b6020026020010181815250508b6101a0015188600c81518110614aaf57614aaf6154b3565b6020026020010181905250600187600d81518110614acf57614acf6154b3565b6020026020010181815250508b6101c0015188600d81518110614af457614af46154b3565b6020026020010181905250806101c08a01516101a08b0151099250806101e08a015184099250806102008a015184099250806102208a0151840992508287600e81518110614b4457614b446154b3565b6020026020010181815250508b610260015188600e81518110614b6957614b696154b3565b60209081029190910101528951614b8090826154a0565b87600f81518110614b9357614b936154b3565b6020026020010181815250508860c0015188600f81518110614bb757614bb76154b3565b60200260200101819052508060018b510860a08c0151909350819080099150808284099250808360206010028901510991508187601081518110614bfd57614bfd6154b3565b6020026020010181815250508860e0015188601081518110614c2157614c216154b3565b6020026020010181905250808360206011028901510991508187601181518110614c4d57614c4d6154b3565b60200260200101818152505088610100015188601181518110614c7257614c726154b3565b6020026020010181905250808360206012028901510991508187601281518110614c9e57614c9e6154b3565b60200260200101818152505088610120015188601281518110614cc357614cc36154b3565b6020026020010181905250808360206013028901510991508187601381518110614cef57614cef6154b3565b60200260200101818152505088610140015188601381518110614d1457614d146154b3565b6020026020010181905250505050505050505050505050565b60405180610100016040528060006001600160401b0316815260200160006001600160401b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518061028001604052806000815260200160008152602001614da6614ec2565b8152602001614db3614ec2565b8152602001614dc0614ec2565b8152602001614dcd614ec2565b8152602001614dda614ec2565b8152602001614de7614ec2565b8152602001614df4614ec2565b8152602001614e01614ec2565b8152602001614e0e614ec2565b8152602001614e1b614ec2565b8152602001614e28614ec2565b8152602001614e35614ec2565b8152602001614e42614ec2565b8152602001614e4f614ec2565b8152602001614e5c614ec2565b8152602001614e69614ec2565b8152602001614e76614ec2565b8152602001614e83614ec2565b905290565b604051806101000160405280600081526020016000815260200160008152602001600081526020016060815260200160608152602001614e765b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b80356001600160a01b038116811461309457600080fd5b600060208284031215614f4157600080fd5b6120ab82614f18565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b6040516102e081016001600160401b0381118282101715614f9757614f97614f5e565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614fc557614fc5614f5e565b604052919050565b80356001600160401b038116811461309457600080fd5b6000610100808385031215614ff857600080fd5b604051908101906001600160401b038211818310171561501a5761501a614f5e565b8160405280925061502a84614fcd565b815261503860208501614fcd565b602082015260408401356040820152606084013560608201526080840135608082015260a084013560a082015260c084013560c082015260e084013560e0820152505092915050565b60006040828403121561509357600080fd5b604080519081016001600160401b03811182821017156150b5576150b5614f5e565b604052823581526020928301359281019290925250919050565b6000808284036105808112156150e457600080fd5b6150ee8585614fe4565b92506101006104808060ff198401121561510757600080fd5b61510f614f74565b925061511d87838801615081565b835261014061512e88828901615081565b602085015261018061514289828a01615081565b60408601526101c06151568a828b01615081565b606087015261020061516a8b828c01615081565b608088015261024061517e8c828d01615081565b60a08901526102806151928d828e01615081565b60c08a01526102c06151a68e828f01615081565b60e08b01526151b98e6103008f01615081565b898b01526151cb8e6103408f01615081565b6101208b01526151df8e6103808f01615081565b878b01526151f18e6103c08f01615081565b6101608b01526152058e6104008f01615081565b868b01526104408d01356101a08b01526104608d0135858b0152878d01356101e08b01526104a08d0135848b01526104c08d01356102208b01526104e08d0135838b01526105008d01356102608b01526105208d0135828b01526105408d01356102a08b01526105608d0135818b0152505050505050505050809150509250929050565b6000806040838503121561529c57600080fd5b6152a583614f18565b91506020838101356001600160401b03808211156152c257600080fd5b818601915086601f8301126152d657600080fd5b8135818111156152e8576152e8614f5e565b6152fa601f8201601f19168501614f9d565b9150808252878482850101111561531057600080fd5b80848401858401376000848284010152508093505050509250929050565b6001600160401b0391909116815260200190565b803563ffffffff8116811461309457600080fd5b60006020828403121561536857600080fd5b6120ab82615342565b60006020828403121561538357600080fd5b5035919050565b600080600061014084860312156153a057600080fd5b6153aa8585614fe4565b92506153b96101008501615342565b91506153c86101208501614f18565b90509250925092565b600061010082840312156153e457600080fd5b6120ab8383614fe4565b60005b838110156154095781810151838201526020016153f1565b50506000910152565b60208152600082518060208401526154318160408501602087016153ee565b601f01601f19169190910160400192915050565b6000806040838503121561545857600080fd5b50508035926020909101359150565b634e487b7160e01b600052601160045260246000fd5b6001600160401b0381811683821602808216919082811461417b5761417b615467565b8181038181111561101a5761101a615467565b634e487b7160e01b600052603260045260246000fd5b6000816154d8576154d8615467565b506000190190565b6001600160401b0381811683821601908082111561321557613215615467565b60006020828403121561551257600080fd5b5051919050565b8082018082111561101a5761101a615467565b6000825161553e8184602087016153ee565b9190910192915050565b60008751602061555b8285838d016153ee565b88519184019161556e8184848d016153ee565b88519201916155808184848c016153ee565b87519201916155928184848b016153ee565b86519201916155a48184848a016153ee565b85519201916155b681848489016153ee565b919091019998505050505050505050565b600083516155d98184602088016153ee565b8351908301906155ed8183602088016153ee565b01949350505050565b60008751615608818460208c016153ee565b9190910195865250602085019390935260408401919091526060830152608082015260a001919050565b600084516156448184602089016153ee565b8451908301906156588183602089016153ee565b845191019061566b8183602088016153ee565b0195945050505050565b60008261569257634e487b7160e01b600052601260045260246000fd5b500690565b600085516156a9818460208a016153ee565b8551908301906156bd818360208a016153ee565b85519101906156d08183602089016153ee565b84519101906156e38183602088016153ee565b019695505050505050565b6000895160206157018285838f016153ee565b8a51918401916157148184848f016153ee565b8a519201916157268184848e016153ee565b89519201916157388184848d016153ee565b885192019161574a8184848c016153ee565b875192019161575c8184848b016153ee565b865192019161576e8184848a016153ee565b855192019161578081848489016153ee565b919091019b9a5050505050505050505050565b6000885160206157a68285838e016153ee565b8951918401916157b98184848e016153ee565b89519201916157cb8184848d016153ee565b88519201916157dd8184848c016153ee565b87519201916157ef8184848b016153ee565b86519201916158018184848a016153ee565b855192019161581381848489016153ee565b919091019a9950505050505050505050565b60008a51615837818460208f016153ee565b9190910198895250602088019690965260408701949094526060860192909252608085015260a084015260c083015260e08201526101000191905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6882e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e881360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001f3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee31ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb025f3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee42042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4aa164736f6c6343000817000a", - "nonce": "0x0", - "chainId": "0xaa36a7" - }, - "additionalContracts": [], - "isFixedGasLimit": false - }, - { - "hash": "0xf42793ff21170c2af2d5a76308b93f125c7b2af036385234e0754120051c1f2b", - "transactionType": "CREATE", - "contractName": "ERC1967Proxy", - "contractAddress": "0x2630d223087a13978413709ea1d43bea79dc16d1", - "function": null, - "arguments": [ - "0xad3ECFfcB19bcB3464ec5e02Af565bCC08b63afF", - "0xa244d5960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d2000000000000000000000000000000000000000000000000000000000000162e219a25b0eb67ec09251a6f5abc377de144a6e81b7f0c4a01aa8eba3801f89dce2599254c85754d3eb4cb4f899ae0a9368251832178d80a16ab726e4ad6f3839d1e0aee7dd5ea868686d43f25e553e9a4b91f9aac89f451f5fc55a66889f3af100000000000000000000000000000000000000000000000000000000000000015000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000042ba5a503f27f4d1e21a5a09c9edd3ea1d273876" - ], - "transaction": { - "from": "0x42ba5a503f27f4d1e21a5a09c9edd3ea1d273876", - "gas": "0xce99b", - "value": "0x0", - "input": "0x60806040526040516103e73803806103e78339810160408190526100229161025a565b61002c8282610033565b5050610358565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610086576100818282610109565b505050565b61008e610180565b5050565b806001600160a01b03163b6000036100c85780604051634c9c8ce360e01b81526004016100bf9190610328565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051610126919061033c565b600060405180830381855af49150503d8060008114610161576040519150601f19603f3d011682016040523d82523d6000602084013e610166565b606091505b5090925090506101778583836101a1565b95945050505050565b341561019f5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101b6576101b1826101f7565b6101f0565b81511580156101cd57506001600160a01b0384163b155b156101ed5783604051639996b31560e01b81526004016100bf9190610328565b50805b9392505050565b8051156102075780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b83811015610251578181015183820152602001610239565b50506000910152565b6000806040838503121561026d57600080fd5b82516001600160a01b038116811461028457600080fd5b60208401519092506001600160401b03808211156102a157600080fd5b818501915085601f8301126102b557600080fd5b8151818111156102c7576102c7610220565b604051601f8201601f19908116603f011681019083821181831017156102ef576102ef610220565b8160405282815288602084870101111561030857600080fd5b610319836020830160208801610236565b80955050505050509250929050565b6001600160a01b0391909116815260200190565b6000825161034e818460208701610236565b9190910192915050565b6081806103666000396000f3fe6080604052600a600c565b005b60186014601a565b6051565b565b6000604c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015606f573d6000f35b3d6000fdfea164736f6c6343000817000a000000000000000000000000ad3ecffcb19bcb3464ec5e02af565bcc08b63aff00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000144a244d5960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d2000000000000000000000000000000000000000000000000000000000000162e219a25b0eb67ec09251a6f5abc377de144a6e81b7f0c4a01aa8eba3801f89dce2599254c85754d3eb4cb4f899ae0a9368251832178d80a16ab726e4ad6f3839d1e0aee7dd5ea868686d43f25e553e9a4b91f9aac89f451f5fc55a66889f3af100000000000000000000000000000000000000000000000000000000000000015000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000042ba5a503f27f4d1e21a5a09c9edd3ea1d27387600000000000000000000000000000000000000000000000000000000", - "nonce": "0x1", + "input": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612d9262000104600039600081816113ff0152818161142801526115a70152612d926000f3fe6080604052600436106101b75760003560e01c80638584d23f116100ec578063c23b9e9e1161008a578063e030330111610064578063e03033011461061d578063f10567661461063d578063f2fde38b1461065d578063f9e50d191461067d57600080fd5b8063c23b9e9e14610594578063d24d933d146105cd578063d68b52d6146105fd57600080fd5b80639baa3cc9116100c65780639baa3cc9146104ca5780639fdb54a7146104ea578063a7605f4514610540578063ad3cb1cc1461055657600080fd5b80638584d23f1461044d5780638da5cb5b1461046d57806396c1ca61146104aa57600080fd5b8063313df7b11161015957806352d1902d1161013357806352d1902d146103d457806369cc6a04146103f7578063715018a61461040c578063826e41fc1461042157600080fd5b8063313df7b114610346578063426d31941461037e5780634f1ef286146103c157600080fd5b806315a34aac1161019557806315a34aac146102695780632063d4f714610289578063231db243146102a95780632f79889d1461030757600080fd5b8063013fa5fc146101bc57806302b592f3146101de5780630d8e6e2c1461023c575b600080fd5b3480156101c857600080fd5b506101dc6101d7366004612299565b610692565b005b3480156101ea57600080fd5b506101fe6101f93660046122b4565b610745565b60405161023394939291906001600160401b039485168152928416602084015292166040820152606081019190915260800190565b60405180910390f35b34801561024857600080fd5b50604080516002815260006020820181905291810191909152606001610233565b34801561027557600080fd5b506101dc610284366004612552565b610790565b34801561029557600080fd5b506101dc6102a436600461262f565b6108d2565b3480156102b557600080fd5b50600b54600c54600d546102dc926001600160401b0380821693600160401b909204169184565b604080516001600160401b039586168152949093166020850152918301526060820152608001610233565b34801561031357600080fd5b5060085461032e90600160c01b90046001600160401b031681565b6040516001600160401b039091168152602001610233565b34801561035257600080fd5b50600854610366906001600160a01b031681565b6040516001600160a01b039091168152602001610233565b34801561038a57600080fd5b506000546001546002546003546103a19392919084565b604080519485526020850193909352918301526060820152608001610233565b6101dc6103cf36600461265c565b610a1b565b3480156103e057600080fd5b506103e9610a3a565b604051908152602001610233565b34801561040357600080fd5b506101dc610a57565b34801561041857600080fd5b506101dc610ac6565b34801561042d57600080fd5b506008546001600160a01b031615155b6040519015158152602001610233565b34801561045957600080fd5b506103e96104683660046122b4565b610ad8565b34801561047957600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610366565b3480156104b657600080fd5b506101dc6104c5366004612715565b610bff565b3480156104d657600080fd5b506101dc6104e5366004612730565b610c74565b3480156104f657600080fd5b5060065460075461051a916001600160401b0380821692600160401b909204169083565b604080516001600160401b03948516815293909216602084015290820152606001610233565b34801561054c57600080fd5b506103e9600a5481565b34801561056257600080fd5b50610587604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161023391906127e0565b3480156105a057600080fd5b506008546105b890600160a01b900463ffffffff1681565b60405163ffffffff9091168152602001610233565b3480156105d957600080fd5b5060045460055461051a916001600160401b0380821692600160401b909204169083565b34801561060957600080fd5b506101dc6106183660046122b4565b610d98565b34801561062957600080fd5b5061043d610638366004612813565b610da5565b34801561064957600080fd5b506101dc610658366004612813565b610ebf565b34801561066957600080fd5b506101dc610678366004612299565b610fc3565b34801561068957600080fd5b506009546103e9565b61069a611001565b6001600160a01b0381166106c15760405163e6c4247b60e01b815260040160405180910390fd5b6008546001600160a01b03908116908216036106f05760405163a863aec960e01b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527f8017bb887fdf8fca4314a9d40f6e73b3b81002d67e5cfa85d88173af6aa46072906020015b60405180910390a150565b6009818154811061075557600080fd5b6000918252602090912060029091020180546001909101546001600160401b038083169350600160401b8304811692600160801b9004169084565b60065482516001600160401b0391821691161115806107c9575060065460208301516001600160401b03600160401b9092048216911611155b156107e75760405163051c46ef60e01b815260040160405180910390fd5b6107f4826040015161105c565b6107fe82826110cc565b600a54156108535760405162461bcd60e51b815260206004820152601d60248201527f6e65774669656c642063616e206f6e6c792062652073657420746f203000000060448201526064015b60405180910390fd5b8151600b80546020808601516001600160401b039485166001600160801b03199093168317600160401b9590911694850217909255604080860151600c8190556060870151600d55905190815290917fa04a773924505a418564363725f56832f5772e6b8d0dbd6efce724dfe803dae691015b60405180910390a35050565b6008546001600160a01b0316151580156108f757506008546001600160a01b03163314155b15610915576040516301474c8f60e71b815260040160405180910390fd5b60065482516001600160401b03918216911611158061094e575060065460208301516001600160401b03600160401b9092048216911611155b1561096c5760405163051c46ef60e01b815260040160405180910390fd5b610979826040015161105c565b61098382826110cc565b81516006805460208501516001600160401b03908116600160401b026001600160801b031990921693169290921791909117905560408201516007556109ca4342846111c4565b81602001516001600160401b031682600001516001600160401b03167fa04a773924505a418564363725f56832f5772e6b8d0dbd6efce724dfe803dae684604001516040516108c691815260200190565b610a236113f4565b610a2c82611499565b610a3682826114da565b5050565b6000610a4461159c565b50600080516020612d6683398151915290565b610a5f611001565b6008546001600160a01b031615610aab57600880546001600160a01b03191690556040517f9a5f57de856dd668c54dd95e5c55df93432171cbca49a8776d5620ea59c0245090600090a1565b60405163a863aec960e01b815260040160405180910390fd5b565b610ace611001565b610ac460006115e5565b60098054600091610aea60018361284b565b81548110610afa57610afa61285e565b6000918252602090912060029091020154600160801b90046001600160401b03168310610b3a57604051631856a49960e21b815260040160405180910390fd5b600854600160c01b90046001600160401b03165b81811015610bc7578360098281548110610b6a57610b6a61285e565b6000918252602090912060029091020154600160801b90046001600160401b03161115610bbf5760098181548110610ba457610ba461285e565b90600052602060002090600202016001015492505050919050565b600101610b4e565b506009610bd560018361284b565b81548110610be557610be561285e565b906000526020600020906002020160010154915050919050565b610c07611001565b610e108163ffffffff161080610c30575060085463ffffffff600160a01b909104811690821611155b15610c4e576040516307a5077760e51b815260040160405180910390fd5b6008805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610cb95750825b90506000826001600160401b03166001148015610cd55750303b155b905081158015610ce3575080155b15610d015760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610d2b57845460ff60401b1916600160401b1785555b610d3486611656565b610d3c611667565b610d4789898961166f565b8315610d8d57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b610da0611001565b600a55565b60095460009043841180610db95750600381105b15610dd75760405163b0b4387760e01b815260040160405180910390fd5b60008080610de660018561284b565b90505b81610e88578660098281548110610e0257610e0261285e565b60009182526020909120600290910201546001600160401b031611610e55576001915060098181548110610e3857610e3861285e565b60009182526020909120600290910201546001600160401b031692505b60028110610e8857600854600160c01b90046001600160401b03168114610e885780610e8081612874565b915050610de9565b81610ea65760405163b0b4387760e01b815260040160405180910390fd5b85610eb1848961284b565b119450505050505b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610f08575080546001600160401b03808416911610155b15610f265760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03838116918217600160401b9081178455600a879055600654600b805483830485169093026001600160801b03199093169190931617179055600754600c55600d849055815460ff60401b191682556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b610fcb611001565b6001600160a01b038116610ff557604051631e4fbdf760e01b81526000600482015260240161084a565b610ffe816115e5565b50565b336110337f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610ac45760405163118cdaa760e01b815233600482015260240161084a565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001811080610a365760405162461bcd60e51b815260206004820152601b60248201527f426e3235343a20696e76616c6964207363616c6172206669656c640000000000604482015260640161084a565b60006110d661177a565b90506110e0611fd2565b83516001600160401b0390811682526020850151168160016020020152604084810151828201526001546060830152600254608083015260035460a083015260005460c08301525163ce537a7760e01b815273364dbd12edeb5061435f3f185f9587241bbce5279063ce537a779061116090859085908890600401612a92565b602060405180830381865af415801561117d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a19190612cc1565b6111be576040516309bde33960e01b815260040160405180910390fd5b50505050565b6009541580159061127e575060085460098054600160a01b830463ffffffff1692600160c01b90046001600160401b03169081106112045761120461285e565b600091825260209091206002909102015460098054600160401b9092046001600160401b0316916112379060019061284b565b815481106112475761124761285e565b60009182526020909120600290910201546112729190600160401b90046001600160401b0316612ce3565b6001600160401b031610155b1561131257600854600980549091600160c01b90046001600160401b03169081106112ab576112ab61285e565b60009182526020822060029091020180546001600160c01b03191681556001015560088054600160c01b90046001600160401b03169060186112ec83612d0a565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505b604080516080810182526001600160401b0394851681529284166020808501918252830151851684830190815292909101516060840190815260098054600181018255600091909152935160029094027f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af81018054935194518716600160801b0267ffffffffffffffff60801b19958816600160401b026001600160801b03199095169690971695909517929092179290921693909317909155517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b090910155565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061147b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661146f600080516020612d66833981519152546001600160a01b031690565b6001600160a01b031614155b15610ac45760405163703e46dd60e11b815260040160405180910390fd5b6114a1611001565b6040516001600160a01b03821681527ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d9060200161073a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611534575060408051601f3d908101601f1916820190925261153191810190612d30565b60015b61155c57604051634c9c8ce360e01b81526001600160a01b038316600482015260240161084a565b600080516020612d66833981519152811461158d57604051632a87526960e21b81526004810182905260240161084a565b6115978383611da9565b505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ac45760405163703e46dd60e11b815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b61165e611dff565b610ffe81611e48565b610ac4611dff565b82516001600160401b0316151580611693575060208301516001600160401b031615155b806116a057506020820151155b806116ad57506040820151155b806116ba57506060820151155b806116c457508151155b156116e2576040516350dd03f760e11b815260040160405180910390fd5b8251600480546020808701516001600160401b03908116600160401b026001600160801b031993841691909516908117851790935560408088015160058190558751600055918701516001558601516002556060860151600355600680549092169092179092179091556007556008805463ffffffff8316600160a01b0263ffffffff60a01b199091161790556115974342856111c4565b611782611ff0565b621000008152600760208201527f23783d0e9777b7af65fbf849da7edb75e74b1eaf503e025d7f2f7f80991befa26040820151527f2a4e2fe8adfa53f468525582d5184c4c70bbdb946c21f216418a9879705e54a76020604083015101527f0624b2c1e77f24afceaf39451743b9fa80d5853fca7ba00389c675650774009b6060820151527f250d7719e94ca2df00dfe327938f5a8d4d837779b99837ca777a53d39127b1796020606083015101527f0dc09515152eaea66d0db2f571cc995e369d26fe647394f10db5398c917519dc6080820151527f1273144d6cec2c4a68b24a149379c0f5592bb7fbddbe32fa171919950ca404cb6020608083015101527f119521bb68caec216e2f05eeb466fb3abfe1f39baf7fe7cb392ea057b6a2d9bf60a0820151527f2d52adeaba8045e53ab526fe9982d0ea452def6b3ea0253d27a19ef3b46e8428602060a083015101527f16c3b5b217d302975a920d13374524d7a52e4a50fd7fb930842271ebf4a84efd60c0820151527f200788916b907b196972bde304318e885a2521514b2db5e4a11899c51204f089602060c083015101527f1127581afe753defca9aef12e7332db9978a200b1699ce3888c0f3aea6111dc360e0820151527f0881e13f00723be1a04872ed02b2d078c31e80feaf27724e262ce97c2cb0bb1d602060e083015101527f1482a3a6bb91d6483d153683e2404f2f5546e0e895530fdf132091498406e3de610100820151527efa52db3d52d905ead1248102f3a80a43a90d8400c68f60a62c543c417b2f4b602061010083015101527f0a57dadd4a55199525ac6ac6fabc87a4cccfdc98142bcef9dbf47de00ecc5164610120820151527f18d95abd9b8e12c36936aa218cfff582548a6bbff25c338c2006eaeb1fe5b696602061012083015101527f2bc40e91dd169b8bc143a02952a1b6c6e627bfeb7a2bbe5078e14123f3c54c1c610140820151527f108d65a20c579b6d9883275eb6889fc3f5fc79735ca9f611a13b67daa2fbc8d0602061014083015101527f21bc1f86d0608e5f0626b467ee6f8282b619223f60a7acb0fc63ba7bdaf783be610160820151527f05ef3282f8eef01515fb9a8a7d6ca06b8b007d1d512403efb268fb03ce5f09e9602061016083015101527f2cab66c1cb5a83869e73ac34fbe467486999babd541d9010ee9a804806eee4ef610180820151527f2db1982419c5a4a17593acff9535fa967683d75c8aec01319b64b84aada2ad84602061018083015101527f2c38667c6c7eb868bdd30c34dd3f4b84d9b9b1a27d7867b364c8b7831423e9086101a0820151527f2b2cb4044dd51165c48138219d51cf8d1689f91ed3eeefead6e055eb488a2ce260206101a083015101527f2d48e54703011df2c74a14dafde3af4fd83ec71875d8ddc3554658640cc955016101c0820151527f243a99d80d32eb5408b59d5b08302bede070d3fb0a8efe2f2262f865bffb4d0d60206101c083015101527f0455d2325bf6269a66f07d838f55f36947a3cd9b87edd8480bced95cbb45cc116101e0820151527f0f66d9085a6ed60b838179987e240992bff4c0516ccf6ccde4a1ca94ce8b986460206101e083015101527f2bac0d23c8585d1487ec611b5effc97e5852fea43a7cba36ccdd2c207931f394610200820151527f1860b54e01a06aea5adb4b13bf5baebab92b736807a3a89ff2040992b06ee6ec602061020083015101527f0c0bfa1c2fc6f8ed01233d5168db1e1dfe725504f032f669f50a92ae77c72906610220820151527f0d741e124c7d1069b8a400cbcdcfd90128a533901ad4de1e037fe72984dc34cf602061022083015101527f01cfed30085c9efce04668205794aa39b1a8ee591234b4c77a22f8c26d899e05610240820151527f2ab68ac82d36cedb647d14a5b0035e8c9a0be84780b7bae1133a27a880966ed1602061024083015101527f072e1d50f8b5cf8d574b3847276477d95bbd5116351000841f728da44f4043b5610260820151527f23f8ea6eacd0876d57220f57eabacbe76a2323411663731a251d5dca36f1b59f602061026083015101527fb0838893ec1f237e8b07323b0744599f4e97b598b3b589bcc2bc37b8d5c418016102808201527fc18393c0fa30fe4e8b038e357ad851eae8de9107584effe7c7f1f651b2010e266102a082015290565b611db282611e50565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611df7576115978282611eb5565b610a36611f2b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610ac457604051631afcd79f60e31b815260040160405180910390fd5b610fcb611dff565b806001600160a01b03163b600003611e8657604051634c9c8ce360e01b81526001600160a01b038216600482015260240161084a565b600080516020612d6683398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611ed29190612d49565b600060405180830381855af49150503d8060008114611f0d576040519150601f19603f3d011682016040523d82523d6000602084013e611f12565b606091505b5091509150611f22858383611f4a565b95945050505050565b3415610ac45760405163b398979f60e01b815260040160405180910390fd5b606082611f5f57611f5a82611fa9565b611fa2565b8151158015611f7657506001600160a01b0384163b155b15611f9f57604051639996b31560e01b81526001600160a01b038516600482015260240161084a565b50805b9392505050565b805115611fb95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6040518060e001604052806007906020820280368337509192915050565b604051806102c001604052806000815260200160008152602001612027604051806040016040528060008152602001600081525090565b8152602001612049604051806040016040528060008152602001600081525090565b815260200161206b604051806040016040528060008152602001600081525090565b815260200161208d604051806040016040528060008152602001600081525090565b81526020016120af604051806040016040528060008152602001600081525090565b81526020016120d1604051806040016040528060008152602001600081525090565b81526020016120f3604051806040016040528060008152602001600081525090565b8152602001612115604051806040016040528060008152602001600081525090565b8152602001612137604051806040016040528060008152602001600081525090565b8152602001612159604051806040016040528060008152602001600081525090565b815260200161217b604051806040016040528060008152602001600081525090565b815260200161219d604051806040016040528060008152602001600081525090565b81526020016121bf604051806040016040528060008152602001600081525090565b81526020016121e1604051806040016040528060008152602001600081525090565b8152602001612203604051806040016040528060008152602001600081525090565b8152602001612225604051806040016040528060008152602001600081525090565b8152602001612247604051806040016040528060008152602001600081525090565b8152602001612269604051806040016040528060008152602001600081525090565b815260006020820181905260409091015290565b80356001600160a01b038116811461229457600080fd5b919050565b6000602082840312156122ab57600080fd5b611fa28261227d565b6000602082840312156122c657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516102e081016001600160401b0381118282101715612306576123066122cd565b60405290565b604051608081016001600160401b0381118282101715612306576123066122cd565b604051601f8201601f191681016001600160401b0381118282101715612356576123566122cd565b604052919050565b80356001600160401b038116811461229457600080fd5b60006040828403121561238757600080fd5b604051604081018181106001600160401b03821117156123a9576123a96122cd565b604052823581526020928301359281019290925250919050565b600061048082840312156123d657600080fd5b6123de6122e3565b90506123ea8383612375565b81526123f98360408401612375565b602082015261240b8360808401612375565b604082015261241d8360c08401612375565b606082015261010061243184828501612375565b608083015261014061244585828601612375565b60a084015261018061245986828701612375565b60c08501526101c061246d87828801612375565b60e086015261020061248188828901612375565b85870152610240945061249688868901612375565b6101208701526102806124ab89828a01612375565b858801526102c094506124c089868a01612375565b6101608801526124d4896103008a01612375565b848801526103408801356101a0880152610360880135838801526103808801356101e08801526103a0880135828801526103c08801356102208801526103e08801358688015261040088013561026088015261042088013581880152505050506104408401356102a084015261046084013581840152505092915050565b60008082840361050081121561256757600080fd5b608081121561257557600080fd5b5061257e61230c565b6125878461235e565b81526125956020850161235e565b60208201526040840135604082015260608401356060820152809250506125bf84608085016123c3565b90509250929050565b6000606082840312156125da57600080fd5b604051606081018181106001600160401b03821117156125fc576125fc6122cd565b60405290508061260b8361235e565b81526126196020840161235e565b6020820152604083013560408201525092915050565b6000806104e0838503121561264357600080fd5b61264d84846125c8565b91506125bf84606085016123c3565b6000806040838503121561266f57600080fd5b6126788361227d565b91506020808401356001600160401b038082111561269557600080fd5b818601915086601f8301126126a957600080fd5b8135818111156126bb576126bb6122cd565b6126cd601f8201601f1916850161232e565b915080825287848285010111156126e357600080fd5b80848401858401376000848284010152508093505050509250929050565b803563ffffffff8116811461229457600080fd5b60006020828403121561272757600080fd5b611fa282612701565b60008060008084860361012081121561274857600080fd5b61275287876125c8565b94506080605f198201121561276657600080fd5b5061276f61230c565b60608681013582526080870135602083015260a0870135604083015260c08701359082015292506127a260e08601612701565b91506127b1610100860161227d565b905092959194509250565b60005b838110156127d75781810151838201526020016127bf565b50506000910152565b60208152600082518060208401526127ff8160408501602087016127bc565b601f01601f19169190910160400192915050565b6000806040838503121561282657600080fd5b50508035926020909101359150565b634e487b7160e01b600052601160045260246000fd5b81810381811115610eb957610eb9612835565b634e487b7160e01b600052603260045260246000fd5b60008161288357612883612835565b506000190190565b8060005b60078110156111be57815184526020938401939091019060010161288f565b6128c382825180518252602090810151910152565b6020818101518051604085015290810151606084015250604081015180516080840152602081015160a0840152506060810151805160c0840152602081015160e08401525060808101516101006129268185018380518252602090810151910152565b60a083015191506101406129468186018480518252602090810151910152565b60c084015192506101806129668187018580518252602090810151910152565b60e085015193506101c06129868188018680518252602090810151910152565b928501519350610200926129a68785018680518252602090810151910152565b61012086015194506102406129c78189018780518252602090810151910152565b928601519450610280926129e78885018780518252602090810151910152565b61016087015195506102c0612a08818a018880518252602090810151910152565b9287015180516103008a0152602001516103208901526101a0870151610340890152908601516103608801526101e0860151610380880152928501516103a08701526102208501516103c0870152918401516103e08601526102608401516104008601528301516104208501526102a0830151610440850152909101516104609092019190915250565b6000610a608201905084518252602085015160208301526040850151612ac5604084018280518252602090810151910152565b50606085015180516080840152602081015160a0840152506080850151805160c0840152602081015160e08401525060a0850151610100612b128185018380518252602090810151910152565b60c08701519150610140612b328186018480518252602090810151910152565b60e08801519250610180612b528187018580518252602090810151910152565b9188015192506101c091612b728684018580518252602090810151910152565b6101208901519350610200612b938188018680518252602090810151910152565b91890151935061024091612bb38784018680518252602090810151910152565b6101608a01519450610280612bd48189018780518252602090810151910152565b918a015180516102c08901526020908101516102e08901526101a08b015180516103008a0152810151610320890152938a015180516103408901528401516103608801526101e08a015180516103808901528401516103a088015289015180516103c08801528301516103e087015261022089015180516104008801528301516104208701529088015180516104408701528201516104608601526102608801518051610480870152909101516104a08501528601516104c0840152506102a08501516104e0830152612cab61050083018561288b565b612cb96105e08301846128ae565b949350505050565b600060208284031215612cd357600080fd5b81518015158114611fa257600080fd5b6001600160401b03828116828216039080821115612d0357612d03612835565b5092915050565b60006001600160401b03808316818103612d2657612d26612835565b6001019392505050565b600060208284031215612d4257600080fd5b5051919050565b60008251612d5b8184602087016127bc565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c6343000817000a", + "nonce": "0x2bc3", "chainId": "0xaa36a7" }, "additionalContracts": [], "isFixedGasLimit": false } ], - "receipts": [ - { - "status": "0x1", - "cumulativeGasUsed": "0xd70b5a", - "logs": [ - { - "address": "0xad3ecffcb19bcb3464ec5e02af565bcc08b63aff", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", - "blockHash": "0x4982923014bfd512113084a29fb3b956cdbf85be776eac7b26b9ea277554ba82", - "blockNumber": "0x6000b2", - "transactionHash": "0xd3a615e5e1565625a38c1068a1f27f1813db90dbfb61ab93a273a06e32df2a23", - "transactionIndex": "0x4b", - "logIndex": "0x7d", - "removed": false - } - ], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000080000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x0", - "transactionHash": "0xd3a615e5e1565625a38c1068a1f27f1813db90dbfb61ab93a273a06e32df2a23", - "transactionIndex": "0x4b", - "blockHash": "0x4982923014bfd512113084a29fb3b956cdbf85be776eac7b26b9ea277554ba82", - "blockNumber": "0x6000b2", - "gasUsed": "0x4cf45c", - "effectiveGasPrice": "0x834824ce", - "from": "0x42ba5a503f27f4d1e21a5a09c9edd3ea1d273876", - "to": null, - "contractAddress": "0xad3ecffcb19bcb3464ec5e02af565bcc08b63aff" - }, - { - "status": "0x1", - "cumulativeGasUsed": "0xe0fa7c", - "logs": [ - { - "address": "0x2630d223087a13978413709ea1d43bea79dc16d1", - "topics": [ - "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x000000000000000000000000ad3ecffcb19bcb3464ec5e02af565bcc08b63aff" - ], - "data": "0x", - "blockHash": "0x4982923014bfd512113084a29fb3b956cdbf85be776eac7b26b9ea277554ba82", - "blockNumber": "0x6000b2", - "transactionHash": "0xf42793ff21170c2af2d5a76308b93f125c7b2af036385234e0754120051c1f2b", - "transactionIndex": "0x4c", - "logIndex": "0x7e", - "removed": false - }, - { - "address": "0x2630d223087a13978413709ea1d43bea79dc16d1", - "topics": [ - "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x00000000000000000000000042ba5a503f27f4d1e21a5a09c9edd3ea1d273876" - ], - "data": "0x", - "blockHash": "0x4982923014bfd512113084a29fb3b956cdbf85be776eac7b26b9ea277554ba82", - "blockNumber": "0x6000b2", - "transactionHash": "0xf42793ff21170c2af2d5a76308b93f125c7b2af036385234e0754120051c1f2b", - "transactionIndex": "0x4c", - "logIndex": "0x7f", - "removed": false - }, - { - "address": "0x2630d223087a13978413709ea1d43bea79dc16d1", - "topics": [ - "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" - ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "blockHash": "0x4982923014bfd512113084a29fb3b956cdbf85be776eac7b26b9ea277554ba82", - "blockNumber": "0x6000b2", - "transactionHash": "0xf42793ff21170c2af2d5a76308b93f125c7b2af036385234e0754120051c1f2b", - "transactionIndex": "0x4c", - "logIndex": "0x80", - "removed": false - } - ], - "logsBloom": "0x00000000000000000000000200800000400000000000000000800000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000002000001000000000000000000000000000000000000020000000000000000000820000000000000000000000000000000400000000000000000000800000000000000000000000080000000000040000000000000000000000000000000000000000000000000000000000000000000800000000020100000000000000000000000000000000004000000000080000020000000000000000000000000000000000000000000000000000000040000000000", - "type": "0x0", - "transactionHash": "0xf42793ff21170c2af2d5a76308b93f125c7b2af036385234e0754120051c1f2b", - "transactionIndex": "0x4c", - "blockHash": "0x4982923014bfd512113084a29fb3b956cdbf85be776eac7b26b9ea277554ba82", - "blockNumber": "0x6000b2", - "gasUsed": "0x9ef22", - "effectiveGasPrice": "0x834824ce", - "from": "0x42ba5a503f27f4d1e21a5a09c9edd3ea1d273876", - "to": null, - "contractAddress": "0x2630d223087a13978413709ea1d43bea79dc16d1" - } + "receipts": [], + "libraries": [ + "contracts/src/libraries/PlonkVerifier.sol:PlonkVerifier:0x364dbd12eDEB5061435F3f185f9587241bbcE527" ], - "libraries": [], "pending": [], "returns": { - "proxyAddress": { - "internal_type": "address payable", - "value": "0x2630D223087A13978413709ea1D43BEA79dC16d1" - }, - "admin": { + "implementationAddress": { "internal_type": "address", - "value": "0x42Ba5A503F27F4D1E21a5a09c9EdD3eA1d273876" + "value": "0xC644A84734A7329eE46d3B6704746179d272f990" }, - "2": { - "internal_type": "struct LightClient.LightClientState", - "value": "(0, 0, 1234, 5678, 15198678585580246251692354046620241178086945668772252070628837665439280045518, 17006160426117517054610525022479724455324142717962158209641183699803667923869, 13588699936297641358648475784636038162266787982044803430220317237560319651600, 21)" + "result": { + "internal_type": "bytes", + "value": "0x546865206f74686572206f776e657273206f66207468652053616665204d756c74697369672077616c6c6574206e65656420746f207369676e20746865207472616e73616374696f6e207669612074686520536166652055492068747470733a2f2f6170702e736166652e676c6f62616c2f7472616e73616374696f6e732f71756575653f736166653d7365703a307863353666413635303564313062463332326530313332376532323437394445373843334266316345" } }, - "timestamp": 1720726496, + "timestamp": 1725920119, "chain": 11155111, - "commit": "d482b424" + "commit": "3085a658" } \ No newline at end of file diff --git a/contracts/broadcast/LightClientWithDefender.s.sol/11155111/run-1723219834.json b/contracts/broadcast/LightClientWithDefender.s.sol/11155111/run-1723219834.json new file mode 100644 index 0000000000..9a02db0105 --- /dev/null +++ b/contracts/broadcast/LightClientWithDefender.s.sol/11155111/run-1723219834.json @@ -0,0 +1,153 @@ +{ + "transactions": [ + { + "hash": "0x1612f492d94ab4cc7bddc46232364993bfd35e8eb54421f7fee05cb811908ba5", + "transactionType": "CREATE", + "contractName": "LightClient", + "contractAddress": "0xf1d9d1d4f664cbb2e39c5e07523ae8c11cdece5c", + "function": null, + "arguments": null, + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0x640315", + "value": "0x0", + "input": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516159c162000104600039600081816114320152818161145b01526115c701526159c16000f3fe6080604052600436106101525760003560e01c8063013fa5fc146101575780630d8e6e2c14610179578063313df7b1146101ab578063382b215a146101d8578063409939b7146101fc5780634847ae5d1461021c5780634f1ef2861461029e57806352d1902d146102b157806354646085146102c657806362827733146102db57806369cc6a04146102f15780637053fc5114610306578063715018a61461031b578063766718081461033057806376b6b7cb146103645780637f17baad1461037a57806382d07ff31461042d5780638584d23f146104425780638da5cb5b14610486578063a244d5961461049b578063a51e6fea146104bb578063aa922732146104db578063ad3cb1cc146104fb578063bd32519a14610539578063ca6fe8551461056a578063db13b60a14610580578063e0303301146105bf578063f0682054146105df578063f2fde38b14610611575b600080fd5b34801561016357600080fd5b50610177610172366004614f2f565b610631565b005b34801561018557600080fd5b506040805160018152600060208201819052918101919091526060015b60405180910390f35b3480156101b757600080fd5b506006546101cb906001600160a01b031681565b6040516101a29190614f4a565b3480156101e457600080fd5b506101ee60035481565b6040519081526020016101a2565b34801561020857600080fd5b506101776102173660046150cf565b6106f1565b34801561022857600080fd5b50610231610a1c565b6040516101a2919060006101008201905060018060401b038084511683528060208501511660208401525060408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e083015292915050565b6101776102ac366004615289565b610aae565b3480156102bd57600080fd5b506101ee610acd565b3480156102d257600080fd5b506008546101ee565b3480156102e757600080fd5b506101ee60025481565b3480156102fd57600080fd5b50610177610aea565b34801561031257600080fd5b506007546101ee565b34801561032757600080fd5b50610177610b5a565b34801561033c57600080fd5b5060005461035790600160601b90046001600160401b031681565b6040516101a2919061532e565b34801561037057600080fd5b506101ee60015481565b34801561038657600080fd5b506103e7610395366004615356565b600560208190526000918252604090912080546001820154600283015460038401546004850154958501546006909501546001600160401b0380861697600160401b9096041695939492939192919088565b604080516001600160401b03998a168152989097166020890152958701949094526060860192909252608085015260a084015260c083015260e0820152610100016101a2565b34801561043957600080fd5b50610231610b6c565b34801561044e57600080fd5b5061046261045d366004615371565b610bfc565b6040805182516001600160401b0316815260209283015192810192909252016101a2565b34801561049257600080fd5b506101cb610d56565b3480156104a757600080fd5b506101776104b636600461538a565b610d71565b3480156104c757600080fd5b506101ee6104d6366004615371565b610e9c565b3480156104e757600080fd5b506101ee6104f63660046153d1565b610ebd565b34801561050757600080fd5b5061052c604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101a29190615412565b34801561054557600080fd5b5060065461055a90600160a01b900460ff1681565b60405190151581526020016101a2565b34801561057657600080fd5b506101ee60045481565b34801561058c57600080fd5b506105a061059b366004615371565b610f05565b604080516001600160401b0390931683526020830191909152016101a2565b3480156105cb57600080fd5b5061055a6105da366004615445565b610f3d565b3480156105eb57600080fd5b506000546105fc9063ffffffff1681565b60405163ffffffff90911681526020016101a2565b34801561061d57600080fd5b5061017761062c366004614f2f565b611020565b61063961105e565b6001600160a01b0381166106605760405163e6c4247b60e01b815260040160405180910390fd5b6006546001600160a01b039081169082160361068f5760405163a863aec960e01b815260040160405180910390fd5b600680546001600160a81b0319166001600160a01b0380841691909117600160a01b17918290556040517f8017bb887fdf8fca4314a9d40f6e73b3b81002d67e5cfa85d88173af6aa46072926106e6921690614f4a565b60405180910390a150565b600654600160a01b900460ff16801561071557506006546001600160a01b03163314155b1561075c576006546001600160a01b0316610743576040516312e6d1e760e11b815260040160405180910390fd5b6040516301474c8f60e71b815260040160405180910390fd5b610764610b6c565b5182516001600160401b0391821691161115806107a25750610784610b6c565b602001516001600160401b031682602001516001600160401b031611155b156107c05760405163051c46ef60e01b815260040160405180910390fd5b600080546107e59063ffffffff811690600160601b90046001600160401b031661547d565b6000805463ffffffff600160401b91829004168252600560205260409091205491925090046001600160401b039081169082161480158161083b5750816001600160401b031684602001516001600160401b0316115b15610864578160405163036466bf60e31b815260040161085b919061532e565b60405180910390fd5b6108718460400151611090565b61087e8460600151611090565b61088b8460800151611090565b6108988460a00151611090565b6108a58460c00151611090565b80156108b3576108b36110ec565b6108bd8484611237565b60008054600160401b9081900463ffffffff168252600560208181526040808520895181548b850180516001600160401b039384166001600160801b0319909316929092179183169097021782558a8301805160018085019190915560608d015160028086019190915560808e0151600386015560a08e0151600486015560c08e01519785019790975560e08d01516006909401939093556007805480850182559089524360008051602061589583398151915290910155835180850185528751831681528151818701908152600880549586018155909952516000805160206159158339815191529390960292830180546001600160401b03191696831696909617909555955160008051602061595583398151915290910155925188519251935193845284169391909116917fa04a773924505a418564363725f56832f5772e6b8d0dbd6efce724dfe803dae6910160405180910390a350505050565b610a24614d2d565b5060008054600160201b900463ffffffff1681526005602081815260409283902083516101008101855281546001600160401b038082168352600160401b90910416928101929092526001810154938201939093526002830154606082015260038301546080820152600483015460a08201529082015460c082015260069091015460e082015290565b610ab6611427565b610abf826114cc565b610ac98282611503565b5050565b6000610ad76115bc565b506000805160206158d583398151915290565b610af261105e565b600654600160a01b900460ff1615610b3f57600680546001600160a81b03191690556040517f9a5f57de856dd668c54dd95e5c55df93432171cbca49a8776d5620ea59c0245090600090a1565b60405163a863aec960e01b815260040160405180910390fd5b565b610b6261105e565b610b586000611605565b610b74614d2d565b506000805463ffffffff600160401b918290041682526005602081815260409384902084516101008101865281546001600160401b038082168352959004909416918401919091526001810154938301939093526002830154606083015260038301546080830152600483015460a083015282015460c082015260069091015460e082015290565b60408051808201909152600080825260208201526008805490610c206001836154a0565b81548110610c3057610c306154b3565b60009182526020909120600290910201546001600160401b03168310610c6957604051631856a49960e21b815260040160405180910390fd5b60005b81811015610cfe578360088281548110610c8857610c886154b3565b60009182526020909120600290910201546001600160401b03161115610cf65760088181548110610cbb57610cbb6154b3565b60009182526020918290206040805180820190915260029092020180546001600160401b031682526001015491810191909152949350505050565b600101610c6c565b506008610d0c6001836154a0565b81548110610d1c57610d1c6154b3565b60009182526020918290206040805180820190915260029092020180546001600160401b0316825260010154918101919091529392505050565b600080610d61611661565b546001600160a01b031692915050565b6000610d7b611685565b805490915060ff600160401b82041615906001600160401b0316600081158015610da25750825b90506000826001600160401b03166001148015610dbe5750303b155b905081158015610dcc575080155b15610dea5760405163f92ee8a960e01b815260040160405180910390fd5b84546001600160401b03191660011785558315610e1357845460ff60401b1916600160401b1785555b610e1c866116a9565b610e246116ba565b60008054600160201b600160601b031916600160401b179055610e4788886116c2565b8315610e9257845460ff60401b191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610e899060019061532e565b60405180910390a15b5050505050505050565b60078181548110610eac57600080fd5b600091825260209091200154905081565b60808082015160a083015160c0840151604080516020810194909452830191909152606082015260009101604051602081830303815290604052805190602001209050919050565b60088181548110610f1557600080fd5b6000918252602090912060029091020180546001909101546001600160401b03909116915082565b60075460009043841180610f515750600381105b15610f6f5760405163b0b4387760e01b815260040160405180910390fd5b60008080610f7e6001856154a0565b90505b81610fe9578660078281548110610f9a57610f9a6154b3565b906000526020600020015411610fcf576001915060078181548110610fc157610fc16154b3565b906000526020600020015492505b60028110610fe95780610fe1816154c9565b915050610f81565b816110075760405163b0b4387760e01b815260040160405180910390fd5b8561101284896154a0565b119450505050505b92915050565b61102861105e565b6001600160a01b038116611052576000604051631e4fbdf760e01b815260040161085b9190614f4a565b61105b81611605565b50565b33611067610d56565b6001600160a01b031614610b58573360405163118cdaa760e01b815260040161085b9190614f4a565b6000805160206158f5833981519152811080610ac95760405162461bcd60e51b815260206004820152601b60248201527a109b8c8d4d0e881a5b9d985b1a59081cd8d85b185c88199a595b19602a1b604482015260640161085b565b6000805463ffffffff600160401b9182900416825260056020818152604080852081516101008101835281546001600160401b038082168352969004909516928501929092526001820154908401526002810154606084015260038101546080840152600481015460a08401529081015460c08301526006015460e082015261117490610ebd565b600380546001908155908290556004805460025560008054600160401b810463ffffffff16825260056020526040822060060154909255929350909190600c906111cf908490600160601b90046001600160401b03166154e0565b92506101000a8154816001600160401b0302191690836001600160401b031602179055507fdb3558259e039d7e50e816b9dcce30fb114d8a9c86eca5ab14b60194d6945d3f6000600c9054906101000a90046001600160401b03166040516106e6919061532e565b60006112416119e5565b604080516008808252610120820190925291925060009190602082016101008036833701905050905060025481600081518110611280576112806154b3565b60200260200101818152505083600001516001600160401b0316816001815181106112ad576112ad6154b3565b60200260200101818152505083602001516001600160401b0316816002815181106112da576112da6154b3565b6020026020010181815250508360400151816003815181106112fe576112fe6154b3565b602002602001018181525050836060015181600481518110611322576113226154b3565b60209081029190910181019190915260008054600160401b900463ffffffff16815260059182905260409020600301548251909183918110611366576113666154b3565b60209081029190910181019190915260008054600160401b900463ffffffff168152600590915260409020600401548151829060069081106113aa576113aa6154b3565b60209081029190910181019190915260008054600160401b900463ffffffff1681526005918290526040902001548151829060079081106113ed576113ed6154b3565b602002602001018181525050611404828285611fc7565b611421576040516309bde33960e01b815260040160405180910390fd5b50505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806114ae57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166114a26000805160206158d5833981519152546001600160a01b031690565b6001600160a01b031614155b15610b585760405163703e46dd60e11b815260040160405180910390fd5b6114d461105e565b7ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d816040516106e69190614f4a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561155d575060408051601f3d908101601f1916820190925261155a91810190615500565b60015b61157c5781604051634c9c8ce360e01b815260040161085b9190614f4a565b6000805160206158d583398151915281146115ad57604051632a87526960e21b81526004810182905260240161085b565b6115b783836120b2565b505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b585760405163703e46dd60e11b815260040160405180910390fd5b600061160f611661565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b6116b1612108565b61105b8161212d565b610b58612108565b81516001600160401b03161515806116e6575060208201516001600160401b031615155b806116f357506080820151155b80611700575060a0820151155b8061170d575060c0820151155b8061171a575060e0820151155b80611729575063ffffffff8116155b15611747576040516350dd03f760e11b815260040160405180910390fd5b81600560008060049054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a8154816001600160401b0302191690836001600160401b0316021790555060208201518160000160086101000a8154816001600160401b0302191690836001600160401b0316021790555060408201518160010155606082015181600201556080820151816003015560a0820151816004015560c0820151816005015560e0820151816006015590505081600560008060089054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a8154816001600160401b0302191690836001600160401b0316021790555060208201518160000160086101000a8154816001600160401b0302191690836001600160401b0316021790555060408201518160010155606082015181600201556080820151816003015560a0820151816004015560c0820151816005015560e08201518160060155905050600080600c6101000a8154816001600160401b0302191690836001600160401b03160217905550806000806101000a81548163ffffffff021916908363ffffffff160217905550600061192d83610ebd565b600181815560e08501516002818155600393909355600455600780548083018255600091825243600080516020615895833981519152909101556040805180820182526020808901516001600160401b039081168352929098015197810197885260088054948501815590925290516000805160206159158339815191529290930291820180546001600160401b03191693909116929092179091559251600080516020615955833981519152909301929092555050565b6119ed614d84565b621000008152600860208201527f20c9403133dfde9a9d382df76fb0523571648725abc0a7c12830bb690ec83b336040820151527f03a0a9acc3e3815a7ed6cb1379f7d157e6343164729376392a693acbd3ec283c6020604083015101527f2866c18ad1df10ef13542cce6250ce02cb2a6b72ae00a9852e271187e9e4e0db6060820151527f21be232a42246a5663ebf483470cca666ffe9d4f0e63b929c596a7658714e9706020606083015101527f07d77873b9860074118e75808c79468b83c8ed64ba14db5cb5afa8e534de7b996080820151527f0be0f448839080132d47de17de0099b4cd74ae1e6b71cdda06cdebb868a50c6d6020608083015101527f13bd45a023491eadea44cc3f24cfbd1796eade9c0e39ee81d9f63ea0a580662560a0820151527f18f95cdda42ce11d9d10a3b335acc214e3807c578c5359405d810c208df60093602060a083015101527f0970d978763461f09e9ec63454073497386e4d282fedc2ac5b967cb9fd3fa8a960c0820151527f28c2217f7bacf6f8b2b8ee4a90fcf8b5bca04205ea84e8e1eb54b85dd41bde28602060c083015101527f02fe3d02988db718380052970aba46a3296df5f29b736ba1f2c4ccffc8b5969360e0820151527f202c3e390cee7c5c8525da2329a19f4936f6f71ca97dde6c6fa32b382d5acc03602060e083015101527f23ac10ae6ca5cacee8744bb939aaa835390954b91ae668a2c8d0edda558a89e7610100820151527f1c8c2b856cdade256ba3237f39afd5e170a9532012f7aecae49d459b29f6f6ad602061010083015101527f16ec03d260bd7ac1c50ffa63565d5274b4582ceea52ff40b81cdfe8f444f01e4610120820151527f29392152723097e07113c3d7786d245ec40c30928015cd50b5668a4f4ea17031602061012083015101527f2cdbfb3a4053c8489b0c94e74338ac19118df7a06bc56b1eb4d0e0dc4eae7248610140820151527f07fea127dae943b8dc148f1408d40cff465c9c4721943669b1e4fd5a39db7036602061014083015101527f031455a79a2e0ce78a6cb53526ec04ac19716a86b08a93df48d178f8b77e5619610160820151527f118623e6bc136ee6d3f9907cd4ad04a9418ea03ba99ad753227cdfee598e8415602061016083015101527f0861d1997761a852226aac7ba9717bf6ae56451099be774cdf02ef352a58cbc8610180820151527f0805e392bcbc12e40a722778632d73fe981e4bc6fa6d1178b70af7be1cb9a3a3602061018083015101527f101d1e3978cb9f1e303d413144ebe67682c9eb0cfe11242959aa6029d78cdbbc6101a0820151527f089eb9c727e6cb07082bc3e6f40cf04f439fe48000602b584774dad7efc6607c60206101a083015101527f2d489f2493263aa873bcd94f21efb45bf257a61d81c0c95c3297916506653b406101c0820151527f18e45d627aadd4df2794ecd9909fac1a753f0c6fa8a9c6654a7a58b0912fffd560206101c083015101527f0e43e3a4b13cb438e2ad924614261ad0240214fa1c83fcda6a0bf779eb39ffc56101e0820151527f0eaba9f429c5f6fc3103d4cc4056c500ff42425d8e6465c5b8e145219f9c5cd360206101e083015101527f29ae351d09dcf41c0a80ab05393738358baab37e6fbc464b3bb13258994a1fa4610200820151527f2b7bc74608d7ec7dadd0597d6a4010d8bfc2b31900281901cedc42bdbb0fb8fc602061020083015101527f066802c7ceb9e913d4f65433a20661e097acac1affecbb534a54f76a29782226610220820151527f27ec80e811e636f3348267923c8e641bd98a7e37c5216670cbff14ae323f9e0e602061022083015101527f12604d1f87c583f6c9710c73eaf590af9d07aa743d1381d0e9dff0eab2614239610240820151527f1588579e6c3378ea32cb641205ef762a63cd353a0bd670394528ad2081ee8dd4602061024083015101527f247d65261d3a4ab042ba937331f6d0c0c5eb9ea78753a92084db1a6939e19e82610260820151527f2ce6cc664a32147bfe6a0c94a95bf0496679405ccae01648cd4ec021145120d56020610260830151015290565b6000611fd282612135565b611ff583600081518110611fe857611fe86154b3565b6020026020010151611090565b61200b83600181518110611fe857611fe86154b3565b61202183600281518110611fe857611fe86154b3565b61203783600381518110611fe857611fe86154b3565b61204d83600481518110611fe857611fe86154b3565b61206383600581518110611fe857611fe86154b3565b61207983600681518110611fe857611fe86154b3565b61208f83600781518110611fe857611fe86154b3565b600061209c85858561226d565b90506120a7816123b7565b9150505b9392505050565b6120bb82612816565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115612100576115b78282612872565b610ac96128e8565b612110612907565b610b5857604051631afcd79f60e31b815260040160405180910390fd5b611028612108565b805161214090612921565b61214d8160200151612921565b61215a8160400151612921565b6121678160600151612921565b6121748160800151612921565b6121818160a00151612921565b61218e8160c00151612921565b61219b8160e00151612921565b6121a9816101000151612921565b6121b7816101200151612921565b6121c5816101400151612921565b6121d3816101600151612921565b6121e1816101800151612921565b6121ef816101a00151611090565b6121fd816101c00151611090565b61220b816101e00151611090565b612219816102000151611090565b612227816102200151611090565b612235816102400151611090565b612243816102600151611090565b612251816102800151611090565b61225f816102a00151611090565b61105b816102c00151611090565b612275614e88565b836020015183511461229a576040516320fa9d8960e11b815260040160405180910390fd5b60006122a78585856129af565b905060006122b88660000151612cce565b905060006122cb828460a0015188613099565b60408051601e8082526103e0820190925291925060009190602082016103c080368337505060408051601e8082526103e082019092529293506000929150602082015b612316614ec2565b81526020019060019003908161230e579050509050600061233b8a858a8987876130f9565b60a08701516060870151919250906000805160206158f5833981519152600081838509604080516101008101825260e09c8d0151815260208101969096528501525050506060810191909152608081019290925260a082015261016086015160c082015261018090950151928501929092525091949350505050565b60006000805160206158f58339815191526123d0614ec2565b6123d8614ec2565b6040805160028082526060820183526000926020830190803683375050604080516002808252606082019092529293506000929150602082015b61241a614ec2565b8152602001906001900390816124125790505090506000600190508083600081518110612449576124496154b3565b6020026020010181815250508760c001518260008151811061246d5761246d6154b3565b6020026020010181905250876000015183600181518110612490576124906154b3565b6020026020010181815250508760e00151826001815181106124b4576124b46154b3565b60200260200101819052506124c9828461312e565b60808901515190955060609350839250905060006124e8826002615519565b6124f3906001615519565b9050806001600160401b0381111561250d5761250d614f5e565b604051908082528060200260200182016040528015612536578160200160208202803683370190505b509350806001600160401b0381111561255157612551614f5e565b60405190808252806020026020018201604052801561258a57816020015b612577614ec2565b81526020019060019003908161256f5790505b509250505060008060005b89608001515181101561262e57896080015181815181106125b8576125b86154b3565b60200260200101518583815181106125d2576125d26154b3565b6020026020010181815250508960a0015181815181106125f4576125f46154b3565b602002602001015184838151811061260e5761260e6154b3565b6020908102919091010152612624600183615519565b9150600101612595565b508860200151848281518110612646576126466154b3565b6020026020010181815250508860c00151838281518110612669576126696154b3565b602090810291909101015261267f600182615519565b895160408b0151919250906000898284099050808785815181106126a5576126a56154b3565b6020026020010181815250505050508860e001518382815181106126cb576126cb6154b3565b60209081029190910101526126e1600182615519565b60608a0151909150878184089250506126f98261321c565b84828151811061270b5761270b6154b3565b60200260200101818152505061271f61324e565b838281518110612731576127316154b3565b602002602001018190525061274e612749848661312e565b61326f565b945050505050600060405180608001604052807f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b081526020017f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c181526020017f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e5581526020017f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe4815250905061280c8382846128076132dc565b6133ad565b9695505050505050565b806001600160a01b03163b6000036128435780604051634c9c8ce360e01b815260040161085b9190614f4a565b6000805160206158d583398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161288f919061552c565b600060405180830381855af49150503d80600081146128ca576040519150601f19603f3d011682016040523d82523d6000602084013e6128cf565b606091505b50915091506128df858383613490565b95945050505050565b3415610b585760405163b398979f60e01b815260040160405180910390fd5b6000612911611685565b54600160401b900460ff16919050565b600060008051602061587583398151915261293b836134e3565b1561294557505050565b8251602084015182600384858586098509088382830914838210848410161693505050816115b75760405162461bcd60e51b8152602060048201526017602482015276109b8c8d4d0e881a5b9d985b1a590811cc481c1bda5b9d604a1b604482015260640161085b565b6129f760405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040805180820190915260608152600060208201526000805160206158f5833981519152612a268287876134f2565b81518451612a339061388b565b612a40866020015161388b565b612a4d876040015161388b565b612a5a886060015161388b565b612a67896080015161388b565b604051602001612a7c96959493929190615548565b60408051601f198184030181529190528252612a9782613900565b50612aa182613900565b6060840152612aaf82613900565b6080840152815160a0850151612ac49061388b565b604051602001612ad59291906155c7565b60408051601f198184030181529190528252612af082613900565b8352815160c0850151612b029061388b565b612b0f8660e0015161388b565b612b1d87610100015161388b565b612b2b88610120015161388b565b612b3989610140015161388b565b604051602001612b4e96959493929190615548565b60408051601f198184030181529190528252612b6982613900565b60a084015281516101a0850151612b7f90613962565b612b8d866101c00151613962565b612b9b876101e00151613962565b612ba9886102000151613962565b612bb7896102200151613962565b604051602001612bcc969594939291906155f6565b60408051601f19818403018152919052808352610240850151612bee90613962565b612bfc866102600151613962565b612c0a876102800151613962565b612c18886102a00151613962565b612c26896102c00151613962565b604051602001612c3b969594939291906155f6565b60408051601f198184030181529190528252612c5682613900565b60c08401528151610160850151612c6c9061388b565b612c7a86610180015161388b565b604051602001612c8c93929190615632565b60408051601f198184030181529190528252612ca782613900565b60e08401528251818180098282820960208601919091526040850152509195945050505050565b612d006040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b816201000003612d9457506040805160a0810182526010815260208101929092527f30641e0e92bebef818268d663bcad6dbcfd6c0149170f6d7d350b1b1fa6c1001908201527eeeb2cb5981ed45649abebde081dcff16c8601de4347e7dd1628ba2daac43b760608201527f0b5d56b77fe704e8e92338c0082f37e091126414c830e4c6922d5ac802d842d4608082015290565b816202000003612e2957506040805160a0810182526011815260208101929092527f30643640b9f82f90e83b698e5ea6179c7c05542e859533b48b9953a2f5360801908201527f1bf82deba7d74902c3708cc6e70e61f30512eca95655210e276e5858ce8f58e560608201527f244cf010c43ca87237d8b00bf9dd50c4c01c7f086bd4e8c920e75251d96f0d22608082015290565b816204000003612ebe57506040805160a0810182526012815260208101929092527f30644259cd94e7dd5045d7a27013b7fcd21c9e3b7fa75222e7bda49b729b0401908201527f19ddbcaf3a8d46c15c0176fbb5b95e4dc57088ff13f4d1bd84c6bfa57dcdc0e060608201527f036853f083780e87f8d7c71d111119c57dbe118c22d5ad707a82317466c5174c608082015290565b816208000003612f5357506040805160a0810182526013815260208101929092527f3064486657634403844b0eac78ca882cfd284341fcb0615a15cfcd17b14d8201908201527f2260e724844bca5251829353968e4915305258418357473a5c1d597f613f6cbd60608201527f06e402c0a314fb67a15cf806664ae1b722dbc0efe66e6c81d98f9924ca535321608082015290565b816210000003612fe857506040805160a0810182526014815260208101929092527f30644b6c9c4a72169e4daa317d25f04512ae15c53b34e8f5acd8e155d0a6c101908201527f26125da10a0ed06327508aba06d1e303ac616632dbed349f53422da95333785760608201527f100c332d2100895fab6473bc2c51bfca521f45cb3baca6260852a8fde26c91f3608082015290565b8160200361307b57506040805160a0810182526005815260208101929092527f2ee12bff4a2813286a8dc388cd754d9a3ef2490635eba50cb9c2e5e750800001908201527f09c532c6306b93d29678200d47c0b2a99c18d51b838eeb1d3eed4c533bb512d060608201527f2724713603bfbd790aeaf3e7df25d8e7ef8f311334905b4d8c99980cf210979d608082015290565b60405163e2ef09e560e01b815260040160405180910390fd5b919050565b6130bd60405180606001604052806000815260200160008152602001600081525090565b6130c78484613a99565b8082526130d79085908590613aed565b602082015280516130ed90859084908690613b51565b60408201529392505050565b600080613107858789613ca7565b9050613117888689898888613d93565b61312281878661409f565b98975050505050505050565b613136614ec2565b82518251146131875760405162461bcd60e51b815260206004820181905260248201527f4d534d206572726f723a206c656e67746820646f6573206e6f74206d61746368604482015260640161085b565b6131c58360008151811061319d5761319d6154b3565b6020026020010151836000815181106131b8576131b86154b3565b60200260200101516140ef565b905060015b82518110156132155761320b826132068684815181106131ec576131ec6154b3565b60200260200101518685815181106131b8576131b86154b3565b614183565b91506001016131ca565b5092915050565b60006132366000805160206158f583398151915283615675565b61101a906000805160206158f58339815191526154a0565b613256614ec2565b5060408051808201909152600181526002602082015290565b613277614ec2565b613280826134e3565b15613289575090565b60405180604001604052808360000151815260200160008051602061587583398151915284602001516132bc9190615675565b6132d4906000805160206158758339815191526154a0565b905292915050565b6133076040518060800160405280600081526020016000815260200160008152602001600081525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b60008060006040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e08201526020850151610100820152845161012082015260608501516101408201526040850151610160820152602060006101808360085afa9150506000519150806134825760405162461bcd60e51b815260206004820152601c60248201527b426e3235343a2050616972696e6720636865636b206661696c65642160201b604482015260640161085b565b50151590505b949350505050565b6060826134a5576134a08261421e565b6120ab565b81511580156134bc57506001600160a01b0384163b155b156134dc5783604051639996b31560e01b815260040161085b9190614f4a565b50806120ab565b80516020909101511590151690565b825160fe9061352d61350383613962565b60405160200161351591815260200190565b60405160208183030381529060405260006004614247565b61356761353d8660000151613962565b60405160200161354f91815260200190565b60405160208183030381529060405260006008614247565b61357761353d8760200151613962565b60405160200161358a9493929190615697565b60408051601f198184030181529190528085526135a76001613962565b6135be600080516020615995833981519152613962565b6135d5600080516020615935833981519152613962565b6135ec600080516020615975833981519152613962565b6136036000805160206158b5833981519152613962565b604051602001613618969594939291906155f6565b60408051601f1981840301815291905280855260e08401516136399061388b565b61364785610100015161388b565b61365586610120015161388b565b61366387610140015161388b565b61367188610160015161388b565b61367f89610180015161388b565b61368d8a6101e0015161388b565b6040516020016136a49897969594939291906156ee565b60408051601f198184030181529190528085526102008401516136c69061388b565b6136d485610220015161388b565b6136e286610240015161388b565b6136f0876101a0015161388b565b6136fe886101c0015161388b565b61370c89610260015161388b565b6040516020016137229796959493929190615793565b60408051601f198184030181529181528186528401516137419061388b565b61374e856060015161388b565b61375b866080015161388b565b6137688760a0015161388b565b6137758860c0015161388b565b60405160200161378a96959493929190615548565b60408051601f1981840301815291905280855282516137c19084906000906137b4576137b46154b3565b6020026020010151613962565b6137d7846001815181106137b4576137b46154b3565b6137ed856002815181106137b4576137b46154b3565b613803866003815181106137b4576137b46154b3565b613819876004815181106137b4576137b46154b3565b61382f886005815181106137b4576137b46154b3565b613845896006815181106137b4576137b46154b3565b61385b8a6007815181106137b4576137b46154b3565b60405160200161387399989796959493929190615825565b60408051601f19818403018152919052909352505050565b60606000613898836134e3565b156138a457600160fe1b175b602083015160008051602061587583398151915260019190911b106138ca5750600160ff1b5b82516138d7908217613962565b6040516020016138e991815260200190565b604051602081830303815290604052915050919050565b602080820151825180516040518381526000948594939291908101855b83811015613937576020818601810151838301520161391d565b5050602091820190209086018190529250600061280c6000805160206158f583398151915285615675565b60008190506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b6008827fff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff0016901c1790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b6010827dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff1916901c1790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b6020827bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1916901c1790506040816001600160401b03600160801b03600160c01b0316901b6040826001600160401b03600160801b03600160c01b031916901c179050608081901b608082901c179050919050565b81516000906000805160206158f583398151915290838015613add5784935060005b82811015613ad157838586099450600101613abb565b50600184039350613ae4565b6001830393505b50505092915050565b600081600003613aff575060006120ab565b60408401516000805160206158f583398151915290600090828186099050858015613b2f57600187039250613b36565b6001840392505b50613b4082614354565b915082828209979650505050505050565b600081600003613b6357506000613488565b835160408601516000805160206158f58339815191529190600090819081908180613b8e8d886143fa565b90506000876001600160401b03811115613baa57613baa614f5e565b604051908082528060200260200182016040528015613bd3578160200160208202803683370190505b509050888b850993506001925060005b88811015613c1857602081026020840101519550898d878c030896508987850960208281028401018890529350600101613be3565b50613c2283614354565b925060005b88811015613c955760208102602084010151955089868609975089848909975060005b89811015613c7457808214613c6c576020810260208401015197508a888a0998505b600101613c4a565b506020810260208f010151955089868909975089888c089a50600101613c27565b50505050505050505050949350505050565b6000806000805160206158f58339815191529050600083602001519050600084604001519050600060019050606088015160808901516101a08901516102408a0151878889838709858501088609945050506101c08901516102608a0151878889838709858501088609945050506101e08901516102808a0151878889838709858501088609945050506102008901516102a08a01518788898387098585010886099450505061022089015191506102c0890151868782898587080985099350505050875160208901518586868309870385089650508485838309860387089998505050505050505050565b613da18686868685876144bf565b60c085015182516000805160206158f583398151915291908190819086906014908110613dd057613dd06154b3565b602002602001018181525050856000015184601481518110613df457613df46154b3565b60200260200101819052508282820990508085601581518110613e1957613e196154b3565b602002602001018181525050856020015184601581518110613e3d57613e3d6154b3565b60200260200101819052508282820990508085601681518110613e6257613e626154b3565b602002602001018181525050856040015184601681518110613e8657613e866154b3565b60200260200101819052508282820990508085601781518110613eab57613eab6154b3565b602002602001018181525050856060015184601781518110613ecf57613ecf6154b3565b60200260200101819052508282820990508085601881518110613ef457613ef46154b3565b602002602001018181525050856080015184601881518110613f1857613f186154b3565b60200260200101819052508282820990508085601981518110613f3d57613f3d6154b3565b602002602001018181525050886040015184601981518110613f6157613f616154b3565b60200260200101819052508282820990508085601a81518110613f8657613f866154b3565b602002602001018181525050886060015184601a81518110613faa57613faa6154b3565b60200260200101819052508282820990508085601b81518110613fcf57613fcf6154b3565b602002602001018181525050886080015184601b81518110613ff357613ff36154b3565b60200260200101819052508282820990508085601c81518110614018576140186154b3565b6020026020010181815250508860a0015184601c8151811061403c5761403c6154b3565b60200260200101819052508282820990508760e0015185601d81518110614065576140656154b3565b6020026020010181815250508560a0015184601d81518110614089576140896154b3565b6020026020010181905250505050505050505050565b6000805160206158f58339815191528381039060005b600a8110156140e65760206015820102840151602082026101a00186015183848284098608945050506001016140b5565b50509392505050565b6140f7614ec2565b6140ff614edc565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa9050808061413157600080fd5b508061417b5760405162461bcd60e51b8152602060048201526019602482015278426e3235343a207363616c6172206d756c206661696c65642160381b604482015260640161085b565b505092915050565b61418b614ec2565b614193614efa565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa905080806141d057600080fd5b508061417b5760405162461bcd60e51b815260206004820152601d60248201527f426e3235343a2067726f7570206164646974696f6e206661696c656421000000604482015260640161085b565b80511561422e5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60608161425581601f615519565b10156142945760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015260640161085b565b61429e8284615519565b845110156142e25760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015260640161085b565b606082158015614301576040519150600082526020820160405261434b565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561433a578051835260209283019201614322565b5050858452601f01601f1916604052505b50949350505050565b60008060006000805160206158f5833981519152905060405160208152602080820152602060408201528460608201526002820360808201528160a08201526020600060c08360055afa9250506000519250816143f35760405162461bcd60e51b815260206004820152601d60248201527f426e3235343a20706f7720707265636f6d70696c65206661696c656421000000604482015260640161085b565b5050919050565b6060826020015182111561442157604051638c5e11f160e01b815260040160405180910390fd5b606083015160016000805160206158f5833981519152846001600160401b0381111561444f5761444f614f5e565b604051908082528060200260200182016040528015614478578160200160208202803683370190505b50935084151915613ae45760208401856020028101600182526020820191505b808210156144b457828585099350838252602082019150614498565b505050505092915050565b6000806000806000806000805160206158f583398151915290508060208b015160208d01510995508a5193508060a08c015160608d0151099250806101a08a0151840891508060808c0151830891508084830993508060008051602061599583398151915284099150806101c08a0151830891508060808c0151830891508084830993508060008051602061593583398151915284099150806101e08a0151830891508060808c0151830891508084830993508060008051602061597583398151915284099150806102008a0151830891508060808c015183089150808483099350806000805160206158b583398151915284099150806102208a0151830891508060808c0151830891508084830993508084870895508860a00151886000815181106145ee576145ee6154b3565b6020026020010181905250858760008151811061460d5761460d6154b3565b6020026020010181815250508060608c01518c51099450806102c08a015186099450806102408a015160608d0151099250806101a08a0151840892508060808c015184089250808386099450806102608a015160608d0151099250806101c08a0151840892508060808c015184089250808386099450806102808a015160608d0151099250806101e08a0151840892508060808c015184089250808386099450806102a08a015160608d0151099250806102008a0151840892508060808c0151840892508083860994508b60c00151886001815181106146ef576146ef6154b3565b602090810291909101015261470485826154a0565b87600181518110614717576147176154b3565b602002602001018181525050886101a001518760028151811061473c5761473c6154b3565b602002602001018181525050886101c0015187600381518110614761576147616154b3565b602002602001018181525050886101e0015187600481518110614786576147866154b3565b602002602001018181525050886102000151876005815181106147ab576147ab6154b3565b6020026020010181815250508b60e00151886002815181106147cf576147cf6154b3565b60200260200101819052508b6101000151886003815181106147f3576147f36154b3565b60200260200101819052508b610120015188600481518110614817576148176154b3565b60200260200101819052508b61014001518860058151811061483b5761483b6154b3565b6020026020010181905250806101c08a01516101a08b0151099250828760068151811061486a5761486a6154b3565b6020026020010181815250508b61016001518860068151811061488f5761488f6154b3565b6020026020010181905250806102008a01516101e08b015109925082876007815181106148be576148be6154b3565b6020026020010181815250508b6101800151886007815181106148e3576148e36154b3565b60200260200101819052506101a08901519250808384099150808283099150808284099250828760088151811061491c5761491c6154b3565b6020026020010181815250508b6101e0015188600881518110614941576149416154b3565b60200260200101819052506101c08901519250808384099150808283099150808284099250828760098151811061497a5761497a6154b3565b6020026020010181815250508b61020001518860098151811061499f5761499f6154b3565b60200260200101819052506101e089015192508083840991508082830991508082840992508287600a815181106149d8576149d86154b3565b6020026020010181815250508b610220015188600a815181106149fd576149fd6154b3565b602002602001018190525061020089015192508083840991508082830991508082840992508287600b81518110614a3657614a366154b3565b6020026020010181815250508b610240015188600b81518110614a5b57614a5b6154b3565b602002602001018190525088610220015181614a7791906154a0565b87600c81518110614a8a57614a8a6154b3565b6020026020010181815250508b6101a0015188600c81518110614aaf57614aaf6154b3565b6020026020010181905250600187600d81518110614acf57614acf6154b3565b6020026020010181815250508b6101c0015188600d81518110614af457614af46154b3565b6020026020010181905250806101c08a01516101a08b0151099250806101e08a015184099250806102008a015184099250806102208a0151840992508287600e81518110614b4457614b446154b3565b6020026020010181815250508b610260015188600e81518110614b6957614b696154b3565b60209081029190910101528951614b8090826154a0565b87600f81518110614b9357614b936154b3565b6020026020010181815250508860c0015188600f81518110614bb757614bb76154b3565b60200260200101819052508060018b510860a08c0151909350819080099150808284099250808360206010028901510991508187601081518110614bfd57614bfd6154b3565b6020026020010181815250508860e0015188601081518110614c2157614c216154b3565b6020026020010181905250808360206011028901510991508187601181518110614c4d57614c4d6154b3565b60200260200101818152505088610100015188601181518110614c7257614c726154b3565b6020026020010181905250808360206012028901510991508187601281518110614c9e57614c9e6154b3565b60200260200101818152505088610120015188601281518110614cc357614cc36154b3565b6020026020010181905250808360206013028901510991508187601381518110614cef57614cef6154b3565b60200260200101818152505088610140015188601381518110614d1457614d146154b3565b6020026020010181905250505050505050505050505050565b60405180610100016040528060006001600160401b0316815260200160006001600160401b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518061028001604052806000815260200160008152602001614da6614ec2565b8152602001614db3614ec2565b8152602001614dc0614ec2565b8152602001614dcd614ec2565b8152602001614dda614ec2565b8152602001614de7614ec2565b8152602001614df4614ec2565b8152602001614e01614ec2565b8152602001614e0e614ec2565b8152602001614e1b614ec2565b8152602001614e28614ec2565b8152602001614e35614ec2565b8152602001614e42614ec2565b8152602001614e4f614ec2565b8152602001614e5c614ec2565b8152602001614e69614ec2565b8152602001614e76614ec2565b8152602001614e83614ec2565b905290565b604051806101000160405280600081526020016000815260200160008152602001600081526020016060815260200160608152602001614e765b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b80356001600160a01b038116811461309457600080fd5b600060208284031215614f4157600080fd5b6120ab82614f18565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b6040516102e081016001600160401b0381118282101715614f9757614f97614f5e565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614fc557614fc5614f5e565b604052919050565b80356001600160401b038116811461309457600080fd5b6000610100808385031215614ff857600080fd5b604051908101906001600160401b038211818310171561501a5761501a614f5e565b8160405280925061502a84614fcd565b815261503860208501614fcd565b602082015260408401356040820152606084013560608201526080840135608082015260a084013560a082015260c084013560c082015260e084013560e0820152505092915050565b60006040828403121561509357600080fd5b604080519081016001600160401b03811182821017156150b5576150b5614f5e565b604052823581526020928301359281019290925250919050565b6000808284036105808112156150e457600080fd5b6150ee8585614fe4565b92506101006104808060ff198401121561510757600080fd5b61510f614f74565b925061511d87838801615081565b835261014061512e88828901615081565b602085015261018061514289828a01615081565b60408601526101c06151568a828b01615081565b606087015261020061516a8b828c01615081565b608088015261024061517e8c828d01615081565b60a08901526102806151928d828e01615081565b60c08a01526102c06151a68e828f01615081565b60e08b01526151b98e6103008f01615081565b898b01526151cb8e6103408f01615081565b6101208b01526151df8e6103808f01615081565b878b01526151f18e6103c08f01615081565b6101608b01526152058e6104008f01615081565b868b01526104408d01356101a08b01526104608d0135858b0152878d01356101e08b01526104a08d0135848b01526104c08d01356102208b01526104e08d0135838b01526105008d01356102608b01526105208d0135828b01526105408d01356102a08b01526105608d0135818b0152505050505050505050809150509250929050565b6000806040838503121561529c57600080fd5b6152a583614f18565b91506020838101356001600160401b03808211156152c257600080fd5b818601915086601f8301126152d657600080fd5b8135818111156152e8576152e8614f5e565b6152fa601f8201601f19168501614f9d565b9150808252878482850101111561531057600080fd5b80848401858401376000848284010152508093505050509250929050565b6001600160401b0391909116815260200190565b803563ffffffff8116811461309457600080fd5b60006020828403121561536857600080fd5b6120ab82615342565b60006020828403121561538357600080fd5b5035919050565b600080600061014084860312156153a057600080fd5b6153aa8585614fe4565b92506153b96101008501615342565b91506153c86101208501614f18565b90509250925092565b600061010082840312156153e457600080fd5b6120ab8383614fe4565b60005b838110156154095781810151838201526020016153f1565b50506000910152565b60208152600082518060208401526154318160408501602087016153ee565b601f01601f19169190910160400192915050565b6000806040838503121561545857600080fd5b50508035926020909101359150565b634e487b7160e01b600052601160045260246000fd5b6001600160401b0381811683821602808216919082811461417b5761417b615467565b8181038181111561101a5761101a615467565b634e487b7160e01b600052603260045260246000fd5b6000816154d8576154d8615467565b506000190190565b6001600160401b0381811683821601908082111561321557613215615467565b60006020828403121561551257600080fd5b5051919050565b8082018082111561101a5761101a615467565b6000825161553e8184602087016153ee565b9190910192915050565b60008751602061555b8285838d016153ee565b88519184019161556e8184848d016153ee565b88519201916155808184848c016153ee565b87519201916155928184848b016153ee565b86519201916155a48184848a016153ee565b85519201916155b681848489016153ee565b919091019998505050505050505050565b600083516155d98184602088016153ee565b8351908301906155ed8183602088016153ee565b01949350505050565b60008751615608818460208c016153ee565b9190910195865250602085019390935260408401919091526060830152608082015260a001919050565b600084516156448184602089016153ee565b8451908301906156588183602089016153ee565b845191019061566b8183602088016153ee565b0195945050505050565b60008261569257634e487b7160e01b600052601260045260246000fd5b500690565b600085516156a9818460208a016153ee565b8551908301906156bd818360208a016153ee565b85519101906156d08183602089016153ee565b84519101906156e38183602088016153ee565b019695505050505050565b6000895160206157018285838f016153ee565b8a51918401916157148184848f016153ee565b8a519201916157268184848e016153ee565b89519201916157388184848d016153ee565b885192019161574a8184848c016153ee565b875192019161575c8184848b016153ee565b865192019161576e8184848a016153ee565b855192019161578081848489016153ee565b919091019b9a5050505050505050505050565b6000885160206157a68285838e016153ee565b8951918401916157b98184848e016153ee565b89519201916157cb8184848d016153ee565b88519201916157dd8184848c016153ee565b87519201916157ef8184848b016153ee565b86519201916158018184848a016153ee565b855192019161581381848489016153ee565b919091019a9950505050505050505050565b60008a51615837818460208f016153ee565b9190910198895250602088019690965260408701949094526060860192909252608085015260a084015260c083015260e08201526101000191905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6882e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e881360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001f3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee31ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb025f3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee42042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4aa164736f6c6343000817000a", + "nonce": "0x37", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x455279891df35285c14418cf47d3ff6dfd09004b6b263b5a0785c7480cf07d74", + "transactionType": "CREATE", + "contractName": "ERC1967Proxy", + "contractAddress": "0xbcaf67958f7155afa9e86aea9148cc65477ae54c", + "function": null, + "arguments": [ + "0xF1D9D1d4F664CbB2E39C5E07523Ae8C11CdecE5c", + "0xa244d5960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d2000000000000000000000000000000000000000000000000000000000000162e2c7d44e1aba66c321ed2f57e750ca780fda20a282f9713bf16eb1584621d2def22ab7a4213db8a3fe8248a7d690a3bfbfb4f7d01c2c0f2cd96e03dde11f1dfd62827e417e9121e51fec895fabf72602aa63e26c9cef3651846a6b357b75356fb00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005000000000000000000000000c56fa6505d10bf322e01327e22479de78c3bf1ce" + ], + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0xce99b", + "value": "0x0", + "input": "0x60806040526040516103e73803806103e78339810160408190526100229161025a565b61002c8282610033565b5050610358565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610086576100818282610109565b505050565b61008e610180565b5050565b806001600160a01b03163b6000036100c85780604051634c9c8ce360e01b81526004016100bf9190610328565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051610126919061033c565b600060405180830381855af49150503d8060008114610161576040519150601f19603f3d011682016040523d82523d6000602084013e610166565b606091505b5090925090506101778583836101a1565b95945050505050565b341561019f5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101b6576101b1826101f7565b6101f0565b81511580156101cd57506001600160a01b0384163b155b156101ed5783604051639996b31560e01b81526004016100bf9190610328565b50805b9392505050565b8051156102075780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b83811015610251578181015183820152602001610239565b50506000910152565b6000806040838503121561026d57600080fd5b82516001600160a01b038116811461028457600080fd5b60208401519092506001600160401b03808211156102a157600080fd5b818501915085601f8301126102b557600080fd5b8151818111156102c7576102c7610220565b604051601f8201601f19908116603f011681019083821181831017156102ef576102ef610220565b8160405282815288602084870101111561030857600080fd5b610319836020830160208801610236565b80955050505050509250929050565b6001600160a01b0391909116815260200190565b6000825161034e818460208701610236565b9190910192915050565b6081806103666000396000f3fe6080604052600a600c565b005b60186014601a565b6051565b565b6000604c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015606f573d6000f35b3d6000fdfea164736f6c6343000817000a000000000000000000000000f1d9d1d4f664cbb2e39c5e07523ae8c11cdece5c00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000144a244d5960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004d2000000000000000000000000000000000000000000000000000000000000162e2c7d44e1aba66c321ed2f57e750ca780fda20a282f9713bf16eb1584621d2def22ab7a4213db8a3fe8248a7d690a3bfbfb4f7d01c2c0f2cd96e03dde11f1dfd62827e417e9121e51fec895fabf72602aa63e26c9cef3651846a6b357b75356fb00000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000005000000000000000000000000c56fa6505d10bf322e01327e22479de78c3bf1ce00000000000000000000000000000000000000000000000000000000", + "nonce": "0x38", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x953a74", + "logs": [ + { + "address": "0xf1d9d1d4f664cbb2e39c5e07523ae8c11cdece5c", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0xf075eb2a07c946b895c8e18a496b6059a4dec37cfb1f148ba997f7b2908df41c", + "blockNumber": "0x62b0f7", + "transactionHash": "0x1612f492d94ab4cc7bddc46232364993bfd35e8eb54421f7fee05cb811908ba5", + "transactionIndex": "0x14", + "logIndex": "0x2c", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800010000000000000004000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x1612f492d94ab4cc7bddc46232364993bfd35e8eb54421f7fee05cb811908ba5", + "transactionIndex": "0x14", + "blockHash": "0xf075eb2a07c946b895c8e18a496b6059a4dec37cfb1f148ba997f7b2908df41c", + "blockNumber": "0x62b0f7", + "gasUsed": "0x4cf45c", + "effectiveGasPrice": "0x5010b0286", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0xf1d9d1d4f664cbb2e39c5e07523ae8c11cdece5c" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x9f2996", + "logs": [ + { + "address": "0xbcaf67958f7155afa9e86aea9148cc65477ae54c", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000f1d9d1d4f664cbb2e39c5e07523ae8c11cdece5c" + ], + "data": "0x", + "blockHash": "0xf075eb2a07c946b895c8e18a496b6059a4dec37cfb1f148ba997f7b2908df41c", + "blockNumber": "0x62b0f7", + "transactionHash": "0x455279891df35285c14418cf47d3ff6dfd09004b6b263b5a0785c7480cf07d74", + "transactionIndex": "0x15", + "logIndex": "0x2d", + "removed": false + }, + { + "address": "0xbcaf67958f7155afa9e86aea9148cc65477ae54c", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000c56fa6505d10bf322e01327e22479de78c3bf1ce" + ], + "data": "0x", + "blockHash": "0xf075eb2a07c946b895c8e18a496b6059a4dec37cfb1f148ba997f7b2908df41c", + "blockNumber": "0x62b0f7", + "transactionHash": "0x455279891df35285c14418cf47d3ff6dfd09004b6b263b5a0785c7480cf07d74", + "transactionIndex": "0x15", + "logIndex": "0x2e", + "removed": false + }, + { + "address": "0xbcaf67958f7155afa9e86aea9148cc65477ae54c", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "blockHash": "0xf075eb2a07c946b895c8e18a496b6059a4dec37cfb1f148ba997f7b2908df41c", + "blockNumber": "0x62b0f7", + "transactionHash": "0x455279891df35285c14418cf47d3ff6dfd09004b6b263b5a0785c7480cf07d74", + "transactionIndex": "0x15", + "logIndex": "0x2f", + "removed": false + } + ], + "logsBloom": "0x00000000400000000000000000000000400001000000000000800000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000002000001000000000000000000000000000000000080020000000000000000000800000000000080000000000000000000400000000000000000000800000000000000000000000080000000000000000000000020000000000000000000000000000000000000000200000000000000000000000020000000000000000000000000000000000004000000000000000020000000000004400000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x455279891df35285c14418cf47d3ff6dfd09004b6b263b5a0785c7480cf07d74", + "transactionIndex": "0x15", + "blockHash": "0xf075eb2a07c946b895c8e18a496b6059a4dec37cfb1f148ba997f7b2908df41c", + "blockNumber": "0x62b0f7", + "gasUsed": "0x9ef22", + "effectiveGasPrice": "0x5010b0286", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0xbcaf67958f7155afa9e86aea9148cc65477ae54c" + } + ], + "libraries": [], + "pending": [], + "returns": { + "state": { + "internal_type": "struct LightClient.LightClientState", + "value": "(0, 0, 1234, 5678, 20123096623577465175227454029604964334562658832943665033957841511929190624751, 15681611494410196480591621833297283617944903978798151034711011368868408057814, 18162995221648071568910577861975039041880516069467959493844061284482615039739, 4)" + }, + "implementationAddress": { + "internal_type": "address", + "value": "0xF1D9D1d4F664CbB2E39C5E07523Ae8C11CdecE5c" + }, + "proxyAddress": { + "internal_type": "address", + "value": "0xbCaf67958f7155afa9e86aEA9148CC65477Ae54C" + } + }, + "timestamp": 1723219834, + "chain": 11155111, + "commit": "a82aa8b3" +} \ No newline at end of file diff --git a/contracts/broadcast/LightClientWithDefender.s.sol/11155111/run-1723559771.json b/contracts/broadcast/LightClientWithDefender.s.sol/11155111/run-1723559771.json new file mode 100644 index 0000000000..149c2bb563 --- /dev/null +++ b/contracts/broadcast/LightClientWithDefender.s.sol/11155111/run-1723559771.json @@ -0,0 +1,69 @@ +{ + "transactions": [ + { + "hash": "0x7462e204859d437622a856e560449fd287dfee46d34b93d6dc58adfa773238a6", + "transactionType": "CREATE", + "contractName": "LightClientV2", + "contractAddress": "0xd4244ddb230d52f9609d1d7d482600d7c0e0dbcb", + "function": null, + "arguments": null, + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0x57fba5", + "value": "0x0", + "input": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051614ec96200010460003960008181610a2d01528181610a560152610bcd0152614ec96000f3fe60806040526004361061011b5760003560e01c80630d8e6e2c146101205780632a49491a14610152578063313df7b1146101c3578063382b215a146101f05780634847ae5d146102065780634f1ef2861461022857806352d1902d1461023d5780636282773314610252578063715018a61461026857806373c3adc01461027d578063766718081461029d57806376b6b7cb146102d15780637f17baad146102e757806382d07ff3146103b45780638da5cb5b146103c9578063a51e6fea146103de578063a7605f45146103fe578063ad3cb1cc14610414578063bd32519a14610452578063ca6fe85514610483578063d68b52d614610499578063db13b60a146104b9578063f0682054146104f8578063f2fde38b1461052a575b600080fd5b34801561012c57600080fd5b506040805160028152600060208201819052918101919091526060015b60405180910390f35b34801561015e57600080fd5b506101b561016d3660046145bf565b60808082015160a083015160c0840151604080516020810194909452830191909152606082015260009101604051602081830303815290604052805190602001209050919050565b604051908152602001610149565b3480156101cf57600080fd5b506006546101e3906001600160a01b031681565b60405161014991906145dc565b3480156101fc57600080fd5b506101b560035481565b34801561021257600080fd5b5061021b61054a565b60405161014991906145f0565b61023b61023636600461467e565b6105ea565b005b34801561024957600080fd5b506101b5610609565b34801561025e57600080fd5b506101b560025481565b34801561027457600080fd5b5061023b610626565b34801561028957600080fd5b5061023b610298366004614771565b61063a565b3480156102a957600080fd5b506000546102c490600160601b90046001600160401b031681565b604051610149919061492c565b3480156102dd57600080fd5b506101b560015481565b3480156102f357600080fd5b5061035f610302366004614940565b6005602081905260009182526040909120805460018201546002830154600384015460048501549585015460068601546007909601546001600160401b0380871698600160401b9097041696949593949293929063ffffffff1689565b604080516001600160401b039a8b1681529990981660208a0152968801959095526060870193909352608086019190915260a085015260c084015260e083015263ffffffff1661010082015261012001610149565b3480156103c057600080fd5b5061021b6108c4565b3480156103d557600080fd5b506101e3610963565b3480156103ea57600080fd5b506101b56103f936600461495b565b61097e565b34801561040a57600080fd5b506101b560095481565b34801561042057600080fd5b50610445604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101499190614998565b34801561045e57600080fd5b5060065461047390600160a01b900460ff1681565b6040519015158152602001610149565b34801561048f57600080fd5b506101b560045481565b3480156104a557600080fd5b5061023b6104b436600461495b565b61099f565b3480156104c557600080fd5b506104d96104d436600461495b565b6109ac565b604080516001600160401b039093168352602083019190915201610149565b34801561050457600080fd5b506000546105159063ffffffff1681565b60405163ffffffff9091168152602001610149565b34801561053657600080fd5b5061023b6105453660046149cb565b6109e4565b61055261427d565b506000805463ffffffff600160201b909104811682526005602081815260409384902084516101208101865281546001600160401b038082168352600160401b90910416928101929092526001810154948201949094526002840154606082015260038401546080820152600484015460a08201529083015460c0820152600683015460e08201526007909201541661010082015290565b6105f2610a22565b6105fb82610ac7565b6106058282610b09565b5050565b6000610613610bc2565b50600080516020614e1d83398151915290565b61062e610c0b565b6106386000610c3d565b565b6106426108c4565b5182516001600160401b03918216911611158061068057506106626108c4565b602001516001600160401b031682602001516001600160401b031611155b1561069e5760405163051c46ef60e01b815260040160405180910390fd5b600080546106c39063ffffffff811690600160601b90046001600160401b03166149fc565b90506000816001600160401b03166106d96108c4565b602001516001600160401b031614905080158161070b5750816001600160401b031684602001516001600160401b0316115b15610734578160405163036466bf60e31b815260040161072b919061492c565b60405180910390fd5b6107418460400151610c99565b61074e8460600151610c99565b61075b8460800151610c99565b6107688460a00151610c99565b6107758460c00151610c99565b801561078357610783610cf5565b61078d8484610db1565b600954156107dd5760405162461bcd60e51b815260206004820152601d60248201527f6e65774669656c642063616e206f6e6c792062652073657420746f2030000000604482015260640161072b565b6000805463ffffffff600160401b918290048116835260056020818152604094859020895181548b8401516001600160401b039081169788026001600160801b031990921692169182171782558a8701516001830181905560608c0151600284015560808c0151600384015560a08c0151600484015560c08c01519483019490945560e08b015160068301556101008b0151600790920180549290951663ffffffff19909216919091179093559351908152919290917fa04a773924505a418564363725f56832f5772e6b8d0dbd6efce724dfe803dae6910160405180910390a350505050565b6108cc61427d565b506000805463ffffffff600160401b91829004811683526005602081815260409485902085516101208101875281546001600160401b038082168352969004909516918501919091526001810154948401949094526002840154606084015260038401546080840152600484015460a084015283015460c0830152600683015460e083015260079092015490911661010082015290565b60008061096e610df8565b546001600160a01b031692915050565b6007818154811061098e57600080fd5b600091825260209091200154905081565b6109a7610c0b565b600955565b600881815481106109bc57600080fd5b6000918252602090912060029091020180546001909101546001600160401b03909116915082565b6109ec610c0b565b6001600160a01b038116610a16576000604051631e4fbdf760e01b815260040161072b91906145dc565b610a1f81610c3d565b50565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610aa957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610a9d600080516020614e1d833981519152546001600160a01b031690565b6001600160a01b031614155b156106385760405163703e46dd60e11b815260040160405180910390fd5b610acf610c0b565b7ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d81604051610afe91906145dc565b60405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b63575060408051601f3d908101601f19168201909252610b6091810190614a1f565b60015b610b825781604051634c9c8ce360e01b815260040161072b91906145dc565b600080516020614e1d8339815191528114610bb357604051632a87526960e21b81526004810182905260240161072b565b610bbd8383610e1c565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106385760405163703e46dd60e11b815260040160405180910390fd5b33610c14610963565b6001600160a01b031614610638573360405163118cdaa760e01b815260040161072b91906145dc565b6000610c47610df8565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600080516020614e3d8339815191528110806106055760405162461bcd60e51b815260206004820152601b60248201527a109b8c8d4d0e881a5b9d985b1a59081cd8d85b185c88199a595b19602a1b604482015260640161072b565b6000610d0261016d6108c4565b600380546001558190556004546002559050610d1c6108c4565b60e001516004556000805460019190600c90610d49908490600160601b90046001600160401b0316614a38565b92506101000a8154816001600160401b0302191690836001600160401b031602179055507fdb3558259e039d7e50e816b9dcce30fb114d8a9c86eca5ab14b60194d6945d3f6000600c9054906101000a90046001600160401b0316604051610afe919061492c565b6000610dbb610e72565b90506000610dc884611454565b9050610dd58282856115b2565b610df2576040516309bde33960e01b815260040160405180910390fd5b50505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b610e258261169d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610e6a57610bbd82826116f9565b610605611771565b610e7a6142e1565b621000008152600860208201527f20c9403133dfde9a9d382df76fb0523571648725abc0a7c12830bb690ec83b336040820151527f03a0a9acc3e3815a7ed6cb1379f7d157e6343164729376392a693acbd3ec283c6020604083015101527f2866c18ad1df10ef13542cce6250ce02cb2a6b72ae00a9852e271187e9e4e0db6060820151527f21be232a42246a5663ebf483470cca666ffe9d4f0e63b929c596a7658714e9706020606083015101527f07d77873b9860074118e75808c79468b83c8ed64ba14db5cb5afa8e534de7b996080820151527f0be0f448839080132d47de17de0099b4cd74ae1e6b71cdda06cdebb868a50c6d6020608083015101527f13bd45a023491eadea44cc3f24cfbd1796eade9c0e39ee81d9f63ea0a580662560a0820151527f18f95cdda42ce11d9d10a3b335acc214e3807c578c5359405d810c208df60093602060a083015101527f0970d978763461f09e9ec63454073497386e4d282fedc2ac5b967cb9fd3fa8a960c0820151527f28c2217f7bacf6f8b2b8ee4a90fcf8b5bca04205ea84e8e1eb54b85dd41bde28602060c083015101527f02fe3d02988db718380052970aba46a3296df5f29b736ba1f2c4ccffc8b5969360e0820151527f202c3e390cee7c5c8525da2329a19f4936f6f71ca97dde6c6fa32b382d5acc03602060e083015101527f23ac10ae6ca5cacee8744bb939aaa835390954b91ae668a2c8d0edda558a89e7610100820151527f1c8c2b856cdade256ba3237f39afd5e170a9532012f7aecae49d459b29f6f6ad602061010083015101527f16ec03d260bd7ac1c50ffa63565d5274b4582ceea52ff40b81cdfe8f444f01e4610120820151527f29392152723097e07113c3d7786d245ec40c30928015cd50b5668a4f4ea17031602061012083015101527f2cdbfb3a4053c8489b0c94e74338ac19118df7a06bc56b1eb4d0e0dc4eae7248610140820151527f07fea127dae943b8dc148f1408d40cff465c9c4721943669b1e4fd5a39db7036602061014083015101527f031455a79a2e0ce78a6cb53526ec04ac19716a86b08a93df48d178f8b77e5619610160820151527f118623e6bc136ee6d3f9907cd4ad04a9418ea03ba99ad753227cdfee598e8415602061016083015101527f0861d1997761a852226aac7ba9717bf6ae56451099be774cdf02ef352a58cbc8610180820151527f0805e392bcbc12e40a722778632d73fe981e4bc6fa6d1178b70af7be1cb9a3a3602061018083015101527f101d1e3978cb9f1e303d413144ebe67682c9eb0cfe11242959aa6029d78cdbbc6101a0820151527f089eb9c727e6cb07082bc3e6f40cf04f439fe48000602b584774dad7efc6607c60206101a083015101527f2d489f2493263aa873bcd94f21efb45bf257a61d81c0c95c3297916506653b406101c0820151527f18e45d627aadd4df2794ecd9909fac1a753f0c6fa8a9c6654a7a58b0912fffd560206101c083015101527f0e43e3a4b13cb438e2ad924614261ad0240214fa1c83fcda6a0bf779eb39ffc56101e0820151527f0eaba9f429c5f6fc3103d4cc4056c500ff42425d8e6465c5b8e145219f9c5cd360206101e083015101527f29ae351d09dcf41c0a80ab05393738358baab37e6fbc464b3bb13258994a1fa4610200820151527f2b7bc74608d7ec7dadd0597d6a4010d8bfc2b31900281901cedc42bdbb0fb8fc602061020083015101527f066802c7ceb9e913d4f65433a20661e097acac1affecbb534a54f76a29782226610220820151527f27ec80e811e636f3348267923c8e641bd98a7e37c5216670cbff14ae323f9e0e602061022083015101527f12604d1f87c583f6c9710c73eaf590af9d07aa743d1381d0e9dff0eab2614239610240820151527f1588579e6c3378ea32cb641205ef762a63cd353a0bd670394528ad2081ee8dd4602061024083015101527f247d65261d3a4ab042ba937331f6d0c0c5eb9ea78753a92084db1a6939e19e82610260820151527f2ce6cc664a32147bfe6a0c94a95bf0496679405ccae01648cd4ec021145120d56020610260830151015290565b60408051600880825261012082019092526060916000919060208201610100803683370190505090506002548160008151811061149357611493614a58565b60200260200101818152505082600001516001600160401b0316816001815181106114c0576114c0614a58565b60200260200101818152505082602001516001600160401b0316816002815181106114ed576114ed614a58565b60200260200101818152505082604001518160038151811061151157611511614a58565b60200260200101818152505082606001518160048151811061153557611535614a58565b60200260200101818152505082608001518160058151811061155957611559614a58565b6020026020010181815250508260a001518160068151811061157d5761157d614a58565b6020026020010181815250508260c00151816007815181106115a1576115a1614a58565b602090810291909101015292915050565b60006115bd82611790565b6115e0836000815181106115d3576115d3614a58565b6020026020010151610c99565b6115f6836001815181106115d3576115d3614a58565b61160c836002815181106115d3576115d3614a58565b611622836003815181106115d3576115d3614a58565b611638836004815181106115d3576115d3614a58565b61164e836005815181106115d3576115d3614a58565b611664836006815181106115d3576115d3614a58565b61167a836007815181106115d3576115d3614a58565b60006116878585856118c8565b905061169281611a12565b9150505b9392505050565b806001600160a01b03163b6000036116ca5780604051634c9c8ce360e01b815260040161072b91906145dc565b600080516020614e1d83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516117169190614a6e565b600060405180830381855af49150503d8060008114611751576040519150601f19603f3d011682016040523d82523d6000602084013e611756565b606091505b5091509150611766858383611e71565b925050505b92915050565b34156106385760405163b398979f60e01b815260040160405180910390fd5b805161179b90611ec4565b6117a88160200151611ec4565b6117b58160400151611ec4565b6117c28160600151611ec4565b6117cf8160800151611ec4565b6117dc8160a00151611ec4565b6117e98160c00151611ec4565b6117f68160e00151611ec4565b611804816101000151611ec4565b611812816101200151611ec4565b611820816101400151611ec4565b61182e816101600151611ec4565b61183c816101800151611ec4565b61184a816101a00151610c99565b611858816101c00151610c99565b611866816101e00151610c99565b611874816102000151610c99565b611882816102200151610c99565b611890816102400151610c99565b61189e816102600151610c99565b6118ac816102800151610c99565b6118ba816102a00151610c99565b610a1f816102c00151610c99565b6118d06143e5565b83602001518351146118f5576040516320fa9d8960e11b815260040160405180910390fd5b6000611902858585611f52565b905060006119138660000151612271565b90506000611926828460a001518861263c565b60408051601e8082526103e0820190925291925060009190602082016103c080368337505060408051601e8082526103e082019092529293506000929150602082015b61197161441f565b81526020019060019003908161196957905050905060006119968a858a89878761269c565b60a0870151606087015191925090600080516020614e3d833981519152600081838509604080516101008101825260e09c8d0151815260208101969096528501525050506060810191909152608081019290925260a082015261016086015160c082015261018090950151928501929092525091949350505050565b6000600080516020614e3d833981519152611a2b61441f565b611a3361441f565b6040805160028082526060820183526000926020830190803683375050604080516002808252606082019092529293506000929150602082015b611a7561441f565b815260200190600190039081611a6d5790505090506000600190508083600081518110611aa457611aa4614a58565b6020026020010181815250508760c0015182600081518110611ac857611ac8614a58565b6020026020010181905250876000015183600181518110611aeb57611aeb614a58565b6020026020010181815250508760e0015182600181518110611b0f57611b0f614a58565b6020026020010181905250611b2482846126d1565b6080890151519095506060935083925090506000611b43826002614a8a565b611b4e906001614a8a565b9050806001600160401b03811115611b6857611b68614475565b604051908082528060200260200182016040528015611b91578160200160208202803683370190505b509350806001600160401b03811115611bac57611bac614475565b604051908082528060200260200182016040528015611be557816020015b611bd261441f565b815260200190600190039081611bca5790505b509250505060008060005b896080015151811015611c895789608001518181518110611c1357611c13614a58565b6020026020010151858381518110611c2d57611c2d614a58565b6020026020010181815250508960a001518181518110611c4f57611c4f614a58565b6020026020010151848381518110611c6957611c69614a58565b6020908102919091010152611c7f600183614a8a565b9150600101611bf0565b508860200151848281518110611ca157611ca1614a58565b6020026020010181815250508860c00151838281518110611cc457611cc4614a58565b6020908102919091010152611cda600182614a8a565b895160408b015191925090600089828409905080878581518110611d0057611d00614a58565b6020026020010181815250505050508860e00151838281518110611d2657611d26614a58565b6020908102919091010152611d3c600182614a8a565b60608a015190915087818408925050611d54826127bf565b848281518110611d6657611d66614a58565b602002602001018181525050611d7a6127f1565b838281518110611d8c57611d8c614a58565b6020026020010181905250611da9611da484866126d1565b612812565b945050505050600060405180608001604052807f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b081526020017f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c181526020017f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e5581526020017f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe48152509050611e67838284611e6261287f565b612950565b9695505050505050565b606082611e8657611e8182612a33565b611696565b8151158015611e9d57506001600160a01b0384163b155b15611ebd5783604051639996b31560e01b815260040161072b91906145dc565b5080611696565b6000600080516020614ddd833981519152611ede83612a5c565b15611ee857505050565b825160208401518260038485858609850908838283091483821084841016169350505081610bbd5760405162461bcd60e51b8152602060048201526017602482015276109b8c8d4d0e881a5b9d985b1a590811cc481c1bda5b9d604a1b604482015260640161072b565b611f9a60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080518082019091526060815260006020820152600080516020614e3d833981519152611fc9828787612a6b565b81518451611fd690612e04565b611fe38660200151612e04565b611ff08760400151612e04565b611ffd8860600151612e04565b61200a8960800151612e04565b60405160200161201f96959493929190614a9d565b60408051601f19818403018152919052825261203a82612e79565b5061204482612e79565b606084015261205282612e79565b6080840152815160a085015161206790612e04565b604051602001612078929190614b1c565b60408051601f19818403018152919052825261209382612e79565b8352815160c08501516120a590612e04565b6120b28660e00151612e04565b6120c0876101000151612e04565b6120ce886101200151612e04565b6120dc896101400151612e04565b6040516020016120f196959493929190614a9d565b60408051601f19818403018152919052825261210c82612e79565b60a084015281516101a085015161212290612edb565b612130866101c00151612edb565b61213e876101e00151612edb565b61214c886102000151612edb565b61215a896102200151612edb565b60405160200161216f96959493929190614b4b565b60408051601f1981840301815291905280835261024085015161219190612edb565b61219f866102600151612edb565b6121ad876102800151612edb565b6121bb886102a00151612edb565b6121c9896102c00151612edb565b6040516020016121de96959493929190614b4b565b60408051601f1981840301815291905282526121f982612e79565b60c0840152815161016085015161220f90612e04565b61221d866101800151612e04565b60405160200161222f93929190614b87565b60408051601f19818403018152919052825261224a82612e79565b60e08401528251818180098282820960208601919091526040850152509195945050505050565b6122a36040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b81620100000361233757506040805160a0810182526010815260208101929092527f30641e0e92bebef818268d663bcad6dbcfd6c0149170f6d7d350b1b1fa6c1001908201527eeeb2cb5981ed45649abebde081dcff16c8601de4347e7dd1628ba2daac43b760608201527f0b5d56b77fe704e8e92338c0082f37e091126414c830e4c6922d5ac802d842d4608082015290565b8162020000036123cc57506040805160a0810182526011815260208101929092527f30643640b9f82f90e83b698e5ea6179c7c05542e859533b48b9953a2f5360801908201527f1bf82deba7d74902c3708cc6e70e61f30512eca95655210e276e5858ce8f58e560608201527f244cf010c43ca87237d8b00bf9dd50c4c01c7f086bd4e8c920e75251d96f0d22608082015290565b81620400000361246157506040805160a0810182526012815260208101929092527f30644259cd94e7dd5045d7a27013b7fcd21c9e3b7fa75222e7bda49b729b0401908201527f19ddbcaf3a8d46c15c0176fbb5b95e4dc57088ff13f4d1bd84c6bfa57dcdc0e060608201527f036853f083780e87f8d7c71d111119c57dbe118c22d5ad707a82317466c5174c608082015290565b8162080000036124f657506040805160a0810182526013815260208101929092527f3064486657634403844b0eac78ca882cfd284341fcb0615a15cfcd17b14d8201908201527f2260e724844bca5251829353968e4915305258418357473a5c1d597f613f6cbd60608201527f06e402c0a314fb67a15cf806664ae1b722dbc0efe66e6c81d98f9924ca535321608082015290565b81621000000361258b57506040805160a0810182526014815260208101929092527f30644b6c9c4a72169e4daa317d25f04512ae15c53b34e8f5acd8e155d0a6c101908201527f26125da10a0ed06327508aba06d1e303ac616632dbed349f53422da95333785760608201527f100c332d2100895fab6473bc2c51bfca521f45cb3baca6260852a8fde26c91f3608082015290565b8160200361261e57506040805160a0810182526005815260208101929092527f2ee12bff4a2813286a8dc388cd754d9a3ef2490635eba50cb9c2e5e750800001908201527f09c532c6306b93d29678200d47c0b2a99c18d51b838eeb1d3eed4c533bb512d060608201527f2724713603bfbd790aeaf3e7df25d8e7ef8f311334905b4d8c99980cf210979d608082015290565b60405163e2ef09e560e01b815260040160405180910390fd5b919050565b61266060405180606001604052806000815260200160008152602001600081525090565b61266a8484613012565b80825261267a9085908590613066565b60208201528051612690908590849086906130ca565b60408201529392505050565b6000806126aa858789613220565b90506126ba88868989888861330c565b6126c5818786613618565b98975050505050505050565b6126d961441f565b825182511461272a5760405162461bcd60e51b815260206004820181905260248201527f4d534d206572726f723a206c656e67746820646f6573206e6f74206d61746368604482015260640161072b565b6127688360008151811061274057612740614a58565b60200260200101518360008151811061275b5761275b614a58565b6020026020010151613668565b905060015b82518110156127b8576127ae826127a986848151811061278f5761278f614a58565b602002602001015186858151811061275b5761275b614a58565b6136fc565b915060010161276d565b5092915050565b60006127d9600080516020614e3d83398151915283614bca565b61176b90600080516020614e3d833981519152614bec565b6127f961441f565b5060408051808201909152600181526002602082015290565b61281a61441f565b61282382612a5c565b1561282c575090565b604051806040016040528083600001518152602001600080516020614ddd833981519152846020015161285f9190614bca565b61287790600080516020614ddd833981519152614bec565b905292915050565b6128aa6040518060800160405280600081526020016000815260200160008152602001600081525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b60008060006040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e08201526020850151610100820152845161012082015260608501516101408201526040850151610160820152602060006101808360085afa915050600051915080612a255760405162461bcd60e51b815260206004820152601c60248201527b426e3235343a2050616972696e6720636865636b206661696c65642160201b604482015260640161072b565b50151590505b949350505050565b805115612a435780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516020909101511590151690565b825160fe90612aa6612a7c83612edb565b604051602001612a8e91815260200190565b60405160208183030381529060405260006004613797565b612ae0612ab68660000151612edb565b604051602001612ac891815260200190565b60405160208183030381529060405260006008613797565b612af0612ab68760200151612edb565b604051602001612b039493929190614bff565b60408051601f19818403018152919052808552612b206001612edb565b612b37600080516020614e9d833981519152612edb565b612b4e600080516020614e5d833981519152612edb565b612b65600080516020614e7d833981519152612edb565b612b7c600080516020614dfd833981519152612edb565b604051602001612b9196959493929190614b4b565b60408051601f1981840301815291905280855260e0840151612bb290612e04565b612bc0856101000151612e04565b612bce866101200151612e04565b612bdc876101400151612e04565b612bea886101600151612e04565b612bf8896101800151612e04565b612c068a6101e00151612e04565b604051602001612c1d989796959493929190614c56565b60408051601f19818403018152919052808552610200840151612c3f90612e04565b612c4d856102200151612e04565b612c5b866102400151612e04565b612c69876101a00151612e04565b612c77886101c00151612e04565b612c85896102600151612e04565b604051602001612c9b9796959493929190614cfb565b60408051601f19818403018152918152818652840151612cba90612e04565b612cc78560600151612e04565b612cd48660800151612e04565b612ce18760a00151612e04565b612cee8860c00151612e04565b604051602001612d0396959493929190614a9d565b60408051601f198184030181529190528085528251612d3a908490600090612d2d57612d2d614a58565b6020026020010151612edb565b612d5084600181518110612d2d57612d2d614a58565b612d6685600281518110612d2d57612d2d614a58565b612d7c86600381518110612d2d57612d2d614a58565b612d9287600481518110612d2d57612d2d614a58565b612da888600581518110612d2d57612d2d614a58565b612dbe89600681518110612d2d57612d2d614a58565b612dd48a600781518110612d2d57612d2d614a58565b604051602001612dec99989796959493929190614d8d565b60408051601f19818403018152919052909352505050565b60606000612e1183612a5c565b15612e1d57600160fe1b175b6020830151600080516020614ddd83398151915260019190911b10612e435750600160ff1b5b8251612e50908217612edb565b604051602001612e6291815260200190565b604051602081830303815290604052915050919050565b602080820151825180516040518381526000948594939291908101855b83811015612eb05760208186018101518383015201612e96565b50506020918201902090860181905292506000611e67600080516020614e3d83398151915285614bca565b60008190506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b6008827fff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff0016901c1790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b6010827dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff1916901c1790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b6020827bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1916901c1790506040816001600160401b03600160801b03600160c01b0316901b6040826001600160401b03600160801b03600160c01b031916901c179050608081901b608082901c179050919050565b8151600090600080516020614e3d833981519152908380156130565784935060005b8281101561304a57838586099450600101613034565b5060018403935061305d565b6001830393505b50505092915050565b60008160000361307857506000611696565b6040840151600080516020614e3d833981519152906000908281860990508580156130a8576001870392506130af565b6001840392505b506130b9826138a4565b915082828209979650505050505050565b6000816000036130dc57506000612a2b565b83516040860151600080516020614e3d83398151915291906000908190819081806131078d8861394a565b90506000876001600160401b0381111561312357613123614475565b60405190808252806020026020018201604052801561314c578160200160208202803683370190505b509050888b850993506001925060005b8881101561319157602081026020840101519550898d878c03089650898785096020828102840101889052935060010161315c565b5061319b836138a4565b925060005b8881101561320e5760208102602084010151955089868609975089848909975060005b898110156131ed578082146131e5576020810260208401015197508a888a0998505b6001016131c3565b506020810260208f010151955089868909975089888c089a506001016131a0565b50505050505050505050949350505050565b600080600080516020614e3d8339815191529050600083602001519050600084604001519050600060019050606088015160808901516101a08901516102408a0151878889838709858501088609945050506101c08901516102608a0151878889838709858501088609945050506101e08901516102808a0151878889838709858501088609945050506102008901516102a08a01518788898387098585010886099450505061022089015191506102c0890151868782898587080985099350505050875160208901518586868309870385089650508485838309860387089998505050505050505050565b61331a868686868587613a0f565b60c08501518251600080516020614e3d8339815191529190819081908690601490811061334957613349614a58565b60200260200101818152505085600001518460148151811061336d5761336d614a58565b6020026020010181905250828282099050808560158151811061339257613392614a58565b6020026020010181815250508560200151846015815181106133b6576133b6614a58565b602002602001018190525082828209905080856016815181106133db576133db614a58565b6020026020010181815250508560400151846016815181106133ff576133ff614a58565b6020026020010181905250828282099050808560178151811061342457613424614a58565b60200260200101818152505085606001518460178151811061344857613448614a58565b6020026020010181905250828282099050808560188151811061346d5761346d614a58565b60200260200101818152505085608001518460188151811061349157613491614a58565b602002602001018190525082828209905080856019815181106134b6576134b6614a58565b6020026020010181815250508860400151846019815181106134da576134da614a58565b60200260200101819052508282820990508085601a815181106134ff576134ff614a58565b602002602001018181525050886060015184601a8151811061352357613523614a58565b60200260200101819052508282820990508085601b8151811061354857613548614a58565b602002602001018181525050886080015184601b8151811061356c5761356c614a58565b60200260200101819052508282820990508085601c8151811061359157613591614a58565b6020026020010181815250508860a0015184601c815181106135b5576135b5614a58565b60200260200101819052508282820990508760e0015185601d815181106135de576135de614a58565b6020026020010181815250508560a0015184601d8151811061360257613602614a58565b6020026020010181905250505050505050505050565b600080516020614e3d8339815191528381039060005b600a81101561365f5760206015820102840151602082026101a001860151838482840986089450505060010161362e565b50509392505050565b61367061441f565b613678614439565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080806136aa57600080fd5b50806136f45760405162461bcd60e51b8152602060048201526019602482015278426e3235343a207363616c6172206d756c206661696c65642160381b604482015260640161072b565b505092915050565b61370461441f565b61370c614457565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa9050808061374957600080fd5b50806136f45760405162461bcd60e51b815260206004820152601d60248201527f426e3235343a2067726f7570206164646974696f6e206661696c656421000000604482015260640161072b565b6060816137a581601f614a8a565b10156137e45760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015260640161072b565b6137ee8284614a8a565b845110156138325760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015260640161072b565b606082158015613851576040519150600082526020820160405261389b565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561388a578051835260209283019201613872565b5050858452601f01601f1916604052505b50949350505050565b6000806000600080516020614e3d833981519152905060405160208152602080820152602060408201528460608201526002820360808201528160a08201526020600060c08360055afa9250506000519250816139435760405162461bcd60e51b815260206004820152601d60248201527f426e3235343a20706f7720707265636f6d70696c65206661696c656421000000604482015260640161072b565b5050919050565b6060826020015182111561397157604051638c5e11f160e01b815260040160405180910390fd5b60608301516001600080516020614e3d833981519152846001600160401b0381111561399f5761399f614475565b6040519080825280602002602001820160405280156139c8578160200160208202803683370190505b5093508415191561305d5760208401856020028101600182526020820191505b80821015613a04578285850993508382526020820191506139e8565b505050505092915050565b600080600080600080600080516020614e3d83398151915290508060208b015160208d01510995508a5193508060a08c015160608d0151099250806101a08a0151840891508060808c01518308915080848309935080600080516020614e9d83398151915284099150806101c08a0151830891508060808c01518308915080848309935080600080516020614e5d83398151915284099150806101e08a0151830891508060808c01518308915080848309935080600080516020614e7d83398151915284099150806102008a0151830891508060808c01518308915080848309935080600080516020614dfd83398151915284099150806102208a0151830891508060808c0151830891508084830993508084870895508860a0015188600081518110613b3e57613b3e614a58565b60200260200101819052508587600081518110613b5d57613b5d614a58565b6020026020010181815250508060608c01518c51099450806102c08a015186099450806102408a015160608d0151099250806101a08a0151840892508060808c015184089250808386099450806102608a015160608d0151099250806101c08a0151840892508060808c015184089250808386099450806102808a015160608d0151099250806101e08a0151840892508060808c015184089250808386099450806102a08a015160608d0151099250806102008a0151840892508060808c0151840892508083860994508b60c0015188600181518110613c3f57613c3f614a58565b6020908102919091010152613c548582614bec565b87600181518110613c6757613c67614a58565b602002602001018181525050886101a0015187600281518110613c8c57613c8c614a58565b602002602001018181525050886101c0015187600381518110613cb157613cb1614a58565b602002602001018181525050886101e0015187600481518110613cd657613cd6614a58565b60200260200101818152505088610200015187600581518110613cfb57613cfb614a58565b6020026020010181815250508b60e0015188600281518110613d1f57613d1f614a58565b60200260200101819052508b610100015188600381518110613d4357613d43614a58565b60200260200101819052508b610120015188600481518110613d6757613d67614a58565b60200260200101819052508b610140015188600581518110613d8b57613d8b614a58565b6020026020010181905250806101c08a01516101a08b01510992508287600681518110613dba57613dba614a58565b6020026020010181815250508b610160015188600681518110613ddf57613ddf614a58565b6020026020010181905250806102008a01516101e08b01510992508287600781518110613e0e57613e0e614a58565b6020026020010181815250508b610180015188600781518110613e3357613e33614a58565b60200260200101819052506101a089015192508083840991508082830991508082840992508287600881518110613e6c57613e6c614a58565b6020026020010181815250508b6101e0015188600881518110613e9157613e91614a58565b60200260200101819052506101c089015192508083840991508082830991508082840992508287600981518110613eca57613eca614a58565b6020026020010181815250508b610200015188600981518110613eef57613eef614a58565b60200260200101819052506101e089015192508083840991508082830991508082840992508287600a81518110613f2857613f28614a58565b6020026020010181815250508b610220015188600a81518110613f4d57613f4d614a58565b602002602001018190525061020089015192508083840991508082830991508082840992508287600b81518110613f8657613f86614a58565b6020026020010181815250508b610240015188600b81518110613fab57613fab614a58565b602002602001018190525088610220015181613fc79190614bec565b87600c81518110613fda57613fda614a58565b6020026020010181815250508b6101a0015188600c81518110613fff57613fff614a58565b6020026020010181905250600187600d8151811061401f5761401f614a58565b6020026020010181815250508b6101c0015188600d8151811061404457614044614a58565b6020026020010181905250806101c08a01516101a08b0151099250806101e08a015184099250806102008a015184099250806102208a0151840992508287600e8151811061409457614094614a58565b6020026020010181815250508b610260015188600e815181106140b9576140b9614a58565b602090810291909101015289516140d09082614bec565b87600f815181106140e3576140e3614a58565b6020026020010181815250508860c0015188600f8151811061410757614107614a58565b60200260200101819052508060018b510860a08c015190935081908009915080828409925080836020601002890151099150818760108151811061414d5761414d614a58565b6020026020010181815250508860e001518860108151811061417157614171614a58565b602002602001018190525080836020601102890151099150818760118151811061419d5761419d614a58565b602002602001018181525050886101000151886011815181106141c2576141c2614a58565b60200260200101819052508083602060120289015109915081876012815181106141ee576141ee614a58565b6020026020010181815250508861012001518860128151811061421357614213614a58565b602002602001018190525080836020601302890151099150818760138151811061423f5761423f614a58565b6020026020010181815250508861014001518860138151811061426457614264614a58565b6020026020010181905250505050505050505050505050565b60405180610120016040528060006001600160401b0316815260200160006001600160401b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600063ffffffff1681525090565b604051806102800160405280600081526020016000815260200161430361441f565b815260200161431061441f565b815260200161431d61441f565b815260200161432a61441f565b815260200161433761441f565b815260200161434461441f565b815260200161435161441f565b815260200161435e61441f565b815260200161436b61441f565b815260200161437861441f565b815260200161438561441f565b815260200161439261441f565b815260200161439f61441f565b81526020016143ac61441f565b81526020016143b961441f565b81526020016143c661441f565b81526020016143d361441f565b81526020016143e061441f565b905290565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160608152602001606081526020016143d35b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156144ae576144ae614475565b60405290565b6040516102e081016001600160401b03811182821017156144ae576144ae614475565b604051601f8201601f191681016001600160401b03811182821017156144ff576144ff614475565b604052919050565b80356001600160401b038116811461263757600080fd5b803563ffffffff8116811461263757600080fd5b6000610120828403121561454557600080fd5b61454d61448b565b905061455882614507565b815261456660208301614507565b602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101006145b581840161451e565b9082015292915050565b600061012082840312156145d257600080fd5b6116968383614532565b6001600160a01b0391909116815260200190565b60006101208201905060018060401b038084511683528060208501511660208401525060408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100808401516136f48285018263ffffffff169052565b80356001600160a01b038116811461263757600080fd5b6000806040838503121561469157600080fd5b61469a83614667565b91506020838101356001600160401b03808211156146b757600080fd5b818601915086601f8301126146cb57600080fd5b8135818111156146dd576146dd614475565b6146ef601f8201601f191685016144d7565b9150808252878482850101111561470557600080fd5b80848401858401376000848284010152508093505050509250929050565b60006040828403121561473557600080fd5b604080519081016001600160401b038111828210171561475757614757614475565b604052823581526020928301359281019290925250919050565b6000808284036105a081121561478657600080fd5b6147908585614532565b92506101206104808061011f19840112156147aa57600080fd5b6147b26144b4565b92506147c087838801614723565b83526101606147d188828901614723565b60208501526101a06147e589828a01614723565b60408601526101e06147f98a828b01614723565b606087015261022061480d8b828c01614723565b60808801526102606148218c828d01614723565b60a08901526102a06148358d828e01614723565b60c08a01526148488d6102e08e01614723565b60e08a015261485b8d6103208e01614723565b6101008a015261486f8d6103608e01614723565b888a01526148818d6103a08e01614723565b6101408a01526148958d6103e08e01614723565b868a01526148a78d6104208e01614723565b6101808a01526104608c0135858a0152868c01356101c08a01526104a08c0135848a01526104c08c01356102008a01526104e08c0135838a01526105008c01356102408a01526105208c0135828a01526105408c01356102808a01526105608c0135818a015250505050505050506105808401356102c0820152809150509250929050565b6001600160401b0391909116815260200190565b60006020828403121561495257600080fd5b6116968261451e565b60006020828403121561496d57600080fd5b5035919050565b60005b8381101561498f578181015183820152602001614977565b50506000910152565b60208152600082518060208401526149b7816040850160208701614974565b601f01601f19169190910160400192915050565b6000602082840312156149dd57600080fd5b61169682614667565b634e487b7160e01b600052601160045260246000fd5b6001600160401b038181168382160280821691908281146136f4576136f46149e6565b600060208284031215614a3157600080fd5b5051919050565b6001600160401b038181168382160190808211156127b8576127b86149e6565b634e487b7160e01b600052603260045260246000fd5b60008251614a80818460208701614974565b9190910192915050565b8082018082111561176b5761176b6149e6565b600087516020614ab08285838d01614974565b885191840191614ac38184848d01614974565b8851920191614ad58184848c01614974565b8751920191614ae78184848b01614974565b8651920191614af98184848a01614974565b8551920191614b0b8184848901614974565b919091019998505050505050505050565b60008351614b2e818460208801614974565b835190830190614b42818360208801614974565b01949350505050565b60008751614b5d818460208c01614974565b9190910195865250602085019390935260408401919091526060830152608082015260a001919050565b60008451614b99818460208901614974565b845190830190614bad818360208901614974565b8451910190614bc0818360208801614974565b0195945050505050565b600082614be757634e487b7160e01b600052601260045260246000fd5b500690565b8181038181111561176b5761176b6149e6565b60008551614c11818460208a01614974565b855190830190614c25818360208a01614974565b8551910190614c38818360208901614974565b8451910190614c4b818360208801614974565b019695505050505050565b600089516020614c698285838f01614974565b8a5191840191614c7c8184848f01614974565b8a51920191614c8e8184848e01614974565b8951920191614ca08184848d01614974565b8851920191614cb28184848c01614974565b8751920191614cc48184848b01614974565b8651920191614cd68184848a01614974565b8551920191614ce88184848901614974565b919091019b9a5050505050505050505050565b600088516020614d0e8285838e01614974565b895191840191614d218184848e01614974565b8951920191614d338184848d01614974565b8851920191614d458184848c01614974565b8751920191614d578184848b01614974565b8651920191614d698184848a01614974565b8551920191614d7b8184848901614974565b919091019a9950505050505050505050565b60008a51614d9f818460208f01614974565b9190910198895250602088019690965260408701949094526060860192909252608085015260a084015260c083015260e08201526101000191905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd472e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e881360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000011ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb0252042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4aa164736f6c6343000817000a", + "nonce": "0x48", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xb3bd09", + "logs": [ + { + "address": "0xd4244ddb230d52f9609d1d7d482600d7c0e0dbcb", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0xc0723172d5396f0dfc1a65009dce4e13cef4ed302efaa7c8909aa90250459923", + "blockNumber": "0x63123f", + "transactionHash": "0x7462e204859d437622a856e560449fd287dfee46d34b93d6dc58adfa773238a6", + "transactionIndex": "0x21", + "logIndex": "0x48", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000100000000000000000080000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x7462e204859d437622a856e560449fd287dfee46d34b93d6dc58adfa773238a6", + "transactionIndex": "0x21", + "blockHash": "0xc0723172d5396f0dfc1a65009dce4e13cef4ed302efaa7c8909aa90250459923", + "blockNumber": "0x63123f", + "gasUsed": "0x43b2e0", + "effectiveGasPrice": "0x69c3654b1", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0xd4244ddb230d52f9609d1d7d482600d7c0e0dbcb" + } + ], + "libraries": [], + "pending": [], + "returns": { + "result": { + "internal_type": "bytes", + "value": "0x546865206f74686572206f776e657273206f66207468652053616665204d756c74697369672077616c6c6574206e65656420746f207369676e20746865207472616e73616374696f6e207669612074686520536166652055492068747470733a2f2f6170702e736166652e676c6f62616c2f7472616e73616374696f6e732f71756575653f736166653d7365703a307863353666413635303564313062463332326530313332376532323437394445373843334266316345" + }, + "implementationAddress": { + "internal_type": "address", + "value": "0xd4244dDB230D52F9609d1D7D482600D7c0e0dBCB" + } + }, + "timestamp": 1723559771, + "chain": 11155111, + "commit": "286c14d9" +} \ No newline at end of file diff --git a/contracts/broadcast/LightClientWithDefender.s.sol/11155111/run-1723561112.json b/contracts/broadcast/LightClientWithDefender.s.sol/11155111/run-1723561112.json new file mode 100644 index 0000000000..8be8c48208 --- /dev/null +++ b/contracts/broadcast/LightClientWithDefender.s.sol/11155111/run-1723561112.json @@ -0,0 +1,69 @@ +{ + "transactions": [ + { + "hash": "0x0a842f5f7bdeda057ae8ac855f3af93447f33669c63452f166675a3e528676a4", + "transactionType": "CREATE", + "contractName": "LightClientV2", + "contractAddress": "0x004c21673b5e14078b2f248bac29daec53aebecf", + "function": null, + "arguments": null, + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0x57fba5", + "value": "0x0", + "input": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051614ec96200010460003960008181610a2d01528181610a560152610bcd0152614ec96000f3fe60806040526004361061011b5760003560e01c80630d8e6e2c146101205780632a49491a14610152578063313df7b1146101c3578063382b215a146101f05780634847ae5d146102065780634f1ef2861461022857806352d1902d1461023d5780636282773314610252578063715018a61461026857806373c3adc01461027d578063766718081461029d57806376b6b7cb146102d15780637f17baad146102e757806382d07ff3146103b45780638da5cb5b146103c9578063a51e6fea146103de578063a7605f45146103fe578063ad3cb1cc14610414578063bd32519a14610452578063ca6fe85514610483578063d68b52d614610499578063db13b60a146104b9578063f0682054146104f8578063f2fde38b1461052a575b600080fd5b34801561012c57600080fd5b506040805160028152600060208201819052918101919091526060015b60405180910390f35b34801561015e57600080fd5b506101b561016d3660046145bf565b60808082015160a083015160c0840151604080516020810194909452830191909152606082015260009101604051602081830303815290604052805190602001209050919050565b604051908152602001610149565b3480156101cf57600080fd5b506006546101e3906001600160a01b031681565b60405161014991906145dc565b3480156101fc57600080fd5b506101b560035481565b34801561021257600080fd5b5061021b61054a565b60405161014991906145f0565b61023b61023636600461467e565b6105ea565b005b34801561024957600080fd5b506101b5610609565b34801561025e57600080fd5b506101b560025481565b34801561027457600080fd5b5061023b610626565b34801561028957600080fd5b5061023b610298366004614771565b61063a565b3480156102a957600080fd5b506000546102c490600160601b90046001600160401b031681565b604051610149919061492c565b3480156102dd57600080fd5b506101b560015481565b3480156102f357600080fd5b5061035f610302366004614940565b6005602081905260009182526040909120805460018201546002830154600384015460048501549585015460068601546007909601546001600160401b0380871698600160401b9097041696949593949293929063ffffffff1689565b604080516001600160401b039a8b1681529990981660208a0152968801959095526060870193909352608086019190915260a085015260c084015260e083015263ffffffff1661010082015261012001610149565b3480156103c057600080fd5b5061021b6108c4565b3480156103d557600080fd5b506101e3610963565b3480156103ea57600080fd5b506101b56103f936600461495b565b61097e565b34801561040a57600080fd5b506101b560095481565b34801561042057600080fd5b50610445604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101499190614998565b34801561045e57600080fd5b5060065461047390600160a01b900460ff1681565b6040519015158152602001610149565b34801561048f57600080fd5b506101b560045481565b3480156104a557600080fd5b5061023b6104b436600461495b565b61099f565b3480156104c557600080fd5b506104d96104d436600461495b565b6109ac565b604080516001600160401b039093168352602083019190915201610149565b34801561050457600080fd5b506000546105159063ffffffff1681565b60405163ffffffff9091168152602001610149565b34801561053657600080fd5b5061023b6105453660046149cb565b6109e4565b61055261427d565b506000805463ffffffff600160201b909104811682526005602081815260409384902084516101208101865281546001600160401b038082168352600160401b90910416928101929092526001810154948201949094526002840154606082015260038401546080820152600484015460a08201529083015460c0820152600683015460e08201526007909201541661010082015290565b6105f2610a22565b6105fb82610ac7565b6106058282610b09565b5050565b6000610613610bc2565b50600080516020614e1d83398151915290565b61062e610c0b565b6106386000610c3d565b565b6106426108c4565b5182516001600160401b03918216911611158061068057506106626108c4565b602001516001600160401b031682602001516001600160401b031611155b1561069e5760405163051c46ef60e01b815260040160405180910390fd5b600080546106c39063ffffffff811690600160601b90046001600160401b03166149fc565b90506000816001600160401b03166106d96108c4565b602001516001600160401b031614905080158161070b5750816001600160401b031684602001516001600160401b0316115b15610734578160405163036466bf60e31b815260040161072b919061492c565b60405180910390fd5b6107418460400151610c99565b61074e8460600151610c99565b61075b8460800151610c99565b6107688460a00151610c99565b6107758460c00151610c99565b801561078357610783610cf5565b61078d8484610db1565b600954156107dd5760405162461bcd60e51b815260206004820152601d60248201527f6e65774669656c642063616e206f6e6c792062652073657420746f2030000000604482015260640161072b565b6000805463ffffffff600160401b918290048116835260056020818152604094859020895181548b8401516001600160401b039081169788026001600160801b031990921692169182171782558a8701516001830181905560608c0151600284015560808c0151600384015560a08c0151600484015560c08c01519483019490945560e08b015160068301556101008b0151600790920180549290951663ffffffff19909216919091179093559351908152919290917fa04a773924505a418564363725f56832f5772e6b8d0dbd6efce724dfe803dae6910160405180910390a350505050565b6108cc61427d565b506000805463ffffffff600160401b91829004811683526005602081815260409485902085516101208101875281546001600160401b038082168352969004909516918501919091526001810154948401949094526002840154606084015260038401546080840152600484015460a084015283015460c0830152600683015460e083015260079092015490911661010082015290565b60008061096e610df8565b546001600160a01b031692915050565b6007818154811061098e57600080fd5b600091825260209091200154905081565b6109a7610c0b565b600955565b600881815481106109bc57600080fd5b6000918252602090912060029091020180546001909101546001600160401b03909116915082565b6109ec610c0b565b6001600160a01b038116610a16576000604051631e4fbdf760e01b815260040161072b91906145dc565b610a1f81610c3d565b50565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610aa957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610a9d600080516020614e1d833981519152546001600160a01b031690565b6001600160a01b031614155b156106385760405163703e46dd60e11b815260040160405180910390fd5b610acf610c0b565b7ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d81604051610afe91906145dc565b60405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b63575060408051601f3d908101601f19168201909252610b6091810190614a1f565b60015b610b825781604051634c9c8ce360e01b815260040161072b91906145dc565b600080516020614e1d8339815191528114610bb357604051632a87526960e21b81526004810182905260240161072b565b610bbd8383610e1c565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106385760405163703e46dd60e11b815260040160405180910390fd5b33610c14610963565b6001600160a01b031614610638573360405163118cdaa760e01b815260040161072b91906145dc565b6000610c47610df8565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600080516020614e3d8339815191528110806106055760405162461bcd60e51b815260206004820152601b60248201527a109b8c8d4d0e881a5b9d985b1a59081cd8d85b185c88199a595b19602a1b604482015260640161072b565b6000610d0261016d6108c4565b600380546001558190556004546002559050610d1c6108c4565b60e001516004556000805460019190600c90610d49908490600160601b90046001600160401b0316614a38565b92506101000a8154816001600160401b0302191690836001600160401b031602179055507fdb3558259e039d7e50e816b9dcce30fb114d8a9c86eca5ab14b60194d6945d3f6000600c9054906101000a90046001600160401b0316604051610afe919061492c565b6000610dbb610e72565b90506000610dc884611454565b9050610dd58282856115b2565b610df2576040516309bde33960e01b815260040160405180910390fd5b50505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b610e258261169d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610e6a57610bbd82826116f9565b610605611771565b610e7a6142e1565b621000008152600860208201527f20c9403133dfde9a9d382df76fb0523571648725abc0a7c12830bb690ec83b336040820151527f03a0a9acc3e3815a7ed6cb1379f7d157e6343164729376392a693acbd3ec283c6020604083015101527f2866c18ad1df10ef13542cce6250ce02cb2a6b72ae00a9852e271187e9e4e0db6060820151527f21be232a42246a5663ebf483470cca666ffe9d4f0e63b929c596a7658714e9706020606083015101527f07d77873b9860074118e75808c79468b83c8ed64ba14db5cb5afa8e534de7b996080820151527f0be0f448839080132d47de17de0099b4cd74ae1e6b71cdda06cdebb868a50c6d6020608083015101527f13bd45a023491eadea44cc3f24cfbd1796eade9c0e39ee81d9f63ea0a580662560a0820151527f18f95cdda42ce11d9d10a3b335acc214e3807c578c5359405d810c208df60093602060a083015101527f0970d978763461f09e9ec63454073497386e4d282fedc2ac5b967cb9fd3fa8a960c0820151527f28c2217f7bacf6f8b2b8ee4a90fcf8b5bca04205ea84e8e1eb54b85dd41bde28602060c083015101527f02fe3d02988db718380052970aba46a3296df5f29b736ba1f2c4ccffc8b5969360e0820151527f202c3e390cee7c5c8525da2329a19f4936f6f71ca97dde6c6fa32b382d5acc03602060e083015101527f23ac10ae6ca5cacee8744bb939aaa835390954b91ae668a2c8d0edda558a89e7610100820151527f1c8c2b856cdade256ba3237f39afd5e170a9532012f7aecae49d459b29f6f6ad602061010083015101527f16ec03d260bd7ac1c50ffa63565d5274b4582ceea52ff40b81cdfe8f444f01e4610120820151527f29392152723097e07113c3d7786d245ec40c30928015cd50b5668a4f4ea17031602061012083015101527f2cdbfb3a4053c8489b0c94e74338ac19118df7a06bc56b1eb4d0e0dc4eae7248610140820151527f07fea127dae943b8dc148f1408d40cff465c9c4721943669b1e4fd5a39db7036602061014083015101527f031455a79a2e0ce78a6cb53526ec04ac19716a86b08a93df48d178f8b77e5619610160820151527f118623e6bc136ee6d3f9907cd4ad04a9418ea03ba99ad753227cdfee598e8415602061016083015101527f0861d1997761a852226aac7ba9717bf6ae56451099be774cdf02ef352a58cbc8610180820151527f0805e392bcbc12e40a722778632d73fe981e4bc6fa6d1178b70af7be1cb9a3a3602061018083015101527f101d1e3978cb9f1e303d413144ebe67682c9eb0cfe11242959aa6029d78cdbbc6101a0820151527f089eb9c727e6cb07082bc3e6f40cf04f439fe48000602b584774dad7efc6607c60206101a083015101527f2d489f2493263aa873bcd94f21efb45bf257a61d81c0c95c3297916506653b406101c0820151527f18e45d627aadd4df2794ecd9909fac1a753f0c6fa8a9c6654a7a58b0912fffd560206101c083015101527f0e43e3a4b13cb438e2ad924614261ad0240214fa1c83fcda6a0bf779eb39ffc56101e0820151527f0eaba9f429c5f6fc3103d4cc4056c500ff42425d8e6465c5b8e145219f9c5cd360206101e083015101527f29ae351d09dcf41c0a80ab05393738358baab37e6fbc464b3bb13258994a1fa4610200820151527f2b7bc74608d7ec7dadd0597d6a4010d8bfc2b31900281901cedc42bdbb0fb8fc602061020083015101527f066802c7ceb9e913d4f65433a20661e097acac1affecbb534a54f76a29782226610220820151527f27ec80e811e636f3348267923c8e641bd98a7e37c5216670cbff14ae323f9e0e602061022083015101527f12604d1f87c583f6c9710c73eaf590af9d07aa743d1381d0e9dff0eab2614239610240820151527f1588579e6c3378ea32cb641205ef762a63cd353a0bd670394528ad2081ee8dd4602061024083015101527f247d65261d3a4ab042ba937331f6d0c0c5eb9ea78753a92084db1a6939e19e82610260820151527f2ce6cc664a32147bfe6a0c94a95bf0496679405ccae01648cd4ec021145120d56020610260830151015290565b60408051600880825261012082019092526060916000919060208201610100803683370190505090506002548160008151811061149357611493614a58565b60200260200101818152505082600001516001600160401b0316816001815181106114c0576114c0614a58565b60200260200101818152505082602001516001600160401b0316816002815181106114ed576114ed614a58565b60200260200101818152505082604001518160038151811061151157611511614a58565b60200260200101818152505082606001518160048151811061153557611535614a58565b60200260200101818152505082608001518160058151811061155957611559614a58565b6020026020010181815250508260a001518160068151811061157d5761157d614a58565b6020026020010181815250508260c00151816007815181106115a1576115a1614a58565b602090810291909101015292915050565b60006115bd82611790565b6115e0836000815181106115d3576115d3614a58565b6020026020010151610c99565b6115f6836001815181106115d3576115d3614a58565b61160c836002815181106115d3576115d3614a58565b611622836003815181106115d3576115d3614a58565b611638836004815181106115d3576115d3614a58565b61164e836005815181106115d3576115d3614a58565b611664836006815181106115d3576115d3614a58565b61167a836007815181106115d3576115d3614a58565b60006116878585856118c8565b905061169281611a12565b9150505b9392505050565b806001600160a01b03163b6000036116ca5780604051634c9c8ce360e01b815260040161072b91906145dc565b600080516020614e1d83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516117169190614a6e565b600060405180830381855af49150503d8060008114611751576040519150601f19603f3d011682016040523d82523d6000602084013e611756565b606091505b5091509150611766858383611e71565b925050505b92915050565b34156106385760405163b398979f60e01b815260040160405180910390fd5b805161179b90611ec4565b6117a88160200151611ec4565b6117b58160400151611ec4565b6117c28160600151611ec4565b6117cf8160800151611ec4565b6117dc8160a00151611ec4565b6117e98160c00151611ec4565b6117f68160e00151611ec4565b611804816101000151611ec4565b611812816101200151611ec4565b611820816101400151611ec4565b61182e816101600151611ec4565b61183c816101800151611ec4565b61184a816101a00151610c99565b611858816101c00151610c99565b611866816101e00151610c99565b611874816102000151610c99565b611882816102200151610c99565b611890816102400151610c99565b61189e816102600151610c99565b6118ac816102800151610c99565b6118ba816102a00151610c99565b610a1f816102c00151610c99565b6118d06143e5565b83602001518351146118f5576040516320fa9d8960e11b815260040160405180910390fd5b6000611902858585611f52565b905060006119138660000151612271565b90506000611926828460a001518861263c565b60408051601e8082526103e0820190925291925060009190602082016103c080368337505060408051601e8082526103e082019092529293506000929150602082015b61197161441f565b81526020019060019003908161196957905050905060006119968a858a89878761269c565b60a0870151606087015191925090600080516020614e3d833981519152600081838509604080516101008101825260e09c8d0151815260208101969096528501525050506060810191909152608081019290925260a082015261016086015160c082015261018090950151928501929092525091949350505050565b6000600080516020614e3d833981519152611a2b61441f565b611a3361441f565b6040805160028082526060820183526000926020830190803683375050604080516002808252606082019092529293506000929150602082015b611a7561441f565b815260200190600190039081611a6d5790505090506000600190508083600081518110611aa457611aa4614a58565b6020026020010181815250508760c0015182600081518110611ac857611ac8614a58565b6020026020010181905250876000015183600181518110611aeb57611aeb614a58565b6020026020010181815250508760e0015182600181518110611b0f57611b0f614a58565b6020026020010181905250611b2482846126d1565b6080890151519095506060935083925090506000611b43826002614a8a565b611b4e906001614a8a565b9050806001600160401b03811115611b6857611b68614475565b604051908082528060200260200182016040528015611b91578160200160208202803683370190505b509350806001600160401b03811115611bac57611bac614475565b604051908082528060200260200182016040528015611be557816020015b611bd261441f565b815260200190600190039081611bca5790505b509250505060008060005b896080015151811015611c895789608001518181518110611c1357611c13614a58565b6020026020010151858381518110611c2d57611c2d614a58565b6020026020010181815250508960a001518181518110611c4f57611c4f614a58565b6020026020010151848381518110611c6957611c69614a58565b6020908102919091010152611c7f600183614a8a565b9150600101611bf0565b508860200151848281518110611ca157611ca1614a58565b6020026020010181815250508860c00151838281518110611cc457611cc4614a58565b6020908102919091010152611cda600182614a8a565b895160408b015191925090600089828409905080878581518110611d0057611d00614a58565b6020026020010181815250505050508860e00151838281518110611d2657611d26614a58565b6020908102919091010152611d3c600182614a8a565b60608a015190915087818408925050611d54826127bf565b848281518110611d6657611d66614a58565b602002602001018181525050611d7a6127f1565b838281518110611d8c57611d8c614a58565b6020026020010181905250611da9611da484866126d1565b612812565b945050505050600060405180608001604052807f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b081526020017f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c181526020017f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e5581526020017f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe48152509050611e67838284611e6261287f565b612950565b9695505050505050565b606082611e8657611e8182612a33565b611696565b8151158015611e9d57506001600160a01b0384163b155b15611ebd5783604051639996b31560e01b815260040161072b91906145dc565b5080611696565b6000600080516020614ddd833981519152611ede83612a5c565b15611ee857505050565b825160208401518260038485858609850908838283091483821084841016169350505081610bbd5760405162461bcd60e51b8152602060048201526017602482015276109b8c8d4d0e881a5b9d985b1a590811cc481c1bda5b9d604a1b604482015260640161072b565b611f9a60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080518082019091526060815260006020820152600080516020614e3d833981519152611fc9828787612a6b565b81518451611fd690612e04565b611fe38660200151612e04565b611ff08760400151612e04565b611ffd8860600151612e04565b61200a8960800151612e04565b60405160200161201f96959493929190614a9d565b60408051601f19818403018152919052825261203a82612e79565b5061204482612e79565b606084015261205282612e79565b6080840152815160a085015161206790612e04565b604051602001612078929190614b1c565b60408051601f19818403018152919052825261209382612e79565b8352815160c08501516120a590612e04565b6120b28660e00151612e04565b6120c0876101000151612e04565b6120ce886101200151612e04565b6120dc896101400151612e04565b6040516020016120f196959493929190614a9d565b60408051601f19818403018152919052825261210c82612e79565b60a084015281516101a085015161212290612edb565b612130866101c00151612edb565b61213e876101e00151612edb565b61214c886102000151612edb565b61215a896102200151612edb565b60405160200161216f96959493929190614b4b565b60408051601f1981840301815291905280835261024085015161219190612edb565b61219f866102600151612edb565b6121ad876102800151612edb565b6121bb886102a00151612edb565b6121c9896102c00151612edb565b6040516020016121de96959493929190614b4b565b60408051601f1981840301815291905282526121f982612e79565b60c0840152815161016085015161220f90612e04565b61221d866101800151612e04565b60405160200161222f93929190614b87565b60408051601f19818403018152919052825261224a82612e79565b60e08401528251818180098282820960208601919091526040850152509195945050505050565b6122a36040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b81620100000361233757506040805160a0810182526010815260208101929092527f30641e0e92bebef818268d663bcad6dbcfd6c0149170f6d7d350b1b1fa6c1001908201527eeeb2cb5981ed45649abebde081dcff16c8601de4347e7dd1628ba2daac43b760608201527f0b5d56b77fe704e8e92338c0082f37e091126414c830e4c6922d5ac802d842d4608082015290565b8162020000036123cc57506040805160a0810182526011815260208101929092527f30643640b9f82f90e83b698e5ea6179c7c05542e859533b48b9953a2f5360801908201527f1bf82deba7d74902c3708cc6e70e61f30512eca95655210e276e5858ce8f58e560608201527f244cf010c43ca87237d8b00bf9dd50c4c01c7f086bd4e8c920e75251d96f0d22608082015290565b81620400000361246157506040805160a0810182526012815260208101929092527f30644259cd94e7dd5045d7a27013b7fcd21c9e3b7fa75222e7bda49b729b0401908201527f19ddbcaf3a8d46c15c0176fbb5b95e4dc57088ff13f4d1bd84c6bfa57dcdc0e060608201527f036853f083780e87f8d7c71d111119c57dbe118c22d5ad707a82317466c5174c608082015290565b8162080000036124f657506040805160a0810182526013815260208101929092527f3064486657634403844b0eac78ca882cfd284341fcb0615a15cfcd17b14d8201908201527f2260e724844bca5251829353968e4915305258418357473a5c1d597f613f6cbd60608201527f06e402c0a314fb67a15cf806664ae1b722dbc0efe66e6c81d98f9924ca535321608082015290565b81621000000361258b57506040805160a0810182526014815260208101929092527f30644b6c9c4a72169e4daa317d25f04512ae15c53b34e8f5acd8e155d0a6c101908201527f26125da10a0ed06327508aba06d1e303ac616632dbed349f53422da95333785760608201527f100c332d2100895fab6473bc2c51bfca521f45cb3baca6260852a8fde26c91f3608082015290565b8160200361261e57506040805160a0810182526005815260208101929092527f2ee12bff4a2813286a8dc388cd754d9a3ef2490635eba50cb9c2e5e750800001908201527f09c532c6306b93d29678200d47c0b2a99c18d51b838eeb1d3eed4c533bb512d060608201527f2724713603bfbd790aeaf3e7df25d8e7ef8f311334905b4d8c99980cf210979d608082015290565b60405163e2ef09e560e01b815260040160405180910390fd5b919050565b61266060405180606001604052806000815260200160008152602001600081525090565b61266a8484613012565b80825261267a9085908590613066565b60208201528051612690908590849086906130ca565b60408201529392505050565b6000806126aa858789613220565b90506126ba88868989888861330c565b6126c5818786613618565b98975050505050505050565b6126d961441f565b825182511461272a5760405162461bcd60e51b815260206004820181905260248201527f4d534d206572726f723a206c656e67746820646f6573206e6f74206d61746368604482015260640161072b565b6127688360008151811061274057612740614a58565b60200260200101518360008151811061275b5761275b614a58565b6020026020010151613668565b905060015b82518110156127b8576127ae826127a986848151811061278f5761278f614a58565b602002602001015186858151811061275b5761275b614a58565b6136fc565b915060010161276d565b5092915050565b60006127d9600080516020614e3d83398151915283614bca565b61176b90600080516020614e3d833981519152614bec565b6127f961441f565b5060408051808201909152600181526002602082015290565b61281a61441f565b61282382612a5c565b1561282c575090565b604051806040016040528083600001518152602001600080516020614ddd833981519152846020015161285f9190614bca565b61287790600080516020614ddd833981519152614bec565b905292915050565b6128aa6040518060800160405280600081526020016000815260200160008152602001600081525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b60008060006040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e08201526020850151610100820152845161012082015260608501516101408201526040850151610160820152602060006101808360085afa915050600051915080612a255760405162461bcd60e51b815260206004820152601c60248201527b426e3235343a2050616972696e6720636865636b206661696c65642160201b604482015260640161072b565b50151590505b949350505050565b805115612a435780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516020909101511590151690565b825160fe90612aa6612a7c83612edb565b604051602001612a8e91815260200190565b60405160208183030381529060405260006004613797565b612ae0612ab68660000151612edb565b604051602001612ac891815260200190565b60405160208183030381529060405260006008613797565b612af0612ab68760200151612edb565b604051602001612b039493929190614bff565b60408051601f19818403018152919052808552612b206001612edb565b612b37600080516020614e9d833981519152612edb565b612b4e600080516020614e5d833981519152612edb565b612b65600080516020614e7d833981519152612edb565b612b7c600080516020614dfd833981519152612edb565b604051602001612b9196959493929190614b4b565b60408051601f1981840301815291905280855260e0840151612bb290612e04565b612bc0856101000151612e04565b612bce866101200151612e04565b612bdc876101400151612e04565b612bea886101600151612e04565b612bf8896101800151612e04565b612c068a6101e00151612e04565b604051602001612c1d989796959493929190614c56565b60408051601f19818403018152919052808552610200840151612c3f90612e04565b612c4d856102200151612e04565b612c5b866102400151612e04565b612c69876101a00151612e04565b612c77886101c00151612e04565b612c85896102600151612e04565b604051602001612c9b9796959493929190614cfb565b60408051601f19818403018152918152818652840151612cba90612e04565b612cc78560600151612e04565b612cd48660800151612e04565b612ce18760a00151612e04565b612cee8860c00151612e04565b604051602001612d0396959493929190614a9d565b60408051601f198184030181529190528085528251612d3a908490600090612d2d57612d2d614a58565b6020026020010151612edb565b612d5084600181518110612d2d57612d2d614a58565b612d6685600281518110612d2d57612d2d614a58565b612d7c86600381518110612d2d57612d2d614a58565b612d9287600481518110612d2d57612d2d614a58565b612da888600581518110612d2d57612d2d614a58565b612dbe89600681518110612d2d57612d2d614a58565b612dd48a600781518110612d2d57612d2d614a58565b604051602001612dec99989796959493929190614d8d565b60408051601f19818403018152919052909352505050565b60606000612e1183612a5c565b15612e1d57600160fe1b175b6020830151600080516020614ddd83398151915260019190911b10612e435750600160ff1b5b8251612e50908217612edb565b604051602001612e6291815260200190565b604051602081830303815290604052915050919050565b602080820151825180516040518381526000948594939291908101855b83811015612eb05760208186018101518383015201612e96565b50506020918201902090860181905292506000611e67600080516020614e3d83398151915285614bca565b60008190506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b6008827fff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff0016901c1790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b6010827dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff1916901c1790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b6020827bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1916901c1790506040816001600160401b03600160801b03600160c01b0316901b6040826001600160401b03600160801b03600160c01b031916901c179050608081901b608082901c179050919050565b8151600090600080516020614e3d833981519152908380156130565784935060005b8281101561304a57838586099450600101613034565b5060018403935061305d565b6001830393505b50505092915050565b60008160000361307857506000611696565b6040840151600080516020614e3d833981519152906000908281860990508580156130a8576001870392506130af565b6001840392505b506130b9826138a4565b915082828209979650505050505050565b6000816000036130dc57506000612a2b565b83516040860151600080516020614e3d83398151915291906000908190819081806131078d8861394a565b90506000876001600160401b0381111561312357613123614475565b60405190808252806020026020018201604052801561314c578160200160208202803683370190505b509050888b850993506001925060005b8881101561319157602081026020840101519550898d878c03089650898785096020828102840101889052935060010161315c565b5061319b836138a4565b925060005b8881101561320e5760208102602084010151955089868609975089848909975060005b898110156131ed578082146131e5576020810260208401015197508a888a0998505b6001016131c3565b506020810260208f010151955089868909975089888c089a506001016131a0565b50505050505050505050949350505050565b600080600080516020614e3d8339815191529050600083602001519050600084604001519050600060019050606088015160808901516101a08901516102408a0151878889838709858501088609945050506101c08901516102608a0151878889838709858501088609945050506101e08901516102808a0151878889838709858501088609945050506102008901516102a08a01518788898387098585010886099450505061022089015191506102c0890151868782898587080985099350505050875160208901518586868309870385089650508485838309860387089998505050505050505050565b61331a868686868587613a0f565b60c08501518251600080516020614e3d8339815191529190819081908690601490811061334957613349614a58565b60200260200101818152505085600001518460148151811061336d5761336d614a58565b6020026020010181905250828282099050808560158151811061339257613392614a58565b6020026020010181815250508560200151846015815181106133b6576133b6614a58565b602002602001018190525082828209905080856016815181106133db576133db614a58565b6020026020010181815250508560400151846016815181106133ff576133ff614a58565b6020026020010181905250828282099050808560178151811061342457613424614a58565b60200260200101818152505085606001518460178151811061344857613448614a58565b6020026020010181905250828282099050808560188151811061346d5761346d614a58565b60200260200101818152505085608001518460188151811061349157613491614a58565b602002602001018190525082828209905080856019815181106134b6576134b6614a58565b6020026020010181815250508860400151846019815181106134da576134da614a58565b60200260200101819052508282820990508085601a815181106134ff576134ff614a58565b602002602001018181525050886060015184601a8151811061352357613523614a58565b60200260200101819052508282820990508085601b8151811061354857613548614a58565b602002602001018181525050886080015184601b8151811061356c5761356c614a58565b60200260200101819052508282820990508085601c8151811061359157613591614a58565b6020026020010181815250508860a0015184601c815181106135b5576135b5614a58565b60200260200101819052508282820990508760e0015185601d815181106135de576135de614a58565b6020026020010181815250508560a0015184601d8151811061360257613602614a58565b6020026020010181905250505050505050505050565b600080516020614e3d8339815191528381039060005b600a81101561365f5760206015820102840151602082026101a001860151838482840986089450505060010161362e565b50509392505050565b61367061441f565b613678614439565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080806136aa57600080fd5b50806136f45760405162461bcd60e51b8152602060048201526019602482015278426e3235343a207363616c6172206d756c206661696c65642160381b604482015260640161072b565b505092915050565b61370461441f565b61370c614457565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa9050808061374957600080fd5b50806136f45760405162461bcd60e51b815260206004820152601d60248201527f426e3235343a2067726f7570206164646974696f6e206661696c656421000000604482015260640161072b565b6060816137a581601f614a8a565b10156137e45760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015260640161072b565b6137ee8284614a8a565b845110156138325760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015260640161072b565b606082158015613851576040519150600082526020820160405261389b565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561388a578051835260209283019201613872565b5050858452601f01601f1916604052505b50949350505050565b6000806000600080516020614e3d833981519152905060405160208152602080820152602060408201528460608201526002820360808201528160a08201526020600060c08360055afa9250506000519250816139435760405162461bcd60e51b815260206004820152601d60248201527f426e3235343a20706f7720707265636f6d70696c65206661696c656421000000604482015260640161072b565b5050919050565b6060826020015182111561397157604051638c5e11f160e01b815260040160405180910390fd5b60608301516001600080516020614e3d833981519152846001600160401b0381111561399f5761399f614475565b6040519080825280602002602001820160405280156139c8578160200160208202803683370190505b5093508415191561305d5760208401856020028101600182526020820191505b80821015613a04578285850993508382526020820191506139e8565b505050505092915050565b600080600080600080600080516020614e3d83398151915290508060208b015160208d01510995508a5193508060a08c015160608d0151099250806101a08a0151840891508060808c01518308915080848309935080600080516020614e9d83398151915284099150806101c08a0151830891508060808c01518308915080848309935080600080516020614e5d83398151915284099150806101e08a0151830891508060808c01518308915080848309935080600080516020614e7d83398151915284099150806102008a0151830891508060808c01518308915080848309935080600080516020614dfd83398151915284099150806102208a0151830891508060808c0151830891508084830993508084870895508860a0015188600081518110613b3e57613b3e614a58565b60200260200101819052508587600081518110613b5d57613b5d614a58565b6020026020010181815250508060608c01518c51099450806102c08a015186099450806102408a015160608d0151099250806101a08a0151840892508060808c015184089250808386099450806102608a015160608d0151099250806101c08a0151840892508060808c015184089250808386099450806102808a015160608d0151099250806101e08a0151840892508060808c015184089250808386099450806102a08a015160608d0151099250806102008a0151840892508060808c0151840892508083860994508b60c0015188600181518110613c3f57613c3f614a58565b6020908102919091010152613c548582614bec565b87600181518110613c6757613c67614a58565b602002602001018181525050886101a0015187600281518110613c8c57613c8c614a58565b602002602001018181525050886101c0015187600381518110613cb157613cb1614a58565b602002602001018181525050886101e0015187600481518110613cd657613cd6614a58565b60200260200101818152505088610200015187600581518110613cfb57613cfb614a58565b6020026020010181815250508b60e0015188600281518110613d1f57613d1f614a58565b60200260200101819052508b610100015188600381518110613d4357613d43614a58565b60200260200101819052508b610120015188600481518110613d6757613d67614a58565b60200260200101819052508b610140015188600581518110613d8b57613d8b614a58565b6020026020010181905250806101c08a01516101a08b01510992508287600681518110613dba57613dba614a58565b6020026020010181815250508b610160015188600681518110613ddf57613ddf614a58565b6020026020010181905250806102008a01516101e08b01510992508287600781518110613e0e57613e0e614a58565b6020026020010181815250508b610180015188600781518110613e3357613e33614a58565b60200260200101819052506101a089015192508083840991508082830991508082840992508287600881518110613e6c57613e6c614a58565b6020026020010181815250508b6101e0015188600881518110613e9157613e91614a58565b60200260200101819052506101c089015192508083840991508082830991508082840992508287600981518110613eca57613eca614a58565b6020026020010181815250508b610200015188600981518110613eef57613eef614a58565b60200260200101819052506101e089015192508083840991508082830991508082840992508287600a81518110613f2857613f28614a58565b6020026020010181815250508b610220015188600a81518110613f4d57613f4d614a58565b602002602001018190525061020089015192508083840991508082830991508082840992508287600b81518110613f8657613f86614a58565b6020026020010181815250508b610240015188600b81518110613fab57613fab614a58565b602002602001018190525088610220015181613fc79190614bec565b87600c81518110613fda57613fda614a58565b6020026020010181815250508b6101a0015188600c81518110613fff57613fff614a58565b6020026020010181905250600187600d8151811061401f5761401f614a58565b6020026020010181815250508b6101c0015188600d8151811061404457614044614a58565b6020026020010181905250806101c08a01516101a08b0151099250806101e08a015184099250806102008a015184099250806102208a0151840992508287600e8151811061409457614094614a58565b6020026020010181815250508b610260015188600e815181106140b9576140b9614a58565b602090810291909101015289516140d09082614bec565b87600f815181106140e3576140e3614a58565b6020026020010181815250508860c0015188600f8151811061410757614107614a58565b60200260200101819052508060018b510860a08c015190935081908009915080828409925080836020601002890151099150818760108151811061414d5761414d614a58565b6020026020010181815250508860e001518860108151811061417157614171614a58565b602002602001018190525080836020601102890151099150818760118151811061419d5761419d614a58565b602002602001018181525050886101000151886011815181106141c2576141c2614a58565b60200260200101819052508083602060120289015109915081876012815181106141ee576141ee614a58565b6020026020010181815250508861012001518860128151811061421357614213614a58565b602002602001018190525080836020601302890151099150818760138151811061423f5761423f614a58565b6020026020010181815250508861014001518860138151811061426457614264614a58565b6020026020010181905250505050505050505050505050565b60405180610120016040528060006001600160401b0316815260200160006001600160401b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600063ffffffff1681525090565b604051806102800160405280600081526020016000815260200161430361441f565b815260200161431061441f565b815260200161431d61441f565b815260200161432a61441f565b815260200161433761441f565b815260200161434461441f565b815260200161435161441f565b815260200161435e61441f565b815260200161436b61441f565b815260200161437861441f565b815260200161438561441f565b815260200161439261441f565b815260200161439f61441f565b81526020016143ac61441f565b81526020016143b961441f565b81526020016143c661441f565b81526020016143d361441f565b81526020016143e061441f565b905290565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160608152602001606081526020016143d35b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156144ae576144ae614475565b60405290565b6040516102e081016001600160401b03811182821017156144ae576144ae614475565b604051601f8201601f191681016001600160401b03811182821017156144ff576144ff614475565b604052919050565b80356001600160401b038116811461263757600080fd5b803563ffffffff8116811461263757600080fd5b6000610120828403121561454557600080fd5b61454d61448b565b905061455882614507565b815261456660208301614507565b602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101006145b581840161451e565b9082015292915050565b600061012082840312156145d257600080fd5b6116968383614532565b6001600160a01b0391909116815260200190565b60006101208201905060018060401b038084511683528060208501511660208401525060408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100808401516136f48285018263ffffffff169052565b80356001600160a01b038116811461263757600080fd5b6000806040838503121561469157600080fd5b61469a83614667565b91506020838101356001600160401b03808211156146b757600080fd5b818601915086601f8301126146cb57600080fd5b8135818111156146dd576146dd614475565b6146ef601f8201601f191685016144d7565b9150808252878482850101111561470557600080fd5b80848401858401376000848284010152508093505050509250929050565b60006040828403121561473557600080fd5b604080519081016001600160401b038111828210171561475757614757614475565b604052823581526020928301359281019290925250919050565b6000808284036105a081121561478657600080fd5b6147908585614532565b92506101206104808061011f19840112156147aa57600080fd5b6147b26144b4565b92506147c087838801614723565b83526101606147d188828901614723565b60208501526101a06147e589828a01614723565b60408601526101e06147f98a828b01614723565b606087015261022061480d8b828c01614723565b60808801526102606148218c828d01614723565b60a08901526102a06148358d828e01614723565b60c08a01526148488d6102e08e01614723565b60e08a015261485b8d6103208e01614723565b6101008a015261486f8d6103608e01614723565b888a01526148818d6103a08e01614723565b6101408a01526148958d6103e08e01614723565b868a01526148a78d6104208e01614723565b6101808a01526104608c0135858a0152868c01356101c08a01526104a08c0135848a01526104c08c01356102008a01526104e08c0135838a01526105008c01356102408a01526105208c0135828a01526105408c01356102808a01526105608c0135818a015250505050505050506105808401356102c0820152809150509250929050565b6001600160401b0391909116815260200190565b60006020828403121561495257600080fd5b6116968261451e565b60006020828403121561496d57600080fd5b5035919050565b60005b8381101561498f578181015183820152602001614977565b50506000910152565b60208152600082518060208401526149b7816040850160208701614974565b601f01601f19169190910160400192915050565b6000602082840312156149dd57600080fd5b61169682614667565b634e487b7160e01b600052601160045260246000fd5b6001600160401b038181168382160280821691908281146136f4576136f46149e6565b600060208284031215614a3157600080fd5b5051919050565b6001600160401b038181168382160190808211156127b8576127b86149e6565b634e487b7160e01b600052603260045260246000fd5b60008251614a80818460208701614974565b9190910192915050565b8082018082111561176b5761176b6149e6565b600087516020614ab08285838d01614974565b885191840191614ac38184848d01614974565b8851920191614ad58184848c01614974565b8751920191614ae78184848b01614974565b8651920191614af98184848a01614974565b8551920191614b0b8184848901614974565b919091019998505050505050505050565b60008351614b2e818460208801614974565b835190830190614b42818360208801614974565b01949350505050565b60008751614b5d818460208c01614974565b9190910195865250602085019390935260408401919091526060830152608082015260a001919050565b60008451614b99818460208901614974565b845190830190614bad818360208901614974565b8451910190614bc0818360208801614974565b0195945050505050565b600082614be757634e487b7160e01b600052601260045260246000fd5b500690565b8181038181111561176b5761176b6149e6565b60008551614c11818460208a01614974565b855190830190614c25818360208a01614974565b8551910190614c38818360208901614974565b8451910190614c4b818360208801614974565b019695505050505050565b600089516020614c698285838f01614974565b8a5191840191614c7c8184848f01614974565b8a51920191614c8e8184848e01614974565b8951920191614ca08184848d01614974565b8851920191614cb28184848c01614974565b8751920191614cc48184848b01614974565b8651920191614cd68184848a01614974565b8551920191614ce88184848901614974565b919091019b9a5050505050505050505050565b600088516020614d0e8285838e01614974565b895191840191614d218184848e01614974565b8951920191614d338184848d01614974565b8851920191614d458184848c01614974565b8751920191614d578184848b01614974565b8651920191614d698184848a01614974565b8551920191614d7b8184848901614974565b919091019a9950505050505050505050565b60008a51614d9f818460208f01614974565b9190910198895250602088019690965260408701949094526060860192909252608085015260a084015260c083015260e08201526101000191905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd472e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e881360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000011ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb0252042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4aa164736f6c6343000817000a", + "nonce": "0x4a", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1086e11", + "logs": [ + { + "address": "0x004c21673b5e14078b2f248bac29daec53aebecf", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0x6248624d3949a0ca2e1ea2198ad6df08f3410f3377ad0fb501fd6d58e5a84214", + "blockNumber": "0x6312a2", + "transactionHash": "0x0a842f5f7bdeda057ae8ac855f3af93447f33669c63452f166675a3e528676a4", + "transactionIndex": "0x6e", + "logIndex": "0xe4", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000002000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x0a842f5f7bdeda057ae8ac855f3af93447f33669c63452f166675a3e528676a4", + "transactionIndex": "0x6e", + "blockHash": "0x6248624d3949a0ca2e1ea2198ad6df08f3410f3377ad0fb501fd6d58e5a84214", + "blockNumber": "0x6312a2", + "gasUsed": "0x43b2e0", + "effectiveGasPrice": "0x444f41df2", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0x004c21673b5e14078b2f248bac29daec53aebecf" + } + ], + "libraries": [], + "pending": [], + "returns": { + "result": { + "internal_type": "bytes", + "value": "0x" + }, + "implementationAddress": { + "internal_type": "address", + "value": "0x004C21673b5E14078b2F248bAc29dAEC53aebEcF" + } + }, + "timestamp": 1723561112, + "chain": 11155111, + "commit": "286c14d9" +} \ No newline at end of file diff --git a/contracts/broadcast/LightClientWithDefender.s.sol/11155111/run-1723562026.json b/contracts/broadcast/LightClientWithDefender.s.sol/11155111/run-1723562026.json new file mode 100644 index 0000000000..fd5a0a5062 --- /dev/null +++ b/contracts/broadcast/LightClientWithDefender.s.sol/11155111/run-1723562026.json @@ -0,0 +1,69 @@ +{ + "transactions": [ + { + "hash": "0xc10bac87e8a7caf58c5d79686e44f44be61a63f4d251a7ec93169b1a1cd97dd5", + "transactionType": "CREATE", + "contractName": "LightClientV2", + "contractAddress": "0xb7fd36e6dbd92bab8d0379dfa93c04af60d5302e", + "function": null, + "arguments": null, + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0x57fba5", + "value": "0x0", + "input": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051614ec96200010460003960008181610a2d01528181610a560152610bcd0152614ec96000f3fe60806040526004361061011b5760003560e01c80630d8e6e2c146101205780632a49491a14610152578063313df7b1146101c3578063382b215a146101f05780634847ae5d146102065780634f1ef2861461022857806352d1902d1461023d5780636282773314610252578063715018a61461026857806373c3adc01461027d578063766718081461029d57806376b6b7cb146102d15780637f17baad146102e757806382d07ff3146103b45780638da5cb5b146103c9578063a51e6fea146103de578063a7605f45146103fe578063ad3cb1cc14610414578063bd32519a14610452578063ca6fe85514610483578063d68b52d614610499578063db13b60a146104b9578063f0682054146104f8578063f2fde38b1461052a575b600080fd5b34801561012c57600080fd5b506040805160028152600060208201819052918101919091526060015b60405180910390f35b34801561015e57600080fd5b506101b561016d3660046145bf565b60808082015160a083015160c0840151604080516020810194909452830191909152606082015260009101604051602081830303815290604052805190602001209050919050565b604051908152602001610149565b3480156101cf57600080fd5b506006546101e3906001600160a01b031681565b60405161014991906145dc565b3480156101fc57600080fd5b506101b560035481565b34801561021257600080fd5b5061021b61054a565b60405161014991906145f0565b61023b61023636600461467e565b6105ea565b005b34801561024957600080fd5b506101b5610609565b34801561025e57600080fd5b506101b560025481565b34801561027457600080fd5b5061023b610626565b34801561028957600080fd5b5061023b610298366004614771565b61063a565b3480156102a957600080fd5b506000546102c490600160601b90046001600160401b031681565b604051610149919061492c565b3480156102dd57600080fd5b506101b560015481565b3480156102f357600080fd5b5061035f610302366004614940565b6005602081905260009182526040909120805460018201546002830154600384015460048501549585015460068601546007909601546001600160401b0380871698600160401b9097041696949593949293929063ffffffff1689565b604080516001600160401b039a8b1681529990981660208a0152968801959095526060870193909352608086019190915260a085015260c084015260e083015263ffffffff1661010082015261012001610149565b3480156103c057600080fd5b5061021b6108c4565b3480156103d557600080fd5b506101e3610963565b3480156103ea57600080fd5b506101b56103f936600461495b565b61097e565b34801561040a57600080fd5b506101b560095481565b34801561042057600080fd5b50610445604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101499190614998565b34801561045e57600080fd5b5060065461047390600160a01b900460ff1681565b6040519015158152602001610149565b34801561048f57600080fd5b506101b560045481565b3480156104a557600080fd5b5061023b6104b436600461495b565b61099f565b3480156104c557600080fd5b506104d96104d436600461495b565b6109ac565b604080516001600160401b039093168352602083019190915201610149565b34801561050457600080fd5b506000546105159063ffffffff1681565b60405163ffffffff9091168152602001610149565b34801561053657600080fd5b5061023b6105453660046149cb565b6109e4565b61055261427d565b506000805463ffffffff600160201b909104811682526005602081815260409384902084516101208101865281546001600160401b038082168352600160401b90910416928101929092526001810154948201949094526002840154606082015260038401546080820152600484015460a08201529083015460c0820152600683015460e08201526007909201541661010082015290565b6105f2610a22565b6105fb82610ac7565b6106058282610b09565b5050565b6000610613610bc2565b50600080516020614e1d83398151915290565b61062e610c0b565b6106386000610c3d565b565b6106426108c4565b5182516001600160401b03918216911611158061068057506106626108c4565b602001516001600160401b031682602001516001600160401b031611155b1561069e5760405163051c46ef60e01b815260040160405180910390fd5b600080546106c39063ffffffff811690600160601b90046001600160401b03166149fc565b90506000816001600160401b03166106d96108c4565b602001516001600160401b031614905080158161070b5750816001600160401b031684602001516001600160401b0316115b15610734578160405163036466bf60e31b815260040161072b919061492c565b60405180910390fd5b6107418460400151610c99565b61074e8460600151610c99565b61075b8460800151610c99565b6107688460a00151610c99565b6107758460c00151610c99565b801561078357610783610cf5565b61078d8484610db1565b600954156107dd5760405162461bcd60e51b815260206004820152601d60248201527f6e65774669656c642063616e206f6e6c792062652073657420746f2030000000604482015260640161072b565b6000805463ffffffff600160401b918290048116835260056020818152604094859020895181548b8401516001600160401b039081169788026001600160801b031990921692169182171782558a8701516001830181905560608c0151600284015560808c0151600384015560a08c0151600484015560c08c01519483019490945560e08b015160068301556101008b0151600790920180549290951663ffffffff19909216919091179093559351908152919290917fa04a773924505a418564363725f56832f5772e6b8d0dbd6efce724dfe803dae6910160405180910390a350505050565b6108cc61427d565b506000805463ffffffff600160401b91829004811683526005602081815260409485902085516101208101875281546001600160401b038082168352969004909516918501919091526001810154948401949094526002840154606084015260038401546080840152600484015460a084015283015460c0830152600683015460e083015260079092015490911661010082015290565b60008061096e610df8565b546001600160a01b031692915050565b6007818154811061098e57600080fd5b600091825260209091200154905081565b6109a7610c0b565b600955565b600881815481106109bc57600080fd5b6000918252602090912060029091020180546001909101546001600160401b03909116915082565b6109ec610c0b565b6001600160a01b038116610a16576000604051631e4fbdf760e01b815260040161072b91906145dc565b610a1f81610c3d565b50565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610aa957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610a9d600080516020614e1d833981519152546001600160a01b031690565b6001600160a01b031614155b156106385760405163703e46dd60e11b815260040160405180910390fd5b610acf610c0b565b7ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d81604051610afe91906145dc565b60405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b63575060408051601f3d908101601f19168201909252610b6091810190614a1f565b60015b610b825781604051634c9c8ce360e01b815260040161072b91906145dc565b600080516020614e1d8339815191528114610bb357604051632a87526960e21b81526004810182905260240161072b565b610bbd8383610e1c565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106385760405163703e46dd60e11b815260040160405180910390fd5b33610c14610963565b6001600160a01b031614610638573360405163118cdaa760e01b815260040161072b91906145dc565b6000610c47610df8565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600080516020614e3d8339815191528110806106055760405162461bcd60e51b815260206004820152601b60248201527a109b8c8d4d0e881a5b9d985b1a59081cd8d85b185c88199a595b19602a1b604482015260640161072b565b6000610d0261016d6108c4565b600380546001558190556004546002559050610d1c6108c4565b60e001516004556000805460019190600c90610d49908490600160601b90046001600160401b0316614a38565b92506101000a8154816001600160401b0302191690836001600160401b031602179055507fdb3558259e039d7e50e816b9dcce30fb114d8a9c86eca5ab14b60194d6945d3f6000600c9054906101000a90046001600160401b0316604051610afe919061492c565b6000610dbb610e72565b90506000610dc884611454565b9050610dd58282856115b2565b610df2576040516309bde33960e01b815260040160405180910390fd5b50505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b610e258261169d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610e6a57610bbd82826116f9565b610605611771565b610e7a6142e1565b621000008152600860208201527f20c9403133dfde9a9d382df76fb0523571648725abc0a7c12830bb690ec83b336040820151527f03a0a9acc3e3815a7ed6cb1379f7d157e6343164729376392a693acbd3ec283c6020604083015101527f2866c18ad1df10ef13542cce6250ce02cb2a6b72ae00a9852e271187e9e4e0db6060820151527f21be232a42246a5663ebf483470cca666ffe9d4f0e63b929c596a7658714e9706020606083015101527f07d77873b9860074118e75808c79468b83c8ed64ba14db5cb5afa8e534de7b996080820151527f0be0f448839080132d47de17de0099b4cd74ae1e6b71cdda06cdebb868a50c6d6020608083015101527f13bd45a023491eadea44cc3f24cfbd1796eade9c0e39ee81d9f63ea0a580662560a0820151527f18f95cdda42ce11d9d10a3b335acc214e3807c578c5359405d810c208df60093602060a083015101527f0970d978763461f09e9ec63454073497386e4d282fedc2ac5b967cb9fd3fa8a960c0820151527f28c2217f7bacf6f8b2b8ee4a90fcf8b5bca04205ea84e8e1eb54b85dd41bde28602060c083015101527f02fe3d02988db718380052970aba46a3296df5f29b736ba1f2c4ccffc8b5969360e0820151527f202c3e390cee7c5c8525da2329a19f4936f6f71ca97dde6c6fa32b382d5acc03602060e083015101527f23ac10ae6ca5cacee8744bb939aaa835390954b91ae668a2c8d0edda558a89e7610100820151527f1c8c2b856cdade256ba3237f39afd5e170a9532012f7aecae49d459b29f6f6ad602061010083015101527f16ec03d260bd7ac1c50ffa63565d5274b4582ceea52ff40b81cdfe8f444f01e4610120820151527f29392152723097e07113c3d7786d245ec40c30928015cd50b5668a4f4ea17031602061012083015101527f2cdbfb3a4053c8489b0c94e74338ac19118df7a06bc56b1eb4d0e0dc4eae7248610140820151527f07fea127dae943b8dc148f1408d40cff465c9c4721943669b1e4fd5a39db7036602061014083015101527f031455a79a2e0ce78a6cb53526ec04ac19716a86b08a93df48d178f8b77e5619610160820151527f118623e6bc136ee6d3f9907cd4ad04a9418ea03ba99ad753227cdfee598e8415602061016083015101527f0861d1997761a852226aac7ba9717bf6ae56451099be774cdf02ef352a58cbc8610180820151527f0805e392bcbc12e40a722778632d73fe981e4bc6fa6d1178b70af7be1cb9a3a3602061018083015101527f101d1e3978cb9f1e303d413144ebe67682c9eb0cfe11242959aa6029d78cdbbc6101a0820151527f089eb9c727e6cb07082bc3e6f40cf04f439fe48000602b584774dad7efc6607c60206101a083015101527f2d489f2493263aa873bcd94f21efb45bf257a61d81c0c95c3297916506653b406101c0820151527f18e45d627aadd4df2794ecd9909fac1a753f0c6fa8a9c6654a7a58b0912fffd560206101c083015101527f0e43e3a4b13cb438e2ad924614261ad0240214fa1c83fcda6a0bf779eb39ffc56101e0820151527f0eaba9f429c5f6fc3103d4cc4056c500ff42425d8e6465c5b8e145219f9c5cd360206101e083015101527f29ae351d09dcf41c0a80ab05393738358baab37e6fbc464b3bb13258994a1fa4610200820151527f2b7bc74608d7ec7dadd0597d6a4010d8bfc2b31900281901cedc42bdbb0fb8fc602061020083015101527f066802c7ceb9e913d4f65433a20661e097acac1affecbb534a54f76a29782226610220820151527f27ec80e811e636f3348267923c8e641bd98a7e37c5216670cbff14ae323f9e0e602061022083015101527f12604d1f87c583f6c9710c73eaf590af9d07aa743d1381d0e9dff0eab2614239610240820151527f1588579e6c3378ea32cb641205ef762a63cd353a0bd670394528ad2081ee8dd4602061024083015101527f247d65261d3a4ab042ba937331f6d0c0c5eb9ea78753a92084db1a6939e19e82610260820151527f2ce6cc664a32147bfe6a0c94a95bf0496679405ccae01648cd4ec021145120d56020610260830151015290565b60408051600880825261012082019092526060916000919060208201610100803683370190505090506002548160008151811061149357611493614a58565b60200260200101818152505082600001516001600160401b0316816001815181106114c0576114c0614a58565b60200260200101818152505082602001516001600160401b0316816002815181106114ed576114ed614a58565b60200260200101818152505082604001518160038151811061151157611511614a58565b60200260200101818152505082606001518160048151811061153557611535614a58565b60200260200101818152505082608001518160058151811061155957611559614a58565b6020026020010181815250508260a001518160068151811061157d5761157d614a58565b6020026020010181815250508260c00151816007815181106115a1576115a1614a58565b602090810291909101015292915050565b60006115bd82611790565b6115e0836000815181106115d3576115d3614a58565b6020026020010151610c99565b6115f6836001815181106115d3576115d3614a58565b61160c836002815181106115d3576115d3614a58565b611622836003815181106115d3576115d3614a58565b611638836004815181106115d3576115d3614a58565b61164e836005815181106115d3576115d3614a58565b611664836006815181106115d3576115d3614a58565b61167a836007815181106115d3576115d3614a58565b60006116878585856118c8565b905061169281611a12565b9150505b9392505050565b806001600160a01b03163b6000036116ca5780604051634c9c8ce360e01b815260040161072b91906145dc565b600080516020614e1d83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516117169190614a6e565b600060405180830381855af49150503d8060008114611751576040519150601f19603f3d011682016040523d82523d6000602084013e611756565b606091505b5091509150611766858383611e71565b925050505b92915050565b34156106385760405163b398979f60e01b815260040160405180910390fd5b805161179b90611ec4565b6117a88160200151611ec4565b6117b58160400151611ec4565b6117c28160600151611ec4565b6117cf8160800151611ec4565b6117dc8160a00151611ec4565b6117e98160c00151611ec4565b6117f68160e00151611ec4565b611804816101000151611ec4565b611812816101200151611ec4565b611820816101400151611ec4565b61182e816101600151611ec4565b61183c816101800151611ec4565b61184a816101a00151610c99565b611858816101c00151610c99565b611866816101e00151610c99565b611874816102000151610c99565b611882816102200151610c99565b611890816102400151610c99565b61189e816102600151610c99565b6118ac816102800151610c99565b6118ba816102a00151610c99565b610a1f816102c00151610c99565b6118d06143e5565b83602001518351146118f5576040516320fa9d8960e11b815260040160405180910390fd5b6000611902858585611f52565b905060006119138660000151612271565b90506000611926828460a001518861263c565b60408051601e8082526103e0820190925291925060009190602082016103c080368337505060408051601e8082526103e082019092529293506000929150602082015b61197161441f565b81526020019060019003908161196957905050905060006119968a858a89878761269c565b60a0870151606087015191925090600080516020614e3d833981519152600081838509604080516101008101825260e09c8d0151815260208101969096528501525050506060810191909152608081019290925260a082015261016086015160c082015261018090950151928501929092525091949350505050565b6000600080516020614e3d833981519152611a2b61441f565b611a3361441f565b6040805160028082526060820183526000926020830190803683375050604080516002808252606082019092529293506000929150602082015b611a7561441f565b815260200190600190039081611a6d5790505090506000600190508083600081518110611aa457611aa4614a58565b6020026020010181815250508760c0015182600081518110611ac857611ac8614a58565b6020026020010181905250876000015183600181518110611aeb57611aeb614a58565b6020026020010181815250508760e0015182600181518110611b0f57611b0f614a58565b6020026020010181905250611b2482846126d1565b6080890151519095506060935083925090506000611b43826002614a8a565b611b4e906001614a8a565b9050806001600160401b03811115611b6857611b68614475565b604051908082528060200260200182016040528015611b91578160200160208202803683370190505b509350806001600160401b03811115611bac57611bac614475565b604051908082528060200260200182016040528015611be557816020015b611bd261441f565b815260200190600190039081611bca5790505b509250505060008060005b896080015151811015611c895789608001518181518110611c1357611c13614a58565b6020026020010151858381518110611c2d57611c2d614a58565b6020026020010181815250508960a001518181518110611c4f57611c4f614a58565b6020026020010151848381518110611c6957611c69614a58565b6020908102919091010152611c7f600183614a8a565b9150600101611bf0565b508860200151848281518110611ca157611ca1614a58565b6020026020010181815250508860c00151838281518110611cc457611cc4614a58565b6020908102919091010152611cda600182614a8a565b895160408b015191925090600089828409905080878581518110611d0057611d00614a58565b6020026020010181815250505050508860e00151838281518110611d2657611d26614a58565b6020908102919091010152611d3c600182614a8a565b60608a015190915087818408925050611d54826127bf565b848281518110611d6657611d66614a58565b602002602001018181525050611d7a6127f1565b838281518110611d8c57611d8c614a58565b6020026020010181905250611da9611da484866126d1565b612812565b945050505050600060405180608001604052807f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b081526020017f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c181526020017f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e5581526020017f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe48152509050611e67838284611e6261287f565b612950565b9695505050505050565b606082611e8657611e8182612a33565b611696565b8151158015611e9d57506001600160a01b0384163b155b15611ebd5783604051639996b31560e01b815260040161072b91906145dc565b5080611696565b6000600080516020614ddd833981519152611ede83612a5c565b15611ee857505050565b825160208401518260038485858609850908838283091483821084841016169350505081610bbd5760405162461bcd60e51b8152602060048201526017602482015276109b8c8d4d0e881a5b9d985b1a590811cc481c1bda5b9d604a1b604482015260640161072b565b611f9a60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080518082019091526060815260006020820152600080516020614e3d833981519152611fc9828787612a6b565b81518451611fd690612e04565b611fe38660200151612e04565b611ff08760400151612e04565b611ffd8860600151612e04565b61200a8960800151612e04565b60405160200161201f96959493929190614a9d565b60408051601f19818403018152919052825261203a82612e79565b5061204482612e79565b606084015261205282612e79565b6080840152815160a085015161206790612e04565b604051602001612078929190614b1c565b60408051601f19818403018152919052825261209382612e79565b8352815160c08501516120a590612e04565b6120b28660e00151612e04565b6120c0876101000151612e04565b6120ce886101200151612e04565b6120dc896101400151612e04565b6040516020016120f196959493929190614a9d565b60408051601f19818403018152919052825261210c82612e79565b60a084015281516101a085015161212290612edb565b612130866101c00151612edb565b61213e876101e00151612edb565b61214c886102000151612edb565b61215a896102200151612edb565b60405160200161216f96959493929190614b4b565b60408051601f1981840301815291905280835261024085015161219190612edb565b61219f866102600151612edb565b6121ad876102800151612edb565b6121bb886102a00151612edb565b6121c9896102c00151612edb565b6040516020016121de96959493929190614b4b565b60408051601f1981840301815291905282526121f982612e79565b60c0840152815161016085015161220f90612e04565b61221d866101800151612e04565b60405160200161222f93929190614b87565b60408051601f19818403018152919052825261224a82612e79565b60e08401528251818180098282820960208601919091526040850152509195945050505050565b6122a36040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b81620100000361233757506040805160a0810182526010815260208101929092527f30641e0e92bebef818268d663bcad6dbcfd6c0149170f6d7d350b1b1fa6c1001908201527eeeb2cb5981ed45649abebde081dcff16c8601de4347e7dd1628ba2daac43b760608201527f0b5d56b77fe704e8e92338c0082f37e091126414c830e4c6922d5ac802d842d4608082015290565b8162020000036123cc57506040805160a0810182526011815260208101929092527f30643640b9f82f90e83b698e5ea6179c7c05542e859533b48b9953a2f5360801908201527f1bf82deba7d74902c3708cc6e70e61f30512eca95655210e276e5858ce8f58e560608201527f244cf010c43ca87237d8b00bf9dd50c4c01c7f086bd4e8c920e75251d96f0d22608082015290565b81620400000361246157506040805160a0810182526012815260208101929092527f30644259cd94e7dd5045d7a27013b7fcd21c9e3b7fa75222e7bda49b729b0401908201527f19ddbcaf3a8d46c15c0176fbb5b95e4dc57088ff13f4d1bd84c6bfa57dcdc0e060608201527f036853f083780e87f8d7c71d111119c57dbe118c22d5ad707a82317466c5174c608082015290565b8162080000036124f657506040805160a0810182526013815260208101929092527f3064486657634403844b0eac78ca882cfd284341fcb0615a15cfcd17b14d8201908201527f2260e724844bca5251829353968e4915305258418357473a5c1d597f613f6cbd60608201527f06e402c0a314fb67a15cf806664ae1b722dbc0efe66e6c81d98f9924ca535321608082015290565b81621000000361258b57506040805160a0810182526014815260208101929092527f30644b6c9c4a72169e4daa317d25f04512ae15c53b34e8f5acd8e155d0a6c101908201527f26125da10a0ed06327508aba06d1e303ac616632dbed349f53422da95333785760608201527f100c332d2100895fab6473bc2c51bfca521f45cb3baca6260852a8fde26c91f3608082015290565b8160200361261e57506040805160a0810182526005815260208101929092527f2ee12bff4a2813286a8dc388cd754d9a3ef2490635eba50cb9c2e5e750800001908201527f09c532c6306b93d29678200d47c0b2a99c18d51b838eeb1d3eed4c533bb512d060608201527f2724713603bfbd790aeaf3e7df25d8e7ef8f311334905b4d8c99980cf210979d608082015290565b60405163e2ef09e560e01b815260040160405180910390fd5b919050565b61266060405180606001604052806000815260200160008152602001600081525090565b61266a8484613012565b80825261267a9085908590613066565b60208201528051612690908590849086906130ca565b60408201529392505050565b6000806126aa858789613220565b90506126ba88868989888861330c565b6126c5818786613618565b98975050505050505050565b6126d961441f565b825182511461272a5760405162461bcd60e51b815260206004820181905260248201527f4d534d206572726f723a206c656e67746820646f6573206e6f74206d61746368604482015260640161072b565b6127688360008151811061274057612740614a58565b60200260200101518360008151811061275b5761275b614a58565b6020026020010151613668565b905060015b82518110156127b8576127ae826127a986848151811061278f5761278f614a58565b602002602001015186858151811061275b5761275b614a58565b6136fc565b915060010161276d565b5092915050565b60006127d9600080516020614e3d83398151915283614bca565b61176b90600080516020614e3d833981519152614bec565b6127f961441f565b5060408051808201909152600181526002602082015290565b61281a61441f565b61282382612a5c565b1561282c575090565b604051806040016040528083600001518152602001600080516020614ddd833981519152846020015161285f9190614bca565b61287790600080516020614ddd833981519152614bec565b905292915050565b6128aa6040518060800160405280600081526020016000815260200160008152602001600081525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b60008060006040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e08201526020850151610100820152845161012082015260608501516101408201526040850151610160820152602060006101808360085afa915050600051915080612a255760405162461bcd60e51b815260206004820152601c60248201527b426e3235343a2050616972696e6720636865636b206661696c65642160201b604482015260640161072b565b50151590505b949350505050565b805115612a435780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516020909101511590151690565b825160fe90612aa6612a7c83612edb565b604051602001612a8e91815260200190565b60405160208183030381529060405260006004613797565b612ae0612ab68660000151612edb565b604051602001612ac891815260200190565b60405160208183030381529060405260006008613797565b612af0612ab68760200151612edb565b604051602001612b039493929190614bff565b60408051601f19818403018152919052808552612b206001612edb565b612b37600080516020614e9d833981519152612edb565b612b4e600080516020614e5d833981519152612edb565b612b65600080516020614e7d833981519152612edb565b612b7c600080516020614dfd833981519152612edb565b604051602001612b9196959493929190614b4b565b60408051601f1981840301815291905280855260e0840151612bb290612e04565b612bc0856101000151612e04565b612bce866101200151612e04565b612bdc876101400151612e04565b612bea886101600151612e04565b612bf8896101800151612e04565b612c068a6101e00151612e04565b604051602001612c1d989796959493929190614c56565b60408051601f19818403018152919052808552610200840151612c3f90612e04565b612c4d856102200151612e04565b612c5b866102400151612e04565b612c69876101a00151612e04565b612c77886101c00151612e04565b612c85896102600151612e04565b604051602001612c9b9796959493929190614cfb565b60408051601f19818403018152918152818652840151612cba90612e04565b612cc78560600151612e04565b612cd48660800151612e04565b612ce18760a00151612e04565b612cee8860c00151612e04565b604051602001612d0396959493929190614a9d565b60408051601f198184030181529190528085528251612d3a908490600090612d2d57612d2d614a58565b6020026020010151612edb565b612d5084600181518110612d2d57612d2d614a58565b612d6685600281518110612d2d57612d2d614a58565b612d7c86600381518110612d2d57612d2d614a58565b612d9287600481518110612d2d57612d2d614a58565b612da888600581518110612d2d57612d2d614a58565b612dbe89600681518110612d2d57612d2d614a58565b612dd48a600781518110612d2d57612d2d614a58565b604051602001612dec99989796959493929190614d8d565b60408051601f19818403018152919052909352505050565b60606000612e1183612a5c565b15612e1d57600160fe1b175b6020830151600080516020614ddd83398151915260019190911b10612e435750600160ff1b5b8251612e50908217612edb565b604051602001612e6291815260200190565b604051602081830303815290604052915050919050565b602080820151825180516040518381526000948594939291908101855b83811015612eb05760208186018101518383015201612e96565b50506020918201902090860181905292506000611e67600080516020614e3d83398151915285614bca565b60008190506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b6008827fff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff0016901c1790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b6010827dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff1916901c1790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b6020827bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1916901c1790506040816001600160401b03600160801b03600160c01b0316901b6040826001600160401b03600160801b03600160c01b031916901c179050608081901b608082901c179050919050565b8151600090600080516020614e3d833981519152908380156130565784935060005b8281101561304a57838586099450600101613034565b5060018403935061305d565b6001830393505b50505092915050565b60008160000361307857506000611696565b6040840151600080516020614e3d833981519152906000908281860990508580156130a8576001870392506130af565b6001840392505b506130b9826138a4565b915082828209979650505050505050565b6000816000036130dc57506000612a2b565b83516040860151600080516020614e3d83398151915291906000908190819081806131078d8861394a565b90506000876001600160401b0381111561312357613123614475565b60405190808252806020026020018201604052801561314c578160200160208202803683370190505b509050888b850993506001925060005b8881101561319157602081026020840101519550898d878c03089650898785096020828102840101889052935060010161315c565b5061319b836138a4565b925060005b8881101561320e5760208102602084010151955089868609975089848909975060005b898110156131ed578082146131e5576020810260208401015197508a888a0998505b6001016131c3565b506020810260208f010151955089868909975089888c089a506001016131a0565b50505050505050505050949350505050565b600080600080516020614e3d8339815191529050600083602001519050600084604001519050600060019050606088015160808901516101a08901516102408a0151878889838709858501088609945050506101c08901516102608a0151878889838709858501088609945050506101e08901516102808a0151878889838709858501088609945050506102008901516102a08a01518788898387098585010886099450505061022089015191506102c0890151868782898587080985099350505050875160208901518586868309870385089650508485838309860387089998505050505050505050565b61331a868686868587613a0f565b60c08501518251600080516020614e3d8339815191529190819081908690601490811061334957613349614a58565b60200260200101818152505085600001518460148151811061336d5761336d614a58565b6020026020010181905250828282099050808560158151811061339257613392614a58565b6020026020010181815250508560200151846015815181106133b6576133b6614a58565b602002602001018190525082828209905080856016815181106133db576133db614a58565b6020026020010181815250508560400151846016815181106133ff576133ff614a58565b6020026020010181905250828282099050808560178151811061342457613424614a58565b60200260200101818152505085606001518460178151811061344857613448614a58565b6020026020010181905250828282099050808560188151811061346d5761346d614a58565b60200260200101818152505085608001518460188151811061349157613491614a58565b602002602001018190525082828209905080856019815181106134b6576134b6614a58565b6020026020010181815250508860400151846019815181106134da576134da614a58565b60200260200101819052508282820990508085601a815181106134ff576134ff614a58565b602002602001018181525050886060015184601a8151811061352357613523614a58565b60200260200101819052508282820990508085601b8151811061354857613548614a58565b602002602001018181525050886080015184601b8151811061356c5761356c614a58565b60200260200101819052508282820990508085601c8151811061359157613591614a58565b6020026020010181815250508860a0015184601c815181106135b5576135b5614a58565b60200260200101819052508282820990508760e0015185601d815181106135de576135de614a58565b6020026020010181815250508560a0015184601d8151811061360257613602614a58565b6020026020010181905250505050505050505050565b600080516020614e3d8339815191528381039060005b600a81101561365f5760206015820102840151602082026101a001860151838482840986089450505060010161362e565b50509392505050565b61367061441f565b613678614439565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080806136aa57600080fd5b50806136f45760405162461bcd60e51b8152602060048201526019602482015278426e3235343a207363616c6172206d756c206661696c65642160381b604482015260640161072b565b505092915050565b61370461441f565b61370c614457565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa9050808061374957600080fd5b50806136f45760405162461bcd60e51b815260206004820152601d60248201527f426e3235343a2067726f7570206164646974696f6e206661696c656421000000604482015260640161072b565b6060816137a581601f614a8a565b10156137e45760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015260640161072b565b6137ee8284614a8a565b845110156138325760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015260640161072b565b606082158015613851576040519150600082526020820160405261389b565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561388a578051835260209283019201613872565b5050858452601f01601f1916604052505b50949350505050565b6000806000600080516020614e3d833981519152905060405160208152602080820152602060408201528460608201526002820360808201528160a08201526020600060c08360055afa9250506000519250816139435760405162461bcd60e51b815260206004820152601d60248201527f426e3235343a20706f7720707265636f6d70696c65206661696c656421000000604482015260640161072b565b5050919050565b6060826020015182111561397157604051638c5e11f160e01b815260040160405180910390fd5b60608301516001600080516020614e3d833981519152846001600160401b0381111561399f5761399f614475565b6040519080825280602002602001820160405280156139c8578160200160208202803683370190505b5093508415191561305d5760208401856020028101600182526020820191505b80821015613a04578285850993508382526020820191506139e8565b505050505092915050565b600080600080600080600080516020614e3d83398151915290508060208b015160208d01510995508a5193508060a08c015160608d0151099250806101a08a0151840891508060808c01518308915080848309935080600080516020614e9d83398151915284099150806101c08a0151830891508060808c01518308915080848309935080600080516020614e5d83398151915284099150806101e08a0151830891508060808c01518308915080848309935080600080516020614e7d83398151915284099150806102008a0151830891508060808c01518308915080848309935080600080516020614dfd83398151915284099150806102208a0151830891508060808c0151830891508084830993508084870895508860a0015188600081518110613b3e57613b3e614a58565b60200260200101819052508587600081518110613b5d57613b5d614a58565b6020026020010181815250508060608c01518c51099450806102c08a015186099450806102408a015160608d0151099250806101a08a0151840892508060808c015184089250808386099450806102608a015160608d0151099250806101c08a0151840892508060808c015184089250808386099450806102808a015160608d0151099250806101e08a0151840892508060808c015184089250808386099450806102a08a015160608d0151099250806102008a0151840892508060808c0151840892508083860994508b60c0015188600181518110613c3f57613c3f614a58565b6020908102919091010152613c548582614bec565b87600181518110613c6757613c67614a58565b602002602001018181525050886101a0015187600281518110613c8c57613c8c614a58565b602002602001018181525050886101c0015187600381518110613cb157613cb1614a58565b602002602001018181525050886101e0015187600481518110613cd657613cd6614a58565b60200260200101818152505088610200015187600581518110613cfb57613cfb614a58565b6020026020010181815250508b60e0015188600281518110613d1f57613d1f614a58565b60200260200101819052508b610100015188600381518110613d4357613d43614a58565b60200260200101819052508b610120015188600481518110613d6757613d67614a58565b60200260200101819052508b610140015188600581518110613d8b57613d8b614a58565b6020026020010181905250806101c08a01516101a08b01510992508287600681518110613dba57613dba614a58565b6020026020010181815250508b610160015188600681518110613ddf57613ddf614a58565b6020026020010181905250806102008a01516101e08b01510992508287600781518110613e0e57613e0e614a58565b6020026020010181815250508b610180015188600781518110613e3357613e33614a58565b60200260200101819052506101a089015192508083840991508082830991508082840992508287600881518110613e6c57613e6c614a58565b6020026020010181815250508b6101e0015188600881518110613e9157613e91614a58565b60200260200101819052506101c089015192508083840991508082830991508082840992508287600981518110613eca57613eca614a58565b6020026020010181815250508b610200015188600981518110613eef57613eef614a58565b60200260200101819052506101e089015192508083840991508082830991508082840992508287600a81518110613f2857613f28614a58565b6020026020010181815250508b610220015188600a81518110613f4d57613f4d614a58565b602002602001018190525061020089015192508083840991508082830991508082840992508287600b81518110613f8657613f86614a58565b6020026020010181815250508b610240015188600b81518110613fab57613fab614a58565b602002602001018190525088610220015181613fc79190614bec565b87600c81518110613fda57613fda614a58565b6020026020010181815250508b6101a0015188600c81518110613fff57613fff614a58565b6020026020010181905250600187600d8151811061401f5761401f614a58565b6020026020010181815250508b6101c0015188600d8151811061404457614044614a58565b6020026020010181905250806101c08a01516101a08b0151099250806101e08a015184099250806102008a015184099250806102208a0151840992508287600e8151811061409457614094614a58565b6020026020010181815250508b610260015188600e815181106140b9576140b9614a58565b602090810291909101015289516140d09082614bec565b87600f815181106140e3576140e3614a58565b6020026020010181815250508860c0015188600f8151811061410757614107614a58565b60200260200101819052508060018b510860a08c015190935081908009915080828409925080836020601002890151099150818760108151811061414d5761414d614a58565b6020026020010181815250508860e001518860108151811061417157614171614a58565b602002602001018190525080836020601102890151099150818760118151811061419d5761419d614a58565b602002602001018181525050886101000151886011815181106141c2576141c2614a58565b60200260200101819052508083602060120289015109915081876012815181106141ee576141ee614a58565b6020026020010181815250508861012001518860128151811061421357614213614a58565b602002602001018190525080836020601302890151099150818760138151811061423f5761423f614a58565b6020026020010181815250508861014001518860138151811061426457614264614a58565b6020026020010181905250505050505050505050505050565b60405180610120016040528060006001600160401b0316815260200160006001600160401b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600063ffffffff1681525090565b604051806102800160405280600081526020016000815260200161430361441f565b815260200161431061441f565b815260200161431d61441f565b815260200161432a61441f565b815260200161433761441f565b815260200161434461441f565b815260200161435161441f565b815260200161435e61441f565b815260200161436b61441f565b815260200161437861441f565b815260200161438561441f565b815260200161439261441f565b815260200161439f61441f565b81526020016143ac61441f565b81526020016143b961441f565b81526020016143c661441f565b81526020016143d361441f565b81526020016143e061441f565b905290565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160608152602001606081526020016143d35b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156144ae576144ae614475565b60405290565b6040516102e081016001600160401b03811182821017156144ae576144ae614475565b604051601f8201601f191681016001600160401b03811182821017156144ff576144ff614475565b604052919050565b80356001600160401b038116811461263757600080fd5b803563ffffffff8116811461263757600080fd5b6000610120828403121561454557600080fd5b61454d61448b565b905061455882614507565b815261456660208301614507565b602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101006145b581840161451e565b9082015292915050565b600061012082840312156145d257600080fd5b6116968383614532565b6001600160a01b0391909116815260200190565b60006101208201905060018060401b038084511683528060208501511660208401525060408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100808401516136f48285018263ffffffff169052565b80356001600160a01b038116811461263757600080fd5b6000806040838503121561469157600080fd5b61469a83614667565b91506020838101356001600160401b03808211156146b757600080fd5b818601915086601f8301126146cb57600080fd5b8135818111156146dd576146dd614475565b6146ef601f8201601f191685016144d7565b9150808252878482850101111561470557600080fd5b80848401858401376000848284010152508093505050509250929050565b60006040828403121561473557600080fd5b604080519081016001600160401b038111828210171561475757614757614475565b604052823581526020928301359281019290925250919050565b6000808284036105a081121561478657600080fd5b6147908585614532565b92506101206104808061011f19840112156147aa57600080fd5b6147b26144b4565b92506147c087838801614723565b83526101606147d188828901614723565b60208501526101a06147e589828a01614723565b60408601526101e06147f98a828b01614723565b606087015261022061480d8b828c01614723565b60808801526102606148218c828d01614723565b60a08901526102a06148358d828e01614723565b60c08a01526148488d6102e08e01614723565b60e08a015261485b8d6103208e01614723565b6101008a015261486f8d6103608e01614723565b888a01526148818d6103a08e01614723565b6101408a01526148958d6103e08e01614723565b868a01526148a78d6104208e01614723565b6101808a01526104608c0135858a0152868c01356101c08a01526104a08c0135848a01526104c08c01356102008a01526104e08c0135838a01526105008c01356102408a01526105208c0135828a01526105408c01356102808a01526105608c0135818a015250505050505050506105808401356102c0820152809150509250929050565b6001600160401b0391909116815260200190565b60006020828403121561495257600080fd5b6116968261451e565b60006020828403121561496d57600080fd5b5035919050565b60005b8381101561498f578181015183820152602001614977565b50506000910152565b60208152600082518060208401526149b7816040850160208701614974565b601f01601f19169190910160400192915050565b6000602082840312156149dd57600080fd5b61169682614667565b634e487b7160e01b600052601160045260246000fd5b6001600160401b038181168382160280821691908281146136f4576136f46149e6565b600060208284031215614a3157600080fd5b5051919050565b6001600160401b038181168382160190808211156127b8576127b86149e6565b634e487b7160e01b600052603260045260246000fd5b60008251614a80818460208701614974565b9190910192915050565b8082018082111561176b5761176b6149e6565b600087516020614ab08285838d01614974565b885191840191614ac38184848d01614974565b8851920191614ad58184848c01614974565b8751920191614ae78184848b01614974565b8651920191614af98184848a01614974565b8551920191614b0b8184848901614974565b919091019998505050505050505050565b60008351614b2e818460208801614974565b835190830190614b42818360208801614974565b01949350505050565b60008751614b5d818460208c01614974565b9190910195865250602085019390935260408401919091526060830152608082015260a001919050565b60008451614b99818460208901614974565b845190830190614bad818360208901614974565b8451910190614bc0818360208801614974565b0195945050505050565b600082614be757634e487b7160e01b600052601260045260246000fd5b500690565b8181038181111561176b5761176b6149e6565b60008551614c11818460208a01614974565b855190830190614c25818360208a01614974565b8551910190614c38818360208901614974565b8451910190614c4b818360208801614974565b019695505050505050565b600089516020614c698285838f01614974565b8a5191840191614c7c8184848f01614974565b8a51920191614c8e8184848e01614974565b8951920191614ca08184848d01614974565b8851920191614cb28184848c01614974565b8751920191614cc48184848b01614974565b8651920191614cd68184848a01614974565b8551920191614ce88184848901614974565b919091019b9a5050505050505050505050565b600088516020614d0e8285838e01614974565b895191840191614d218184848e01614974565b8951920191614d338184848d01614974565b8851920191614d458184848c01614974565b8751920191614d578184848b01614974565b8651920191614d698184848a01614974565b8551920191614d7b8184848901614974565b919091019a9950505050505050505050565b60008a51614d9f818460208f01614974565b9190910198895250602088019690965260408701949094526060860192909252608085015260a084015260c083015260e08201526101000191905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd472e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e881360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000011ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb0252042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4aa164736f6c6343000817000a", + "nonce": "0x4b", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xef067c", + "logs": [ + { + "address": "0xb7fd36e6dbd92bab8d0379dfa93c04af60d5302e", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0xd634d91fe465b52c9081973e5cf205622ccd06f9df8001203294ef69f168437f", + "blockNumber": "0x6312e3", + "transactionHash": "0xc10bac87e8a7caf58c5d79686e44f44be61a63f4d251a7ec93169b1a1cd97dd5", + "transactionIndex": "0x45", + "logIndex": "0x4a", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000040000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xc10bac87e8a7caf58c5d79686e44f44be61a63f4d251a7ec93169b1a1cd97dd5", + "transactionIndex": "0x45", + "blockHash": "0xd634d91fe465b52c9081973e5cf205622ccd06f9df8001203294ef69f168437f", + "blockNumber": "0x6312e3", + "gasUsed": "0x43b2e0", + "effectiveGasPrice": "0x5e6cc2f19", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0xb7fd36e6dbd92bab8d0379dfa93c04af60d5302e" + } + ], + "libraries": [], + "pending": [], + "returns": { + "implementationAddress": { + "internal_type": "address", + "value": "0xB7fd36e6DBD92Bab8d0379dfa93C04AF60D5302E" + }, + "result": { + "internal_type": "bytes", + "value": "0x546865206f74686572206f776e657273206f66207468652053616665204d756c74697369672077616c6c6574206e65656420746f207369676e20746865207472616e73616374696f6e207669612074686520536166652055492068747470733a2f2f6170702e736166652e676c6f62616c2f7472616e73616374696f6e732f71756575653f736166653d7365703a307863353666413635303564313062463332326530313332376532323437394445373843334266316345" + } + }, + "timestamp": 1723562026, + "chain": 11155111, + "commit": "286c14d9" +} \ No newline at end of file diff --git a/contracts/broadcast/LightClientWithDefender.s.sol/11155111/run-latest.json b/contracts/broadcast/LightClientWithDefender.s.sol/11155111/run-latest.json new file mode 100644 index 0000000000..fd5a0a5062 --- /dev/null +++ b/contracts/broadcast/LightClientWithDefender.s.sol/11155111/run-latest.json @@ -0,0 +1,69 @@ +{ + "transactions": [ + { + "hash": "0xc10bac87e8a7caf58c5d79686e44f44be61a63f4d251a7ec93169b1a1cd97dd5", + "transactionType": "CREATE", + "contractName": "LightClientV2", + "contractAddress": "0xb7fd36e6dbd92bab8d0379dfa93c04af60d5302e", + "function": null, + "arguments": null, + "transaction": { + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "gas": "0x57fba5", + "value": "0x0", + "input": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051614ec96200010460003960008181610a2d01528181610a560152610bcd0152614ec96000f3fe60806040526004361061011b5760003560e01c80630d8e6e2c146101205780632a49491a14610152578063313df7b1146101c3578063382b215a146101f05780634847ae5d146102065780634f1ef2861461022857806352d1902d1461023d5780636282773314610252578063715018a61461026857806373c3adc01461027d578063766718081461029d57806376b6b7cb146102d15780637f17baad146102e757806382d07ff3146103b45780638da5cb5b146103c9578063a51e6fea146103de578063a7605f45146103fe578063ad3cb1cc14610414578063bd32519a14610452578063ca6fe85514610483578063d68b52d614610499578063db13b60a146104b9578063f0682054146104f8578063f2fde38b1461052a575b600080fd5b34801561012c57600080fd5b506040805160028152600060208201819052918101919091526060015b60405180910390f35b34801561015e57600080fd5b506101b561016d3660046145bf565b60808082015160a083015160c0840151604080516020810194909452830191909152606082015260009101604051602081830303815290604052805190602001209050919050565b604051908152602001610149565b3480156101cf57600080fd5b506006546101e3906001600160a01b031681565b60405161014991906145dc565b3480156101fc57600080fd5b506101b560035481565b34801561021257600080fd5b5061021b61054a565b60405161014991906145f0565b61023b61023636600461467e565b6105ea565b005b34801561024957600080fd5b506101b5610609565b34801561025e57600080fd5b506101b560025481565b34801561027457600080fd5b5061023b610626565b34801561028957600080fd5b5061023b610298366004614771565b61063a565b3480156102a957600080fd5b506000546102c490600160601b90046001600160401b031681565b604051610149919061492c565b3480156102dd57600080fd5b506101b560015481565b3480156102f357600080fd5b5061035f610302366004614940565b6005602081905260009182526040909120805460018201546002830154600384015460048501549585015460068601546007909601546001600160401b0380871698600160401b9097041696949593949293929063ffffffff1689565b604080516001600160401b039a8b1681529990981660208a0152968801959095526060870193909352608086019190915260a085015260c084015260e083015263ffffffff1661010082015261012001610149565b3480156103c057600080fd5b5061021b6108c4565b3480156103d557600080fd5b506101e3610963565b3480156103ea57600080fd5b506101b56103f936600461495b565b61097e565b34801561040a57600080fd5b506101b560095481565b34801561042057600080fd5b50610445604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101499190614998565b34801561045e57600080fd5b5060065461047390600160a01b900460ff1681565b6040519015158152602001610149565b34801561048f57600080fd5b506101b560045481565b3480156104a557600080fd5b5061023b6104b436600461495b565b61099f565b3480156104c557600080fd5b506104d96104d436600461495b565b6109ac565b604080516001600160401b039093168352602083019190915201610149565b34801561050457600080fd5b506000546105159063ffffffff1681565b60405163ffffffff9091168152602001610149565b34801561053657600080fd5b5061023b6105453660046149cb565b6109e4565b61055261427d565b506000805463ffffffff600160201b909104811682526005602081815260409384902084516101208101865281546001600160401b038082168352600160401b90910416928101929092526001810154948201949094526002840154606082015260038401546080820152600484015460a08201529083015460c0820152600683015460e08201526007909201541661010082015290565b6105f2610a22565b6105fb82610ac7565b6106058282610b09565b5050565b6000610613610bc2565b50600080516020614e1d83398151915290565b61062e610c0b565b6106386000610c3d565b565b6106426108c4565b5182516001600160401b03918216911611158061068057506106626108c4565b602001516001600160401b031682602001516001600160401b031611155b1561069e5760405163051c46ef60e01b815260040160405180910390fd5b600080546106c39063ffffffff811690600160601b90046001600160401b03166149fc565b90506000816001600160401b03166106d96108c4565b602001516001600160401b031614905080158161070b5750816001600160401b031684602001516001600160401b0316115b15610734578160405163036466bf60e31b815260040161072b919061492c565b60405180910390fd5b6107418460400151610c99565b61074e8460600151610c99565b61075b8460800151610c99565b6107688460a00151610c99565b6107758460c00151610c99565b801561078357610783610cf5565b61078d8484610db1565b600954156107dd5760405162461bcd60e51b815260206004820152601d60248201527f6e65774669656c642063616e206f6e6c792062652073657420746f2030000000604482015260640161072b565b6000805463ffffffff600160401b918290048116835260056020818152604094859020895181548b8401516001600160401b039081169788026001600160801b031990921692169182171782558a8701516001830181905560608c0151600284015560808c0151600384015560a08c0151600484015560c08c01519483019490945560e08b015160068301556101008b0151600790920180549290951663ffffffff19909216919091179093559351908152919290917fa04a773924505a418564363725f56832f5772e6b8d0dbd6efce724dfe803dae6910160405180910390a350505050565b6108cc61427d565b506000805463ffffffff600160401b91829004811683526005602081815260409485902085516101208101875281546001600160401b038082168352969004909516918501919091526001810154948401949094526002840154606084015260038401546080840152600484015460a084015283015460c0830152600683015460e083015260079092015490911661010082015290565b60008061096e610df8565b546001600160a01b031692915050565b6007818154811061098e57600080fd5b600091825260209091200154905081565b6109a7610c0b565b600955565b600881815481106109bc57600080fd5b6000918252602090912060029091020180546001909101546001600160401b03909116915082565b6109ec610c0b565b6001600160a01b038116610a16576000604051631e4fbdf760e01b815260040161072b91906145dc565b610a1f81610c3d565b50565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610aa957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610a9d600080516020614e1d833981519152546001600160a01b031690565b6001600160a01b031614155b156106385760405163703e46dd60e11b815260040160405180910390fd5b610acf610c0b565b7ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d81604051610afe91906145dc565b60405180910390a150565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b63575060408051601f3d908101601f19168201909252610b6091810190614a1f565b60015b610b825781604051634c9c8ce360e01b815260040161072b91906145dc565b600080516020614e1d8339815191528114610bb357604051632a87526960e21b81526004810182905260240161072b565b610bbd8383610e1c565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106385760405163703e46dd60e11b815260040160405180910390fd5b33610c14610963565b6001600160a01b031614610638573360405163118cdaa760e01b815260040161072b91906145dc565b6000610c47610df8565b80546001600160a01b038481166001600160a01b031983168117845560405193945091169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600080516020614e3d8339815191528110806106055760405162461bcd60e51b815260206004820152601b60248201527a109b8c8d4d0e881a5b9d985b1a59081cd8d85b185c88199a595b19602a1b604482015260640161072b565b6000610d0261016d6108c4565b600380546001558190556004546002559050610d1c6108c4565b60e001516004556000805460019190600c90610d49908490600160601b90046001600160401b0316614a38565b92506101000a8154816001600160401b0302191690836001600160401b031602179055507fdb3558259e039d7e50e816b9dcce30fb114d8a9c86eca5ab14b60194d6945d3f6000600c9054906101000a90046001600160401b0316604051610afe919061492c565b6000610dbb610e72565b90506000610dc884611454565b9050610dd58282856115b2565b610df2576040516309bde33960e01b815260040160405180910390fd5b50505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930090565b610e258261169d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610e6a57610bbd82826116f9565b610605611771565b610e7a6142e1565b621000008152600860208201527f20c9403133dfde9a9d382df76fb0523571648725abc0a7c12830bb690ec83b336040820151527f03a0a9acc3e3815a7ed6cb1379f7d157e6343164729376392a693acbd3ec283c6020604083015101527f2866c18ad1df10ef13542cce6250ce02cb2a6b72ae00a9852e271187e9e4e0db6060820151527f21be232a42246a5663ebf483470cca666ffe9d4f0e63b929c596a7658714e9706020606083015101527f07d77873b9860074118e75808c79468b83c8ed64ba14db5cb5afa8e534de7b996080820151527f0be0f448839080132d47de17de0099b4cd74ae1e6b71cdda06cdebb868a50c6d6020608083015101527f13bd45a023491eadea44cc3f24cfbd1796eade9c0e39ee81d9f63ea0a580662560a0820151527f18f95cdda42ce11d9d10a3b335acc214e3807c578c5359405d810c208df60093602060a083015101527f0970d978763461f09e9ec63454073497386e4d282fedc2ac5b967cb9fd3fa8a960c0820151527f28c2217f7bacf6f8b2b8ee4a90fcf8b5bca04205ea84e8e1eb54b85dd41bde28602060c083015101527f02fe3d02988db718380052970aba46a3296df5f29b736ba1f2c4ccffc8b5969360e0820151527f202c3e390cee7c5c8525da2329a19f4936f6f71ca97dde6c6fa32b382d5acc03602060e083015101527f23ac10ae6ca5cacee8744bb939aaa835390954b91ae668a2c8d0edda558a89e7610100820151527f1c8c2b856cdade256ba3237f39afd5e170a9532012f7aecae49d459b29f6f6ad602061010083015101527f16ec03d260bd7ac1c50ffa63565d5274b4582ceea52ff40b81cdfe8f444f01e4610120820151527f29392152723097e07113c3d7786d245ec40c30928015cd50b5668a4f4ea17031602061012083015101527f2cdbfb3a4053c8489b0c94e74338ac19118df7a06bc56b1eb4d0e0dc4eae7248610140820151527f07fea127dae943b8dc148f1408d40cff465c9c4721943669b1e4fd5a39db7036602061014083015101527f031455a79a2e0ce78a6cb53526ec04ac19716a86b08a93df48d178f8b77e5619610160820151527f118623e6bc136ee6d3f9907cd4ad04a9418ea03ba99ad753227cdfee598e8415602061016083015101527f0861d1997761a852226aac7ba9717bf6ae56451099be774cdf02ef352a58cbc8610180820151527f0805e392bcbc12e40a722778632d73fe981e4bc6fa6d1178b70af7be1cb9a3a3602061018083015101527f101d1e3978cb9f1e303d413144ebe67682c9eb0cfe11242959aa6029d78cdbbc6101a0820151527f089eb9c727e6cb07082bc3e6f40cf04f439fe48000602b584774dad7efc6607c60206101a083015101527f2d489f2493263aa873bcd94f21efb45bf257a61d81c0c95c3297916506653b406101c0820151527f18e45d627aadd4df2794ecd9909fac1a753f0c6fa8a9c6654a7a58b0912fffd560206101c083015101527f0e43e3a4b13cb438e2ad924614261ad0240214fa1c83fcda6a0bf779eb39ffc56101e0820151527f0eaba9f429c5f6fc3103d4cc4056c500ff42425d8e6465c5b8e145219f9c5cd360206101e083015101527f29ae351d09dcf41c0a80ab05393738358baab37e6fbc464b3bb13258994a1fa4610200820151527f2b7bc74608d7ec7dadd0597d6a4010d8bfc2b31900281901cedc42bdbb0fb8fc602061020083015101527f066802c7ceb9e913d4f65433a20661e097acac1affecbb534a54f76a29782226610220820151527f27ec80e811e636f3348267923c8e641bd98a7e37c5216670cbff14ae323f9e0e602061022083015101527f12604d1f87c583f6c9710c73eaf590af9d07aa743d1381d0e9dff0eab2614239610240820151527f1588579e6c3378ea32cb641205ef762a63cd353a0bd670394528ad2081ee8dd4602061024083015101527f247d65261d3a4ab042ba937331f6d0c0c5eb9ea78753a92084db1a6939e19e82610260820151527f2ce6cc664a32147bfe6a0c94a95bf0496679405ccae01648cd4ec021145120d56020610260830151015290565b60408051600880825261012082019092526060916000919060208201610100803683370190505090506002548160008151811061149357611493614a58565b60200260200101818152505082600001516001600160401b0316816001815181106114c0576114c0614a58565b60200260200101818152505082602001516001600160401b0316816002815181106114ed576114ed614a58565b60200260200101818152505082604001518160038151811061151157611511614a58565b60200260200101818152505082606001518160048151811061153557611535614a58565b60200260200101818152505082608001518160058151811061155957611559614a58565b6020026020010181815250508260a001518160068151811061157d5761157d614a58565b6020026020010181815250508260c00151816007815181106115a1576115a1614a58565b602090810291909101015292915050565b60006115bd82611790565b6115e0836000815181106115d3576115d3614a58565b6020026020010151610c99565b6115f6836001815181106115d3576115d3614a58565b61160c836002815181106115d3576115d3614a58565b611622836003815181106115d3576115d3614a58565b611638836004815181106115d3576115d3614a58565b61164e836005815181106115d3576115d3614a58565b611664836006815181106115d3576115d3614a58565b61167a836007815181106115d3576115d3614a58565b60006116878585856118c8565b905061169281611a12565b9150505b9392505050565b806001600160a01b03163b6000036116ca5780604051634c9c8ce360e01b815260040161072b91906145dc565b600080516020614e1d83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516117169190614a6e565b600060405180830381855af49150503d8060008114611751576040519150601f19603f3d011682016040523d82523d6000602084013e611756565b606091505b5091509150611766858383611e71565b925050505b92915050565b34156106385760405163b398979f60e01b815260040160405180910390fd5b805161179b90611ec4565b6117a88160200151611ec4565b6117b58160400151611ec4565b6117c28160600151611ec4565b6117cf8160800151611ec4565b6117dc8160a00151611ec4565b6117e98160c00151611ec4565b6117f68160e00151611ec4565b611804816101000151611ec4565b611812816101200151611ec4565b611820816101400151611ec4565b61182e816101600151611ec4565b61183c816101800151611ec4565b61184a816101a00151610c99565b611858816101c00151610c99565b611866816101e00151610c99565b611874816102000151610c99565b611882816102200151610c99565b611890816102400151610c99565b61189e816102600151610c99565b6118ac816102800151610c99565b6118ba816102a00151610c99565b610a1f816102c00151610c99565b6118d06143e5565b83602001518351146118f5576040516320fa9d8960e11b815260040160405180910390fd5b6000611902858585611f52565b905060006119138660000151612271565b90506000611926828460a001518861263c565b60408051601e8082526103e0820190925291925060009190602082016103c080368337505060408051601e8082526103e082019092529293506000929150602082015b61197161441f565b81526020019060019003908161196957905050905060006119968a858a89878761269c565b60a0870151606087015191925090600080516020614e3d833981519152600081838509604080516101008101825260e09c8d0151815260208101969096528501525050506060810191909152608081019290925260a082015261016086015160c082015261018090950151928501929092525091949350505050565b6000600080516020614e3d833981519152611a2b61441f565b611a3361441f565b6040805160028082526060820183526000926020830190803683375050604080516002808252606082019092529293506000929150602082015b611a7561441f565b815260200190600190039081611a6d5790505090506000600190508083600081518110611aa457611aa4614a58565b6020026020010181815250508760c0015182600081518110611ac857611ac8614a58565b6020026020010181905250876000015183600181518110611aeb57611aeb614a58565b6020026020010181815250508760e0015182600181518110611b0f57611b0f614a58565b6020026020010181905250611b2482846126d1565b6080890151519095506060935083925090506000611b43826002614a8a565b611b4e906001614a8a565b9050806001600160401b03811115611b6857611b68614475565b604051908082528060200260200182016040528015611b91578160200160208202803683370190505b509350806001600160401b03811115611bac57611bac614475565b604051908082528060200260200182016040528015611be557816020015b611bd261441f565b815260200190600190039081611bca5790505b509250505060008060005b896080015151811015611c895789608001518181518110611c1357611c13614a58565b6020026020010151858381518110611c2d57611c2d614a58565b6020026020010181815250508960a001518181518110611c4f57611c4f614a58565b6020026020010151848381518110611c6957611c69614a58565b6020908102919091010152611c7f600183614a8a565b9150600101611bf0565b508860200151848281518110611ca157611ca1614a58565b6020026020010181815250508860c00151838281518110611cc457611cc4614a58565b6020908102919091010152611cda600182614a8a565b895160408b015191925090600089828409905080878581518110611d0057611d00614a58565b6020026020010181815250505050508860e00151838281518110611d2657611d26614a58565b6020908102919091010152611d3c600182614a8a565b60608a015190915087818408925050611d54826127bf565b848281518110611d6657611d66614a58565b602002602001018181525050611d7a6127f1565b838281518110611d8c57611d8c614a58565b6020026020010181905250611da9611da484866126d1565b612812565b945050505050600060405180608001604052807f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b081526020017f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c181526020017f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e5581526020017f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe48152509050611e67838284611e6261287f565b612950565b9695505050505050565b606082611e8657611e8182612a33565b611696565b8151158015611e9d57506001600160a01b0384163b155b15611ebd5783604051639996b31560e01b815260040161072b91906145dc565b5080611696565b6000600080516020614ddd833981519152611ede83612a5c565b15611ee857505050565b825160208401518260038485858609850908838283091483821084841016169350505081610bbd5760405162461bcd60e51b8152602060048201526017602482015276109b8c8d4d0e881a5b9d985b1a590811cc481c1bda5b9d604a1b604482015260640161072b565b611f9a60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080518082019091526060815260006020820152600080516020614e3d833981519152611fc9828787612a6b565b81518451611fd690612e04565b611fe38660200151612e04565b611ff08760400151612e04565b611ffd8860600151612e04565b61200a8960800151612e04565b60405160200161201f96959493929190614a9d565b60408051601f19818403018152919052825261203a82612e79565b5061204482612e79565b606084015261205282612e79565b6080840152815160a085015161206790612e04565b604051602001612078929190614b1c565b60408051601f19818403018152919052825261209382612e79565b8352815160c08501516120a590612e04565b6120b28660e00151612e04565b6120c0876101000151612e04565b6120ce886101200151612e04565b6120dc896101400151612e04565b6040516020016120f196959493929190614a9d565b60408051601f19818403018152919052825261210c82612e79565b60a084015281516101a085015161212290612edb565b612130866101c00151612edb565b61213e876101e00151612edb565b61214c886102000151612edb565b61215a896102200151612edb565b60405160200161216f96959493929190614b4b565b60408051601f1981840301815291905280835261024085015161219190612edb565b61219f866102600151612edb565b6121ad876102800151612edb565b6121bb886102a00151612edb565b6121c9896102c00151612edb565b6040516020016121de96959493929190614b4b565b60408051601f1981840301815291905282526121f982612e79565b60c0840152815161016085015161220f90612e04565b61221d866101800151612e04565b60405160200161222f93929190614b87565b60408051601f19818403018152919052825261224a82612e79565b60e08401528251818180098282820960208601919091526040850152509195945050505050565b6122a36040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b81620100000361233757506040805160a0810182526010815260208101929092527f30641e0e92bebef818268d663bcad6dbcfd6c0149170f6d7d350b1b1fa6c1001908201527eeeb2cb5981ed45649abebde081dcff16c8601de4347e7dd1628ba2daac43b760608201527f0b5d56b77fe704e8e92338c0082f37e091126414c830e4c6922d5ac802d842d4608082015290565b8162020000036123cc57506040805160a0810182526011815260208101929092527f30643640b9f82f90e83b698e5ea6179c7c05542e859533b48b9953a2f5360801908201527f1bf82deba7d74902c3708cc6e70e61f30512eca95655210e276e5858ce8f58e560608201527f244cf010c43ca87237d8b00bf9dd50c4c01c7f086bd4e8c920e75251d96f0d22608082015290565b81620400000361246157506040805160a0810182526012815260208101929092527f30644259cd94e7dd5045d7a27013b7fcd21c9e3b7fa75222e7bda49b729b0401908201527f19ddbcaf3a8d46c15c0176fbb5b95e4dc57088ff13f4d1bd84c6bfa57dcdc0e060608201527f036853f083780e87f8d7c71d111119c57dbe118c22d5ad707a82317466c5174c608082015290565b8162080000036124f657506040805160a0810182526013815260208101929092527f3064486657634403844b0eac78ca882cfd284341fcb0615a15cfcd17b14d8201908201527f2260e724844bca5251829353968e4915305258418357473a5c1d597f613f6cbd60608201527f06e402c0a314fb67a15cf806664ae1b722dbc0efe66e6c81d98f9924ca535321608082015290565b81621000000361258b57506040805160a0810182526014815260208101929092527f30644b6c9c4a72169e4daa317d25f04512ae15c53b34e8f5acd8e155d0a6c101908201527f26125da10a0ed06327508aba06d1e303ac616632dbed349f53422da95333785760608201527f100c332d2100895fab6473bc2c51bfca521f45cb3baca6260852a8fde26c91f3608082015290565b8160200361261e57506040805160a0810182526005815260208101929092527f2ee12bff4a2813286a8dc388cd754d9a3ef2490635eba50cb9c2e5e750800001908201527f09c532c6306b93d29678200d47c0b2a99c18d51b838eeb1d3eed4c533bb512d060608201527f2724713603bfbd790aeaf3e7df25d8e7ef8f311334905b4d8c99980cf210979d608082015290565b60405163e2ef09e560e01b815260040160405180910390fd5b919050565b61266060405180606001604052806000815260200160008152602001600081525090565b61266a8484613012565b80825261267a9085908590613066565b60208201528051612690908590849086906130ca565b60408201529392505050565b6000806126aa858789613220565b90506126ba88868989888861330c565b6126c5818786613618565b98975050505050505050565b6126d961441f565b825182511461272a5760405162461bcd60e51b815260206004820181905260248201527f4d534d206572726f723a206c656e67746820646f6573206e6f74206d61746368604482015260640161072b565b6127688360008151811061274057612740614a58565b60200260200101518360008151811061275b5761275b614a58565b6020026020010151613668565b905060015b82518110156127b8576127ae826127a986848151811061278f5761278f614a58565b602002602001015186858151811061275b5761275b614a58565b6136fc565b915060010161276d565b5092915050565b60006127d9600080516020614e3d83398151915283614bca565b61176b90600080516020614e3d833981519152614bec565b6127f961441f565b5060408051808201909152600181526002602082015290565b61281a61441f565b61282382612a5c565b1561282c575090565b604051806040016040528083600001518152602001600080516020614ddd833981519152846020015161285f9190614bca565b61287790600080516020614ddd833981519152614bec565b905292915050565b6128aa6040518060800160405280600081526020016000815260200160008152602001600081525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b60008060006040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e08201526020850151610100820152845161012082015260608501516101408201526040850151610160820152602060006101808360085afa915050600051915080612a255760405162461bcd60e51b815260206004820152601c60248201527b426e3235343a2050616972696e6720636865636b206661696c65642160201b604482015260640161072b565b50151590505b949350505050565b805115612a435780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516020909101511590151690565b825160fe90612aa6612a7c83612edb565b604051602001612a8e91815260200190565b60405160208183030381529060405260006004613797565b612ae0612ab68660000151612edb565b604051602001612ac891815260200190565b60405160208183030381529060405260006008613797565b612af0612ab68760200151612edb565b604051602001612b039493929190614bff565b60408051601f19818403018152919052808552612b206001612edb565b612b37600080516020614e9d833981519152612edb565b612b4e600080516020614e5d833981519152612edb565b612b65600080516020614e7d833981519152612edb565b612b7c600080516020614dfd833981519152612edb565b604051602001612b9196959493929190614b4b565b60408051601f1981840301815291905280855260e0840151612bb290612e04565b612bc0856101000151612e04565b612bce866101200151612e04565b612bdc876101400151612e04565b612bea886101600151612e04565b612bf8896101800151612e04565b612c068a6101e00151612e04565b604051602001612c1d989796959493929190614c56565b60408051601f19818403018152919052808552610200840151612c3f90612e04565b612c4d856102200151612e04565b612c5b866102400151612e04565b612c69876101a00151612e04565b612c77886101c00151612e04565b612c85896102600151612e04565b604051602001612c9b9796959493929190614cfb565b60408051601f19818403018152918152818652840151612cba90612e04565b612cc78560600151612e04565b612cd48660800151612e04565b612ce18760a00151612e04565b612cee8860c00151612e04565b604051602001612d0396959493929190614a9d565b60408051601f198184030181529190528085528251612d3a908490600090612d2d57612d2d614a58565b6020026020010151612edb565b612d5084600181518110612d2d57612d2d614a58565b612d6685600281518110612d2d57612d2d614a58565b612d7c86600381518110612d2d57612d2d614a58565b612d9287600481518110612d2d57612d2d614a58565b612da888600581518110612d2d57612d2d614a58565b612dbe89600681518110612d2d57612d2d614a58565b612dd48a600781518110612d2d57612d2d614a58565b604051602001612dec99989796959493929190614d8d565b60408051601f19818403018152919052909352505050565b60606000612e1183612a5c565b15612e1d57600160fe1b175b6020830151600080516020614ddd83398151915260019190911b10612e435750600160ff1b5b8251612e50908217612edb565b604051602001612e6291815260200190565b604051602081830303815290604052915050919050565b602080820151825180516040518381526000948594939291908101855b83811015612eb05760208186018101518383015201612e96565b50506020918201902090860181905292506000611e67600080516020614e3d83398151915285614bca565b60008190506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b6008827fff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff0016901c1790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b6010827dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff1916901c1790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b6020827bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1916901c1790506040816001600160401b03600160801b03600160c01b0316901b6040826001600160401b03600160801b03600160c01b031916901c179050608081901b608082901c179050919050565b8151600090600080516020614e3d833981519152908380156130565784935060005b8281101561304a57838586099450600101613034565b5060018403935061305d565b6001830393505b50505092915050565b60008160000361307857506000611696565b6040840151600080516020614e3d833981519152906000908281860990508580156130a8576001870392506130af565b6001840392505b506130b9826138a4565b915082828209979650505050505050565b6000816000036130dc57506000612a2b565b83516040860151600080516020614e3d83398151915291906000908190819081806131078d8861394a565b90506000876001600160401b0381111561312357613123614475565b60405190808252806020026020018201604052801561314c578160200160208202803683370190505b509050888b850993506001925060005b8881101561319157602081026020840101519550898d878c03089650898785096020828102840101889052935060010161315c565b5061319b836138a4565b925060005b8881101561320e5760208102602084010151955089868609975089848909975060005b898110156131ed578082146131e5576020810260208401015197508a888a0998505b6001016131c3565b506020810260208f010151955089868909975089888c089a506001016131a0565b50505050505050505050949350505050565b600080600080516020614e3d8339815191529050600083602001519050600084604001519050600060019050606088015160808901516101a08901516102408a0151878889838709858501088609945050506101c08901516102608a0151878889838709858501088609945050506101e08901516102808a0151878889838709858501088609945050506102008901516102a08a01518788898387098585010886099450505061022089015191506102c0890151868782898587080985099350505050875160208901518586868309870385089650508485838309860387089998505050505050505050565b61331a868686868587613a0f565b60c08501518251600080516020614e3d8339815191529190819081908690601490811061334957613349614a58565b60200260200101818152505085600001518460148151811061336d5761336d614a58565b6020026020010181905250828282099050808560158151811061339257613392614a58565b6020026020010181815250508560200151846015815181106133b6576133b6614a58565b602002602001018190525082828209905080856016815181106133db576133db614a58565b6020026020010181815250508560400151846016815181106133ff576133ff614a58565b6020026020010181905250828282099050808560178151811061342457613424614a58565b60200260200101818152505085606001518460178151811061344857613448614a58565b6020026020010181905250828282099050808560188151811061346d5761346d614a58565b60200260200101818152505085608001518460188151811061349157613491614a58565b602002602001018190525082828209905080856019815181106134b6576134b6614a58565b6020026020010181815250508860400151846019815181106134da576134da614a58565b60200260200101819052508282820990508085601a815181106134ff576134ff614a58565b602002602001018181525050886060015184601a8151811061352357613523614a58565b60200260200101819052508282820990508085601b8151811061354857613548614a58565b602002602001018181525050886080015184601b8151811061356c5761356c614a58565b60200260200101819052508282820990508085601c8151811061359157613591614a58565b6020026020010181815250508860a0015184601c815181106135b5576135b5614a58565b60200260200101819052508282820990508760e0015185601d815181106135de576135de614a58565b6020026020010181815250508560a0015184601d8151811061360257613602614a58565b6020026020010181905250505050505050505050565b600080516020614e3d8339815191528381039060005b600a81101561365f5760206015820102840151602082026101a001860151838482840986089450505060010161362e565b50509392505050565b61367061441f565b613678614439565b835181526020808501519082015260408101839052600060608360808460076107d05a03fa905080806136aa57600080fd5b50806136f45760405162461bcd60e51b8152602060048201526019602482015278426e3235343a207363616c6172206d756c206661696c65642160381b604482015260640161072b565b505092915050565b61370461441f565b61370c614457565b8351815260208085015181830152835160408301528301516060808301919091526000908360c08460066107d05a03fa9050808061374957600080fd5b50806136f45760405162461bcd60e51b815260206004820152601d60248201527f426e3235343a2067726f7570206164646974696f6e206661696c656421000000604482015260640161072b565b6060816137a581601f614a8a565b10156137e45760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b604482015260640161072b565b6137ee8284614a8a565b845110156138325760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b604482015260640161072b565b606082158015613851576040519150600082526020820160405261389b565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561388a578051835260209283019201613872565b5050858452601f01601f1916604052505b50949350505050565b6000806000600080516020614e3d833981519152905060405160208152602080820152602060408201528460608201526002820360808201528160a08201526020600060c08360055afa9250506000519250816139435760405162461bcd60e51b815260206004820152601d60248201527f426e3235343a20706f7720707265636f6d70696c65206661696c656421000000604482015260640161072b565b5050919050565b6060826020015182111561397157604051638c5e11f160e01b815260040160405180910390fd5b60608301516001600080516020614e3d833981519152846001600160401b0381111561399f5761399f614475565b6040519080825280602002602001820160405280156139c8578160200160208202803683370190505b5093508415191561305d5760208401856020028101600182526020820191505b80821015613a04578285850993508382526020820191506139e8565b505050505092915050565b600080600080600080600080516020614e3d83398151915290508060208b015160208d01510995508a5193508060a08c015160608d0151099250806101a08a0151840891508060808c01518308915080848309935080600080516020614e9d83398151915284099150806101c08a0151830891508060808c01518308915080848309935080600080516020614e5d83398151915284099150806101e08a0151830891508060808c01518308915080848309935080600080516020614e7d83398151915284099150806102008a0151830891508060808c01518308915080848309935080600080516020614dfd83398151915284099150806102208a0151830891508060808c0151830891508084830993508084870895508860a0015188600081518110613b3e57613b3e614a58565b60200260200101819052508587600081518110613b5d57613b5d614a58565b6020026020010181815250508060608c01518c51099450806102c08a015186099450806102408a015160608d0151099250806101a08a0151840892508060808c015184089250808386099450806102608a015160608d0151099250806101c08a0151840892508060808c015184089250808386099450806102808a015160608d0151099250806101e08a0151840892508060808c015184089250808386099450806102a08a015160608d0151099250806102008a0151840892508060808c0151840892508083860994508b60c0015188600181518110613c3f57613c3f614a58565b6020908102919091010152613c548582614bec565b87600181518110613c6757613c67614a58565b602002602001018181525050886101a0015187600281518110613c8c57613c8c614a58565b602002602001018181525050886101c0015187600381518110613cb157613cb1614a58565b602002602001018181525050886101e0015187600481518110613cd657613cd6614a58565b60200260200101818152505088610200015187600581518110613cfb57613cfb614a58565b6020026020010181815250508b60e0015188600281518110613d1f57613d1f614a58565b60200260200101819052508b610100015188600381518110613d4357613d43614a58565b60200260200101819052508b610120015188600481518110613d6757613d67614a58565b60200260200101819052508b610140015188600581518110613d8b57613d8b614a58565b6020026020010181905250806101c08a01516101a08b01510992508287600681518110613dba57613dba614a58565b6020026020010181815250508b610160015188600681518110613ddf57613ddf614a58565b6020026020010181905250806102008a01516101e08b01510992508287600781518110613e0e57613e0e614a58565b6020026020010181815250508b610180015188600781518110613e3357613e33614a58565b60200260200101819052506101a089015192508083840991508082830991508082840992508287600881518110613e6c57613e6c614a58565b6020026020010181815250508b6101e0015188600881518110613e9157613e91614a58565b60200260200101819052506101c089015192508083840991508082830991508082840992508287600981518110613eca57613eca614a58565b6020026020010181815250508b610200015188600981518110613eef57613eef614a58565b60200260200101819052506101e089015192508083840991508082830991508082840992508287600a81518110613f2857613f28614a58565b6020026020010181815250508b610220015188600a81518110613f4d57613f4d614a58565b602002602001018190525061020089015192508083840991508082830991508082840992508287600b81518110613f8657613f86614a58565b6020026020010181815250508b610240015188600b81518110613fab57613fab614a58565b602002602001018190525088610220015181613fc79190614bec565b87600c81518110613fda57613fda614a58565b6020026020010181815250508b6101a0015188600c81518110613fff57613fff614a58565b6020026020010181905250600187600d8151811061401f5761401f614a58565b6020026020010181815250508b6101c0015188600d8151811061404457614044614a58565b6020026020010181905250806101c08a01516101a08b0151099250806101e08a015184099250806102008a015184099250806102208a0151840992508287600e8151811061409457614094614a58565b6020026020010181815250508b610260015188600e815181106140b9576140b9614a58565b602090810291909101015289516140d09082614bec565b87600f815181106140e3576140e3614a58565b6020026020010181815250508860c0015188600f8151811061410757614107614a58565b60200260200101819052508060018b510860a08c015190935081908009915080828409925080836020601002890151099150818760108151811061414d5761414d614a58565b6020026020010181815250508860e001518860108151811061417157614171614a58565b602002602001018190525080836020601102890151099150818760118151811061419d5761419d614a58565b602002602001018181525050886101000151886011815181106141c2576141c2614a58565b60200260200101819052508083602060120289015109915081876012815181106141ee576141ee614a58565b6020026020010181815250508861012001518860128151811061421357614213614a58565b602002602001018190525080836020601302890151099150818760138151811061423f5761423f614a58565b6020026020010181815250508861014001518860138151811061426457614264614a58565b6020026020010181905250505050505050505050505050565b60405180610120016040528060006001600160401b0316815260200160006001600160401b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600063ffffffff1681525090565b604051806102800160405280600081526020016000815260200161430361441f565b815260200161431061441f565b815260200161431d61441f565b815260200161432a61441f565b815260200161433761441f565b815260200161434461441f565b815260200161435161441f565b815260200161435e61441f565b815260200161436b61441f565b815260200161437861441f565b815260200161438561441f565b815260200161439261441f565b815260200161439f61441f565b81526020016143ac61441f565b81526020016143b961441f565b81526020016143c661441f565b81526020016143d361441f565b81526020016143e061441f565b905290565b6040518061010001604052806000815260200160008152602001600081526020016000815260200160608152602001606081526020016143d35b604051806040016040528060008152602001600081525090565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156144ae576144ae614475565b60405290565b6040516102e081016001600160401b03811182821017156144ae576144ae614475565b604051601f8201601f191681016001600160401b03811182821017156144ff576144ff614475565b604052919050565b80356001600160401b038116811461263757600080fd5b803563ffffffff8116811461263757600080fd5b6000610120828403121561454557600080fd5b61454d61448b565b905061455882614507565b815261456660208301614507565b602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015260e082013560e08201526101006145b581840161451e565b9082015292915050565b600061012082840312156145d257600080fd5b6116968383614532565b6001600160a01b0391909116815260200190565b60006101208201905060018060401b038084511683528060208501511660208401525060408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015160e0830152610100808401516136f48285018263ffffffff169052565b80356001600160a01b038116811461263757600080fd5b6000806040838503121561469157600080fd5b61469a83614667565b91506020838101356001600160401b03808211156146b757600080fd5b818601915086601f8301126146cb57600080fd5b8135818111156146dd576146dd614475565b6146ef601f8201601f191685016144d7565b9150808252878482850101111561470557600080fd5b80848401858401376000848284010152508093505050509250929050565b60006040828403121561473557600080fd5b604080519081016001600160401b038111828210171561475757614757614475565b604052823581526020928301359281019290925250919050565b6000808284036105a081121561478657600080fd5b6147908585614532565b92506101206104808061011f19840112156147aa57600080fd5b6147b26144b4565b92506147c087838801614723565b83526101606147d188828901614723565b60208501526101a06147e589828a01614723565b60408601526101e06147f98a828b01614723565b606087015261022061480d8b828c01614723565b60808801526102606148218c828d01614723565b60a08901526102a06148358d828e01614723565b60c08a01526148488d6102e08e01614723565b60e08a015261485b8d6103208e01614723565b6101008a015261486f8d6103608e01614723565b888a01526148818d6103a08e01614723565b6101408a01526148958d6103e08e01614723565b868a01526148a78d6104208e01614723565b6101808a01526104608c0135858a0152868c01356101c08a01526104a08c0135848a01526104c08c01356102008a01526104e08c0135838a01526105008c01356102408a01526105208c0135828a01526105408c01356102808a01526105608c0135818a015250505050505050506105808401356102c0820152809150509250929050565b6001600160401b0391909116815260200190565b60006020828403121561495257600080fd5b6116968261451e565b60006020828403121561496d57600080fd5b5035919050565b60005b8381101561498f578181015183820152602001614977565b50506000910152565b60208152600082518060208401526149b7816040850160208701614974565b601f01601f19169190910160400192915050565b6000602082840312156149dd57600080fd5b61169682614667565b634e487b7160e01b600052601160045260246000fd5b6001600160401b038181168382160280821691908281146136f4576136f46149e6565b600060208284031215614a3157600080fd5b5051919050565b6001600160401b038181168382160190808211156127b8576127b86149e6565b634e487b7160e01b600052603260045260246000fd5b60008251614a80818460208701614974565b9190910192915050565b8082018082111561176b5761176b6149e6565b600087516020614ab08285838d01614974565b885191840191614ac38184848d01614974565b8851920191614ad58184848c01614974565b8751920191614ae78184848b01614974565b8651920191614af98184848a01614974565b8551920191614b0b8184848901614974565b919091019998505050505050505050565b60008351614b2e818460208801614974565b835190830190614b42818360208801614974565b01949350505050565b60008751614b5d818460208c01614974565b9190910195865250602085019390935260408401919091526060830152608082015260a001919050565b60008451614b99818460208901614974565b845190830190614bad818360208901614974565b8451910190614bc0818360208801614974565b0195945050505050565b600082614be757634e487b7160e01b600052601260045260246000fd5b500690565b8181038181111561176b5761176b6149e6565b60008551614c11818460208a01614974565b855190830190614c25818360208a01614974565b8551910190614c38818360208901614974565b8451910190614c4b818360208801614974565b019695505050505050565b600089516020614c698285838f01614974565b8a5191840191614c7c8184848f01614974565b8a51920191614c8e8184848e01614974565b8951920191614ca08184848d01614974565b8851920191614cb28184848c01614974565b8751920191614cc48184848b01614974565b8651920191614cd68184848a01614974565b8551920191614ce88184848901614974565b919091019b9a5050505050505050505050565b600088516020614d0e8285838e01614974565b895191840191614d218184848e01614974565b8951920191614d338184848d01614974565b8851920191614d458184848c01614974565b8751920191614d578184848b01614974565b8651920191614d698184848a01614974565b8551920191614d7b8184848901614974565b919091019a9950505050505050505050565b60008a51614d9f818460208f01614974565b9190910198895250602088019690965260408701949094526060860192909252608085015260a084015260c083015260e08201526101000191905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd472e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e881360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000011ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb0252042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4aa164736f6c6343000817000a", + "nonce": "0x4b", + "chainId": "0xaa36a7" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xef067c", + "logs": [ + { + "address": "0xb7fd36e6dbd92bab8d0379dfa93c04af60d5302e", + "topics": [ + "0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2" + ], + "data": "0x000000000000000000000000000000000000000000000000ffffffffffffffff", + "blockHash": "0xd634d91fe465b52c9081973e5cf205622ccd06f9df8001203294ef69f168437f", + "blockNumber": "0x6312e3", + "transactionHash": "0xc10bac87e8a7caf58c5d79686e44f44be61a63f4d251a7ec93169b1a1cd97dd5", + "transactionIndex": "0x45", + "logIndex": "0x4a", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000040000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xc10bac87e8a7caf58c5d79686e44f44be61a63f4d251a7ec93169b1a1cd97dd5", + "transactionIndex": "0x45", + "blockHash": "0xd634d91fe465b52c9081973e5cf205622ccd06f9df8001203294ef69f168437f", + "blockNumber": "0x6312e3", + "gasUsed": "0x43b2e0", + "effectiveGasPrice": "0x5e6cc2f19", + "from": "0xb22167f12c232e825d26ffbb3780e024c506664e", + "to": null, + "contractAddress": "0xb7fd36e6dbd92bab8d0379dfa93c04af60d5302e" + } + ], + "libraries": [], + "pending": [], + "returns": { + "implementationAddress": { + "internal_type": "address", + "value": "0xB7fd36e6DBD92Bab8d0379dfa93C04AF60D5302E" + }, + "result": { + "internal_type": "bytes", + "value": "0x546865206f74686572206f776e657273206f66207468652053616665204d756c74697369672077616c6c6574206e65656420746f207369676e20746865207472616e73616374696f6e207669612074686520536166652055492068747470733a2f2f6170702e736166652e676c6f62616c2f7472616e73616374696f6e732f71756575653f736166653d7365703a307863353666413635303564313062463332326530313332376532323437394445373843334266316345" + } + }, + "timestamp": 1723562026, + "chain": 11155111, + "commit": "286c14d9" +} \ No newline at end of file diff --git a/contracts/script/FeeContract.s.sol b/contracts/script/FeeContract.s.sol new file mode 100644 index 0000000000..760d94318d --- /dev/null +++ b/contracts/script/FeeContract.s.sol @@ -0,0 +1,207 @@ +pragma solidity ^0.8.20; + +import { Script } from "forge-std/Script.sol"; +import { + ProposeUpgradeResponse, + Defender, + ApprovalProcessResponse +} from "openzeppelin-foundry-upgrades/Defender.sol"; +import { Upgrades, Options } from "openzeppelin-foundry-upgrades/Upgrades.sol"; +import { FeeContract as FC } from "../src/FeeContract.sol"; +import { UtilsScript } from "./Utils.s.sol"; + +/// @notice Deploys an upgradeable Fee Contract using the OpenZeppelin Upgrades plugin. +contract DeployFeeContractScript is Script { + string internal contractName = vm.envString("FEE_CONTRACT_ORIGINAL_NAME"); + + /// @dev Deploys both the proxy and the implementation contract. + /// The proxy admin is set as the owner of the contract upon deployment. + /// The `owner` parameter should be the address of the multisig wallet to ensure proper + /// ownership management. + /// @param owner The address that will be set as the owner of the proxy (typically a multisig + /// wallet). + function run(address owner) + public + returns (address payable proxy, address implementationAddress) + { + string memory seedPhrase = vm.envString("DEPLOYER_MNEMONIC"); + uint32 seedPhraseOffset = uint32(vm.envUint("DEPLOYER_MNEMONIC_OFFSET")); + (address admin,) = deriveRememberKey(seedPhrase, seedPhraseOffset); + vm.startBroadcast(admin); + + address proxyAddress = + Upgrades.deployUUPSProxy(contractName, abi.encodeCall(FC.initialize, (owner))); + + // Get the implementation address + implementationAddress = Upgrades.getImplementationAddress(proxyAddress); + + vm.stopBroadcast(); + + return (payable(proxyAddress), implementationAddress); + } +} + +/// @notice Upgrades the fee contract first by deploying the new implementation +/// and then executing the upgrade via the Safe Multisig wallet using the SAFE SDK. +contract UpgradeFeeContractScript is Script { + string internal originalContractName = vm.envString("FEE_CONTRACT_ORIGINAL_NAME"); + string internal upgradeContractName = vm.envString("FEE_CONTRACT_UPGRADE_NAME"); + + /// @dev This function first deploys the new implementation contract using the deployer wallet. + /// It then uses the SAFE SDK via an ffi command to perform the upgrade through a Safe Multisig + /// wallet. + function run() public returns (address implementationAddress, bytes memory result) { + Options memory opts; + opts.referenceContract = originalContractName; + + // validate that the new implementation contract is upgrade safe + Upgrades.validateUpgrade(upgradeContractName, opts); + + // get the deployer info from the environment and start broadcast as the deployer + string memory seedPhrase = vm.envString("DEPLOYER_MNEMONIC"); + uint32 seedPhraseOffset = uint32(vm.envUint("DEPLOYER_MNEMONIC_OFFSET")); + (address admin,) = deriveRememberKey(seedPhrase, seedPhraseOffset); + vm.startBroadcast(admin); + + // deploy the new implementation contract + FC implementationContract = new FC(); + + vm.stopBroadcast(); + + //replace with something like this if there is some initiation function to call + // abi.encodeWithSignature("setNewField(uint256)", 2); + bytes memory initData = ""; + + // call upgradeToAndCall command so that the proxy can be upgraded to call from the new + // implementation above and + // execute the command via the Safe Multisig wallet + string[] memory cmds = new string[](3); + cmds[0] = "bash"; + cmds[1] = "-c"; + cmds[2] = string( + abi.encodePacked( + "source .env.contracts && ts-node contracts/script/multisigTransactionProposals/safeSDK/upgradeProxy.ts upgradeProxy ", + vm.toString(vm.envAddress("FEE_CONTRACT_PROXY_ADDRESS")), + " ", + vm.toString(address(implementationContract)), + " ", + vm.toString(initData) + ) + ); + + result = vm.ffi(cmds); + + return (address(implementationContract), result); + } +} + +/// @notice Deploys an upgradeable Fee Contract using OpenZeppelin Defender. +/// the deployment environment details are set in OpenZeppelin Defender which is +/// identified via the Defender Key and Secret in the environment file +contract DeployFeeContractWithDefenderScript is Script { + string internal contractName = vm.envString("FEE_CONTRACT_ORIGINAL_NAME"); + UtilsScript internal utils = new UtilsScript(); + uint256 internal contractSalt = uint256(vm.envInt("FEE_CONTRACT_SALT")); + + /// @dev When this function is run, a transaction to deploy the implementation is submitted to + /// Defender + /// This transaction must be signed via OpenZeppelin Defender's UI and once it completes + /// another transaction is available to sign for the deployment of the proxy + function run() public returns (address payable proxy, address multisig) { + ApprovalProcessResponse memory upgradeApprovalProcess = Defender.getUpgradeApprovalProcess(); + multisig = upgradeApprovalProcess.via; + string memory approvalProcessId = upgradeApprovalProcess.approvalProcessId; + string memory viaType = upgradeApprovalProcess.viaType; + + if (upgradeApprovalProcess.via == address(0)) { + revert( + string.concat( + "Upgrade approval process with id ", + upgradeApprovalProcess.approvalProcessId, + " has no assigned address" + ) + ); + } + + Options memory opts; + opts.defender.useDefenderDeploy = true; + opts.defender.salt = bytes32(abi.encodePacked(contractSalt)); + + address proxyAddress = + Upgrades.deployUUPSProxy(contractName, abi.encodeCall(FC.initialize, (multisig)), opts); + + //generate the deployment file path, output and write to the file + (string memory filePath, string memory fileData) = utils.generateProxyDeploymentOutput( + contractName, contractSalt, proxyAddress, multisig, approvalProcessId, viaType + ); + utils.writeJson(filePath, fileData); + + //generate the salt history file path, output and write to the file + (string memory saltFilePath, string memory saltFileData) = + utils.generateSaltOutput(contractName, contractSalt); + utils.writeJson(saltFilePath, saltFileData); + + return (payable(proxyAddress), multisig); + } +} + +/// @notice Upgrades the Fee Contract using OpenZeppelin Defender. +/// the deployment environment details are set in OpenZeppelin Defender which is +/// identified via the Defender Key and Secret in the environment file +contract UpgradeFeeContractWithDefenderScript is Script { + string internal originalContractName = vm.envString("FEE_CONTRACT_ORIGINAL_NAME"); + string internal upgradeContractName = vm.envString("FEE_CONTRACT_UPGRADE_NAME"); + uint256 internal contractSalt = uint256(vm.envInt("FEE_CONTRACT_SALT")); + UtilsScript internal utils = new UtilsScript(); + + /// @dev When this function is run, a transaction to deploy the new implementation is submitted + /// to Defender + /// This transaction must be signed via OpenZeppelin Defender's UI and once it completes + /// another transaction is available to sign to call the upgrade method on the proxy + function run() public returns (string memory proposalId, string memory proposalUrl) { + //get the previous salt from the salt history - this assumes there was first a deployment + // using `DeployFeeContractWithDefenderScript` + (string memory saltFilePath,) = utils.generateSaltFilePath(originalContractName); + (, string memory saltData) = utils.readFile(saltFilePath); + uint256 prevContractSalt = vm.parseJsonUint(saltData, ".previousSalt"); + + (string memory filePath,) = + utils.generateDeploymentFilePath(originalContractName, prevContractSalt); + + //read the deployment file from the previous deployment to get the proxyAddress & multisig + // used for deployment + (, string memory result) = utils.readFile(filePath); + address proxyAddress = vm.parseJsonAddress(result, ".proxyAddress"); + address multisig = vm.parseJsonAddress(result, ".multisig"); + + //set openzeppelin defender options for the deployment + Options memory opts; + opts.defender.useDefenderDeploy = true; + opts.defender.salt = bytes32(abi.encodePacked(contractSalt)); + opts.referenceContract = originalContractName; + + //propose the upgrade via openzeppelin defender + ProposeUpgradeResponse memory response = + Defender.proposeUpgrade(proxyAddress, upgradeContractName, opts); + + //generate the file path, file output (deployment info) and write to the file + (string memory upgradeFilePath, string memory fileData) = utils.generateUpgradeOutput( + originalContractName, + contractSalt, + upgradeContractName, + proxyAddress, + multisig, + response.proposalId, + response.url + ); + + utils.writeJson(upgradeFilePath, fileData); + + //generate the salt history file path, output and write to the file + string memory saltFileData; + (saltFilePath, saltFileData) = utils.generateSaltOutput(originalContractName, contractSalt); + utils.writeJson(saltFilePath, saltFileData); + + return (response.proposalId, response.url); + } +} diff --git a/contracts/script/FeeContractWithDefender.s.sol b/contracts/script/FeeContractWithDefender.s.sol deleted file mode 100644 index c20798b050..0000000000 --- a/contracts/script/FeeContractWithDefender.s.sol +++ /dev/null @@ -1,108 +0,0 @@ -pragma solidity ^0.8.20; - -import { Script } from "forge-std/Script.sol"; -import { - ProposeUpgradeResponse, - Defender, - ApprovalProcessResponse -} from "openzeppelin-foundry-upgrades/Defender.sol"; -import { Upgrades, Options } from "openzeppelin-foundry-upgrades/Upgrades.sol"; -import { FeeContract as FC } from "../src/FeeContract.sol"; -import { UtilsScript } from "./Utils.s.sol"; - -contract FeeContractDefenderDeployScript is Script { - string internal contractName = "FeeContract.sol"; - UtilsScript internal utils = new UtilsScript(); - uint256 internal contractSalt = uint256(vm.envInt("FEE_CONTRACT_SALT")); - - function run() public returns (address payable proxy, address multisig) { - ApprovalProcessResponse memory upgradeApprovalProcess = Defender.getUpgradeApprovalProcess(); - multisig = upgradeApprovalProcess.via; - string memory approvalProcessId = upgradeApprovalProcess.approvalProcessId; - string memory viaType = upgradeApprovalProcess.viaType; - - if (upgradeApprovalProcess.via == address(0)) { - revert( - string.concat( - "Upgrade approval process with id ", - upgradeApprovalProcess.approvalProcessId, - " has no assigned address" - ) - ); - } - - Options memory opts; - opts.defender.useDefenderDeploy = true; - opts.defender.salt = bytes32(abi.encodePacked(contractSalt)); - - address proxyAddress = - Upgrades.deployUUPSProxy(contractName, abi.encodeCall(FC.initialize, (multisig)), opts); - - //generate the deployment file path, output and write to the file - (string memory filePath, string memory fileData) = utils.generateProxyDeploymentOutput( - contractName, contractSalt, proxyAddress, multisig, approvalProcessId, viaType - ); - utils.writeJson(filePath, fileData); - - //generate the salt history file path, output and write to the file - (string memory saltFilePath, string memory saltFileData) = - utils.generateSaltOutput(contractName, contractSalt); - utils.writeJson(saltFilePath, saltFileData); - - return (payable(proxyAddress), multisig); - } -} - -contract FeeContractDefenderUpgradeScript is Script { - string internal originalContractName = "FeeContract.sol"; - string internal upgradeContractName = vm.envString("FEE_CONTRACT_UPGRADE_NAME"); - uint256 internal contractSalt = uint256(vm.envInt("FEE_CONTRACT_SALT")); - UtilsScript internal utils = new UtilsScript(); - - function run() public returns (string memory proposalId, string memory proposalUrl) { - //get the previous salt from the salt history - this assumes there was first a deployment - // using `FeeContractDefenderDeployScript` - (string memory saltFilePath,) = utils.generateSaltFilePath(originalContractName); - (, string memory saltData) = utils.readFile(saltFilePath); - uint256 prevContractSalt = vm.parseJsonUint(saltData, ".previousSalt"); - - (string memory filePath,) = - utils.generateDeploymentFilePath(originalContractName, prevContractSalt); - - //read the deployment file from the previous deployment to get the proxyAddress & multisig - // used for deployment - (, string memory result) = utils.readFile(filePath); - address proxyAddress = vm.parseJsonAddress(result, ".proxyAddress"); - address multisig = vm.parseJsonAddress(result, ".multisig"); - - //set openzeppelin defender options for the deployment - Options memory opts; - opts.defender.useDefenderDeploy = true; - opts.defender.salt = bytes32(abi.encodePacked(contractSalt)); - opts.referenceContract = originalContractName; - - //propose the upgrade via openzeppelin defender - ProposeUpgradeResponse memory response = - Defender.proposeUpgrade(proxyAddress, upgradeContractName, opts); - - //generate the file path, file output (deployment info) and write to the file - (string memory upgradeFilePath, string memory fileData) = utils.generateUpgradeOutput( - originalContractName, - contractSalt, - upgradeContractName, - proxyAddress, - multisig, - response.proposalId, - response.url - ); - - utils.writeJson(upgradeFilePath, fileData); - - //generate the salt history file path, output and write to the file - string memory saltFileData; - (saltFilePath, saltFileData) = utils.generateSaltOutput(originalContractName, contractSalt); - utils.writeJson(saltFilePath, saltFileData); - - return (response.proposalId, response.url); - } -} diff --git a/contracts/script/LightClient.s.sol b/contracts/script/LightClient.s.sol index 55df255a31..5040cc892a 100644 --- a/contracts/script/LightClient.s.sol +++ b/contracts/script/LightClient.s.sol @@ -1,11 +1,310 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.0; +pragma solidity ^0.8.20; -import "forge-std/Script.sol"; +import { Script } from "forge-std/Script.sol"; +import { + Defender, + ApprovalProcessResponse, + ProposeUpgradeResponse +} from "openzeppelin-foundry-upgrades/Defender.sol"; +import { Upgrades, Options } from "openzeppelin-foundry-upgrades/Upgrades.sol"; import { LightClient as LC } from "../src/LightClient.sol"; +import { UtilsScript } from "./Utils.s.sol"; +import { LightClientV2 as LCV2 } from "../test/LightClientV2.sol"; import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +/// @notice Deploy the upgradeable light client contract using the OpenZeppelin Upgrades plugin. +contract DeployLightClientScript is Script { + string public contractName = vm.envString("LIGHT_CLIENT_ORIGINAL_CONTRACT_NAME"); + + /// @dev Deploys both the proxy and the implementation contract. + /// The proxy admin is set as the owner of the contract upon deployment. + /// The `owner` parameter should be the address of the multisig wallet to ensure proper + /// ownership management. + /// @param numInitValidators number of the validators initially + /// @param owner The address that will be set as the owner of the proxy (typically a multisig + /// wallet). + function run(uint32 numInitValidators, uint32 stateHistoryRetentionPeriod, address owner) + public + returns ( + address proxyAddress, + address implementationAddress, + LC.LightClientState memory lightClientState + ) + { + string[] memory cmds = new string[](3); + cmds[0] = "diff-test"; + cmds[1] = "mock-genesis"; + cmds[2] = vm.toString(uint256(numInitValidators)); + + bytes memory result = vm.ffi(cmds); + (LC.LightClientState memory state, LC.StakeTableState memory stakeState) = + abi.decode(result, (LC.LightClientState, LC.StakeTableState)); + + // get the deployer info from the environment and start broadcast as the deployer + string memory seedPhrase = vm.envString("DEPLOYER_MNEMONIC"); + uint32 seedPhraseOffset = uint32(vm.envUint("DEPLOYER_MNEMONIC_OFFSET")); + (address admin,) = deriveRememberKey(seedPhrase, seedPhraseOffset); + vm.startBroadcast(admin); + + proxyAddress = Upgrades.deployUUPSProxy( + contractName, + abi.encodeCall(LC.initialize, (state, stakeState, stateHistoryRetentionPeriod, owner)) + ); + + // Get the implementation address + implementationAddress = Upgrades.getImplementationAddress(proxyAddress); + + vm.stopBroadcast(); + + return (proxyAddress, implementationAddress, state); + } +} + +/// @notice Upgrades the light client contract first by deploying the new implementation +/// and then executing the upgrade via the Safe Multisig wallet using the SAFE SDK. +contract LightClientContractUpgradeScript is Script { + string internal originalContractName = vm.envString("LIGHT_CLIENT_ORIGINAL_CONTRACT_NAME"); + string internal upgradeContractName = vm.envString("LIGHT_CLIENT_CONTRACT_UPGRADE_NAME"); + + /// @dev First the new implementation contract is deployed via the deployer wallet. + /// It then uses the SAFE SDK via an ffi command to perform the upgrade through a Safe Multisig + /// wallet. + function run() public returns (address implementationAddress, bytes memory result) { + Options memory opts; + opts.referenceContract = originalContractName; + + // validate that the new implementation contract is upgrade safe + Upgrades.validateUpgrade(upgradeContractName, opts); + + // get the deployer info from the environment and start broadcast as the deployer + string memory seedPhrase = vm.envString("DEPLOYER_MNEMONIC"); + uint32 seedPhraseOffset = uint32(vm.envUint("DEPLOYER_MNEMONIC_OFFSET")); + (address admin,) = deriveRememberKey(seedPhrase, seedPhraseOffset); + vm.startBroadcast(admin); + + // deploy the new implementation contract + LCV2 implementationContract = new LCV2(); + + vm.stopBroadcast(); + + bytes memory initData = abi.encodeWithSignature("setNewField(uint256)", 2); + + // call upgradeToAndCall command so that the proxy can be upgraded to call from the new + // implementation above and + // execute the command via the Safe Multisig wallet + string[] memory cmds = new string[](3); + cmds[0] = "bash"; + cmds[1] = "-c"; + cmds[2] = string( + abi.encodePacked( + "source .env.contracts && ts-node contracts/script/multisigTransactionProposals/safeSDK/upgradeProxy.ts upgradeProxy ", + vm.toString(vm.envAddress("LIGHT_CLIENT_CONTRACT_PROXY_ADDRESS")), + " ", + vm.toString(address(implementationContract)), + " ", + vm.toString(initData) + ) + ); + + result = vm.ffi(cmds); + + return (address(implementationContract), result); + } +} + +/// @notice Upgrades the light client contract first by deploying the new implementation +/// and then executing the upgrade via the Safe Multisig wallet using the SAFE SDK. +/// @dev this is used when upgrading to the same base contract file which is being actively modified +/// before mainnet +contract UpgradeLightClientContractWithSameContractScript is Script { + string internal originalContractName = vm.envString("LIGHT_CLIENT_ORIGINAL_CONTRACT_NAME"); + string internal upgradeContractName = vm.envString("LIGHT_CLIENT_CONTRACT_UPGRADE_NAME"); + + function run() public returns (address implementationAddress, bytes memory result) { + Options memory opts; + opts.referenceContract = originalContractName; + + // validate that the new implementation contract is upgrade safe + Upgrades.validateUpgrade(upgradeContractName, opts); + + // get the deployer info from the environment and start broadcast as the deployer + string memory seedPhrase = vm.envString("DEPLOYER_MNEMONIC"); + uint32 seedPhraseOffset = uint32(vm.envUint("DEPLOYER_MNEMONIC_OFFSET")); + (address admin,) = deriveRememberKey(seedPhrase, seedPhraseOffset); + vm.startBroadcast(admin); + + // deploy the new implementation contract + LC implementationContract = new LC(); + + vm.stopBroadcast(); + + bytes memory initData = abi.encodeWithSignature("setNewField(uint256)", 2); + + // call upgradeToAndCall command so that the proxy can be upgraded to call from the new + // implementation above and + // execute the command via the Safe Multisig wallet + string[] memory cmds = new string[](3); + cmds[0] = "bash"; + cmds[1] = "-c"; + cmds[2] = string( + abi.encodePacked( + "source .env.contracts && ts-node contracts/script/multisigTransactionProposals/safeSDK/upgradeProxy.ts upgradeProxy ", + vm.toString(vm.envAddress("LIGHT_CLIENT_CONTRACT_PROXY_ADDRESS")), + " ", + vm.toString(address(implementationContract)), + " ", + vm.toString(initData) + ) + ); + + result = vm.ffi(cmds); + + return (address(implementationContract), result); + } +} + +/// @notice Deploys an upgradeable LightClient Contract using OpenZeppelin Defender. +/// the deployment environment details are set in OpenZeppelin Defender which is +/// identified via the Defender Key and Secret in the environment file +contract DeployLightClientDefenderScript is Script { + string public contractName = vm.envString("LIGHT_CLIENT_ORIGINAL_CONTRACT_NAME"); + UtilsScript public utils = new UtilsScript(); + uint256 public contractSalt = uint256(vm.envInt("LIGHT_CLIENT_SALT")); + + /// @dev When this function is run, a transaction to deploy the implementation is submitted to + /// Defender + /// This transaction must be signed via OpenZeppelin Defender's UI and once it completes + /// another transaction is available to sign for the deployment of the proxy + function run(uint32 stateHistoryRetentionPeriod) + public + returns (address proxy, address multisig, LC.LightClientState memory lightClientState) + { + // TODO for a production deployment provide the right genesis state and value + uint32 numInitValidators = 1; + + string[] memory cmds = new string[](3); + cmds[0] = "diff-test"; + cmds[1] = "mock-genesis"; + cmds[3] = vm.toString(uint256(numInitValidators)); + + bytes memory result = vm.ffi(cmds); + (LC.LightClientState memory state, LC.StakeTableState memory stakeState) = + abi.decode(result, (LC.LightClientState, LC.StakeTableState)); + + ApprovalProcessResponse memory upgradeApprovalProcess = Defender.getUpgradeApprovalProcess(); + multisig = upgradeApprovalProcess.via; + + if (upgradeApprovalProcess.via == address(0)) { + revert( + string.concat( + "Upgrade approval process with id ", + upgradeApprovalProcess.approvalProcessId, + " has no assigned address" + ) + ); + } + + Options memory opts; + opts.defender.useDefenderDeploy = true; + opts.defender.salt = bytes32(abi.encodePacked(contractSalt)); + + proxy = Upgrades.deployUUPSProxy( + contractName, + abi.encodeCall( + LC.initialize, (state, stakeState, stateHistoryRetentionPeriod, multisig) + ), + opts + ); + + //generate the file path, file output and write to the file + (string memory filePath, string memory fileData) = utils.generateProxyDeploymentOutput( + contractName, + contractSalt, + proxy, + multisig, + upgradeApprovalProcess.approvalProcessId, + upgradeApprovalProcess.viaType + ); + utils.writeJson(filePath, fileData); + + //generate the salt history file path, output and write to the file + (string memory saltFilePath, string memory saltFileData) = + utils.generateSaltOutput(contractName, contractSalt); + utils.writeJson(saltFilePath, saltFileData); + + return (proxy, multisig, state); + } +} + +/// @notice Upgrades the LightClient Contract using OpenZeppelin Defender. +/// the deployment environment details are set in OpenZeppelin Defender which is +/// identified via the Defender Key and Secret in the environment file + +contract UpgradeLightClientWithDefenderScript is Script { + string public originalContractName = vm.envString("LIGHT_CLIENT_ORIGINAL_CONTRACT_NAME"); + string public upgradeContractName = vm.envString("LIGHT_CLIENT_CONTRACT_UPGRADE_NAME"); + uint256 public contractSalt = uint256(vm.envInt("LIGHT_CLIENT_SALT")); + UtilsScript public utils = new UtilsScript(); + + /// @dev it depends on the `LIGHT_CLIENT_CONTRACT_UPGRADE_NAME` in the environment file to + /// determine + /// which implementation it's being upgraded to + /// When this function is run, a transaction to deploy the new implementation is submitted to + /// Defender + /// This transaction must be signed via OpenZeppelin Defender's UI and once it completes + /// another transaction is available to sign to call the upgrade method on the proxy + function run() public returns (string memory proposalId, string memory proposalUrl) { + //get the previous salt from the salt history - this assumes there was first a deployment + (string memory saltFilePath,) = utils.generateSaltFilePath(originalContractName); + (, string memory saltData) = utils.readFile(saltFilePath); + uint256 prevContractSalt = vm.parseJsonUint(saltData, ".previousSalt"); + + (string memory filePath,) = + utils.generateDeploymentFilePath(originalContractName, prevContractSalt); + + //read the deployment file from the previous deployment to get the proxyAddress & multisig + // used for deployment + (, string memory result) = utils.readFile(filePath); + address proxyAddress = vm.parseJsonAddress(result, ".proxyAddress"); + address multisig = vm.parseJsonAddress(result, ".multisig"); + + //set openzeppelin defender options for the deployment + Options memory opts; + opts.defender.useDefenderDeploy = true; + opts.defender.salt = bytes32(contractSalt); + opts.referenceContract = originalContractName; + + // propose the upgrade via openzeppelin defender + ProposeUpgradeResponse memory response = + Defender.proposeUpgrade(proxyAddress, upgradeContractName, opts); + string memory responseProposalId = response.proposalId; + string memory responseProposalUrl = response.url; + + //generate the file path, file output (deployment info) and write to the file + (string memory upgradeFilePath, string memory fileData) = utils.generateUpgradeOutput( + originalContractName, + contractSalt, + upgradeContractName, + proxyAddress, + multisig, + responseProposalId, + responseProposalUrl + ); + utils.writeJson(upgradeFilePath, fileData); + + //generate the salt history file path, output and write to the file + string memory saltFileData; + (saltFilePath, saltFileData) = utils.generateSaltOutput(originalContractName, contractSalt); + utils.writeJson(saltFilePath, saltFileData); + + return (responseProposalId, responseProposalUrl); + } +} + +/// @notice Deploys the upgradable light client contract +/// the admin is not a multisig wallet but is the same as the associated mnemonic +/// used in staging deployments only contract DeployLightClientContractScript is Script { function run(uint32 numInitValidators, uint32 stateHistoryRetentionPeriod) external @@ -30,25 +329,6 @@ contract DeployLightClientContractScript is Script { return deployContract(state, stakeState, stateHistoryRetentionPeriod); } - // function runDemo(uint32 stateHistoryRetentionPeriod) - // external - // returns (address payable proxyAddress, address admin, LC.LightClientState memory) - // { - // string[] memory cmds = new string[](1); - // cmds[0] = "gen-demo-genesis"; - - // bytes memory result = vm.ffi(cmds); - // LC.LightClientState memory state = abi.decode(result, (LC.LightClientState)); - // LC.StakeTableState memory stakeState = LC.StakeTableState( - // state.threshold, - // state.stakeTableBlsKeyComm, - // state.stakeTableSchnorrKeyComm, - // state.stakeTableAmountComm - // ); - - // return deployContract(state, stakeState, stateHistoryRetentionPeriod); - // } - /// @notice deploys the impl, proxy & initializes the impl /// @return proxyAddress The address of the proxy /// @return admin The address of the admin @@ -66,8 +346,10 @@ contract DeployLightClientContractScript is Script { LC.StakeTableState memory ) { + // get the deployer info from the environment and start broadcast as the deployer string memory seedPhrase = vm.envString("MNEMONIC"); - (admin,) = deriveRememberKey(seedPhrase, 0); + uint32 seedPhraseOffset = uint32(vm.envUint("MNEMONIC_OFFSET")); + (admin,) = deriveRememberKey(seedPhrase, seedPhraseOffset); vm.startBroadcast(admin); LC lightClientContract = new LC(); @@ -90,3 +372,41 @@ contract DeployLightClientContractScript is Script { return (proxyAddress, admin, state, stakeState); } } + +/// @notice Upgrades the light client contract first by deploying the new implementation +/// and then calling the upgradeToAndCall method of the proxy +/// @dev This is used when the admin is not a multisig wallet +/// used in staging deployments only +contract UpgradeLightClientWithoutMultisigAdminScript is Script { + /// @notice runs the upgrade + /// @param mostRecentlyDeployedProxy address of deployed proxy + /// @return address of the proxy + /// TODO get the most recent deployment from the devops tooling + function run(address mostRecentlyDeployedProxy) external returns (address) { + // get the deployer info from the environment and start broadcast as the deployer + string memory seedPhrase = vm.envString("MNEMONIC"); + uint32 seedPhraseOffset = uint32(vm.envUint("MNEMONIC_OFFSET")); + (address admin,) = deriveRememberKey(seedPhrase, seedPhraseOffset); + vm.startBroadcast(admin); + + address proxy = upgradeLightClient(mostRecentlyDeployedProxy, address(new LCV2())); + return proxy; + } + + /// @notice upgrades the light client contract by calling the upgrade function the + /// implementation contract via + /// the proxy + /// @param proxyAddress address of proxy + /// @param newLightClient address of new implementation + /// @return address of the proxy + function upgradeLightClient(address proxyAddress, address newLightClient) + public + returns (address) + { + LC proxy = LC(proxyAddress); //make the function call on the previous implementation + proxy.upgradeToAndCall(newLightClient, ""); //proxy address now points to the new + // implementation + vm.stopBroadcast(); + return address(proxy); + } +} diff --git a/contracts/script/LightClientWithDefender.s.sol b/contracts/script/LightClientWithDefender.s.sol deleted file mode 100644 index 16ef640439..0000000000 --- a/contracts/script/LightClientWithDefender.s.sol +++ /dev/null @@ -1,134 +0,0 @@ -pragma solidity ^0.8.20; - -import { Script } from "forge-std/Script.sol"; - -import { - Defender, - ApprovalProcessResponse, - ProposeUpgradeResponse -} from "openzeppelin-foundry-upgrades/Defender.sol"; -import { Upgrades, Options } from "openzeppelin-foundry-upgrades/Upgrades.sol"; -import { LightClient as LC } from "../src/LightClient.sol"; -import { UtilsScript } from "./Utils.s.sol"; - -contract LightClientDefenderDeployScript is Script { - string public contractName = "LightClient.sol"; - UtilsScript public utils = new UtilsScript(); - uint256 public contractSalt = uint256(vm.envInt("LIGHT_CLIENT_SALT")); - - function run() - public - returns (address proxy, address multisig, LC.LightClientState memory state) - { - // TODO for a production deployment provide the right genesis state and value - uint32 numInitValidators = 1; - uint32 stateHistoryRetentionPeriod = 864000; - - string[] memory cmds = new string[](3); - cmds[0] = "diff-test"; - cmds[1] = "mock-genesis"; - cmds[2] = vm.toString(uint256(numInitValidators)); - - bytes memory result = vm.ffi(cmds); - LC.StakeTableState memory stakeState; - (state, stakeState) = abi.decode(result, (LC.LightClientState, LC.StakeTableState)); - - ApprovalProcessResponse memory upgradeApprovalProcess = Defender.getUpgradeApprovalProcess(); - multisig = upgradeApprovalProcess.via; - - if (upgradeApprovalProcess.via == address(0)) { - revert( - string.concat( - "Upgrade approval process with id ", - upgradeApprovalProcess.approvalProcessId, - " has no assigned address" - ) - ); - } - - Options memory opts; - opts.defender.useDefenderDeploy = true; - opts.defender.salt = bytes32(abi.encodePacked(contractSalt)); - - proxy = Upgrades.deployUUPSProxy( - contractName, - abi.encodeCall( - LC.initialize, (state, stakeState, stateHistoryRetentionPeriod, multisig) - ), - opts - ); - - //generate the file path, file output and write to the file - (string memory filePath, string memory fileData) = utils.generateProxyDeploymentOutput( - contractName, - contractSalt, - proxy, - multisig, - upgradeApprovalProcess.approvalProcessId, - upgradeApprovalProcess.viaType - ); - utils.writeJson(filePath, fileData); - - //generate the salt history file path, output and write to the file - (string memory saltFilePath, string memory saltFileData) = - utils.generateSaltOutput(contractName, contractSalt); - utils.writeJson(saltFilePath, saltFileData); - - return (proxy, multisig, state); - } -} - -contract LightClientDefenderUpgradeScript is Script { - string public originalContractName = "LightClient.sol"; - string public upgradeContractName = vm.envString("LIGHT_CLIENT_UPGRADE_NAME"); - uint256 public contractSalt = uint256(vm.envInt("LIGHT_CLIENT_SALT")); - UtilsScript public utils = new UtilsScript(); - - function run() public returns (string memory proposalId, string memory proposalUrl) { - //get the previous salt from the salt history - this assumes there was first a deployment - // using `FeeContractDefenderDeployScript` - (string memory saltFilePath,) = utils.generateSaltFilePath(originalContractName); - (, string memory saltData) = utils.readFile(saltFilePath); - uint256 prevContractSalt = vm.parseJsonUint(saltData, ".previousSalt"); - - (string memory filePath,) = - utils.generateDeploymentFilePath(originalContractName, prevContractSalt); - - //read the deployment file from the previous deployment to get the proxyAddress & multisig - // used for deployment - (, string memory result) = utils.readFile(filePath); - address proxyAddress = vm.parseJsonAddress(result, ".proxyAddress"); - address multisig = vm.parseJsonAddress(result, ".multisig"); - - //set openzeppelin defender options for the deployment - Options memory opts; - opts.defender.useDefenderDeploy = true; - opts.defender.salt = bytes32(contractSalt); - opts.referenceContract = originalContractName; - - // propose the upgrade via openzeppelin defender - ProposeUpgradeResponse memory response = - Defender.proposeUpgrade(proxyAddress, upgradeContractName, opts); - string memory responseProposalId = response.proposalId; - string memory responseProposalUrl = response.url; - - //generate the file path, file output (deployment info) and write to the file - (string memory upgradeFilePath, string memory fileData) = utils.generateUpgradeOutput( - originalContractName, - contractSalt, - upgradeContractName, - proxyAddress, - multisig, - responseProposalId, - responseProposalUrl - ); - utils.writeJson(upgradeFilePath, fileData); - - //generate the salt history file path, output and write to the file - string memory saltFileData; - (saltFilePath, saltFileData) = utils.generateSaltOutput(originalContractName, contractSalt); - utils.writeJson(saltFilePath, saltFileData); - - return (responseProposalId, responseProposalUrl); - } -} diff --git a/contracts/script/PlonkVerifierWithDefender.s.sol b/contracts/script/PlonkVerifier.s.sol similarity index 60% rename from contracts/script/PlonkVerifierWithDefender.s.sol rename to contracts/script/PlonkVerifier.s.sol index abe30f3c89..363956603c 100644 --- a/contracts/script/PlonkVerifierWithDefender.s.sol +++ b/contracts/script/PlonkVerifier.s.sol @@ -3,10 +3,13 @@ pragma solidity ^0.8.20; import { Script } from "forge-std/Script.sol"; import { Defender, ApprovalProcessResponse } from "openzeppelin-foundry-upgrades/Defender.sol"; -import { Options } from "openzeppelin-foundry-upgrades/Upgrades.sol"; +import { Options, Upgrades } from "openzeppelin-foundry-upgrades/Upgrades.sol"; import { UtilsScript } from "./Utils.s.sol"; -contract PlonkVerifierDefenderDeployScript is Script { +/// @notice Deployed the PlonkVerifier library Contract using OpenZeppelin Defender. +/// the deployment environment details are set in OpenZeppelin Defender which is +/// identified via the Defender Key and Secret in the environment file +contract DeployPlonkVerifierWithDefenderScript is Script { string public contractName = "PlonkVerifier.sol"; UtilsScript public utils = new UtilsScript(); uint256 public contractSalt = uint256(vm.envInt("PLONK_VERIFIER_SALT")); @@ -51,3 +54,25 @@ contract PlonkVerifierDefenderDeployScript is Script { return (contractAddress, multisig); } } + +/// @notice Deploys an upgradeable Plonk Verifier Contract using the OpenZeppelin Upgrades plugin. +/// @dev The Upgrades library has a deployImplementation function which is used here +contract DeployPlonkVerifierScript is Script { + string public contractName = "PlonkVerifier.sol"; + + function run() public returns (address contractAddress) { + // get the deployer info from the environment and start broadcast as the deployer + string memory seedPhrase = vm.envString("DEPLOYER_MNEMONIC"); + uint32 seedPhraseOffset = uint32(vm.envUint("DEPLOYER_MNEMONIC_OFFSET")); + (address admin,) = deriveRememberKey(seedPhrase, seedPhraseOffset); + vm.startBroadcast(admin); + + // Deploy the library + Options memory opts; + address plonkVeriifer = Upgrades.deployImplementation(contractName, opts); + + vm.stopBroadcast(); + + return (plonkVeriifer); + } +} diff --git a/contracts/script/README.md b/contracts/script/README.md index 51a8a1eade..47827daa8d 100644 --- a/contracts/script/README.md +++ b/contracts/script/README.md @@ -1,74 +1,103 @@ # Deploying Upgradeable Smart Contracts -Upgradeable Smart contracts are deployed with Openzeppelin Defender to enable a deployment strategy that is more secure -and also uses a multi-sig Safe wallet. When deploying using openzeppelin the `defender` profile in the `foundry.toml` -file is used. - ## Prerequisites -1. Create a multisig wallet using [Safe](https://app.safe.global/welcome/accounts) on the network you'd like to deploy +1. **Create a Multisig Wallet** + Use [Safe](https://app.safe.global/welcome/accounts) to create a multisig wallet on the network you'd like to deploy to. -2. In [OpenZeppelin Defender](https://www.openzeppelin.com/defender), create an Approval Process that requires the - multisig wallet you created above. `Manage > Approval Processes`. - 1. Enter a name for your approval process - 1. Enter the multisig address from shown in te Safe UI - 1. Enter one of multisig owner address addresses - 1. Save the changes -3. In OpenZeppelin Defender, create a deployment environment by clicking on "Setup" in the - [deploy](https://defender.openzeppelin.com/v2/#/deploy) tab. Use "Test Environment" for deploying to testnets (e. g. - Sepolia) and "Production Environment" for mainnet. - 1. Choose a network - 1. Select the approval process created in Step 2 - 1. Be sure to save `DEFENDER_SECRET` ("Team Secret key") and `DEFENDER_KEY` ("Team API Key"), that is shown at the - end of this step, into the `.env.contracts` file. The keys won't be available later at a later point. -4. In the home folder of this repo, you're in a nix shell: Enter `nix-shell` in the terminal -5. If the contracts have never been compiled run, `forge build` +2. **Enter Nix Shell** + In the home folder of this repo, start a nix shell by entering `nix-shell` in the terminal. +3. **Compile Contracts (if necessary)** If the contracts have never been compiled, run `forge build`. +4. **Set Environment Variables** + Set the values for `STATE_HISTORY_RETENTION_PERIOD` and `NUM_INIT_VALIDATORS` in the `.env.contracts` file. + +### If Using OpenZeppelin Defender + +1. **Create an Approval Process** + Create an Approval Process that requires the multisig wallet you created above by navigating to + `Manage > Approval Processes` in OpenZeppelin Defender. + + - Enter a name for your approval process. + - Enter the multisig address shown in the Safe UI. + - Enter one of the multisig owner addresses. + - Save the changes. + +2. **Create a Deployment Environment** + In OpenZeppelin Defender, create a deployment environment by clicking on "Setup" in the + [deploy tab](https://defender.openzeppelin.com/v2/#/deploy). + - Use "Test Environment" for deploying to testnets (e.g., Sepolia) and "Production Environment" for mainnet. + - Choose a network. + - Select the approval process created in Step 1. + - Save the `DEFENDER_SECRET` ("Team Secret key") and `DEFENDER_KEY` ("Team API Key") shown at the end of this step + into the `.env.contracts` file. These keys won't be available later. + +### If Not Using OpenZeppelin Defender + +1. **Set Deployment Values** + Set the values for `DEPLOYER_MNEMONIC` and `DEPLOYER_MNEMONIC_OFFSET` in the `.env.contracts` file. ## Deployments -### Deploying the Fee Contract +## Deploying the Fee Contract -Steps: +### 1. Deploy -1. Run the Deployment command. +#### Without OpenZeppelin Defender - ```bash - source .env.contracts && \ - forge clean && \ - FeeContractWithDefender.s.sol:FeeContractDefenderDeployScript \ - --ffi \ - --rpc-url https://ethereum-sepolia.publicnode.com \ - --build-info true +1. Run the following command in the home directory: + +```bash source .env.contracts && \ forge clean && \ - FeeContractWithDefender.s.sol:FeeContractDefenderDeployScript \ + forge script contracts/script/FeeContract.s.sol:DeployFeeContractScript $SAFE_MULTISIG_ADDRESS \ + --sig 'run(address)' \ --ffi \ --rpc-url https://ethereum-sepolia.publicnode.com \ - --build-info true - ``` - - 1. Go to the [deploy](https://defender.openzeppelin.com/v2/#/deploy) tab OpenZeppelin Defender's UI and click on the - current environment to see the transaction. The transaction should be visible with status "SUBMITTED". The page - may need to be refreshed a few times. It occasionally may take minutes for transactions to appear. - 2. Click that transaction, then "Open in Safe App" which opens up the Safe UI where your signers for that Safe - multi-sig wallet can confirm the transaction. The two transactions to be confirmed are: (i) deployment of - implementation contract (ii) deployment of proxy contract - 3. If the transaction looks correct click "confirm". - 4. Click "Execute". - 5. Confirm the transaction with your wallet (e. g. metamask). - 6. Repeat steps 1 to 5 for the deployment of the proxy contract. You may need to refresh the OpenZeppelin Defender - "deploy" tab a few times until the second transaction appears. - -2. Verify the Implementation contract on Etherscan (Use another window as step would not have completed yet) + --build-info true \ + --legacy \ + --broadcast +``` + +#### With OpenZeppelin Defender + +1. Run the following command in the home directory: + +```bash +source .env.contracts && \ +forge clean && \ +forge script contracts/script/FeeContract.s.sol:DeployFeeContractWithDefenderScript \ +--ffi \ +--rpc-url https://ethereum-sepolia.publicnode.com \ +--build-info true \ +``` + +2. **View Submitted Transactions**: Go to the [deploy](https://defender.openzeppelin.com/v2/#/deploy) tab OpenZeppelin + Defender's UI and click on the current environment to see the transaction. The transaction should be visible with + status "SUBMITTED". The page may need to be refreshed a few times. It occasionally may take minutes for transactions + to appear. +3. **Sign & Execute Transactions**: Click that transaction, then "Open in Safe App" which opens up the Safe UI where + your signers for that Safe multi-sig wallet can confirm the transaction. The two transactions to be confirmed are: + (i) deployment of implementation contract (ii) deployment of proxy contract. + - If the transaction looks correct, each signer clicks "confirm". + - once we have all signatures, any signer can submit the transactions to the blockchain by clicking, "Execute". +4. Refresh the OpenZeppelin Defender UI to see the transaction for the deployment of the proxy. For which you'll need to + repeat steps 2 & 3. You may need to refresh the OpenZeppelin Defender "deploy" tab a few times until the second + transaction appears. + +### 2. Contract Verification + +Verify the Implementation contract on Etherscan (Use another window as step would not have completed yet) ```bash forge verify-contract --chain-id 11155111 \ --watch --etherscan-api-key $ETHERSCAN_API_KEY \ --compiler-version $SOLC_VERSION \ $FEE_CONTRACT_ADDRESS \ -contracts/src/FeeContract.sol:FeeContract --watch +contracts/src/FeeContract.sol:FeeContract ``` +You can get the `$SOLC_VERSION` by running the command `solc --version`. + 3. Inform Etherscan that it's a Proxy When the proxy is deployed, go to Etherscan. Go to Contract > Code > More Options and select the 'is this a proxy?' option. You should then be able to interact with the implementation contract via a proxy. @@ -86,7 +115,12 @@ proxy: address payable 0x61B4C96475B99A6ce01AfF0da7910605D048c125 multisig: address 0xc56fA6505d10bF322e01327e22479DE78C3Bf1cE ``` -### Deploying the Light Client Contract +### 3. Inform Etherscan about your proxy + +Inform Etherscan that it's a Proxy When the proxy is deployed, go to Etherscan. Go to Contract > Code > More Options and +select the `is this a proxy?` option. You should then be able to interact with the implementation contract via a proxy. + +## Deploying the Light Client Contract Read Deploying the Fee Contract for a more detailed version of this. Since the LightClient contract uses the PlonkVerifier library, the PlonkVerifier library has to be deployed and then referenced at deployment time. Thus ensure @@ -100,70 +134,101 @@ referenced at deployment time. Thus ensure you've deployed the PlonkVerifier the command below. Each time modifications are made to the Plonk Verifier, contracts that depend on it such as the Light Client contract have to be upgraded and should use the new PlonkVerifier contract address as part of the deployment. -1. Initiate the Deployment with OpenZeppelin Defender +### 1. Deploy + +#### Without OpenZeppelin Defender (current method) + +1. Run the following command in the home directory: ```bash -source .env.contracts && \ -forge clean && \ -forge script contracts/script/LightClientWithDefender.s.sol:LightClientDefenderDeployScript \ ---ffi --rpc-url https://ethereum-sepolia.publicnode.com \ ---build-info true \ ---libraries contracts/src/libraries/PlonkVerifier.sol:PlonkVerifier:$PLONK_VERIFIER_ADDRESS + source .env.contracts && \ + forge clean && \ + forge script contracts/script/LightClient.s.sol:DeployLightClientScript $NUM_INIT_VALIDATORS $STATE_HISTORY_RETENTION_PERIOD $SAFE_MULTISIG_ADDRESS \ + --sig 'run(uint32, uint32, address)' \ + --ffi \ + --rpc-url https://ethereum-sepolia.publicnode.com \ + --libraries contracts/src/libraries/PlonkVerifier.sol:PlonkVerifier:$PLONK_VERIFIER_ADDRESS \ + --build-info true \ + --legacy \ + --broadcast ``` +#### With OpenZeppelin Defender + +1. Run the following command in the home directory: + +```bash source .env.contracts && \ forge clean && \ -forge script contracts/script/LightClientWithDefender.s.sol:LightClientDefenderDeployScript \ ---ffi --rpc-url https://ethereum-sepolia.publicnode.com \ +forge script contracts/script/LightClient.s.sol:DeployLightClientDefenderScript $STATE_HISTORY_RETENTION_PERIOD \ +--sig 'run(uint32)' \ +--ffi --rpc-url https://ethereum-sepolia.publicnode.com \ --build-info true \ --libraries contracts/src/libraries/PlonkVerifier.sol:PlonkVerifier:$PLONK_VERIFIER_ADDRESS +``` -```` - -2. Verify the Contract +### 2. Verify the Contract ```bash forge verify-contract --chain-id 11155111 \ --watch --etherscan-api-key $ETHERSCAN_API_KEY \ --compiler-version $SOLC_VERSION \ -$LIGHT_CLIENT_PROXY_CONTRACT_ADDRESS \ -contracts/src/LightClient.sol:LightClient --watch +$LIGHT_CLIENT_CONTRACT_ADDRESS \ +contracts/src/LightClient.sol:LightClient \ +--libraries contracts/src/libraries/PlonkVerifier.sol:PlonkVerifier:$PLONK_VERIFIER_ADDRESS ``` -3. Inform Etherscan that it's a Proxy When the proxy is deployed, go to Etherscan. Go to Contract > Code > More Options - and select the 'is this a proxy?' option. You should then be able to interact with the implementation contract via a - proxy. +### 3. Inform Etherscan about your proxy + +Inform Etherscan that it's a Proxy When the proxy is deployed, go to Etherscan. Go to Contract > Code > More Options and +select the `is this a proxy?` option. You should then be able to interact with the implementation contract via a proxy. ## Upgrades -### Upgrading the Fee Contract +## Upgrading the Fee Contract -Steps: +### 1. Deploy & Upgrade + +#### Without OpenZeppelin Defender + +1. Run the following command in the home directory: + +```bash +source .env.contracts && \ +forge clean && \ +forge script contracts/script/FeeContract.s.sol:UpgradeFeeContractScript \ +--ffi \ +--rpc-url https://ethereum-sepolia.publicnode.com \ +--build-info true \ +--legacy \ +--broadcast +``` + +#### With OpenZeppelin Defender -1. Ensure that the salt has been updated in the `.env.contracts` file. The upgrade script retrieves the proxyAddress - from the previous deployment by reading a file in the following path: 1. Ensure that the salt has been updated in the `.env.contracts` file. The upgrade script retrieves the proxyAddress from the previous deployment by reading a file in the following path: `script/output/defenderDeployments/$CONTRACT_NAME/$CHAIN_ID/$SALT.json`. It knows the salt from a previous deployment by reading the `saltHistory.json` file. Run the following command: +2. Run the following command in the home directory: + ```bash source .env.contracts && \ -source .env.contracts && \ -forge clean && \ -forge script contracts/script/FeeContractWithDefender.s.sol:FeeContractDefenderUpgradeScript \ +forge script contracts/script/FeeContract.s.sol:UpgradeFeeContractWithDefenderScript \ --ffi \ --rpc-url https://ethereum-sepolia.publicnode.com \ --build-info true ``` -2. This command requires you to go to OpenZeppelin Defender's UI to see the transaction. Click that transaction which - opens up the Safe UI where your signers for that Safe multi-sig wallet can confirm the transaction. +3. **Sign and Execute the transaction**: This command requires you to go to OpenZeppelin Defender's UI to see the + transaction. Click that transaction which opens up the Safe UI where your signers for that Safe multi-sig wallet can + confirm the transaction. The transactions being confirmed are: (i) the deployment of the new fee contract (ii) the execution of the `upgradeToAndCall` method which updates the implementation contract that the proxy contract is referencing. -### Upgrading the Light Client Contract +## Upgrading the Light Client Contract Ensure that you update the version in the `getVersion()` method of the latest implementation contract. @@ -173,108 +238,97 @@ referenced at deployment time. Thus ensure you've deployed the PlonkVerifier the command below. Each time modifications are made to the Plonk Verifier, contracts that depend on it such as the Light Client contract have to be upgraded and should use the new PlonkVerifier contract address as part of the deployment. -Since the LightClient contract uses the PlonkVerifier library, the PlonkVerifier library has to be deployed and then -referenced at deployment time. Thus ensure you've deployed the PlonkVerifier -([see steps below](#deploy-the-plonk-verifier-library-with-defender)) and set the `$PLONK_VERIFIER_ADDRESS` variable in -the command below. Each time modifications are made to the Plonk Verifier, contracts that depend on it such as the Light -Client contract have to be upgraded and should use the new PlonkVerifier contract address as part of the deployment. +### 1. Deploy & Upgrade -Steps: +#### Without OpenZeppelin Defender -1. Ensure that the salt has been updated in the `.env.contracts` file. The upgrade script retrieves the proxyAddress - from the previous deployment by reading a file in the following path: -1. Ensure that the salt has been updated in the `.env.contracts` file. The upgrade script retrieves the proxyAddress - from the previous deployment by reading a file in the following path: - `script/output/defenderDeployments/$CONTRACT_NAME/$CHAIN_ID/$SALT.json`. It knows the salt from a previous - deployment by reading the `saltHistory.json` file. Run the following command: +1. Run the following command in the home directory: ```bash source .env.contracts && \ -source .env.contracts && \ forge clean && \ -forge script contracts/script/LightClientWithDefender.s.sol:LightClientDefenderUpgradeScript \ +forge script contracts/script/LightClient.s.sol:LightClientContractUpgradeScript \ --ffi \ --rpc-url https://ethereum-sepolia.publicnode.com \ +--libraries contracts/src/libraries/PlonkVerifier.sol:PlonkVerifier:$PLONK_VERIFIER_ADDRESS \ --build-info true \ ---libraries contracts/src/libraries/PlonkVerifier.sol:PlonkVerifier:$PLONK_VERIFIER_ADDRESS -forge script contracts/script/LightClientWithDefender.s.sol:LightClientDefenderUpgradeScript \ +--legacy \ +--broadcast +``` + +#### With OpenZeppelin Defender + +1. Ensure that the salt has been updated in the `.env.contracts` file. The upgrade script retrieves the proxyAddress + from the previous deployment by reading a file in the following path: + `script/output/defenderDeployments/$CONTRACT_NAME/$CHAIN_ID/$SALT.json`. It knows the salt from a previous + deployment by reading the `saltHistory.json` file. Run the following command: + +2. Run the following command in the home directory: + +```bash +source .env.contracts && \ +forge script contracts/script/LightClient.s.sol:UpgradeLightClientWithDefenderScript \ --ffi \ --rpc-url https://ethereum-sepolia.publicnode.com \ --build-info true \ --libraries contracts/src/libraries/PlonkVerifier.sol:PlonkVerifier:$PLONK_VERIFIER_ADDRESS ``` -2. This command requires you to go to OpenZeppelin Defender's UI to see the transaction. Click that transaction which - opens up the Safe UI where your signers for that Safe multi-sig wallet can confirm the transaction. +3. **Sign and Execute the transaction**: This command requires you to go to OpenZeppelin Defender's UI to see the + transaction. Click that transaction which opens up the Safe UI where your signers for that Safe multi-sig wallet can + confirm the transaction. The transactions being confirmed are: (i) the deployment of the new fee contract (ii) the execution of the `upgradeToAndCall` method which updates the implementation contract that the proxy contract is referencing. -## Known Errors +## Deploying Upgradable Contracts without OpenZeppelin Defender and without a Safe Multisig Wallet Admin -1. Error Parsing ABI for contract Scenario: You ran `just gen-bindings` Example: +Use these instructions for staging deployments only. Ensure that you have set the following variables in the `.env` +file. -```bash -Error: -error parsing abi for contract '_70c760a3e059d83dbf77da7f6778fbc0': couldn't parse ABI string as either human readable (1) or JSON (2): -1. Illegal abi `{`, expected function -2. data did not match any variant of untagged enum JsonContract -error: Recipe `gen-bindings` failed on line 65 with exit code 1 -``` +- `MNEMONIC` +- `MNEMONIC_OFFSET` -This error occurs when build_info is set to true in the foundry.toml configuration. Ensure that this is false or the -foundry profile is set to default when running commands like `just gen-bindings`. - -Solution: `export FOUNDRY_PROFILE=default` - -# Deploying Upgradable Contracts without OpenZeppelin Defender or a Safe Multisig Wallet - -## LightClient Contract Deployment +### 1. Deploy the LightClient Contract ```bash -forge script contracts/script/LightClient.s.sol:DeployLightClientContractScript $numInitValidators $stateHistoryRetentionPeriod \ +forge script contracts/script/LightClient.s.sol:DeployLightClientContractWithoutMultiSigScript $NUM_INIT_VALIDATORS $STATE_HISTORY_RETENTION_PERIOD \ --sig 'run(uint32, uint32)' \ --ffi \ --rpc-url https://ethereum-sepolia.publicnode.com ``` -## LightClient Contract Upgrade +### 2. Upgrade the LightClient Contract ```bash -forge script contracts/script/UpgradeLightClient.s.sol:UpgradeLightClientScript $admin $mostRecentlyDeployedProxy \ ---sig 'run(address, address)' \ +forge script contracts/script/LightClient.s.sol:UpgradeLightClientWithoutMultisigAdminScript $LIGHT_CLIENT_CONTRACT_PROXY_ADDRESS \ +--sig 'run(address)' \ --ffi \ --rpc-url https://ethereum-sepolia.publicnode.com ``` -# Deploy and Upgrade without Defender +_Note_: the `$MNEMONIC_OFFSET` should be zero by default if address referenced by the `$MNEMONIC` in the `.env` is the +first address in that wallet. Otherwise, please specify the correct `$MNEMONIC_OFFSET` -Change the $MNEMONIC in the .env file to the one of the admin - -To Deploy +### 3. Verify the Contract ```bash -forge script contracts/script/LightClient.s.sol:DeployLightClientContractScript $numInitValidators $stateHistoryRetentionPeriod \ ---sig 'run(uint32, uint32)' \ ---ffi \ ---rpc-url https://ethereum-sepolia.publicnode.com\ ---broadcast --legacy +forge verify-contract --chain-id 11155111 \ +--watch --etherscan-api-key $ETHERSCAN_API_KEY \ +--compiler-version $SOLC_VERSION \ +$LIGHT_CLIENT_CONTRACT_ADDRESS \ +contracts/src/LightClient.sol:LightClient \ +--libraries contracts/src/libraries/PlonkVerifier.sol:PlonkVerifier:$PLONK_VERIFIER_ADDRESS ``` -To Upgrade (assuming it's the same LightClient.sol file being used (pre-mainnet)) +### 4. Inform Etherscan about your proxy -```bash -forge script contracts/script/UpgradeSameLightClient.s.sol:UpgradeLightClientScript $mnemonicOffset $mostRecentlyDeployedProxy \ ---sig 'run(uint32, address)' \ ---ffi \ ---rpc-url https://ethereum-sepolia.publicnode.com \ ---broadcast --legacy -``` +Inform Etherscan that it's a Proxy When the proxy is deployed, go to Etherscan. Go to Contract > Code > More Options and +select the `is this a proxy?` option. You should then be able to interact with the implementation contract via a proxy. -Note: the `$mnemonicOffset` should be zero by default if address referenced by the `$MNEMONIC` in the `.env` is the -first address in that wallet. Otherwise, please specify the correct `$mnemonicOffset` +## Deploy the Plonk Verifier Library -# Deploy the Plonk Verifier Library with Defender +### With OpenZepplin Defender The Plonk Verifier contract is not upgradeable and deploying we deploy with defender as part of our workflow so that we can also deploy it with a multisig wallet. Each time modifications are made to the Plonk Verifier, contracts that depend @@ -286,60 +340,13 @@ Ensure that you update the salt, `PLONK_VERIFIER_SALT`, in the `.env.contracts` ```bash source .env.contracts && \ forge clean && \ -forge script contracts/script/PlonkVerifierWithDefender.s.sol:PlonkVerifierDefenderDeployScript \ +forge script contracts/script/PlonkVerifierWithDefender.s.sol:DeployPlonkVerifierWithDefenderScript \ --ffi \ --rpc-url https://ethereum-sepolia.publicnode.com \ --build-info true ``` -# Deploying Upgradable Contracts without OpenZeppelin Defender or a Safe Multisig Wallet - -## LightClient Contract Deployment - -```bash -forge script contracts/script/LightClient.s.sol:DeployLightClientContractScript $numInitValidators $stateHistoryRetentionPeriod \ ---sig 'run(uint32, uint32)' \ ---ffi \ ---rpc-url https://ethereum-sepolia.publicnode.com -``` - -## LightClient Contract Upgrade - -```bash -forge script contracts/script/UpgradeLightClient.s.sol:UpgradeLightClientScript $admin $mostRecentlyDeployedProxy \ ---sig 'run(address, address)' \ ---ffi \ ---rpc-url https://ethereum-sepolia.publicnode.com -``` - -# Deploy and Upgrade without Defender - -Change the $MNEMONIC in the .env file to the one of the admin - -To Deploy - -```bash -forge script contracts/script/LightClient.s.sol:DeployLightClientContractScript $numInitValidators $stateHistoryRetentionPeriod \ ---sig 'run(uint32, uint32)' \ ---ffi \ ---rpc-url https://ethereum-sepolia.publicnode.com\ ---broadcast --legacy -``` - -To Upgrade (assuming it's the same LightClient.sol file being used (pre-mainnet)) - -```bash -forge script contracts/script/UpgradeSameLightClient.s.sol:UpgradeLightClientScript $mnemonicOffset $mostRecentlyDeployedProxy \ ---sig 'run(uint32, address)' \ ---ffi \ ---rpc-url https://ethereum-sepolia.publicnode.com \ ---broadcast --legacy -``` - -Note: the `$mnemonicOffset` should be zero by default if address referenced by the `$MNEMONIC` in the `.env` is the -first address in that wallet. Otherwise, please specify the correct `$mnemonicOffset` - -# Deploy the Plonk Verifier Library with Defender +### Without Defender The Plonk Verifier contract is not upgradeable and deploying we deploy with defender as part of our workflow so that we can also deploy it with a multisig wallet. Each time modifications are made to the Plonk Verifier, contracts that depend @@ -351,9 +358,27 @@ Ensure that you update the salt, `PLONK_VERIFIER_SALT`, in the `.env.contracts` ```bash source .env.contracts && \ forge clean && \ -forge script contracts/script/PlonkVerifierWithDefender.s.sol:PlonkVerifierDefenderDeployScript \ +forge script contracts/script/PlonkVerifier.s.sol:DeployPlonkVerifierScript \ --ffi \ --rpc-url https://ethereum-sepolia.publicnode.com \ ---build-info true +--build-info true \ +--legacy \ +--broadcast +``` + +# Known Errors + +1. Error Parsing ABI for contract Scenario: You ran `just gen-bindings` Example: + +```bash +Error: +error parsing abi for contract '_70c760a3e059d83dbf77da7f6778fbc0': couldn't parse ABI string as either human readable (1) or JSON (2): +1. Illegal abi `{`, expected function +2. data did not match any variant of untagged enum JsonContract +error: Recipe `gen-bindings` failed on line 65 with exit code 1 ``` -```` + +This error occurs when build_info is set to true in the foundry.toml configuration. Ensure that this is false or the +foundry profile is set to default when running commands like `just gen-bindings`. + +Solution: `export FOUNDRY_PROFILE=default` diff --git a/contracts/script/UpgradeSameLightClient.s.sol b/contracts/script/UpgradeSameLightClient.s.sol deleted file mode 100644 index 2a8e9b9475..0000000000 --- a/contracts/script/UpgradeSameLightClient.s.sol +++ /dev/null @@ -1,41 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.19; - -import { Script } from "forge-std/Script.sol"; - -import { LightClient as LCV2 } from "../src/LightClient.sol"; -import { LightClient as LC } from "../src/LightClient.sol"; - -contract UpgradeLightClientScript is Script { - /// @notice runs the upgrade - /// @param mostRecentlyDeployedProxy address of deployed proxy - /// @return address of the proxy - /// TODO get the most recent deployment from the devops tooling - function run(uint32 seedPhraseOffset, address mostRecentlyDeployedProxy) - external - returns (address) - { - string memory seedPhrase = vm.envString("MNEMONIC"); - (address admin,) = deriveRememberKey(seedPhrase, seedPhraseOffset); - vm.startBroadcast(admin); - address proxy = upgradeLightClient(mostRecentlyDeployedProxy, address(new LCV2())); - return proxy; - } - - /// @notice upgrades the light client contract by calling the upgrade function the - /// implementation contract via - /// the proxy - /// @param proxyAddress address of proxy - /// @param newLightClient address of new implementation - /// @return address of the proxy - function upgradeLightClient(address proxyAddress, address newLightClient) - public - returns (address) - { - LC proxy = LC(proxyAddress); //make the function call on the previous implementation - proxy.upgradeToAndCall(newLightClient, ""); //proxy address now points to the new - // implementation - vm.stopBroadcast(); - return address(proxy); - } -} diff --git a/contracts/script/multisigTransactionProposals/README.md b/contracts/script/multisigTransactionProposals/README.md index b25ab1bd8d..f33f940aca 100644 --- a/contracts/script/multisigTransactionProposals/README.md +++ b/contracts/script/multisigTransactionProposals/README.md @@ -9,9 +9,9 @@ wallet. ## Set Permissioned Prover To enable the permissioned prover on the light client contract, ensure that the following environment variables are set -in the `.env` file: +in the `.env.contracts` file: -- `SEPOLIA_RPC_URL` +- `RPC_URL` - `SAFE_ORCHESTRATOR_PRIVATE_KEY` - `SAFE_MULTISIG_ADDRESS` - `APPROVED_PROVER_ADDRESS` @@ -20,6 +20,7 @@ in the `.env` file: Assuming you're in the root folder, run the following command: ```bash +source .env.contracts && \ ts-node contracts/script/multisigTransactionProposals/safeSDK/modifyProverModeProposal.ts setProver ``` @@ -34,9 +35,9 @@ proxy and read the permissioned prover address on etherscan. ## Disable Permissioned Prover To disable the permissioned prover on the light client contract, ensure that the following environment variables are set -in the `.env` file: +in the `.env.contracts` file: -- `SEPOLIA_RPC_URL` +- `RPC_URL` - `SAFE_ORCHESTRATOR_PRIVATE_KEY` - `SAFE_MULTISIG_ADDRESS` - `LIGHT_CLIENT_PROXY_CONTRACT_ADDRESS` @@ -44,6 +45,7 @@ in the `.env` file: Assuming you're in the root folder, run the following command: ```bash +source .env.contracts && \ ts-node contracts/script/multisigTransactionProposals/safeSDK/modifyProverModeProposal.ts disableProver ``` diff --git a/contracts/script/multisigTransactionProposals/safeSDK/modifyProverModeProposal.ts b/contracts/script/multisigTransactionProposals/safeSDK/modifyProverModeProposal.ts index 294dfa974f..eb6269e12c 100644 --- a/contracts/script/multisigTransactionProposals/safeSDK/modifyProverModeProposal.ts +++ b/contracts/script/multisigTransactionProposals/safeSDK/modifyProverModeProposal.ts @@ -17,10 +17,10 @@ async function main() { const command = processCommandLineArguments(); /**TODO - * change from SEPOLIA_RPC_URL to production URL when deploying to production + * change from RPC_URL to production URL when deploying to production */ // Initialize web3 provider using the RPC URL from environment variables - const web3Provider = new ethers.JsonRpcProvider(getEnvVar("SEPOLIA_RPC_URL")); + const web3Provider = new ethers.JsonRpcProvider(getEnvVar("RPC_URL")); // Create a signer using the orchestrator's private key and the web3 provider const orchestratorSigner = new ethers.Wallet(getEnvVar("SAFE_ORCHESTRATOR_PRIVATE_KEY"), web3Provider); diff --git a/contracts/script/multisigTransactionProposals/safeSDK/upgradeProxy.ts b/contracts/script/multisigTransactionProposals/safeSDK/upgradeProxy.ts new file mode 100644 index 0000000000..254a544c49 --- /dev/null +++ b/contracts/script/multisigTransactionProposals/safeSDK/upgradeProxy.ts @@ -0,0 +1,154 @@ +import dotenv from "dotenv"; +import { ethers } from "ethers"; +import { EthersAdapter } from "@safe-global/protocol-kit"; +import SafeApiKit from "@safe-global/api-kit"; +import Safe from "@safe-global/protocol-kit"; +import { getEnvVar, createSafeTransactionData, validateEthereumAddress } from "./utils"; +const UPGRADE_PROXY_CMD = "upgradeProxy" as const; + +// declaring the type returned by the createTransaction method in the safe package locally (since the return type isn't exposed) so that if it's updated, it's reflected here too +type LocalSafeTransaction = Awaited>; + +interface UpgradeData { + proxyAddress: string; + implementationAddress: string; + initData: string; +} + +async function main() { + dotenv.config(); + + try { + const upgradeData: UpgradeData = processCommandLineArguments(); + + // Initialize web3 provider using the RPC URL from environment variables + const web3Provider = new ethers.JsonRpcProvider(getEnvVar("RPC_URL")); + // Create a signer using the orchestrator's private key and the web3 provider + const orchestratorSigner = new ethers.Wallet(getEnvVar("SAFE_ORCHESTRATOR_PRIVATE_KEY"), web3Provider); + + // Set up Eth Adapter with ethers and the signer + const ethAdapter = new EthersAdapter({ + ethers, + signerOrProvider: orchestratorSigner, + }); + + const chainId = await ethAdapter.getChainId(); + const safeService = new SafeApiKit({ chainId }); + const safeAddress = getEnvVar("SAFE_MULTISIG_ADDRESS"); + validateEthereumAddress(safeAddress); + const safeSdk = await Safe.create({ ethAdapter, safeAddress }); + const orchestratorSignerAddress = await orchestratorSigner.getAddress(); + + await proposeUpgradeTransaction(safeSdk, safeService, orchestratorSignerAddress, safeAddress, upgradeData); + + console.log( + `The other owners of the Safe Multisig wallet need to sign the transaction via the Safe UI https://app.safe.global/transactions/queue?safe=sep:${safeAddress}`, + ); + } catch (error) { + throw new Error("An error occurred: " + error); + } +} + +function processCommandLineArguments(): UpgradeData { + const args = process.argv.slice(2); // Remove the first two args (node command and script name) + if (args.length === 0) { + console.log("No commands provided."); + throw new Error( + `No commands provided, enter ${UPGRADE_PROXY_CMD} followed by the new implementation contract address and its init data`, + ); + } else if (args.length < 3) { + throw new Error( + `Incorrect number of arguments, enter ${UPGRADE_PROXY_CMD} followed by the new implementation contract address and its init data`, + ); + } + + const command = args[0]; + if (command !== UPGRADE_PROXY_CMD) { + throw new Error(`Only ${UPGRADE_PROXY_CMD} command is supported.`); + } + const proxyAddress = args[1]; + const implementationAddress = args[2]; + validateEthereumAddress(implementationAddress); + const initData = args[3]; + + return { proxyAddress: proxyAddress, implementationAddress: implementationAddress, initData: initData }; +} + +/** + * Function to propose the transaction data for upgrading the new implemeantation + * @param {string} safeSDK - An instance of the Safe SDK + * @param {string} safeService - An instance of the Safe Service + * @param {string} signerAddress - The address of the address signing the transaction + * @param {string} safeAddress - The address of the Safe multisig wallet + * @param {string} newContractAddress - The address of the new implementation + * @param {string} initData - The initialization data for the new implementation, may be '0x' if there is not initialization required + */ +export async function proposeUpgradeTransaction( + safeSDK: Safe, + safeService: SafeApiKit, + signerAddress: string, + safeAddress: string, + upgradeData: UpgradeData, +) { + // Prepare the transaction data to upgrade the proxy + let data = createUpgradeTxData(upgradeData.implementationAddress, upgradeData.initData); + + // Create the Safe Transaction Object + const safeTransaction = await createSafeTransaction(safeSDK, upgradeData.proxyAddress, data, "0"); + + // Get the transaction hash and sign the transaction + const safeTxHash = await safeSDK.getTransactionHash(safeTransaction); + + // Sign the transaction with orchestrator signer that was specified when we created the safeSDK + const senderSignature = await safeSDK.signHash(safeTxHash); + + // Propose the transaction which can be signed by other owners via the Safe UI + await safeService.proposeTransaction({ + safeAddress: safeAddress, + safeTransactionData: safeTransaction.data, + safeTxHash: safeTxHash, + senderAddress: signerAddress, + senderSignature: senderSignature.data, + }); +} + +/** + * Function to create the transaction data for setting the new implementation + * @param {string} newContractAddress - The address of the new implementation + * @param {string} initData - The initialization data for the new implementation + * @returns {string} - Encoded transaction data + */ +function createUpgradeTxData(newContractAddress: string, initData: string): string { + // Define the ABI of the function to be called + const abi = ["function upgradeToAndCall(address,bytes)"]; + + // Encode the function call with the new implementation address and its init data + const data = new ethers.Interface(abi).encodeFunctionData("upgradeToAndCall", [newContractAddress, initData]); + return data; // Return the encoded transaction data +} + +/** + * Creates a Safe transaction object + * + * @param {Safe} safeSDK - An instance of the Safe SDK + * @param {string} contractAddress - The address of the contract to interact with + * @param {string} data - The data payload for the transaction + * @param {string} value - The value to be sent with the transaction + * @returns {Promise} - A promise that resolves to the Safe transaction object + */ +async function createSafeTransaction( + safeSDK: Safe, + contractAddress: string, + data: string, + value: string, +): Promise { + // Prepare the safe transaction data with the contract address, data, and value + let safeTransactionData = createSafeTransactionData(contractAddress, data, value); + + // Create the safe transaction using the Safe SDK + const safeTransaction = await safeSDK.createTransaction({ transactions: [safeTransactionData] }); + + return safeTransaction; +} + +main(); diff --git a/contracts/script/multisigTransactionProposals/tests/utils.test.ts b/contracts/script/multisigTransactionProposals/tests/utils.test.ts index 2fa1a66883..ef86960516 100644 --- a/contracts/script/multisigTransactionProposals/tests/utils.test.ts +++ b/contracts/script/multisigTransactionProposals/tests/utils.test.ts @@ -1,4 +1,4 @@ -import { createSafeTransactionData, getEnvVar, isValidEthereumAddress } from "../safeSDK/utils"; +import { createSafeTransactionData, getEnvVar, validateEthereumAddress } from "../safeSDK/utils"; // Mocking process.argv const originalArgv = process.argv; @@ -9,14 +9,14 @@ describe("environment tests", () => { process.argv = originalArgv; // Reset argv after each test }); - it("should throw an error if SEPOLIA_RPC_URL environment variable is not set", () => { - process.env.SEPOLIA_RPC_URL = ""; - expect(() => getEnvVar("SEPOLIA_RPC_URL")).toThrow(); + it("should throw an error if RPC_URL environment variable is not set", () => { + process.env.RPC_URL = ""; + expect(() => getEnvVar("RPC_URL")).toThrow(); }); - it("should return the rpc url if SEPOLIA_RPC_URL environment variable is set", () => { - process.env.SEPOLIA_RPC_URL = "http://rpc"; - const result = getEnvVar("SEPOLIA_RPC_URL"); + it("should return the rpc url if RPC_URL environment variable is set", () => { + process.env.RPC_URL = "http://rpc"; + const result = getEnvVar("RPC_URL"); expect(result).toEqual("http://rpc"); }); }); @@ -68,20 +68,22 @@ describe("createSafeTransactionData", () => { }); }); -describe("isValidEthereumAddress", () => { +describe("validateEthereumAddress", () => { test("should return true for a valid Ethereum address", () => { - expect(isValidEthereumAddress(validETHAddress)).toBe(true); + expect(() => { + validateEthereumAddress(validETHAddress); + }).not.toThrow(); }); test("should throw an error for an invalid Ethereum address", () => { expect(() => { - isValidEthereumAddress("0xInvalidEthereumAddress"); + validateEthereumAddress("0xInvalidEthereumAddress"); }).toThrow("Invalid Ethereum address format"); }); test("should throw an error for an empty string", () => { expect(() => { - isValidEthereumAddress(""); + validateEthereumAddress(""); }).toThrow("Invalid Ethereum address format"); }); }); diff --git a/contracts/test/BoxUpgrade.t.sol b/contracts/test/BoxUpgrade.t.sol index 47b85d14b3..8ea336ac28 100644 --- a/contracts/test/BoxUpgrade.t.sol +++ b/contracts/test/BoxUpgrade.t.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; -import { Test } /*, console2*/ from "forge-std/Test.sol"; +import { Test } from "forge-std/Test.sol"; import { DemoBoxV1 } from "../demo/upgradeDemo/DemoBoxV1.sol"; import { DemoBoxV2 } from "../demo/upgradeDemo/DemoBoxV2.sol"; -import { DeployBoxScript } from "../script/Box.s.sol"; -import { UpgradeBoxScript } from "../script/UpgradeBox.s.sol"; +import { DeployBoxScript } from "./script/Box.s.sol"; +import { UpgradeBoxScript } from "./script/UpgradeBox.s.sol"; contract DemoBoxTest is Test { DemoBoxV1 public boxV1Proxy; diff --git a/contracts/test/DeployLightClientTestScript.s.sol b/contracts/test/DeployLightClientTestScript.s.sol deleted file mode 100644 index 29790ba08b..0000000000 --- a/contracts/test/DeployLightClientTestScript.s.sol +++ /dev/null @@ -1,97 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.0; - -import "forge-std/Script.sol"; - -import { LightClientMock as LCMock } from "./mocks/LightClientMock.sol"; -import { LightClient as LC } from "../src/LightClient.sol"; -import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; - -contract DeployLightClientTestScript is Script { - function run(uint64 numInitValidators, uint32 stateHistoryRetentionPeriod, address owner) - external - returns (address payable proxyAddress, address admin, LC.LightClientState memory) - { - // TODO for a production deployment provide the right genesis state and value - - string[] memory cmds = new string[](3); - cmds[0] = "diff-test"; - cmds[1] = "mock-genesis"; - cmds[2] = vm.toString(uint256(numInitValidators)); - - bytes memory result = vm.ffi(cmds); - (LC.LightClientState memory state, LC.StakeTableState memory stakeState) = - abi.decode(result, (LC.LightClientState, LC.StakeTableState)); - - return deployContract(state, stakeState, stateHistoryRetentionPeriod, owner); - } - - function runBench(uint64 numInitValidators, uint32 stateHistoryRetentionPeriod) - external - returns (address payable, address, LC.LightClientState memory) - { - address payable lcTestProxy; - address admin; - LC.LightClientState memory state; - string memory seedPhrase = vm.envString("MNEMONIC"); - (admin,) = deriveRememberKey(seedPhrase, 0); - (lcTestProxy, admin, state) = - this.run(numInitValidators, stateHistoryRetentionPeriod, admin); - LCMock lc = LCMock(lcTestProxy); - vm.prank(admin); - lc.setPermissionedProver(admin); - - return (lcTestProxy, admin, state); - } - - // function runDemo(uint32 stateHistoryRetentionPeriod, address owner) - // external - // returns (address payable proxyAddress, address admin, LC.LightClientState memory) - // { - // string[] memory cmds = new string[](1); - // cmds[0] = "gen-demo-genesis"; - - // bytes memory result = vm.ffi(cmds); - // LC.LightClientState memory state = abi.decode(result, (LC.LightClientState)); - // LC.StakeTableState memory stakeState = LC.StakeTableState( - // state.threshold, - // state.stakeTableBlsKeyComm, - // state.stakeTableSchnorrKeyComm, - // state.stakeTableAmountComm - // ); - - // return deployContract(state, stakeState, stateHistoryRetentionPeriod, owner); - // } - - /// @notice deploys the impl, proxy & initializes the impl - /// @return proxyAddress The address of the proxy - /// @return admin The address of the admin - /// @return the light client state - function deployContract( - LC.LightClientState memory state, - LC.StakeTableState memory stakeState, - uint32 stateHistoryRetentionPeriod, - address owner - ) public returns (address payable proxyAddress, address admin, LC.LightClientState memory) { - vm.startBroadcast(owner); - - LCMock lightClientContract = new LCMock(state, stakeState, stateHistoryRetentionPeriod); - - // Encode the initializer function call - bytes memory data = abi.encodeWithSignature( - "initialize((uint64,uint64,uint256),(uint256,uint256,uint256,uint256),uint32,address)", - state, - stakeState, - stateHistoryRetentionPeriod, - owner - ); - - // our proxy - ERC1967Proxy proxy = new ERC1967Proxy(address(lightClientContract), data); - vm.stopBroadcast(); - - proxyAddress = payable(address(proxy)); - - return (proxyAddress, owner, state); - } -} diff --git a/contracts/test/FeeContract.t.sol b/contracts/test/FeeContract.t.sol index 296a1ff1e6..43c6e91618 100644 --- a/contracts/test/FeeContract.t.sol +++ b/contracts/test/FeeContract.t.sol @@ -14,7 +14,7 @@ import { UUPSUpgradeable } from // Target contract import { FeeContract } from "../src/FeeContract.sol"; -import { DeployFeeContractScript } from "../script/Fee.s.sol"; +import { DeployFeeContractScript } from "./script/Fee.s.sol"; /// @title FeeContract Test contract FeeContractUpgradabilityTest is Test { diff --git a/contracts/test/LightClient.t.sol b/contracts/test/LightClient.t.sol index 3145862c09..ba5f8d2d3f 100644 --- a/contracts/test/LightClient.t.sol +++ b/contracts/test/LightClient.t.sol @@ -11,7 +11,7 @@ import { IPlonkVerifier as V } from "../src/interfaces/IPlonkVerifier.sol"; // Target contract import { LightClient as LC } from "../src/LightClient.sol"; import { LightClientMock as LCMock } from "./mocks/LightClientMock.sol"; -import { DeployLightClientTestScript } from "./DeployLightClientTestScript.s.sol"; +import { DeployLightClientTestScript } from "./script/LightClientTestScript.s.sol"; import { BN254 } from "bn254/BN254.sol"; /// @dev Common helpers for LightClient tests diff --git a/contracts/test/LightClientUpgradeSameContract.t.sol b/contracts/test/LightClientUpgradeSameContract.t.sol index 55c3a62041..9ae9b9c2bd 100644 --- a/contracts/test/LightClientUpgradeSameContract.t.sol +++ b/contracts/test/LightClientUpgradeSameContract.t.sol @@ -2,19 +2,21 @@ pragma solidity ^0.8.0; pragma experimental ABIEncoderV2; -import { Test } /*, console2*/ from "forge-std/Test.sol"; +import { Test } from "forge-std/Test.sol"; import { LightClient as LCV1 } from "../src/LightClient.sol"; import { LightClient as LCV2 } from "../src/LightClient.sol"; -import { DeployLightClientContractScript } from "../script/LightClient.s.sol"; -import { UpgradeLightClientScript } from "../script/UpgradeSameLightClient.s.sol"; +import { DeployLightClientContractWithoutMultiSigScript as DeployScript } from + "./script/LightClientTestScript.s.sol"; +import { UpgradeToSameLightClientWithoutMultisigAdminScript as UpgradeScript } from + "./script/LightClientTestScript.s.sol"; import { BN254 } from "bn254/BN254.sol"; contract LightClientUpgradeSameContractTest is Test { LCV1 public lcV1Proxy; LCV2 public lcV2Proxy; - DeployLightClientContractScript public deployer = new DeployLightClientContractScript(); - UpgradeLightClientScript public upgrader = new UpgradeLightClientScript(); + DeployScript public deployer = new DeployScript(); + UpgradeScript public upgrader = new UpgradeScript(); LCV1.LightClientState public stateV1; LCV1.StakeTableState public stakeStateV1; @@ -62,7 +64,7 @@ contract LightClientUpgradeSameContractTest is Test { // Upgrade LightClient and check that the genesis state is not changed and that the new // field // of the upgraded contract is set to 0 - lcV2Proxy = LCV2(upgrader.run(0, proxy)); + lcV2Proxy = LCV2(upgrader.run(proxy)); LCV2.LightClientState memory expectedLightClientState = LCV2.LightClientState(stateV1.viewNum, stateV1.blockHeight, stateV1.blockCommRoot); @@ -82,7 +84,7 @@ contract LightClientUpgradeSameContractTest is Test { assertEq(patch, 0); //upgrade box - lcV2Proxy = LCV2(upgrader.run(0, proxy)); + lcV2Proxy = LCV2(upgrader.run(proxy)); assertEq(address(lcV2Proxy), address(lcV1Proxy)); } @@ -92,6 +94,6 @@ contract LightClientUpgradeSameContractTest is Test { //attempted upgrade as attacker will revert vm.prank(attacker); vm.expectRevert(); - lcV2Proxy = LCV2(upgrader.run(0, address(proxy))); + lcV2Proxy = LCV2(upgrader.run(address(proxy))); } } diff --git a/contracts/test/LightClientUpgradeToVx.t.sol b/contracts/test/LightClientUpgradeToVx.t.sol index 88f9a5e822..e4362313b9 100644 --- a/contracts/test/LightClientUpgradeToVx.t.sol +++ b/contracts/test/LightClientUpgradeToVx.t.sol @@ -2,13 +2,17 @@ pragma solidity ^0.8.0; pragma experimental ABIEncoderV2; -import { Test } /*, console2*/ from "forge-std/Test.sol"; +import { Test } from "forge-std/Test.sol"; import { LightClient as LCV1 } from "../src/LightClient.sol"; import { LightClientV2 as LCV2 } from "../test/LightClientV2.sol"; import { LightClientV3 as LCV3 } from "../test/LightClientV3.sol"; -import { DeployLightClientContractScript } from "../script/LightClient.s.sol"; -import { UpgradeLightClientScript } from "./UpgradeLightClientToV2.s.sol"; -import { UpgradeLightClientScript as ULCV3 } from "./UpgradeLightClientToV3.s.sol"; +// import { DeployLightClientContractWithoutMultiSigScript as DeployScript } from +// "../script/LightClient.s.sol"; + +import { DeployLightClientContractWithoutMultiSigScript as DeployScript } from + "./script/LightClientTestScript.s.sol"; +import { UpgradeLightClientScript as UpgradeScript } from "./script/UpgradeLightClientToV2.s.sol"; +import { UpgradeLightClientScript as ULCV3 } from "./script/UpgradeLightClientToV3.s.sol"; import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; @@ -20,8 +24,8 @@ contract LightClientUpgradeToVxTest is Test { LCV2 public lcV2Proxy; LCV3 public lcV3Proxy; - DeployLightClientContractScript public deployer = new DeployLightClientContractScript(); - UpgradeLightClientScript public upgraderV2 = new UpgradeLightClientScript(); + DeployScript public deployer = new DeployScript(); + UpgradeScript public upgraderV2 = new UpgradeScript(); ULCV3 public upgraderV3 = new ULCV3(); LCV1.LightClientState public stateV1; diff --git a/contracts/test/LightClientV2.sol b/contracts/test/LightClientV2.sol index e89da579da..6a68a33a3a 100644 --- a/contracts/test/LightClientV2.sol +++ b/contracts/test/LightClientV2.sol @@ -111,4 +111,8 @@ contract LightClientV2 is LightClient { revert InvalidProof(); } } + + function setNewField(uint256 _newField) public onlyOwner { + newField = _newField; + } } diff --git a/contracts/script/Box.s.sol b/contracts/test/script/Box.s.sol similarity index 94% rename from contracts/script/Box.s.sol rename to contracts/test/script/Box.s.sol index 7e27d30097..ef9da06e8f 100644 --- a/contracts/script/Box.s.sol +++ b/contracts/test/script/Box.s.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.19; import { Script } from "forge-std/Script.sol"; import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; -import { DemoBoxV1 } from "../demo/upgradeDemo/DemoBoxV1.sol"; +import { DemoBoxV1 } from "../../demo/upgradeDemo/DemoBoxV1.sol"; contract DeployBoxScript is Script { /// @notice runs the deployment diff --git a/contracts/script/Fee.s.sol b/contracts/test/script/Fee.s.sol similarity index 95% rename from contracts/script/Fee.s.sol rename to contracts/test/script/Fee.s.sol index 0c1a8283dc..64fafea878 100644 --- a/contracts/script/Fee.s.sol +++ b/contracts/test/script/Fee.s.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.0; import "forge-std/Script.sol"; -import { FeeContract } from "../src/FeeContract.sol"; +import { FeeContract } from "../../src/FeeContract.sol"; import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; contract DeployFeeContractScript is Script { diff --git a/contracts/test/script/LightClientTestScript.s.sol b/contracts/test/script/LightClientTestScript.s.sol new file mode 100644 index 0000000000..147662f93c --- /dev/null +++ b/contracts/test/script/LightClientTestScript.s.sol @@ -0,0 +1,226 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.0; + +import "forge-std/Script.sol"; + +import { LightClientMock as LCMock } from "../mocks/LightClientMock.sol"; +import { LightClient as LC } from "../../src/LightClient.sol"; +import { ERC1967Proxy } from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import { LightClientV2 as LCV2 } from "../LightClientV2.sol"; + +contract DeployLightClientTestScript is Script { + function run(uint64 numInitValidators, uint32 stateHistoryRetentionPeriod, address owner) + external + returns (address payable proxyAddress, address admin, LC.LightClientState memory) + { + // TODO for a production deployment provide the right genesis state and value + + string[] memory cmds = new string[](3); + cmds[0] = "diff-test"; + cmds[1] = "mock-genesis"; + cmds[2] = vm.toString(uint256(numInitValidators)); + + bytes memory result = vm.ffi(cmds); + (LC.LightClientState memory state, LC.StakeTableState memory stakeState) = + abi.decode(result, (LC.LightClientState, LC.StakeTableState)); + + return deployContract(state, stakeState, stateHistoryRetentionPeriod, owner); + } + + function runBench(uint64 numInitValidators, uint32 stateHistoryRetentionPeriod) + external + returns (address payable, address, LC.LightClientState memory) + { + address payable lcTestProxy; + address admin; + LC.LightClientState memory state; + string memory seedPhrase = vm.envString("MNEMONIC"); + (admin,) = deriveRememberKey(seedPhrase, 0); + (lcTestProxy, admin, state) = + this.run(numInitValidators, stateHistoryRetentionPeriod, admin); + LCMock lc = LCMock(lcTestProxy); + vm.prank(admin); + lc.setPermissionedProver(admin); + + return (lcTestProxy, admin, state); + } + + /// @notice deploys the impl, proxy & initializes the impl + /// @return proxyAddress The address of the proxy + /// @return admin The address of the admin + /// @return the light client state + function deployContract( + LC.LightClientState memory state, + LC.StakeTableState memory stakeState, + uint32 stateHistoryRetentionPeriod, + address owner + ) public returns (address payable proxyAddress, address admin, LC.LightClientState memory) { + vm.startBroadcast(owner); + + LCMock lightClientContract = new LCMock(state, stakeState, stateHistoryRetentionPeriod); + + // Encode the initializer function call + bytes memory data = abi.encodeWithSignature( + "initialize((uint64,uint64,uint256),(uint256,uint256,uint256,uint256),uint32,address)", + state, + stakeState, + stateHistoryRetentionPeriod, + owner + ); + + // our proxy + ERC1967Proxy proxy = new ERC1967Proxy(address(lightClientContract), data); + vm.stopBroadcast(); + + proxyAddress = payable(address(proxy)); + + return (proxyAddress, owner, state); + } +} + +/// @notice Deploys the upgradable light client contract +/// the admin is not a multisig wallet but is the same as the associated mnemonic +/// used in staging deployments only +contract DeployLightClientContractWithoutMultiSigScript is Script { + function run(uint32 numInitValidators, uint32 stateHistoryRetentionPeriod) + external + returns ( + address payable proxyAddress, + address admin, + LC.LightClientState memory, + LC.StakeTableState memory + ) + { + // TODO for a production deployment provide the right genesis state and value + + string[] memory cmds = new string[](3); + cmds[0] = "diff-test"; + cmds[1] = "mock-genesis"; + cmds[2] = vm.toString(uint256(numInitValidators)); + + bytes memory result = vm.ffi(cmds); + (LC.LightClientState memory state, LC.StakeTableState memory stakeTableState) = + abi.decode(result, (LC.LightClientState, LC.StakeTableState)); + + return deployContract(state, stakeTableState, stateHistoryRetentionPeriod); + } + + /// @notice deploys the impl, proxy & initializes the impl + /// @return proxyAddress The address of the proxy + /// @return admin The address of the admin + + function deployContract( + LC.LightClientState memory state, + LC.StakeTableState memory stakeTableState, + uint32 stateHistoryRetentionPeriod + ) + private + returns ( + address payable proxyAddress, + address admin, + LC.LightClientState memory, + LC.StakeTableState memory + ) + { + // get the deployer info from the environment and start broadcast as the deployer + string memory seedPhrase = vm.envString("MNEMONIC"); + uint32 seedPhraseOffset = uint32(vm.envUint("MNEMONIC_OFFSET")); + (admin,) = deriveRememberKey(seedPhrase, seedPhraseOffset); + vm.startBroadcast(admin); + + LC lightClientContract = new LC(); + + // Encode the initializer function call + bytes memory data = abi.encodeWithSignature( + "initialize((uint64,uint64,uint256),(uint256,uint256,uint256,uint256),uint32,address)", + state, + stakeTableState, + stateHistoryRetentionPeriod, + admin + ); + + // our proxy + ERC1967Proxy proxy = new ERC1967Proxy(address(lightClientContract), data); + vm.stopBroadcast(); + + proxyAddress = payable(address(proxy)); + + return (proxyAddress, admin, state, stakeTableState); + } +} + +/// @notice Upgrades the light client contract first by deploying the new implementation +/// and then calling the upgradeToAndCall method of the proxy +/// @dev This is used when the admin is not a multisig wallet +/// used in staging deployments only +contract UpgradeLightClientWithoutMultisigAdminScript is Script { + /// @notice runs the upgrade + /// @param mostRecentlyDeployedProxy address of deployed proxy + /// @return address of the proxy + /// TODO get the most recent deployment from the devops tooling + function run(address mostRecentlyDeployedProxy) external returns (address) { + // get the deployer info from the environment and start broadcast as the deployer + string memory seedPhrase = vm.envString("MNEMONIC"); + uint32 seedPhraseOffset = uint32(vm.envUint("MNEMONIC_OFFSET")); + (address admin,) = deriveRememberKey(seedPhrase, seedPhraseOffset); + vm.startBroadcast(admin); + + address proxy = upgradeLightClient(mostRecentlyDeployedProxy, address(new LCV2())); + return proxy; + } + + /// @notice upgrades the light client contract by calling the upgrade function the + /// implementation contract via + /// the proxy + /// @param proxyAddress address of proxy + /// @param newLightClient address of new implementation + /// @return address of the proxy + function upgradeLightClient(address proxyAddress, address newLightClient) + public + returns (address) + { + LC proxy = LC(proxyAddress); //make the function call on the previous implementation + proxy.upgradeToAndCall(newLightClient, ""); //proxy address now points to the new + // implementation + vm.stopBroadcast(); + return address(proxy); + } +} + +/// @notice Upgrades the light client contract first by deploying the new implementation +/// and then calling the upgradeToAndCall method of the proxy +/// @dev This is used when the admin is not a multisig wallet +/// used in staging deployments only +contract UpgradeToSameLightClientWithoutMultisigAdminScript is Script { + /// @notice runs the upgrade + /// @param mostRecentlyDeployedProxy address of deployed proxy + /// @return address of the proxy + /// TODO get the most recent deployment from the devops tooling + function run(address mostRecentlyDeployedProxy) external returns (address) { + // get the deployer info from the environment and start broadcast as the deployer + string memory seedPhrase = vm.envString("MNEMONIC"); + uint32 seedPhraseOffset = uint32(vm.envUint("MNEMONIC_OFFSET")); + (address admin,) = deriveRememberKey(seedPhrase, seedPhraseOffset); + vm.startBroadcast(admin); + + address proxy = upgradeLightClient(mostRecentlyDeployedProxy, address(new LC())); + return proxy; + } + + /// @notice upgrades the light client contract by calling the upgrade function the + /// implementation contract via + /// the proxy + /// @param proxyAddress address of proxy + /// @param newLightClient address of new implementation + /// @return address of the proxy + function upgradeLightClient(address proxyAddress, address newLightClient) + public + returns (address) + { + LC proxy = LC(proxyAddress); //make the function call on the previous implementation + proxy.upgradeToAndCall(newLightClient, ""); //proxy address now points to the new + // implementation + vm.stopBroadcast(); + return address(proxy); + } +} diff --git a/contracts/script/UpgradeBox.s.sol b/contracts/test/script/UpgradeBox.s.sol similarity index 91% rename from contracts/script/UpgradeBox.s.sol rename to contracts/test/script/UpgradeBox.s.sol index 5bc3912da6..d61dfac368 100644 --- a/contracts/script/UpgradeBox.s.sol +++ b/contracts/test/script/UpgradeBox.s.sol @@ -3,8 +3,8 @@ pragma solidity ^0.8.19; import { Script } from "forge-std/Script.sol"; // import {DevOpsTools} from "../lib/foundry-devops/src/DevOpsTools.sol"; -import { DemoBoxV2 } from "../demo/upgradeDemo/DemoBoxV2.sol"; -import { DemoBoxV1 } from "../demo/upgradeDemo/DemoBoxV1.sol"; +import { DemoBoxV2 } from "../../demo/upgradeDemo/DemoBoxV2.sol"; +import { DemoBoxV1 } from "../../demo/upgradeDemo/DemoBoxV1.sol"; contract UpgradeBoxScript is Script { /// @notice runs the upgrade diff --git a/contracts/test/UpgradeLightClientToV2.s.sol b/contracts/test/script/UpgradeLightClientToV2.s.sol similarity index 92% rename from contracts/test/UpgradeLightClientToV2.s.sol rename to contracts/test/script/UpgradeLightClientToV2.s.sol index e7405484e0..46de68cf19 100644 --- a/contracts/test/UpgradeLightClientToV2.s.sol +++ b/contracts/test/script/UpgradeLightClientToV2.s.sol @@ -3,8 +3,8 @@ pragma solidity ^0.8.19; import { Script } from "forge-std/Script.sol"; -import { LightClientV2 as LCV2 } from "./LightClientV2.sol"; -import { LightClient as LC } from "../src/LightClient.sol"; +import { LightClientV2 as LCV2 } from "../LightClientV2.sol"; +import { LightClient as LC } from "../../src/LightClient.sol"; contract UpgradeLightClientScript is Script { /// @notice runs the upgrade diff --git a/contracts/test/UpgradeLightClientToV3.s.sol b/contracts/test/script/UpgradeLightClientToV3.s.sol similarity index 91% rename from contracts/test/UpgradeLightClientToV3.s.sol rename to contracts/test/script/UpgradeLightClientToV3.s.sol index 3e6158ee99..131d439106 100644 --- a/contracts/test/UpgradeLightClientToV3.s.sol +++ b/contracts/test/script/UpgradeLightClientToV3.s.sol @@ -3,8 +3,8 @@ pragma solidity ^0.8.19; import { Script } from "forge-std/Script.sol"; -import { LightClientV2 as LCV2 } from "./LightClientV2.sol"; -import { LightClientV3 as LCV3 } from "./LightClientV3.sol"; +import { LightClientV2 as LCV2 } from "../LightClientV2.sol"; +import { LightClientV3 as LCV3 } from "../LightClientV3.sol"; contract UpgradeLightClientScript is Script { /// @notice runs the upgrade diff --git a/justfile b/justfile index 156623f669..fb5d16f6ce 100644 --- a/justfile +++ b/justfile @@ -111,8 +111,9 @@ lc-contract-profiling-sepolia: @sh -c 'source ./.env.contracts' #!/usr/bin/env bash set -euxo pipefail - forge script contracts/test/DeployLightClientTestScript.s.sol --sig "runBench(uint64 numInitValidators, uint32 stateHistoryRetentionPeriod)" {{NUM_INIT_VALIDATORS}} {{MAX_HISTORY_SECONDS}} --fork-url ${SEPOLIA_RPC_URL} --broadcast --verify --etherscan-api-key ${ETHERSCAN_API_KEY} --chain-id sepolia - LC_CONTRACT_ADDRESS=`cat contracts/broadcast/DeployLightClientTestScript.s.sol/11155111/runBench-latest.json | jq -r .receipts[-1].contractAddress` + forge script contracts/test/script/LightClientTestScript.s.sol --sig "runBench(uint64 numInitValidators, uint32 stateHistoryRetentionPeriod)" {{NUM_INIT_VALIDATORS}} {{MAX_HISTORY_SECONDS}} --fork-url ${SEPOLIA_RPC_URL} --broadcast --verify --etherscan-api-key ${ETHERSCAN_API_KEY} --chain-id sepolia + LC_CONTRACT_ADDRESS=`cat contracts/broadcast/LightClientTestScript.s.sol/11155111/runBench-latest.json | jq -r .receipts[-1].contractAddress` + echo $LC_CONTRACT_ADDRESS forge script contracts/script/LightClientCallNewFinalizedState.s.sol --sig "run(uint32 numInitValidators, address lcContractAddress)" {{NUM_INIT_VALIDATORS}} $LC_CONTRACT_ADDRESS --fork-url ${SEPOLIA_RPC_URL} --broadcast --chain-id sepolia