UNPKG

@cartesi/logger

Version:
215 lines 47.2 kB
{ "contractName": "Merkle", "sourceName": "@cartesi/util/contracts/Merkle.sol", "abi": [ { "inputs": [ { "internalType": "bytes32[]", "name": "hashes", "type": "bytes32[]" } ], "name": "calculateRootFromPowerOfTwo", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "number", "type": "uint256" } ], "name": "getLog2Floor", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "_log2Size", "type": "uint8" } ], "name": "getPristineHash", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "_position", "type": "uint64" }, { "internalType": "bytes8", "name": "_value", "type": "bytes8" }, { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" } ], "name": "getRoot", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint64", "name": "_position", "type": "uint64" }, { "internalType": "uint8", "name": "_logOfSize", "type": "uint8" }, { "internalType": "bytes32", "name": "_drive", "type": "bytes32" }, { "internalType": "bytes32[]", "name": "siblings", "type": "bytes32[]" } ], "name": "getRootWithDrive", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "number", "type": "uint256" } ], "name": "isPowerOf2", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "pure", "type": "function" } ], "bytecode": "0x61090f610026600b82828239805160001a60731461001957fe5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061006c5760003560e01c806306c8e54b1461007157806382b0eab8146100a45780638492d93b14610159578063a73426881461021c578063d7304dd91461023c578063d82ae4b1146102ff575b600080fd5b61008e6004803603602081101561008757600080fd5b5035610330565b6040805160ff9092168252519081900360200190f35b610147600480360360208110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184602083028401116401000000008311171561010957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610354945050505050565b60408051918252519081900360200190f35b6101476004803603606081101561016f57600080fd5b67ffffffffffffffff823516916001600160c01b0319602082013516918101906060810160408201356401000000008111156101aa57600080fd5b8201836020820111156101bc57600080fd5b803590602001918460208302840111640100000000831117156101de57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506104a5945050505050565b6101476004803603602081101561023257600080fd5b503560ff166104ed565b6101476004803603608081101561025257600080fd5b67ffffffffffffffff8235169160ff602082013516916040820135919081019060808101606082013564010000000081111561028d57600080fd5b82018360208201111561029f57600080fd5b803590602001918460208302840111640100000000831117156102c157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506105fd945050505050565b61031c6004803603602081101561031557600080fd5b5035610843565b604080519115158252519081900360200190f35b600080600183901c5b801561034b576001918201911c610339565b5090505b919050565b60006103608251610843565b61039b5760405162461bcd60e51b81526004018080602001828103825260308152602001806108826030913960400191505060405180910390fd5b8151600114156103c157816000815181106103b257fe5b6020026020010151905061034f565b606060018351901c67ffffffffffffffff811180156103df57600080fd5b50604051908082528060200260200182016040528015610409578160200160208202803683370190505b50905060005b83518110156104935783818151811061042457fe5b602002602001015184826001018151811061043b57fe5b602002602001015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012082600183901c8151811061048057fe5b602090810291909101015260020161040f565b5061049d81610354565b91505061034f565b604080516001600160c01b0319841660208083019190915282518083036008018152602890920190925280519101206000906104e485600383866105fd565b95945050505050565b600060038260ff161015610548576040805162461bcd60e51b815260206004820152601b60248201527f48617320746f206265206174206c65617374206f6e6520776f72640000000000604482015290519081900360640190fd5b60408260ff16111561058b5760405162461bcd60e51b81526004018080602001828103825260288152602001806108b26028913960400191505060405180910390fd5b60408051600060208083018290528351808403600801815260289093019093528151919092012060035b8460ff168110156105f5576040805160208082018590528183019490945281518082038301815260609091019091528051920191909120906001016105b5565b509392505050565b600060038460ff161015610658576040805162461bcd60e51b815260206004820152601760248201527f4d757374206265206174206c65617374206120776f7264000000000000000000604482015290519081900360640190fd5b60408460ff16111561069b5760405162461bcd60e51b81526004018080602001828103825260288152602001806108b26028913960400191505060405180910390fd5b60ff841660020a6000198101861667ffffffffffffffff1615610705576040805162461bcd60e51b815260206004820152601760248201527f506f736974696f6e206973206e6f7420616c69676e6564000000000000000000604482015290519081900360640190fd5b8460400360ff16835114610760576040805162461bcd60e51b815260206004820152601b60248201527f50726f6f66206c656e67746820646f6573206e6f74206d617463680000000000604482015290519081900360640190fd5b8360005b84518167ffffffffffffffff1610156108385767ffffffffffffffff8381168183161b8916166107e15781858267ffffffffffffffff16815181106107a557fe5b60200260200101516040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209150610830565b848167ffffffffffffffff16815181106107f757fe5b60200260200101518260405160200180838152602001828152602001925050506040516020818303038152906040528051906020012091505b600101610764565b509695505050505050565b6000818061085557600091505061034f565b5b600181166108665760011c610856565b60011c8061087857600191505061034f565b5060009291505056fe54686520696e707574206172726179206d75737420636f6e7461696e20706f776572206f66203220656c656d656e747343616e6e6f7420626520626967676572207468616e20746865206d616368696e6520697473656c66a264697066735822122016c79f054a1cfa5aa3a91ecb2417d9daf6fed39752a10746499f492fa439b04064736f6c63430007040033", "deployedBytecode": "0x730000000000000000000000000000000000000000301460806040526004361061006c5760003560e01c806306c8e54b1461007157806382b0eab8146100a45780638492d93b14610159578063a73426881461021c578063d7304dd91461023c578063d82ae4b1146102ff575b600080fd5b61008e6004803603602081101561008757600080fd5b5035610330565b6040805160ff9092168252519081900360200190f35b610147600480360360208110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184602083028401116401000000008311171561010957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610354945050505050565b60408051918252519081900360200190f35b6101476004803603606081101561016f57600080fd5b67ffffffffffffffff823516916001600160c01b0319602082013516918101906060810160408201356401000000008111156101aa57600080fd5b8201836020820111156101bc57600080fd5b803590602001918460208302840111640100000000831117156101de57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506104a5945050505050565b6101476004803603602081101561023257600080fd5b503560ff166104ed565b6101476004803603608081101561025257600080fd5b67ffffffffffffffff8235169160ff602082013516916040820135919081019060808101606082013564010000000081111561028d57600080fd5b82018360208201111561029f57600080fd5b803590602001918460208302840111640100000000831117156102c157600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506105fd945050505050565b61031c6004803603602081101561031557600080fd5b5035610843565b604080519115158252519081900360200190f35b600080600183901c5b801561034b576001918201911c610339565b5090505b919050565b60006103608251610843565b61039b5760405162461bcd60e51b81526004018080602001828103825260308152602001806108826030913960400191505060405180910390fd5b8151600114156103c157816000815181106103b257fe5b6020026020010151905061034f565b606060018351901c67ffffffffffffffff811180156103df57600080fd5b50604051908082528060200260200182016040528015610409578160200160208202803683370190505b50905060005b83518110156104935783818151811061042457fe5b602002602001015184826001018151811061043b57fe5b602002602001015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012082600183901c8151811061048057fe5b602090810291909101015260020161040f565b5061049d81610354565b91505061034f565b604080516001600160c01b0319841660208083019190915282518083036008018152602890920190925280519101206000906104e485600383866105fd565b95945050505050565b600060038260ff161015610548576040805162461bcd60e51b815260206004820152601b60248201527f48617320746f206265206174206c65617374206f6e6520776f72640000000000604482015290519081900360640190fd5b60408260ff16111561058b5760405162461bcd60e51b81526004018080602001828103825260288152602001806108b26028913960400191505060405180910390fd5b60408051600060208083018290528351808403600801815260289093019093528151919092012060035b8460ff168110156105f5576040805160208082018590528183019490945281518082038301815260609091019091528051920191909120906001016105b5565b509392505050565b600060038460ff161015610658576040805162461bcd60e51b815260206004820152601760248201527f4d757374206265206174206c65617374206120776f7264000000000000000000604482015290519081900360640190fd5b60408460ff16111561069b5760405162461bcd60e51b81526004018080602001828103825260288152602001806108b26028913960400191505060405180910390fd5b60ff841660020a6000198101861667ffffffffffffffff1615610705576040805162461bcd60e51b815260206004820152601760248201527f506f736974696f6e206973206e6f7420616c69676e6564000000000000000000604482015290519081900360640190fd5b8460400360ff16835114610760576040805162461bcd60e51b815260206004820152601b60248201527f50726f6f66206c656e67746820646f6573206e6f74206d617463680000000000604482015290519081900360640190fd5b8360005b84518167ffffffffffffffff1610156108385767ffffffffffffffff8381168183161b8916166107e15781858267ffffffffffffffff16815181106107a557fe5b60200260200101516040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209150610830565b848167ffffffffffffffff16815181106107f757fe5b60200260200101518260405160200180838152602001828152602001925050506040516020818303038152906040528051906020012091505b600101610764565b509695505050505050565b6000818061085557600091505061034f565b5b600181166108665760011c610856565b60011c8061087857600191505061034f565b5060009291505056fe54686520696e707574206172726179206d75737420636f6e7461696e20706f776572206f66203220656c656d656e747343616e6e6f7420626520626967676572207468616e20746865206d616368696e6520697473656c66a264697066735822122016c79f054a1cfa5aa3a91ecb2417d9daf6fed39752a10746499f492fa439b04064736f6c63430007040033", "linkReferences": {}, "deployedLinkReferences": {}, "devdoc": { "kind": "dev", "methods": { "calculateRootFromPowerOfTwo(bytes32[])": { "params": { "hashes": "The array containing power of 2 elements" }, "returns": { "_0": "byte32 the root hash being calculated" } } }, "version": 1 }, "evm": { "bytecode": { "generatedSources": [], "linkReferences": {}, "opcodes": "PUSH2 0x90F PUSH2 0x26 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH2 0x19 JUMPI INVALID JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x6C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6C8E54B EQ PUSH2 0x71 JUMPI DUP1 PUSH4 0x82B0EAB8 EQ PUSH2 0xA4 JUMPI DUP1 PUSH4 0x8492D93B EQ PUSH2 0x159 JUMPI DUP1 PUSH4 0xA7342688 EQ PUSH2 0x21C JUMPI DUP1 PUSH4 0xD7304DD9 EQ PUSH2 0x23C JUMPI DUP1 PUSH4 0xD82AE4B1 EQ PUSH2 0x2FF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x330 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x147 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x109 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x354 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x147 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x16F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP3 CALLDATALOAD AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT PUSH1 0x20 DUP3 ADD CALLDATALOAD AND SWAP2 DUP2 ADD SWAP1 PUSH1 0x60 DUP2 ADD PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x4A5 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x147 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x232 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xFF AND PUSH2 0x4ED JUMP JUMPDEST PUSH2 0x147 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x252 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP3 CALLDATALOAD AND SWAP2 PUSH1 0xFF PUSH1 0x20 DUP3 ADD CALLDATALOAD AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x28D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x29F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x2C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x5FD SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x31C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x315 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x843 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1 DUP4 SWAP1 SHR JUMPDEST DUP1 ISZERO PUSH2 0x34B JUMPI PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 SHR PUSH2 0x339 JUMP JUMPDEST POP SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x360 DUP3 MLOAD PUSH2 0x843 JUMP JUMPDEST PUSH2 0x39B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x882 PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 EQ ISZERO PUSH2 0x3C1 JUMPI DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3B2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x34F JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 DUP4 MLOAD SWAP1 SHR PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x3DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x409 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x493 JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x424 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP3 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0x43B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP3 PUSH1 0x1 DUP4 SWAP1 SHR DUP2 MLOAD DUP2 LT PUSH2 0x480 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x2 ADD PUSH2 0x40F JUMP JUMPDEST POP PUSH2 0x49D DUP2 PUSH2 0x354 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x34F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT DUP5 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB PUSH1 0x8 ADD DUP2 MSTORE PUSH1 0x28 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x4E4 DUP6 PUSH1 0x3 DUP4 DUP7 PUSH2 0x5FD JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 PUSH1 0xFF AND LT ISZERO PUSH2 0x548 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x48617320746F206265206174206C65617374206F6E6520776F72640000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0x58B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x8B2 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB PUSH1 0x8 ADD DUP2 MSTORE PUSH1 0x28 SWAP1 SWAP4 ADD SWAP1 SWAP4 MSTORE DUP2 MLOAD SWAP2 SWAP1 SWAP3 ADD KECCAK256 PUSH1 0x3 JUMPDEST DUP5 PUSH1 0xFF AND DUP2 LT ISZERO PUSH2 0x5F5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP6 SWAP1 MSTORE DUP2 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD DUP1 DUP3 SUB DUP4 ADD DUP2 MSTORE PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 KECCAK256 SWAP1 PUSH1 0x1 ADD PUSH2 0x5B5 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP5 PUSH1 0xFF AND LT ISZERO PUSH2 0x658 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D757374206265206174206C65617374206120776F7264000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP5 PUSH1 0xFF AND GT ISZERO PUSH2 0x69B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x8B2 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xFF DUP5 AND PUSH1 0x2 EXP PUSH1 0x0 NOT DUP2 ADD DUP7 AND PUSH8 0xFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x705 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x506F736974696F6E206973206E6F7420616C69676E6564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP5 PUSH1 0x40 SUB PUSH1 0xFF AND DUP4 MLOAD EQ PUSH2 0x760 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x50726F6F66206C656E67746820646F6573206E6F74206D617463680000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 JUMPDEST DUP5 MLOAD DUP2 PUSH8 0xFFFFFFFFFFFFFFFF AND LT ISZERO PUSH2 0x838 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF DUP4 DUP2 AND DUP2 DUP4 AND SHL DUP10 AND AND PUSH2 0x7E1 JUMPI DUP2 DUP6 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MLOAD DUP2 LT PUSH2 0x7A5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP2 POP PUSH2 0x830 JUMP JUMPDEST DUP5 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MLOAD DUP2 LT PUSH2 0x7F7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x764 JUMP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH2 0x855 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x34F JUMP JUMPDEST JUMPDEST PUSH1 0x1 DUP2 AND PUSH2 0x866 JUMPI PUSH1 0x1 SHR PUSH2 0x856 JUMP JUMPDEST PUSH1 0x1 SHR DUP1 PUSH2 0x878 JUMPI PUSH1 0x1 SWAP2 POP POP PUSH2 0x34F JUMP JUMPDEST POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP INVALID SLOAD PUSH9 0x6520696E7075742061 PUSH19 0x726179206D75737420636F6E7461696E20706F PUSH24 0x6572206F66203220656C656D656E747343616E6E6F742062 PUSH6 0x206269676765 PUSH19 0x207468616E20746865206D616368696E652069 PUSH21 0x73656C66A264697066735822122016C79F054A1CFA GAS LOG3 0xA9 0x1E 0xCB 0x24 OR 0xD9 0xDA 0xF6 INVALID 0xD3 SWAP8 MSTORE LOG1 SMOD CHAINID 0x49 SWAP16 0x49 0x2F LOG4 CODECOPY 0xB0 BLOCKHASH PUSH5 0x736F6C6343 STOP SMOD DIV STOP CALLER ", "sourceMap": "681:3293:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" }, "deployedBytecode": { "generatedSources": [], "immutableReferences": {}, "linkReferences": {}, "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x6C JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x6C8E54B EQ PUSH2 0x71 JUMPI DUP1 PUSH4 0x82B0EAB8 EQ PUSH2 0xA4 JUMPI DUP1 PUSH4 0x8492D93B EQ PUSH2 0x159 JUMPI DUP1 PUSH4 0xA7342688 EQ PUSH2 0x21C JUMPI DUP1 PUSH4 0xD7304DD9 EQ PUSH2 0x23C JUMPI DUP1 PUSH4 0xD82AE4B1 EQ PUSH2 0x2FF JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0x8E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x87 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x330 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0xFF SWAP1 SWAP3 AND DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x147 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xBA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 ADD DUP2 CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0xD5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0xE7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x109 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x354 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH2 0x147 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x16F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP3 CALLDATALOAD AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT PUSH1 0x20 DUP3 ADD CALLDATALOAD AND SWAP2 DUP2 ADD SWAP1 PUSH1 0x60 DUP2 ADD PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x1AA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x1BC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x1DE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x4A5 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x147 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x232 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH1 0xFF AND PUSH2 0x4ED JUMP JUMPDEST PUSH2 0x147 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x252 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP3 CALLDATALOAD AND SWAP2 PUSH1 0xFF PUSH1 0x20 DUP3 ADD CALLDATALOAD AND SWAP2 PUSH1 0x40 DUP3 ADD CALLDATALOAD SWAP2 SWAP1 DUP2 ADD SWAP1 PUSH1 0x80 DUP2 ADD PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH5 0x100000000 DUP2 GT ISZERO PUSH2 0x28D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 ADD DUP4 PUSH1 0x20 DUP3 ADD GT ISZERO PUSH2 0x29F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP2 DUP5 PUSH1 0x20 DUP4 MUL DUP5 ADD GT PUSH5 0x100000000 DUP4 GT OR ISZERO PUSH2 0x2C1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 DUP1 DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD PUSH1 0x40 MLOAD SWAP1 DUP2 ADD PUSH1 0x40 MSTORE DUP1 SWAP4 SWAP3 SWAP2 SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP4 PUSH1 0x20 MUL DUP1 DUP3 DUP5 CALLDATACOPY PUSH1 0x0 SWAP3 ADD SWAP2 SWAP1 SWAP2 MSTORE POP SWAP3 SWAP6 POP PUSH2 0x5FD SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x31C PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x315 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD PUSH2 0x843 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 ISZERO ISZERO DUP3 MSTORE MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x20 ADD SWAP1 RETURN JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x1 DUP4 SWAP1 SHR JUMPDEST DUP1 ISZERO PUSH2 0x34B JUMPI PUSH1 0x1 SWAP2 DUP3 ADD SWAP2 SHR PUSH2 0x339 JUMP JUMPDEST POP SWAP1 POP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x360 DUP3 MLOAD PUSH2 0x843 JUMP JUMPDEST PUSH2 0x39B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x30 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x882 PUSH1 0x30 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 EQ ISZERO PUSH2 0x3C1 JUMPI DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x3B2 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD SWAP1 POP PUSH2 0x34F JUMP JUMPDEST PUSH1 0x60 PUSH1 0x1 DUP4 MLOAD SWAP1 SHR PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT DUP1 ISZERO PUSH2 0x3DF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x20 MUL PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x409 JUMPI DUP2 PUSH1 0x20 ADD PUSH1 0x20 DUP3 MUL DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH1 0x0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x493 JUMPI DUP4 DUP2 DUP2 MLOAD DUP2 LT PUSH2 0x424 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP5 DUP3 PUSH1 0x1 ADD DUP2 MLOAD DUP2 LT PUSH2 0x43B JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 DUP3 PUSH1 0x1 DUP4 SWAP1 SHR DUP2 MLOAD DUP2 LT PUSH2 0x480 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP1 DUP2 MUL SWAP2 SWAP1 SWAP2 ADD ADD MSTORE PUSH1 0x2 ADD PUSH2 0x40F JUMP JUMPDEST POP PUSH2 0x49D DUP2 PUSH2 0x354 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x34F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xC0 SHL SUB NOT DUP5 AND PUSH1 0x20 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MLOAD DUP1 DUP4 SUB PUSH1 0x8 ADD DUP2 MSTORE PUSH1 0x28 SWAP1 SWAP3 ADD SWAP1 SWAP3 MSTORE DUP1 MLOAD SWAP2 ADD KECCAK256 PUSH1 0x0 SWAP1 PUSH2 0x4E4 DUP6 PUSH1 0x3 DUP4 DUP7 PUSH2 0x5FD JUMP JUMPDEST SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP3 PUSH1 0xFF AND LT ISZERO PUSH2 0x548 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x48617320746F206265206174206C65617374206F6E6520776F72640000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP3 PUSH1 0xFF AND GT ISZERO PUSH2 0x58B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x8B2 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x0 PUSH1 0x20 DUP1 DUP4 ADD DUP3 SWAP1 MSTORE DUP4 MLOAD DUP1 DUP5 SUB PUSH1 0x8 ADD DUP2 MSTORE PUSH1 0x28 SWAP1 SWAP4 ADD SWAP1 SWAP4 MSTORE DUP2 MLOAD SWAP2 SWAP1 SWAP3 ADD KECCAK256 PUSH1 0x3 JUMPDEST DUP5 PUSH1 0xFF AND DUP2 LT ISZERO PUSH2 0x5F5 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH1 0x20 DUP1 DUP3 ADD DUP6 SWAP1 MSTORE DUP2 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP2 MLOAD DUP1 DUP3 SUB DUP4 ADD DUP2 MSTORE PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 SWAP2 MSTORE DUP1 MLOAD SWAP3 ADD SWAP2 SWAP1 SWAP2 KECCAK256 SWAP1 PUSH1 0x1 ADD PUSH2 0x5B5 JUMP JUMPDEST POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 DUP5 PUSH1 0xFF AND LT ISZERO PUSH2 0x658 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4D757374206265206174206C65617374206120776F7264000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP5 PUSH1 0xFF AND GT ISZERO PUSH2 0x69B JUMPI PUSH1 0x40 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x8B2 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xFF DUP5 AND PUSH1 0x2 EXP PUSH1 0x0 NOT DUP2 ADD DUP7 AND PUSH8 0xFFFFFFFFFFFFFFFF AND ISZERO PUSH2 0x705 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x17 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x506F736974696F6E206973206E6F7420616C69676E6564000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP5 PUSH1 0x40 SUB PUSH1 0xFF AND DUP4 MLOAD EQ PUSH2 0x760 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH3 0x461BCD PUSH1 0xE5 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x50726F6F66206C656E67746820646F6573206E6F74206D617463680000000000 PUSH1 0x44 DUP3 ADD MSTORE SWAP1 MLOAD SWAP1 DUP2 SWAP1 SUB PUSH1 0x64 ADD SWAP1 REVERT JUMPDEST DUP4 PUSH1 0x0 JUMPDEST DUP5 MLOAD DUP2 PUSH8 0xFFFFFFFFFFFFFFFF AND LT ISZERO PUSH2 0x838 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF DUP4 DUP2 AND DUP2 DUP4 AND SHL DUP10 AND AND PUSH2 0x7E1 JUMPI DUP2 DUP6 DUP3 PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MLOAD DUP2 LT PUSH2 0x7A5 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP2 POP PUSH2 0x830 JUMP JUMPDEST DUP5 DUP2 PUSH8 0xFFFFFFFFFFFFFFFF AND DUP2 MLOAD DUP2 LT PUSH2 0x7F7 JUMPI INVALID JUMPDEST PUSH1 0x20 MUL PUSH1 0x20 ADD ADD MLOAD DUP3 PUSH1 0x40 MLOAD PUSH1 0x20 ADD DUP1 DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP2 POP JUMPDEST PUSH1 0x1 ADD PUSH2 0x764 JUMP JUMPDEST POP SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP1 PUSH2 0x855 JUMPI PUSH1 0x0 SWAP2 POP POP PUSH2 0x34F JUMP JUMPDEST JUMPDEST PUSH1 0x1 DUP2 AND PUSH2 0x866 JUMPI PUSH1 0x1 SHR PUSH2 0x856 JUMP JUMPDEST PUSH1 0x1 SHR DUP1 PUSH2 0x878 JUMPI PUSH1 0x1 SWAP2 POP POP PUSH2 0x34F JUMP JUMPDEST POP PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP INVALID SLOAD PUSH9 0x6520696E7075742061 PUSH19 0x726179206D75737420636F6E7461696E20706F PUSH24 0x6572206F66203220656C656D656E747343616E6E6F742062 PUSH6 0x206269676765 PUSH19 0x207468616E20746865206D616368696E652069 PUSH21 0x73656C66A264697066735822122016C79F054A1CFA GAS LOG3 0xA9 0x1E 0xCB 0x24 OR 0xD9 0xDA 0xF6 INVALID 0xD3 SWAP8 MSTORE LOG1 SMOD CHAINID 0x49 SWAP16 0x49 0x2F LOG4 CODECOPY 0xB0 BLOCKHASH PUSH5 0x736F6C6343 STOP SMOD DIV STOP CALLER ", "sourceMap": "681:3293:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2394:313;;;;;;;;;;;;;;;;-1:-1:-1;2394:313:3;;:::i;:::-;;;;;;;;;;;;;;;;;;;3328:643;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3328:643:3;;-1:-1:-1;3328:643:3;;-1:-1:-1;;;;;3328:643:3:i;:::-;;;;;;;;;;;;;;;;1193:304;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1193:304:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1193:304:3;;-1:-1:-1;1193:304:3;;-1:-1:-1;;;;;1193:304:3:i;702:485::-;;;;;;;;;;;;;;;;-1:-1:-1;702:485:3;;;;:::i;1503:885::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1503:885:3;;-1:-1:-1;1503:885:3;;-1:-1:-1;;;;;1503:885:3:i;2713:405::-;;;;;;;;;;;;;;;;-1:-1:-1;2713:405:3;;:::i;:::-;;;;;;;;;;;;;;;;;;2394:313;2453:5;;2565:1;2550:16;;;2576:101;2583:15;;2576:101;;2614:8;;;;;2650:16;2576:101;;;-1:-1:-1;2694:6:3;-1:-1:-1;2394:313:3;;;;:::o;3328:643::-;3411:7;3492:25;3503:6;:13;3492:10;:25::i;:::-;3484:86;;;;-1:-1:-1;;;3484:86:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3585:6;:13;3602:1;3585:18;3581:384;;;3626:6;3633:1;3626:9;;;;;;;;;;;;;;3619:16;;;;3581:384;3665:26;3725:1;3708:6;:13;:18;;3694:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3694:33:3;;3665:62;;3747:9;3742:153;3766:6;:13;3762:1;:17;3742:153;;;3854:6;3861:1;3854:9;;;;;;;;;;;;;;3865:6;3872:1;3876;3872:5;3865:13;;;;;;;;;;;;;;3837:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3827:53;;;;;;3807:9;3822:1;3817;:6;;3807:17;;;;;;;;;;;;;;;;;:73;3786:1;3781:6;3742:153;;;;3916:38;3944:9;3916:27;:38::i;:::-;3909:45;;;;;1193:304;1339:24;;;-1:-1:-1;;;;;;1339:24:3;;;;;;;;;;;;;;;;;;;;;;;;;;1329:35;;;;;1288:7;;1382:108;1412:9;1435:1;1329:35;1475:5;1382:16;:108::i;:::-;1375:115;1193:304;-1:-1:-1;;;;;1193:304:3:o;702:485::-;765:7;805:1;792:9;:14;;;;784:54;;;;;-1:-1:-1;;;784:54:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;869:2;856:9;:15;;;;848:68;;;;-1:-1:-1;;;848:68:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;985:23;;;927:12;985:23;;;;;;;;;;;;;;;;;;;;;;;975:34;;;;;;;1037:1;1020:132;1044:9;1040:13;;:1;:13;1020:132;;;1098:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1088:53;;;;;;;;;1055:3;;1020:132;;;-1:-1:-1;1169:11:3;702:485;-1:-1:-1;;;702:485:3:o;1503:885::-;1667:7;1712:1;1698:10;:15;;;;1690:51;;;;;-1:-1:-1;;;1690:51:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;1773:2;1759:10;:16;;;;1751:69;;;;-1:-1:-1;;;1751:69:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1845:23;;;1852:1;1845:23;-1:-1:-1;;1889:8:3;;1888:22;;1845:23;1887:29;;1879:65;;;;;-1:-1:-1;;;1879:65:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;1986:10;1981:2;:15;1962:34;;:8;:15;:34;1954:74;;;;;-1:-1:-1;;;1954:74:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;2055:6;2039:13;2072:287;2095:8;:15;2091:1;:19;;;2072:287;;;2149:9;;;;;;;;2136:23;;2135:30;2131:218;;2220:5;2227:8;2236:1;2227:11;;;;;;;;;;;;;;;;2203:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2193:47;;;;;;2185:55;;2131:218;;;2314:8;2323:1;2314:11;;;;;;;;;;;;;;;;2327:5;2297:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2287:47;;;;;;2279:55;;2131:218;2112:3;;2072:287;;;-1:-1:-1;2376:5:3;1503:885;-1:-1:-1;;;;;;1503:885:3:o;2713:405::-;2770:4;2809:6;2829:16;2825:59;;2868:5;2861:12;;;;;2825:59;2894:86;2916:1;2902:15;;2894:86;;2968:1;2953:16;2894:86;;;3019:1;3004:16;3035;3031:58;;3074:4;3067:11;;;;;3031:58;-1:-1:-1;3106:5:3;;2713:405;-1:-1:-1;;2713:405:3:o" }, "gasEstimates": { "creation": { "codeDepositCost": "463800", "executionCost": "524", "totalCost": "464324" }, "external": { "calculateRootFromPowerOfTwo(bytes32[])": "infinite", "getLog2Floor(uint256)": "infinite", "getPristineHash(uint8)": "infinite", "getRoot(uint64,bytes8,bytes32[])": "infinite", "getRootWithDrive(uint64,uint8,bytes32,bytes32[])": "infinite", "isPowerOf2(uint256)": "infinite" } }, "methodIdentifiers": { "calculateRootFromPowerOfTwo(bytes32[])": "82b0eab8", "getLog2Floor(uint256)": "06c8e54b", "getPristineHash(uint8)": "a7342688", "getRoot(uint64,bytes8,bytes32[])": "8492d93b", "getRootWithDrive(uint64,uint8,bytes32,bytes32[])": "d7304dd9", "isPowerOf2(uint256)": "d82ae4b1" } }, "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"hashes\",\"type\":\"bytes32[]\"}],\"name\":\"calculateRootFromPowerOfTwo\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"name\":\"getLog2Floor\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"_log2Size\",\"type\":\"uint8\"}],\"name\":\"getPristineHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_position\",\"type\":\"uint64\"},{\"internalType\":\"bytes8\",\"name\":\"_value\",\"type\":\"bytes8\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"}],\"name\":\"getRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_position\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"_logOfSize\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"_drive\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"siblings\",\"type\":\"bytes32[]\"}],\"name\":\"getRootWithDrive\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"number\",\"type\":\"uint256\"}],\"name\":\"isPowerOf2\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"calculateRootFromPowerOfTwo(bytes32[])\":{\"params\":{\"hashes\":\"The array containing power of 2 elements\"},\"returns\":{\"_0\":\"byte32 the root hash being calculated\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"calculateRootFromPowerOfTwo(bytes32[])\":{\"notice\":\"Calculate the root of Merkle tree from an array of power of 2 elements\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@cartesi/util/contracts/Merkle.sol\":\"Merkle\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@cartesi/util/contracts/Merkle.sol\":{\"content\":\"// Copyright 2020 Cartesi Pte. Ltd.\\n\\n// SPDX-License-Identifier: Apache-2.0\\n// Licensed under the Apache License, Version 2.0 (the \\\"License\\\"); you may not use\\n// this file except in compliance with the License. You may obtain a copy of the\\n// License at http://www.apache.org/licenses/LICENSE-2.0\\n\\n// Unless required by applicable law or agreed to in writing, software distributed\\n// under the License is distributed on an \\\"AS IS\\\" BASIS, WITHOUT WARRANTIES OR\\n// CONDITIONS OF ANY KIND, either express or implied. See the License for the\\n// specific language governing permissions and limitations under the License.\\n\\n\\n/// @title Library for Merkle proofs\\npragma solidity ^0.7.0;\\n\\n\\nlibrary Merkle {\\n function getPristineHash(uint8 _log2Size) public pure returns (bytes32) {\\n require(_log2Size >= 3, \\\"Has to be at least one word\\\");\\n require(_log2Size <= 64, \\\"Cannot be bigger than the machine itself\\\");\\n\\n bytes8 value = 0;\\n bytes32 runningHash = keccak256(abi.encodePacked(value));\\n\\n for (uint256 i = 3; i < _log2Size; i++) {\\n runningHash = keccak256(abi.encodePacked(runningHash, runningHash));\\n }\\n\\n return runningHash;\\n }\\n\\n function getRoot(uint64 _position, bytes8 _value, bytes32[] memory proof) public pure returns (bytes32) {\\n bytes32 runningHash = keccak256(abi.encodePacked(_value));\\n\\n return getRootWithDrive(\\n _position,\\n 3,\\n runningHash,\\n proof\\n );\\n }\\n\\n function getRootWithDrive(\\n uint64 _position,\\n uint8 _logOfSize,\\n bytes32 _drive,\\n bytes32[] memory siblings\\n ) public pure returns (bytes32)\\n {\\n require(_logOfSize >= 3, \\\"Must be at least a word\\\");\\n require(_logOfSize <= 64, \\\"Cannot be bigger than the machine itself\\\");\\n\\n uint64 size = uint64(2) ** _logOfSize;\\n\\n require(((size - 1) & _position) == 0, \\\"Position is not aligned\\\");\\n require(siblings.length == 64 - _logOfSize, \\\"Proof length does not match\\\");\\n\\n bytes32 drive = _drive;\\n\\n for (uint64 i = 0; i < siblings.length; i++) {\\n if ((_position & (size << i)) == 0) {\\n drive = keccak256(abi.encodePacked(drive, siblings[i]));\\n } else {\\n drive = keccak256(abi.encodePacked(siblings[i], drive));\\n }\\n }\\n\\n return drive;\\n }\\n\\n function getLog2Floor(uint256 number) public pure returns (uint8) {\\n\\n uint8 result = 0;\\n\\n uint256 checkNumber = number;\\n checkNumber = checkNumber >> 1;\\n while (checkNumber > 0) {\\n ++result;\\n checkNumber = checkNumber >> 1;\\n }\\n\\n return result;\\n }\\n\\n function isPowerOf2(uint256 number) public pure returns (bool) {\\n\\n uint256 checkNumber = number;\\n if (checkNumber == 0) {\\n return false;\\n }\\n\\n while ((checkNumber & 1) == 0) {\\n checkNumber = checkNumber >> 1;\\n }\\n\\n checkNumber = checkNumber >> 1;\\n\\n if (checkNumber == 0) {\\n return true;\\n }\\n\\n return false;\\n }\\n\\n /// @notice Calculate the root of Merkle tree from an array of power of 2 elements\\n /// @param hashes The array containing power of 2 elements\\n /// @return byte32 the root hash being calculated\\n function calculateRootFromPowerOfTwo(bytes32[] memory hashes) public pure returns (bytes32) {\\n // revert when the input is not of power of 2\\n require(isPowerOf2(hashes.length), \\\"The input array must contain power of 2 elements\\\");\\n\\n if (hashes.length == 1) {\\n return hashes[0];\\n }else {\\n bytes32[] memory newHashes = new bytes32[](hashes.length >> 1);\\n\\n for (uint256 i = 0; i < hashes.length; i += 2) {\\n newHashes[i >> 1] = keccak256(abi.encodePacked(hashes[i], hashes[i + 1]));\\n }\\n\\n return calculateRootFromPowerOfTwo(newHashes);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xfab427885024176038f230531f5fbc87e80c38b22d7b5307a57a7a0b7cdfc6fe\",\"license\":\"Apache-2.0\"}},\"version\":1}", "storageLayout": { "storage": [], "types": null }, "userdoc": { "kind": "user", "methods": { "calculateRootFromPowerOfTwo(bytes32[])": { "notice": "Calculate the root of Merkle tree from an array of power of 2 elements" } }, "version": 1 } }