Created
April 12, 2021 13:12
-
-
Save phanletrunghieu/31d36a5b531b3c1a39205870d93c0a5e to your computer and use it in GitHub Desktop.
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.7.6+commit.7338295f.js&optimize=false&runs=200&gist=
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
REMIX EXAMPLE PROJECT | |
Remix example project is present when Remix loads very first time or there are no files existing in the File Explorer. | |
It contains 3 directories: | |
1. 'contracts': Holds three contracts with different complexity level, denoted with number prefix in file name. | |
2. 'scripts': Holds two scripts to deploy a contract. It is explained below. | |
3. 'tests': Contains one test file for 'Ballot' contract with unit tests in Solidity. | |
SCRIPTS | |
The 'scripts' folder contains example async/await scripts for deploying the 'Storage' contract. | |
For the deployment of any other contract, 'contractName' and 'constructorArgs' should be updated (along with other code if required). | |
Scripts have full access to the web3.js and ethers.js libraries. | |
To run a script, right click on file name in the file explorer and click 'Run'. Remember, Solidity file must already be compiled. | |
Output from script will appear in remix terminal. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.7.6; | |
/*To following code is sourced from the ABDK library for assistance in dealing with precision logarithms in Ethereum. | |
* ABDK Math 64.64 Smart Contract Library. Copyright © 2019 by ABDK Consulting. | |
* Author: Mikhail Vladimirov <[email protected]> | |
* Source: https://github.com/abdk-consulting/abdk-libraries-solidity/blob/master/ABDKMath64x64.sol#L366 | |
*/ | |
library ABDK { | |
/* | |
* Minimum value signed 64.64-bit fixed point number may have. | |
*/ | |
int128 private constant MIN_64x64 = -0x80000000000000000000000000000000; | |
/* | |
* Maximum value signed 64.64-bit fixed point number may have. | |
*/ | |
int128 private constant MAX_64x64 = 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; | |
/** | |
* Convert unsigned 256-bit integer number into signed 64.64-bit fixed point | |
* number. Revert on overflow. | |
* | |
* @param x unsigned 256-bit integer number | |
* @return signed 64.64-bit fixed point number | |
*/ | |
function fromUInt(uint256 x) internal pure returns (int128) { | |
require(x <= 0x7FFFFFFFFFFFFFFF); | |
return int128(x << 64); | |
} | |
/** | |
* Calculate x + y. Revert on overflow. | |
* | |
* @param x signed 64.64-bit fixed point number | |
* @param y signed 64.64-bit fixed point number | |
* @return signed 64.64-bit fixed point number | |
*/ | |
function add(int128 x, int128 y) internal pure returns (int128) { | |
int256 result = int256(x) + y; | |
require(result >= MIN_64x64 && result <= MAX_64x64); | |
return int128(result); | |
} | |
/** | |
* Calculate binary logarithm of x. Revert if x <= 0. | |
* | |
* @param x signed 64.64-bit fixed point number | |
* @return signed 64.64-bit fixed point number | |
*/ | |
function log_2(uint256 x) internal pure returns (uint256) { | |
require(x > 0); | |
uint256 msb = 0; | |
uint256 xc = x; | |
if (xc >= 0x10000000000000000) { | |
xc >>= 64; | |
msb += 64; | |
} | |
if (xc >= 0x100000000) { | |
xc >>= 32; | |
msb += 32; | |
} | |
if (xc >= 0x10000) { | |
xc >>= 16; | |
msb += 16; | |
} | |
if (xc >= 0x100) { | |
xc >>= 8; | |
msb += 8; | |
} | |
if (xc >= 0x10) { | |
xc >>= 4; | |
msb += 4; | |
} | |
if (xc >= 0x4) { | |
xc >>= 2; | |
msb += 2; | |
} | |
if (xc >= 0x2) msb += 1; // No need to shift xc anymore | |
uint256 result = (msb - 64) << 64; | |
uint256 ux = uint256(x) << uint256(127 - msb); | |
for (uint256 bit = 0x8000000000000000; bit > 0; bit >>= 1) { | |
ux *= ux; | |
uint256 b = ux >> 255; | |
ux >>= 127 + b; | |
result += bit * b; | |
} | |
return result; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"deploy": { | |
"VM:-": { | |
"linkReferences": {}, | |
"autoDeployLib": true | |
}, | |
"main:1": { | |
"linkReferences": {}, | |
"autoDeployLib": true | |
}, | |
"ropsten:3": { | |
"linkReferences": {}, | |
"autoDeployLib": true | |
}, | |
"rinkeby:4": { | |
"linkReferences": {}, | |
"autoDeployLib": true | |
}, | |
"kovan:42": { | |
"linkReferences": {}, | |
"autoDeployLib": true | |
}, | |
"görli:5": { | |
"linkReferences": {}, | |
"autoDeployLib": true | |
}, | |
"Custom": { | |
"linkReferences": {}, | |
"autoDeployLib": true | |
} | |
}, | |
"data": { | |
"bytecode": { | |
"generatedSources": [], | |
"linkReferences": {}, | |
"object": "60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122076c7395e7b76df1b8022a274bbb5b2c9925455a024679e732630e1055e46566664736f6c63430007060033", | |
"opcodes": "PUSH1 0x56 PUSH1 0x23 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x16 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 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH23 0xC7395E7B76DF1B8022A274BBB5B2C9925455A024679E73 0x26 ADDRESS 0xE1 SDIV 0x5E CHAINID JUMP PUSH7 0x64736F6C634300 SMOD MOD STOP CALLER ", | |
"sourceMap": "1455:2374:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" | |
}, | |
"deployedBytecode": { | |
"generatedSources": [], | |
"immutableReferences": {}, | |
"linkReferences": {}, | |
"object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122076c7395e7b76df1b8022a274bbb5b2c9925455a024679e732630e1055e46566664736f6c63430007060033", | |
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH23 0xC7395E7B76DF1B8022A274BBB5B2C9925455A024679E73 0x26 ADDRESS 0xE1 SDIV 0x5E CHAINID JUMP PUSH7 0x64736F6C634300 SMOD MOD STOP CALLER ", | |
"sourceMap": "1455:2374:0:-:0;;;;;;;;" | |
}, | |
"gasEstimates": { | |
"creation": { | |
"codeDepositCost": "17200", | |
"executionCost": "97", | |
"totalCost": "17297" | |
}, | |
"internal": { | |
"add(int128,int128)": "infinite", | |
"fromUInt(uint256)": "infinite", | |
"log_2(uint256)": "infinite" | |
} | |
}, | |
"methodIdentifiers": {} | |
}, | |
"abi": [] | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"compiler": { | |
"version": "0.7.6+commit.7338295f" | |
}, | |
"language": "Solidity", | |
"output": { | |
"abi": [], | |
"devdoc": { | |
"kind": "dev", | |
"methods": {}, | |
"version": 1 | |
}, | |
"userdoc": { | |
"kind": "user", | |
"methods": {}, | |
"version": 1 | |
} | |
}, | |
"settings": { | |
"compilationTarget": { | |
"contracts/Behodler.sol": "ABDK" | |
}, | |
"evmVersion": "istanbul", | |
"libraries": {}, | |
"metadata": { | |
"bytecodeHash": "ipfs" | |
}, | |
"optimizer": { | |
"enabled": false, | |
"runs": 200 | |
}, | |
"remappings": [] | |
}, | |
"sources": { | |
"contracts/Behodler.sol": { | |
"keccak256": "0x70baea701598eb662bbbadec118cd66a7f14baa50c3013ec56a38d1842fbbacd", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://982e001e5558b7d33f82a1a3e4c409cdc2fc1c4b78a53b7ea9b3ba176e3fd134", | |
"dweb:/ipfs/QmcRMsK9Pw5DzmFwMZLJNcKFyH2fNBnnRewJhy7bsUta11" | |
] | |
}, | |
"contracts/Scarcity.sol": { | |
"keccak256": "0x17c40957f005c9d595e0f08351e4179e55872992df117427527f260e0f038383", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://2ccb5822dd846d3e7ff301c454b8121ad2744bce66d2211f485147278d4ddcdd", | |
"dweb:/ipfs/QmS52ihG7Ztksqvy4pxU8h2MqhDeqJNTvyk4wWpaARPGXJ" | |
] | |
}, | |
"contracts/WETH10.sol": { | |
"keccak256": "0x960576429cc994a2d765c081380f44cad7c3da2d197bb181755cf0da8d48380c", | |
"license": "GPL-3.0-or-later", | |
"urls": [ | |
"bzz-raw://f377986eeb4f5b8d097e1b19d1a1a4ab203f6504c7fe564cbdbbcc8897c0dd05", | |
"dweb:/ipfs/Qma5PVdq8JuKY51pFFc8Y3YUXqaU9UHRPvXeXzDfkm1SdF" | |
] | |
}, | |
"contracts/facades/Burnable.sol": { | |
"keccak256": "0xa9221a3871f78f5ef03aa957eb88d29898c1d8be1dd9e273d59263864acca86c", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://942944c64572b5cb41e2214e2583821b3044065bc42308110cf471ad15e987d5", | |
"dweb:/ipfs/QmduV5WdXk9W7kmb41MnYLJ3dPordBfiABCKqLk9oBPw2y" | |
] | |
}, | |
"contracts/facades/LachesisLike.sol": { | |
"keccak256": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", | |
"urls": [ | |
"bzz-raw://0000000000000000000000000000000000000000000000000000000000000000", | |
"dweb:/ipfs/QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH" | |
] | |
}, | |
"contracts/flashLoans/FlashLoanArbiter.sol": { | |
"keccak256": "0x4a5c466e81174d8b7b973c364c856b8b15eef92a4ce962d8f30b9d6031c4c12a", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://0eaf1e3cca5cad5c83a538d8e98804cd9654f09e0b2ae31ea02ce9fbd3cc0859", | |
"dweb:/ipfs/QmfBfd9DC1r5V4ZK2HMdVtD56mcXaww6d3qNsTXbNHiM2B" | |
] | |
}, | |
"contracts/flashLoans/FlashLoanReceiver.sol": { | |
"keccak256": "0xbf0ae7198f59755c43fcd9185d00700578923db6ab2fb4617820826b0b5dd0e5", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://1d074b3e5d9c73a49b11d5f507b8f220efff1c1919d140e31a438d594e0fcdff", | |
"dweb:/ipfs/QmTuhc4fdVE58UwTGmp26CmvqoK2DN9aKav8PjgXRgF61B" | |
] | |
}, | |
"contracts/openzeppelin/IERC20.sol": { | |
"keccak256": "0x13da75cceaf994fafe2781278b4969946fb77adf7f3c7bbd16ba44cc7e8a9170", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://3e9d06ef8b97ad0bc5f5a9a781e1ebb0280602ab14dfa25f4ffc6aca16851451", | |
"dweb:/ipfs/QmVEZYk7GfAoMgwGQQvrrWb8asfYiXTvHiuVwpt5UFbC4i" | |
] | |
}, | |
"contracts/openzeppelin/Ownable.sol": { | |
"keccak256": "0x887bbbfa05029a3af14a15381685383200d763d0e363aabe945399ca3efa1b71", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://4464e666bb954986a6af9e7f76ee47c734cd338f1ec1943da24dfc9bbeed50db", | |
"dweb:/ipfs/QmZazYKEWnNW3xcRhLfrL3GCnBw4uoSpnVNqV4Nz9sg4HW" | |
] | |
}, | |
"contracts/openzeppelin/SafeMath.sol": { | |
"keccak256": "0x98ec6c011810ef2825bbc46084e7e502cf23d627903796c800ff05c84e7659ae", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://733ff6c848e6e42f65c9d32db953c0d7bd88376845d33b737ab2c7351dc119a5", | |
"dweb:/ipfs/QmXWh2RtVKBF2RNfGv7jQoMXeSxjMD6ZmqZnqdjWbSc5Ng" | |
] | |
} | |
}, | |
"version": 1 | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"deploy": { | |
"VM:-": { | |
"linkReferences": {}, | |
"autoDeployLib": true | |
}, | |
"main:1": { | |
"linkReferences": {}, | |
"autoDeployLib": true | |
}, | |
"ropsten:3": { | |
"linkReferences": {}, | |
"autoDeployLib": true | |
}, | |
"rinkeby:4": { | |
"linkReferences": {}, | |
"autoDeployLib": true | |
}, | |
"kovan:42": { | |
"linkReferences": {}, | |
"autoDeployLib": true | |
}, | |
"görli:5": { | |
"linkReferences": {}, | |
"autoDeployLib": true | |
}, | |
"Custom": { | |
"linkReferences": {}, | |
"autoDeployLib": true | |
} | |
}, | |
"data": { | |
"bytecode": { | |
"generatedSources": [], | |
"linkReferences": {}, | |
"object": "610523610026600b82828239805160001a60731461001957fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c8063078d3b791461005b5780637fed018f146100d6578063e4652f4914610138578063eedc966a146101b3575b600080fd5b81801561006757600080fd5b506100d46004803603606081101561007e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061020b565b005b610122600480360360408110156100ec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506102bd565b6040518082815260200191505060405180910390f35b81801561014457600080fd5b506101b16004803603606081101561015b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610372565b005b6101f5600480360360208110156101c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610442565b6040518082815260200191505060405180910390f35b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561027c57600080fd5b505af1158015610290573d6000803e3d6000fd5b505050506040513d60208110156102a657600080fd5b810190808051906020019092919050505050505050565b6000818373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561032757600080fd5b505afa15801561033b573d6000803e3d6000fd5b505050506040513d602081101561035157600080fd5b81019080805190602001909291905050508161036957fe5b04905092915050565b8273ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561040157600080fd5b505af1158015610415573d6000803e3d6000fd5b505050506040513d602081101561042b57600080fd5b810190808051906020019092919050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156104ab57600080fd5b505afa1580156104bf573d6000803e3d6000fd5b505050506040513d60208110156104d557600080fd5b8101908080519060200190929190505050905091905056fea2646970667358221220de7e19b473243ca6d78f18c7568bc2b0ce62a7597a3f8eb8dbce897bb8905c6964736f6c63430007060033", | |
"opcodes": "PUSH2 0x523 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 0x56 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x78D3B79 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0x7FED018F EQ PUSH2 0xD6 JUMPI DUP1 PUSH4 0xE4652F49 EQ PUSH2 0x138 JUMPI DUP1 PUSH4 0xEEDC966A EQ PUSH2 0x1B3 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x20B JUMP JUMPDEST STOP JUMPDEST PUSH2 0x122 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xEC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2BD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x144 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x15B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x372 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1F5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x442 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA9059CBB DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x27C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x290 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x327 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x33B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP DUP2 PUSH2 0x369 JUMPI INVALID JUMPDEST DIV SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x23B872DD DUP4 ADDRESS DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x401 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x415 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x42B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDE PUSH31 0x19B473243CA6D78F18C7568BC2B0CE62A7597A3F8EB8DBCE897BB8905C6964 PUSH20 0x6F6C634300070600330000000000000000000000 ", | |
"sourceMap": "376:707:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;" | |
}, | |
"deployedBytecode": { | |
"generatedSources": [], | |
"immutableReferences": {}, | |
"linkReferences": {}, | |
"object": "73000000000000000000000000000000000000000030146080604052600436106100565760003560e01c8063078d3b791461005b5780637fed018f146100d6578063e4652f4914610138578063eedc966a146101b3575b600080fd5b81801561006757600080fd5b506100d46004803603606081101561007e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061020b565b005b610122600480360360408110156100ec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506102bd565b6040518082815260200191505060405180910390f35b81801561014457600080fd5b506101b16004803603606081101561015b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610372565b005b6101f5600480360360208110156101c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610442565b6040518082815260200191505060405180910390f35b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561027c57600080fd5b505af1158015610290573d6000803e3d6000fd5b505050506040513d60208110156102a657600080fd5b810190808051906020019092919050505050505050565b6000818373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561032757600080fd5b505afa15801561033b573d6000803e3d6000fd5b505050506040513d602081101561035157600080fd5b81019080805190602001909291905050508161036957fe5b04905092915050565b8273ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561040157600080fd5b505af1158015610415573d6000803e3d6000fd5b505050506040513d602081101561042b57600080fd5b810190808051906020019092919050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156104ab57600080fd5b505afa1580156104bf573d6000803e3d6000fd5b505050506040513d60208110156104d557600080fd5b8101908080519060200190929190505050905091905056fea2646970667358221220de7e19b473243ca6d78f18c7568bc2b0ce62a7597a3f8eb8dbce897bb8905c6964736f6c63430007060033", | |
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x56 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x78D3B79 EQ PUSH2 0x5B JUMPI DUP1 PUSH4 0x7FED018F EQ PUSH2 0xD6 JUMPI DUP1 PUSH4 0xE4652F49 EQ PUSH2 0x138 JUMPI DUP1 PUSH4 0xEEDC966A EQ PUSH2 0x1B3 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x67 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x7E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x20B JUMP JUMPDEST STOP JUMPDEST PUSH2 0x122 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xEC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2BD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST DUP2 DUP1 ISZERO PUSH2 0x144 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1B1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x15B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x372 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x1F5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1C9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x442 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xA9059CBB DUP4 DUP4 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x27C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x290 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2A6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x327 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x33B JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x351 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP DUP2 PUSH2 0x369 JUMPI INVALID JUMPDEST DIV SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x23B872DD DUP4 ADDRESS DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x401 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x415 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x42B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 ADDRESS PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4AB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x4BF JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4D5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP SWAP1 POP SWAP2 SWAP1 POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDE PUSH31 0x19B473243CA6D78F18C7568BC2B0CE62A7597A3F8EB8DBCE897BB8905C6964 PUSH20 0x6F6C634300070600330000000000000000000000 ", | |
"sourceMap": "376:707:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;917:164;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;545:184;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;735:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;410:129;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;917:164;1041:5;1034:22;;;1057:9;1068:5;1034:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;917:164;;;:::o;545:184::-;645:7;716:6;682:5;675:23;;;707:4;675:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:47;;;;;;668:54;;545:184;;;;:::o;735:176::-;855:5;848:26;;;875:6;891:4;898:5;848:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;735:176;;;:::o;410:129::-;468:7;501:5;494:23;;;526:4;494:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;487:45;;410:129;;;:::o" | |
}, | |
"gasEstimates": { | |
"creation": { | |
"codeDepositCost": "263000", | |
"executionCost": "331", | |
"totalCost": "263331" | |
}, | |
"external": { | |
"shiftedBalance(address,uint256)": "infinite", | |
"tokenBalance(address)": "infinite", | |
"transferIn(address,address,uint256)": "infinite", | |
"transferOut(address,address,uint256)": "infinite" | |
} | |
}, | |
"methodIdentifiers": { | |
"shiftedBalance(address,uint256)": "7fed018f", | |
"tokenBalance(address)": "eedc966a", | |
"transferIn(address,address,uint256)": "e4652f49", | |
"transferOut(address,address,uint256)": "078d3b79" | |
} | |
}, | |
"abi": [ | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "token", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "factor", | |
"type": "uint256" | |
} | |
], | |
"name": "shiftedBalance", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "token", | |
"type": "address" | |
} | |
], | |
"name": "tokenBalance", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
} | |
] | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"compiler": { | |
"version": "0.7.6+commit.7338295f" | |
}, | |
"language": "Solidity", | |
"output": { | |
"abi": [ | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "token", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "factor", | |
"type": "uint256" | |
} | |
], | |
"name": "shiftedBalance", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "token", | |
"type": "address" | |
} | |
], | |
"name": "tokenBalance", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
} | |
], | |
"devdoc": { | |
"kind": "dev", | |
"methods": {}, | |
"version": 1 | |
}, | |
"userdoc": { | |
"kind": "user", | |
"methods": {}, | |
"version": 1 | |
} | |
}, | |
"settings": { | |
"compilationTarget": { | |
"contracts/Behodler.sol": "AddressBalanceCheck" | |
}, | |
"evmVersion": "istanbul", | |
"libraries": {}, | |
"metadata": { | |
"bytecodeHash": "ipfs" | |
}, | |
"optimizer": { | |
"enabled": false, | |
"runs": 200 | |
}, | |
"remappings": [] | |
}, | |
"sources": { | |
"contracts/Behodler.sol": { | |
"keccak256": "0x70baea701598eb662bbbadec118cd66a7f14baa50c3013ec56a38d1842fbbacd", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://982e001e5558b7d33f82a1a3e4c409cdc2fc1c4b78a53b7ea9b3ba176e3fd134", | |
"dweb:/ipfs/QmcRMsK9Pw5DzmFwMZLJNcKFyH2fNBnnRewJhy7bsUta11" | |
] | |
}, | |
"contracts/Scarcity.sol": { | |
"keccak256": "0x17c40957f005c9d595e0f08351e4179e55872992df117427527f260e0f038383", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://2ccb5822dd846d3e7ff301c454b8121ad2744bce66d2211f485147278d4ddcdd", | |
"dweb:/ipfs/QmS52ihG7Ztksqvy4pxU8h2MqhDeqJNTvyk4wWpaARPGXJ" | |
] | |
}, | |
"contracts/WETH10.sol": { | |
"keccak256": "0x960576429cc994a2d765c081380f44cad7c3da2d197bb181755cf0da8d48380c", | |
"license": "GPL-3.0-or-later", | |
"urls": [ | |
"bzz-raw://f377986eeb4f5b8d097e1b19d1a1a4ab203f6504c7fe564cbdbbcc8897c0dd05", | |
"dweb:/ipfs/Qma5PVdq8JuKY51pFFc8Y3YUXqaU9UHRPvXeXzDfkm1SdF" | |
] | |
}, | |
"contracts/facades/Burnable.sol": { | |
"keccak256": "0xa9221a3871f78f5ef03aa957eb88d29898c1d8be1dd9e273d59263864acca86c", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://942944c64572b5cb41e2214e2583821b3044065bc42308110cf471ad15e987d5", | |
"dweb:/ipfs/QmduV5WdXk9W7kmb41MnYLJ3dPordBfiABCKqLk9oBPw2y" | |
] | |
}, | |
"contracts/facades/LachesisLike.sol": { | |
"keccak256": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", | |
"urls": [ | |
"bzz-raw://0000000000000000000000000000000000000000000000000000000000000000", | |
"dweb:/ipfs/QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH" | |
] | |
}, | |
"contracts/flashLoans/FlashLoanArbiter.sol": { | |
"keccak256": "0x4a5c466e81174d8b7b973c364c856b8b15eef92a4ce962d8f30b9d6031c4c12a", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://0eaf1e3cca5cad5c83a538d8e98804cd9654f09e0b2ae31ea02ce9fbd3cc0859", | |
"dweb:/ipfs/QmfBfd9DC1r5V4ZK2HMdVtD56mcXaww6d3qNsTXbNHiM2B" | |
] | |
}, | |
"contracts/flashLoans/FlashLoanReceiver.sol": { | |
"keccak256": "0xbf0ae7198f59755c43fcd9185d00700578923db6ab2fb4617820826b0b5dd0e5", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://1d074b3e5d9c73a49b11d5f507b8f220efff1c1919d140e31a438d594e0fcdff", | |
"dweb:/ipfs/QmTuhc4fdVE58UwTGmp26CmvqoK2DN9aKav8PjgXRgF61B" | |
] | |
}, | |
"contracts/openzeppelin/IERC20.sol": { | |
"keccak256": "0x13da75cceaf994fafe2781278b4969946fb77adf7f3c7bbd16ba44cc7e8a9170", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://3e9d06ef8b97ad0bc5f5a9a781e1ebb0280602ab14dfa25f4ffc6aca16851451", | |
"dweb:/ipfs/QmVEZYk7GfAoMgwGQQvrrWb8asfYiXTvHiuVwpt5UFbC4i" | |
] | |
}, | |
"contracts/openzeppelin/Ownable.sol": { | |
"keccak256": "0x887bbbfa05029a3af14a15381685383200d763d0e363aabe945399ca3efa1b71", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://4464e666bb954986a6af9e7f76ee47c734cd338f1ec1943da24dfc9bbeed50db", | |
"dweb:/ipfs/QmZazYKEWnNW3xcRhLfrL3GCnBw4uoSpnVNqV4Nz9sg4HW" | |
] | |
}, | |
"contracts/openzeppelin/SafeMath.sol": { | |
"keccak256": "0x98ec6c011810ef2825bbc46084e7e502cf23d627903796c800ff05c84e7659ae", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://733ff6c848e6e42f65c9d32db953c0d7bd88376845d33b737ab2c7351dc119a5", | |
"dweb:/ipfs/QmXWh2RtVKBF2RNfGv7jQoMXeSxjMD6ZmqZnqdjWbSc5Ng" | |
] | |
} | |
}, | |
"version": 1 | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"deploy": { | |
"VM:-": { | |
"linkReferences": { | |
"contracts/Behodler.sol": { | |
"AddressBalanceCheck": "<address>" | |
} | |
}, | |
"autoDeployLib": true | |
}, | |
"main:1": { | |
"linkReferences": { | |
"contracts/Behodler.sol": { | |
"AddressBalanceCheck": "<address>" | |
} | |
}, | |
"autoDeployLib": true | |
}, | |
"ropsten:3": { | |
"linkReferences": { | |
"contracts/Behodler.sol": { | |
"AddressBalanceCheck": "<address>" | |
} | |
}, | |
"autoDeployLib": true | |
}, | |
"rinkeby:4": { | |
"linkReferences": { | |
"contracts/Behodler.sol": { | |
"AddressBalanceCheck": "<address>" | |
} | |
}, | |
"autoDeployLib": true | |
}, | |
"kovan:42": { | |
"linkReferences": { | |
"contracts/Behodler.sol": { | |
"AddressBalanceCheck": "<address>" | |
} | |
}, | |
"autoDeployLib": true | |
}, | |
"görli:5": { | |
"linkReferences": { | |
"contracts/Behodler.sol": { | |
"AddressBalanceCheck": "<address>" | |
} | |
}, | |
"autoDeployLib": true | |
}, | |
"Custom": { | |
"linkReferences": { | |
"contracts/Behodler.sol": { | |
"AddressBalanceCheck": "<address>" | |
} | |
}, | |
"autoDeployLib": true | |
} | |
}, | |
"data": { | |
"bytecode": { | |
"generatedSources": [], | |
"linkReferences": { | |
"contracts/Behodler.sol": { | |
"AddressBalanceCheck": [ | |
{ | |
"length": 20, | |
"start": 6288 | |
}, | |
{ | |
"length": 20, | |
"start": 7202 | |
}, | |
{ | |
"length": 20, | |
"start": 9455 | |
}, | |
{ | |
"length": 20, | |
"start": 9984 | |
}, | |
{ | |
"length": 20, | |
"start": 10401 | |
}, | |
{ | |
"length": 20, | |
"start": 12512 | |
}, | |
{ | |
"length": 20, | |
"start": 12712 | |
}, | |
{ | |
"length": 20, | |
"start": 15459 | |
}, | |
{ | |
"length": 20, | |
"start": 15967 | |
}, | |
{ | |
"length": 20, | |
"start": 16384 | |
}, | |
{ | |
"length": 20, | |
"start": 16640 | |
}, | |
{ | |
"length": 20, | |
"start": 17636 | |
}, | |
{ | |
"length": 20, | |
"start": 21286 | |
}, | |
{ | |
"length": 20, | |
"start": 21561 | |
} | |
] | |
} | |
}, | |
"object": "60806040523480156200001157600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3601e600b60000160006101000a81548160ff021916908360ff160217905550605a600b60000160016101000a81548160ff021916908360ff16021790555060005b60038160ff1610156200013b57600160118260ff16600381106200010e57fe5b602091828204019190066101000a81548160ff0219169083151502179055508080600101915050620000ee565b50615946806200014c6000396000f3fe60806040526004361061020e5760003560e01c806370a0823111610118578063a9059cbb116100a0578063e22bcf841161006f578063e22bcf8414610d86578063e2fc9d0014610ded578063f2fde38b14610e56578063fe02915614610ea7578063fe25e00a14610f355761020e565b8063a9059cbb14610bce578063d2cb010014610c3f578063dd62ed3e14610c9a578063e12fb1b914610d1f5761020e565b80637b12a62c116100e75780637b12a62c14610a275780637cd07e4714610a555780638da5cb5b14610a9657806395d89b4114610ad7578063a451a2c114610b675761020e565b806370a08231146108d9578063715018a61461093e57806372c3fdd91461095557806379502c55146109d85761020e565b806323cf31181161019b57806342966c681161016a57806342966c681461067b57806356688700146106cc578063572861bc1461072e5780636bd50cef146107795780636d3405f1146107c85761020e565b806323cf31181461055e578063313ce567146105af578063349849a3146105dd5780633f40d3a31461061e5761020e565b806307d44e1a116101e257806307d44e1a146103c5578063095ea7b31461040657806318160ddd1461047757806321b77d63146104a257806323b872dd146104cd5761020e565b80627ed4fe146102135780630319f4c61461027857806306d47de9146102d357806306fdde0314610335575b600080fd5b34801561021f57600080fd5b506102766004803603606081101561023657600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f76565b005b34801561028457600080fd5b506102d16004803603604081101561029b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110ae565b005b61031f600480360360408110156102e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611392565b6040518082815260200191505060405180910390f35b34801561034157600080fd5b5061034a611c31565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561038a57808201518184015260208101905061036f565b50505050905090810190601f1680156103b75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103d157600080fd5b506103da611c6e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561041257600080fd5b5061045f6004803603604081101561042957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c94565b60405180821515815260200191505060405180910390f35b34801561048357600080fd5b5061048c611cab565b6040518082815260200191505060405180910390f35b3480156104ae57600080fd5b506104b7611cb5565b6040518082815260200191505060405180910390f35b3480156104d957600080fd5b50610546600480360360608110156104f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cbe565b60405180821515815260200191505060405180910390f35b34801561056a57600080fd5b506105ad6004803603602081101561058157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d89565b005b3480156105bb57600080fd5b506105c4611e8e565b604051808260ff16815260200191505060405180910390f35b3480156105e957600080fd5b506105f2611e97565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561062a57600080fd5b506106796004803603604081101561064157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611ebd565b005b34801561068757600080fd5b506106b46004803603602081101561069e57600080fd5b8101908080359060200190929190505050611fd9565b60405180821515815260200191505060405180910390f35b610718600480360360408110156106e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611fee565b6040518082815260200191505060405180910390f35b34801561073a57600080fd5b506107776004803603604081101561075157600080fd5b81019080803560ff169060200190929190803560ff1690602001909291905050506129d3565b005b34801561078557600080fd5b5061078e612ad4565b604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390f35b3480156107d457600080fd5b506108d7600480360360e08110156107eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b16565b005b3480156108e557600080fd5b50610928600480360360208110156108fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612db0565b6040518082815260200191505060405180910390f35b34801561094a57600080fd5b50610953612df9565b005b34801561096157600080fd5b506109c26004803603608081101561097857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050612f78565b6040518082815260200191505060405180910390f35b3480156109e457600080fd5b506109ed6131c5565b604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390f35b348015610a3357600080fd5b50610a3c6131fd565b604051808260ff16815260200191505060405180910390f35b348015610a6157600080fd5b50610a6a613217565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610aa257600080fd5b50610aab61323d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ae357600080fd5b50610aec613266565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b2c578082015181840152602081019050610b11565b50505050905090810190601f168015610b595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b7357600080fd5b50610bb660048036036020811015610b8a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132a3565b60405180821515815260200191505060405180910390f35b348015610bda57600080fd5b50610c2760048036036040811015610bf157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506132c3565b60405180821515815260200191505060405180910390f35b348015610c4b57600080fd5b50610c9860048036036040811015610c6257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506132da565b005b348015610ca657600080fd5b50610d0960048036036040811015610cbd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061338e565b6040518082815260200191505060405180910390f35b348015610d2b57600080fd5b50610d6e60048036036020811015610d4257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613415565b60405180821515815260200191505060405180910390f35b348015610d9257600080fd5b50610dd560048036036020811015610da957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613435565b60405180821515815260200191505060405180910390f35b348015610df957600080fd5b50610e5460048036036060811015610e1057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190803515159060200190929190505050613455565b005b348015610e6257600080fd5b50610ea560048036036020811015610e7957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613562565b005b610f1d60048036036080811015610ebd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050613766565b60405180821515815260200191505060405180910390f35b348015610f4157600080fd5b50610f4a614517565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611037576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6103e8600560010154600560000154011061105157600080fd5b826005600001819055508160056001018190555080600560020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e7fc864336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561113957600080fd5b505af115801561114d573d6000803e3d6000fd5b505050506040513d602081101561116357600080fd5b81019080805190602001909291905050506111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806158356021913960400191505060405180910390fd5b61121b82600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461453d90919063ffffffff16565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff16634b64e492336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156112c757600080fd5b505af11580156112db573d6000803e3d6000fd5b5050505061134b8260405180606001604052806024815260200161587a60249139600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145c59092919063ffffffff16565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600082600034111561148a57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611444576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806157a16029913960400191505060405180910390fd5b30601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506114cc565b33601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b83601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061156e5750601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806115ff5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156115fe5750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b5b611671576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4245484f444c45523a20746f6b656e20696e76616c696400000000000000000081525060200191505060405180910390fd5b6002600081600281111561168157fe5b90506011816003811061169057fe5b602091828204019190069054906101000a900460ff166116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806158136022913960400191505060405180910390fd5b60006011826003811061170a57fe5b602091828204019190066101000a81548160ff02191690831515021790555060008773ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63eedc966a90916040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156117a857600080fd5b505af41580156117bc573d6000803e3d6000fd5b505050506040513d60208110156117d257600080fd5b8101908080519060200190929190505050905060006117fa888361468590919063ffffffff16565b905064e8d4a510008111611876576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4245484f444c45523a206d696e206c697175696469747900000000000000000081525060200191505060405180910390fd5b600b60000160019054906101000a900460ff1660ff166118b2836118a460648c6146cf90919063ffffffff16565b61475590919063ffffffff16565b1115611909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061589e6029913960400191505060405180910390fd5b60006119148361479f565b905060006119218361479f565b905060018311611932576000611934565b805b820398506000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808a11156119a7576000818b03905060008b61271083028161199a57fe5b0414156119a557819a505b505b6119b1338b6148ba565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415611abd576000339050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663205c2878828e6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611a9f57600080fd5b505af1158015611ab3573d6000803e3d6000fd5b5050505050611b79565b8b73ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63078d3b799091338e6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b158015611b6057600080fd5b505af4158015611b74573d6000803e3d6000fd5b505050505b7fba0b893b2f314a229997e335266881b5ac6b290bd350d2c23cc57160b77882b8338d8d8d604051808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15050505050600160118260038110611c0857fe5b602091828204019190066101000a81548160ff0219169083151502179055505050505092915050565b60606040518060400160405280600881526020017f5363617263697479000000000000000000000000000000000000000000000000815250905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611ca13384846149dc565b6001905092915050565b6000600354905090565b64e8d4a5100081565b6000611ccb848484614bd3565b611d7e8433611d79856040518060600160405280602881526020016157eb60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145c59092919063ffffffff16565b6149dc565b600190509392505050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e4a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006012905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611fe533836148ba565b60019050919050565b60008260003411156120e657600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146120a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806157a16029913960400191505060405180910390fd5b30601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612128565b33601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b83601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121ca5750601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061225b5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561225a5750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b5b6122cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4245484f444c45523a20746f6b656e20696e76616c696400000000000000000081525060200191505060405180910390fd5b600160008160028111156122dd57fe5b9050601181600381106122ec57fe5b602091828204019190069054906101000a900460ff16612357576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806158136022913960400191505060405180910390fd5b60006011826003811061236657fe5b602091828204019190066101000a81548160ff02191690831515021790555060006124548873ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__637fed018f909164e8d4a510006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561241457600080fd5b505af4158015612428573d6000803e3d6000fd5b505050506040513d602081101561243e57600080fd5b8101908080519060200190929190505050615044565b600f0b9050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16141561273c5786600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561253957600080fd5b505afa15801561254d573d6000803e3d6000fd5b505050506040513d602081101561256357600080fd5b81019080805190602001909291905050501061265b57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63e4652f499091338a6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b15801561263e57600080fd5b505af4158015612652573d6000803e3d6000fd5b50505050612737565b8634146126b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806158c76021913960400191505060405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561271d57600080fd5b505af1158015612731573d6000803e3d6000fd5b50505050505b61281a565b8773ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63e4652f499091601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168a6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b15801561280157600080fd5b505af4158015612815573d6000803e3d6000fd5b505050505b600061285761285264e8d4a510006128446128358d8d615067565b8c61468590919063ffffffff16565b61475590919063ffffffff16565b615044565b600f0b90506000612871828461453d90919063ffffffff16565b905064e8d4a510008110156128ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4245484f444c45523a206d696e206c69717569646974792e000000000000000081525060200191505060405180910390fd5b600183116128fd576000612907565b6129068361479f565b5b6129108261479f565b03975061291d33896153ba565b7f36f3b2e1a21c19137dd82ec243b0708a1d26b3d1fa1dc49c44c4c366a5878138338b8b8b604051808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15050506001601182600381106129aa57fe5b602091828204019190066101000a81548160ff0219169083151502179055505050505092915050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a94576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600b60000160006101000a81548160ff021916908360ff16021790555080600b60000160016101000a81548160ff021916908360ff1602179055505050565b6000806000600560000154600560010154600560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16925092509250909192565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bd7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b86600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600860010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600860000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612eba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000808573ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63eedc966a90916040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612ff857600080fd5b505af415801561300c573d6000803e3d6000fd5b505050506040513d602081101561302257600080fd5b810190808051906020019092919050505090506000805b848110156131b65760008873ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63eedc966a90916040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156130c057600080fd5b505af41580156130d4573d6000803e3d6000fd5b505050506040513d60208110156130ea57600080fd5b810190808051906020019092919050505090506000613112898361468590919063ffffffff16565b9050600061311f8361479f565b9050600061312c8361479f565b905060006001841161313f576000613141565b815b830390506000818c0390506000811415613166578c99505050505050505050506131bd565b600081121561317a5760018d039850613181565b60018d0197505b876002898b038161318e57fe5b04019c50858d1161319f578c6131a1565b855b9c505050505050508080600101915050613039565b5085925050505b949350505050565b60058060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b6000600b60000160019054906101000a900460ff16905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600381526020017f5343580000000000000000000000000000000000000000000000000000000000815250905090565b60126020528060005260406000206000915054906101000a900460ff1681565b60006132d0338484614bd3565b6001905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613380576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806156ea6021913960400191505060405180910390fd5b61338a82826153ba565b5050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b60146020528060005260406000206000915054906101000a900460ff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146134af57600080fd5b81601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613623576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156136a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061570b6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600084600034111561385e57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613818576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806157a16029913960400191505060405180910390fd5b30601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506138a0565b33601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b85601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806139425750601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806139d35750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156139d25750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b5b613a45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4245484f444c45523a20746f6b656e20696e76616c696400000000000000000081525060200191505060405180910390fd5b600080816002811115613a5457fe5b905060118160038110613a6357fe5b602091828204019190069054906101000a900460ff16613ace576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806158136022913960400191505060405180910390fd5b600060118260038110613add57fe5b602091828204019190066101000a81548160ff02191690831515021790555060008973ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63eedc966a90916040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613b7b57600080fd5b505af4158015613b8f573d6000803e3d6000fd5b505050506040513d6020811015613ba557600080fd5b81019080805190602001909291905050509050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161415613e9b5787600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613c9857600080fd5b505afa158015613cac573d6000803e3d6000fd5b505050506040513d6020811015613cc257600080fd5b810190808051906020019092919050505010613dba57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63e4652f499091338b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b158015613d9d57600080fd5b505af4158015613db1573d6000803e3d6000fd5b50505050613e96565b873414613e12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806158c76021913960400191505060405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015613e7c57600080fd5b505af1158015613e90573d6000803e3d6000fd5b50505050505b613f79565b8973ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63e4652f499091601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b158015613f6057600080fd5b505af4158015613f74573d6000803e3d6000fd5b505050505b6000613f97613f888c8b615067565b8a61468590919063ffffffff16565b905060008a73ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63eedc966a90916040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561401857600080fd5b505af415801561402c573d6000803e3d6000fd5b505050506040513d602081101561404257600080fd5b81019080805190602001909291905050509050600b60000160019054906101000a900460ff1660ff166140918261408360648d6146cf90919063ffffffff16565b61475590919063ffffffff16565b11156140e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061589e6029913960400191505060405180910390fd5b60006140fd838561453d90919063ffffffff16565b905060006141148b8461468590919063ffffffff16565b9050600061414383600b60000160009054906101000a900460ff1660ff1688901b61475590919063ffffffff16565b9050600061417285600b60000160009054906101000a900460ff1660ff1685901b61475590919063ffffffff16565b90506000821415801561418457508082145b6141f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4245484f444c45523a207377617020696e76617269616e742e0000000000000081525060200191505060405180910390fd5b505064e8d4a51000811015614273576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4245484f444c45523a206d696e206c69717569646974792e000000000000000081525060200191505060405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff16141561437f576000339050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663205c2878828e6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561436157600080fd5b505af1158015614375573d6000803e3d6000fd5b505050505061443b565b8c73ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63078d3b799091338e6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b15801561442257600080fd5b505af4158015614436573d6000803e3d6000fd5b505050505b7fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e46062338f8f8f8f604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a16001995050505050506001601182600381106144ec57fe5b602091828204019190066101000a81548160ff02191690831515021790555050505050949350505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808284019050838110156145bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000838311158290614672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561463757808201518184015260208101905061461c565b50505050905090810190601f1680156146645780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60006146c783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506145c5565b905092915050565b6000808314156146e2576000905061474f565b60008284029050828482816146f357fe5b041461474a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806157ca6021913960400191505060405180910390fd5b809150505b92915050565b600061479783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506154e1565b905092915050565b60008082116147ad57600080fd5b6000808390506801000000000000000081106147d157604081901c90506040820191505b64010000000081106147eb57602081901c90506020820191505b62010000811061480357601081901c90506010820191505b610100811061481a57600881901c90506008820191505b6010811061483057600481901c90506004820191505b6004811061484657600281901c90506002820191505b60028110614855576001820191505b60006040808403901b9050600083607f0386901b9050600067800000000000000090505b60008111156148ad578182029150600060ff83901c905080607f0183901c92508082028401935050600181901c9050614879565b5081945050505050919050565b614943816040518060400160405280601c81526020017f53434152434954593a20696e73756666696369656e742066756e647300000000815250600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145c59092919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061499b8160035461468590919063ffffffff16565b6003819055507fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb816040518082815260200191505060405180910390a15050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614a62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806158566024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614ae8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806157316022913960400191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614c59576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806157536028913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614cdf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061577b6026913960400191505060405180910390fd5b6000614d0d6103e8614cff846005600001546146cf90919063ffffffff16565b61475590919063ffffffff16565b90506000614d3d6103e8614d2f856005600101546146cf90919063ffffffff16565b61475590919063ffffffff16565b9050614d548160035461468590919063ffffffff16565b6003819055507fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb816040518082815260200191505060405180910390a1614e088260016000600560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461453d90919063ffffffff16565b60016000600560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614edc836040518060600160405280602981526020016158e860299139600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145c59092919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f95614f47614f38838561453d90919063ffffffff16565b8561468590919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461453d90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35050505050565b6000677fffffffffffffff82111561505b57600080fd5b604082901b9050919050565b6000600860020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156150d5576150ce838360016155a7565b90506153b4565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561513a57615133838360006155a7565b90506153b3565b600860000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156152a6576151bf6103e86151b1846005600101546146cf90919063ffffffff16565b61475590919063ffffffff16565b90508273ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63078d3b799091600860010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b15801561528957600080fd5b505af415801561529d573d6000803e3d6000fd5b505050506153b2565b6152d26103e86152c4846005600101546146cf90919063ffffffff16565b61475590919063ffffffff16565b90508273ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63078d3b799091600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b15801561539957600080fd5b505af41580156153ad573d6000803e3d6000fd5b505050505b5b5b92915050565b61540c81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461453d90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506154648160035461453d90919063ffffffff16565b6003819055507fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8338383604051808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050565b6000808311829061558d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615552578082015181840152602081019050615537565b50505050905090810190601f16801561557f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161559957fe5b049050809150509392505050565b6000806155d66103e86155c8866005600101546146cf90919063ffffffff16565b61475590919063ffffffff16565b905060008590508315615671578073ffffffffffffffffffffffffffffffffffffffff16639dc29fac30846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561565457600080fd5b505af1158015615668573d6000803e3d6000fd5b505050506156dd565b8073ffffffffffffffffffffffffffffffffffffffff166342966c68836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156156c457600080fd5b505af11580156156d8573d6000803e3d6000fd5b505050505b8192505050939250505056fe53434152434954593a204d6967726174696f6e20636f6e7472616374206f6e6c794f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737353636172636974793a207472616e736665722066726f6d20746865207a65726f206164647265737353636172636974793a207472616e7366657220746f20746865207a65726f20616464726573734245484f444c45523a20457468206f6e6c792076616c696420666f722057657468207472616465732e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654245484f444c45523a205265656e7472616e6379206775617264206163746976652e4245484f444c45523a2063616e6e6f7420626f72726f7720666c6173686c6f616e45524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734245484f444c45523a20466c6173686c6f616e2072657061796d656e74206661696c65644245484f444c45523a206c6971756964697479207769746864726177616c20746f6f206c617267652e4245484f444c45523a20496e73756666696369656e742045746865722073656e7453636172636974793a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212209ef4374c42666b7b74de8bc485148947957d3b1f95989894777d35b03120163564736f6c63430007060033", | |
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH3 0x11 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLER PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x1E PUSH1 0xB PUSH1 0x0 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 PUSH1 0xFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x5A PUSH1 0xB PUSH1 0x0 ADD PUSH1 0x1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 PUSH1 0xFF AND MUL OR SWAP1 SSTORE POP PUSH1 0x0 JUMPDEST PUSH1 0x3 DUP2 PUSH1 0xFF AND LT ISZERO PUSH3 0x13B JUMPI PUSH1 0x1 PUSH1 0x11 DUP3 PUSH1 0xFF AND PUSH1 0x3 DUP2 LT PUSH3 0x10E JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH3 0xEE JUMP JUMPDEST POP PUSH2 0x5946 DUP1 PUSH3 0x14C PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x20E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x118 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xE22BCF84 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xE22BCF84 EQ PUSH2 0xD86 JUMPI DUP1 PUSH4 0xE2FC9D00 EQ PUSH2 0xDED JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xE56 JUMPI DUP1 PUSH4 0xFE029156 EQ PUSH2 0xEA7 JUMPI DUP1 PUSH4 0xFE25E00A EQ PUSH2 0xF35 JUMPI PUSH2 0x20E JUMP JUMPDEST DUP1 PUSH4 0xA9059CBB EQ PUSH2 0xBCE JUMPI DUP1 PUSH4 0xD2CB0100 EQ PUSH2 0xC3F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0xC9A JUMPI DUP1 PUSH4 0xE12FB1B9 EQ PUSH2 0xD1F JUMPI PUSH2 0x20E JUMP JUMPDEST DUP1 PUSH4 0x7B12A62C GT PUSH2 0xE7 JUMPI DUP1 PUSH4 0x7B12A62C EQ PUSH2 0xA27 JUMPI DUP1 PUSH4 0x7CD07E47 EQ PUSH2 0xA55 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xA96 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0xAD7 JUMPI DUP1 PUSH4 0xA451A2C1 EQ PUSH2 0xB67 JUMPI PUSH2 0x20E JUMP JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x8D9 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x93E JUMPI DUP1 PUSH4 0x72C3FDD9 EQ PUSH2 0x955 JUMPI DUP1 PUSH4 0x79502C55 EQ PUSH2 0x9D8 JUMPI PUSH2 0x20E JUMP JUMPDEST DUP1 PUSH4 0x23CF3118 GT PUSH2 0x19B JUMPI DUP1 PUSH4 0x42966C68 GT PUSH2 0x16A JUMPI DUP1 PUSH4 0x42966C68 EQ PUSH2 0x67B JUMPI DUP1 PUSH4 0x56688700 EQ PUSH2 0x6CC JUMPI DUP1 PUSH4 0x572861BC EQ PUSH2 0x72E JUMPI DUP1 PUSH4 0x6BD50CEF EQ PUSH2 0x779 JUMPI DUP1 PUSH4 0x6D3405F1 EQ PUSH2 0x7C8 JUMPI PUSH2 0x20E JUMP JUMPDEST DUP1 PUSH4 0x23CF3118 EQ PUSH2 0x55E JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x5AF JUMPI DUP1 PUSH4 0x349849A3 EQ PUSH2 0x5DD JUMPI DUP1 PUSH4 0x3F40D3A3 EQ PUSH2 0x61E JUMPI PUSH2 0x20E JUMP JUMPDEST DUP1 PUSH4 0x7D44E1A GT PUSH2 0x1E2 JUMPI DUP1 PUSH4 0x7D44E1A EQ PUSH2 0x3C5 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x406 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x477 JUMPI DUP1 PUSH4 0x21B77D63 EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x4CD JUMPI PUSH2 0x20E JUMP JUMPDEST DUP1 PUSH3 0x7ED4FE EQ PUSH2 0x213 JUMPI DUP1 PUSH4 0x319F4C6 EQ PUSH2 0x278 JUMPI DUP1 PUSH4 0x6D47DE9 EQ PUSH2 0x2D3 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x335 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x276 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x236 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xF76 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x284 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x29B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x10AE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x31F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1392 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x341 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34A PUSH2 0x1C31 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x38A JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x36F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3B7 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DA PUSH2 0x1C6E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x412 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x45F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x429 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1C94 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x483 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48C PUSH2 0x1CAB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B7 PUSH2 0x1CB5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x546 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x4F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1CBE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x56A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5AD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x581 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1D89 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5C4 PUSH2 0x1E8E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5F2 PUSH2 0x1E97 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x62A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x679 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x641 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1EBD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x687 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x69E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1FD9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x718 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x6E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1FEE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x73A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x777 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x751 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x29D3 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x785 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x78E PUSH2 0x2AD4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x8D7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x7EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2B16 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x928 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2DB0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x94A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x953 PUSH2 0x2DF9 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x961 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x978 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2F78 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9ED PUSH2 0x31C5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA3C PUSH2 0x31FD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA6A PUSH2 0x3217 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAAB PUSH2 0x323D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAEC PUSH2 0x3266 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB2C JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xB11 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xB59 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBB6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x32A3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC27 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xBF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x32C3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC98 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xC62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x32DA JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD09 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xCBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x338E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD6E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3415 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDD5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3435 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE54 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xE10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3455 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xEA5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3562 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xF1D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0xEBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3766 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF4A PUSH2 0x4517 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1037 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3E8 PUSH1 0x5 PUSH1 0x1 ADD SLOAD PUSH1 0x5 PUSH1 0x0 ADD SLOAD ADD LT PUSH2 0x1051 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x5 PUSH1 0x0 ADD DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x5 PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP DUP1 PUSH1 0x5 PUSH1 0x2 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0xF PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xE7FC864 CALLER PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x114D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1163 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x11C9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5835 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x121B DUP3 PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x453D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x4B64E492 CALLER PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x12DB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x134B DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x587A PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x45C5 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x148A JUMPI PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1444 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x57A1 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST ADDRESS PUSH1 0x10 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x14CC JUMP JUMPDEST CALLER PUSH1 0x10 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST DUP4 PUSH1 0x14 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x156E JUMPI POP PUSH1 0x13 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND JUMPDEST DUP1 PUSH2 0x15FF JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x15FE JUMPI POP PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST JUMPDEST PUSH2 0x1671 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4245484F444C45523A20746F6B656E20696E76616C6964000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1681 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x11 DUP2 PUSH1 0x3 DUP2 LT PUSH2 0x1690 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH2 0x16FB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5813 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x11 DUP3 PUSH1 0x3 DUP2 LT PUSH2 0x170A JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0xEEDC966A SWAP1 SWAP2 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x17BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x17D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x17FA DUP9 DUP4 PUSH2 0x4685 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH5 0xE8D4A51000 DUP2 GT PUSH2 0x1876 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4245484F444C45523A206D696E206C6971756964697479000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xB PUSH1 0x0 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0xFF AND PUSH2 0x18B2 DUP4 PUSH2 0x18A4 PUSH1 0x64 DUP13 PUSH2 0x46CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4755 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST GT ISZERO PUSH2 0x1909 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x589E PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1914 DUP4 PUSH2 0x479F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1921 DUP4 PUSH2 0x479F JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP4 GT PUSH2 0x1932 JUMPI PUSH1 0x0 PUSH2 0x1934 JUMP JUMPDEST DUP1 JUMPDEST DUP3 SUB SWAP9 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP DUP1 DUP11 GT ISZERO PUSH2 0x19A7 JUMPI PUSH1 0x0 DUP2 DUP12 SUB SWAP1 POP PUSH1 0x0 DUP12 PUSH2 0x2710 DUP4 MUL DUP2 PUSH2 0x199A JUMPI INVALID JUMPDEST DIV EQ ISZERO PUSH2 0x19A5 JUMPI DUP2 SWAP11 POP JUMPDEST POP JUMPDEST PUSH2 0x19B1 CALLER DUP12 PUSH2 0x48BA JUMP JUMPDEST PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1ABD JUMPI PUSH1 0x0 CALLER SWAP1 POP PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x205C2878 DUP3 DUP15 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1AB3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH2 0x1B79 JUMP JUMPDEST DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0x78D3B79 SWAP1 SWAP2 CALLER DUP15 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1B60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1B74 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH32 0xBA0B893B2F314A229997E335266881B5AC6B290BD350D2C23CC57160B77882B8 CALLER DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP PUSH1 0x1 PUSH1 0x11 DUP3 PUSH1 0x3 DUP2 LT PUSH2 0x1C08 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x8 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5363617263697479000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0xD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CA1 CALLER DUP5 DUP5 PUSH2 0x49DC JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 SLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH5 0xE8D4A51000 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CCB DUP5 DUP5 DUP5 PUSH2 0x4BD3 JUMP JUMPDEST PUSH2 0x1D7E DUP5 CALLER PUSH2 0x1D79 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x57EB PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x2 PUSH1 0x0 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x45C5 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x49DC JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1E4A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x4 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x12 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1F7E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x14 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1FE5 CALLER DUP4 PUSH2 0x48BA JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x20E6 JUMPI PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x20A0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x57A1 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST ADDRESS PUSH1 0x10 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x2128 JUMP JUMPDEST CALLER PUSH1 0x10 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST DUP4 PUSH1 0x14 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x21CA JUMPI POP PUSH1 0x13 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND JUMPDEST DUP1 PUSH2 0x225B JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x225A JUMPI POP PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST JUMPDEST PUSH2 0x22CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4245484F444C45523A20746F6B656E20696E76616C6964000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x22DD JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x11 DUP2 PUSH1 0x3 DUP2 LT PUSH2 0x22EC JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2357 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5813 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x11 DUP3 PUSH1 0x3 DUP2 LT PUSH2 0x2366 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH1 0x0 PUSH2 0x2454 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0x7FED018F SWAP1 SWAP2 PUSH5 0xE8D4A51000 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2414 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2428 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x243E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x5044 JUMP JUMPDEST PUSH1 0xF SIGNEXTEND SWAP1 POP PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x273C JUMPI DUP7 PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 CALLER PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2539 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x254D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2563 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP LT PUSH2 0x265B JUMPI PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0xE4652F49 SWAP1 SWAP2 CALLER DUP11 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x263E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2652 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x2737 JUMP JUMPDEST DUP7 CALLVALUE EQ PUSH2 0x26B3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x58C7 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 CALLVALUE PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x271D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2731 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST PUSH2 0x281A JUMP JUMPDEST DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0xE4652F49 SWAP1 SWAP2 PUSH1 0x10 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2801 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2815 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x0 PUSH2 0x2857 PUSH2 0x2852 PUSH5 0xE8D4A51000 PUSH2 0x2844 PUSH2 0x2835 DUP14 DUP14 PUSH2 0x5067 JUMP JUMPDEST DUP13 PUSH2 0x4685 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4755 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x5044 JUMP JUMPDEST PUSH1 0xF SIGNEXTEND SWAP1 POP PUSH1 0x0 PUSH2 0x2871 DUP3 DUP5 PUSH2 0x453D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH5 0xE8D4A51000 DUP2 LT ISZERO PUSH2 0x28EE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4245484F444C45523A206D696E206C69717569646974792E0000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP4 GT PUSH2 0x28FD JUMPI PUSH1 0x0 PUSH2 0x2907 JUMP JUMPDEST PUSH2 0x2906 DUP4 PUSH2 0x479F JUMP JUMPDEST JUMPDEST PUSH2 0x2910 DUP3 PUSH2 0x479F JUMP JUMPDEST SUB SWAP8 POP PUSH2 0x291D CALLER DUP10 PUSH2 0x53BA JUMP JUMPDEST PUSH32 0x36F3B2E1A21C19137DD82EC243B0708A1D26B3D1FA1DC49C44C4C366A5878138 CALLER DUP12 DUP12 DUP12 PUSH1 0x40 MLOAD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP PUSH1 0x1 PUSH1 0x11 DUP3 PUSH1 0x3 DUP2 LT PUSH2 0x29AA JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2A94 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0xB PUSH1 0x0 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 PUSH1 0xFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0xB PUSH1 0x0 ADD PUSH1 0x1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 PUSH1 0xFF AND MUL OR SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 ADD SLOAD PUSH1 0x5 PUSH1 0x1 ADD SLOAD PUSH1 0x5 PUSH1 0x2 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 POP SWAP3 POP SWAP3 POP SWAP1 SWAP2 SWAP3 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2BD7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP7 PUSH1 0xC PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP6 PUSH1 0xD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP5 PUSH1 0xF PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP4 PUSH1 0xE PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP3 PUSH1 0x8 PUSH1 0x1 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP2 PUSH1 0x8 PUSH1 0x0 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0x8 PUSH1 0x2 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2EBA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0xEEDC966A SWAP1 SWAP2 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2FF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x300C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3022 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x31B6 JUMPI PUSH1 0x0 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0xEEDC966A SWAP1 SWAP2 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x30C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x30D4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x30EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x3112 DUP10 DUP4 PUSH2 0x4685 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x311F DUP4 PUSH2 0x479F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x312C DUP4 PUSH2 0x479F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP5 GT PUSH2 0x313F JUMPI PUSH1 0x0 PUSH2 0x3141 JUMP JUMPDEST DUP2 JUMPDEST DUP4 SUB SWAP1 POP PUSH1 0x0 DUP2 DUP13 SUB SWAP1 POP PUSH1 0x0 DUP2 EQ ISZERO PUSH2 0x3166 JUMPI DUP13 SWAP10 POP POP POP POP POP POP POP POP POP POP PUSH2 0x31BD JUMP JUMPDEST PUSH1 0x0 DUP2 SLT ISZERO PUSH2 0x317A JUMPI PUSH1 0x1 DUP14 SUB SWAP9 POP PUSH2 0x3181 JUMP JUMPDEST PUSH1 0x1 DUP14 ADD SWAP8 POP JUMPDEST DUP8 PUSH1 0x2 DUP10 DUP12 SUB DUP2 PUSH2 0x318E JUMPI INVALID JUMPDEST DIV ADD SWAP13 POP DUP6 DUP14 GT PUSH2 0x319F JUMPI DUP13 PUSH2 0x31A1 JUMP JUMPDEST DUP6 JUMPDEST SWAP13 POP POP POP POP POP POP POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x3039 JUMP JUMPDEST POP DUP6 SWAP3 POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x5 DUP1 PUSH1 0x0 ADD SLOAD SWAP1 DUP1 PUSH1 0x1 ADD SLOAD SWAP1 DUP1 PUSH1 0x2 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xB PUSH1 0x0 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5343580000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x32D0 CALLER DUP5 DUP5 PUSH2 0x4BD3 JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3380 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x56EA PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x338A DUP3 DUP3 PUSH2 0x53BA JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x14 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0xD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x34AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x13 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0x12 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3623 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x36A9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x570B PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x385E JUMPI PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3818 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x57A1 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST ADDRESS PUSH1 0x10 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x38A0 JUMP JUMPDEST CALLER PUSH1 0x10 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST DUP6 PUSH1 0x14 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x3942 JUMPI POP PUSH1 0x13 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND JUMPDEST DUP1 PUSH2 0x39D3 JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x39D2 JUMPI POP PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST JUMPDEST PUSH2 0x3A45 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4245484F444C45523A20746F6B656E20696E76616C6964000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x3A54 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x11 DUP2 PUSH1 0x3 DUP2 LT PUSH2 0x3A63 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3ACE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5813 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x11 DUP3 PUSH1 0x3 DUP2 LT PUSH2 0x3ADD JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH1 0x0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0xEEDC966A SWAP1 SWAP2 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3B7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x3B8F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3BA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP SWAP1 POP PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x3E9B JUMPI DUP8 PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 CALLER PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3C98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3CAC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3CC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP LT PUSH2 0x3DBA JUMPI PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0xE4652F49 SWAP1 SWAP2 CALLER DUP12 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3D9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x3DB1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x3E96 JUMP JUMPDEST DUP8 CALLVALUE EQ PUSH2 0x3E12 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x58C7 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 CALLVALUE PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3E7C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3E90 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST PUSH2 0x3F79 JUMP JUMPDEST DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0xE4652F49 SWAP1 SWAP2 PUSH1 0x10 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3F60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x3F74 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x0 PUSH2 0x3F97 PUSH2 0x3F88 DUP13 DUP12 PUSH2 0x5067 JUMP JUMPDEST DUP11 PUSH2 0x4685 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0xEEDC966A SWAP1 SWAP2 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4018 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x402C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4042 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP SWAP1 POP PUSH1 0xB PUSH1 0x0 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0xFF AND PUSH2 0x4091 DUP3 PUSH2 0x4083 PUSH1 0x64 DUP14 PUSH2 0x46CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4755 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST GT ISZERO PUSH2 0x40E8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x589E PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x40FD DUP4 DUP6 PUSH2 0x453D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4114 DUP12 DUP5 PUSH2 0x4685 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4143 DUP4 PUSH1 0xB PUSH1 0x0 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0xFF AND DUP9 SWAP1 SHL PUSH2 0x4755 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4172 DUP6 PUSH1 0xB PUSH1 0x0 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0xFF AND DUP6 SWAP1 SHL PUSH2 0x4755 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 EQ ISZERO DUP1 ISZERO PUSH2 0x4184 JUMPI POP DUP1 DUP3 EQ JUMPDEST PUSH2 0x41F6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4245484F444C45523A207377617020696E76617269616E742E00000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP PUSH5 0xE8D4A51000 DUP2 LT ISZERO PUSH2 0x4273 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4245484F444C45523A206D696E206C69717569646974792E0000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x437F JUMPI PUSH1 0x0 CALLER SWAP1 POP PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x205C2878 DUP3 DUP15 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4361 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4375 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH2 0x443B JUMP JUMPDEST DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0x78D3B79 SWAP1 SWAP2 CALLER DUP15 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4422 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x4436 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH32 0xCD3829A3813DC3CDD188FD3D01DCF3268C16BE2FDD2DD21D0665418816E46062 CALLER DUP16 DUP16 DUP16 DUP16 PUSH1 0x40 MLOAD DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x1 SWAP10 POP POP POP POP POP POP PUSH1 0x1 PUSH1 0x11 DUP3 PUSH1 0x3 DUP2 LT PUSH2 0x44EC JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0xF PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 ADD SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x45BB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 GT ISZERO DUP3 SWAP1 PUSH2 0x4672 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4637 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x461C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4664 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 DUP4 DUP6 SUB SWAP1 POP DUP1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x46C7 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x45C5 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 EQ ISZERO PUSH2 0x46E2 JUMPI PUSH1 0x0 SWAP1 POP PUSH2 0x474F JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MUL SWAP1 POP DUP3 DUP5 DUP3 DUP2 PUSH2 0x46F3 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x474A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x57CA PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4797 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x54E1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x47AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 SWAP1 POP PUSH9 0x10000000000000000 DUP2 LT PUSH2 0x47D1 JUMPI PUSH1 0x40 DUP2 SWAP1 SHR SWAP1 POP PUSH1 0x40 DUP3 ADD SWAP2 POP JUMPDEST PUSH5 0x100000000 DUP2 LT PUSH2 0x47EB JUMPI PUSH1 0x20 DUP2 SWAP1 SHR SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP2 POP JUMPDEST PUSH3 0x10000 DUP2 LT PUSH2 0x4803 JUMPI PUSH1 0x10 DUP2 SWAP1 SHR SWAP1 POP PUSH1 0x10 DUP3 ADD SWAP2 POP JUMPDEST PUSH2 0x100 DUP2 LT PUSH2 0x481A JUMPI PUSH1 0x8 DUP2 SWAP1 SHR SWAP1 POP PUSH1 0x8 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x10 DUP2 LT PUSH2 0x4830 JUMPI PUSH1 0x4 DUP2 SWAP1 SHR SWAP1 POP PUSH1 0x4 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x4 DUP2 LT PUSH2 0x4846 JUMPI PUSH1 0x2 DUP2 SWAP1 SHR SWAP1 POP PUSH1 0x2 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x2 DUP2 LT PUSH2 0x4855 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP1 DUP5 SUB SWAP1 SHL SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x7F SUB DUP7 SWAP1 SHL SWAP1 POP PUSH1 0x0 PUSH8 0x8000000000000000 SWAP1 POP JUMPDEST PUSH1 0x0 DUP2 GT ISZERO PUSH2 0x48AD JUMPI DUP2 DUP3 MUL SWAP2 POP PUSH1 0x0 PUSH1 0xFF DUP4 SWAP1 SHR SWAP1 POP DUP1 PUSH1 0x7F ADD DUP4 SWAP1 SHR SWAP3 POP DUP1 DUP3 MUL DUP5 ADD SWAP4 POP POP PUSH1 0x1 DUP2 SWAP1 SHR SWAP1 POP PUSH2 0x4879 JUMP JUMPDEST POP DUP2 SWAP5 POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x4943 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x53434152434954593A20696E73756666696369656E742066756E647300000000 DUP2 MSTORE POP PUSH1 0x1 PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x45C5 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH2 0x499B DUP2 PUSH1 0x3 SLOAD PUSH2 0x4685 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x3 DUP2 SWAP1 SSTORE POP PUSH32 0xB90306AD06B2A6FF86DDC9327DB583062895EF6540E62DC50ADD009DB5B356EB DUP2 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x4A62 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5856 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x4AE8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5731 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x4C59 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5753 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x4CDF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x577B PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4D0D PUSH2 0x3E8 PUSH2 0x4CFF DUP5 PUSH1 0x5 PUSH1 0x0 ADD SLOAD PUSH2 0x46CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4755 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4D3D PUSH2 0x3E8 PUSH2 0x4D2F DUP6 PUSH1 0x5 PUSH1 0x1 ADD SLOAD PUSH2 0x46CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4755 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x4D54 DUP2 PUSH1 0x3 SLOAD PUSH2 0x4685 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x3 DUP2 SWAP1 SSTORE POP PUSH32 0xB90306AD06B2A6FF86DDC9327DB583062895EF6540E62DC50ADD009DB5B356EB DUP2 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x4E08 DUP3 PUSH1 0x1 PUSH1 0x0 PUSH1 0x5 PUSH1 0x2 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x453D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 PUSH1 0x5 PUSH1 0x2 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH2 0x4EDC DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x58E8 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x45C5 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH2 0x4F95 PUSH2 0x4F47 PUSH2 0x4F38 DUP4 DUP6 PUSH2 0x453D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP6 PUSH2 0x4685 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x453D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0x7FFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x505B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP3 SWAP1 SHL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x8 PUSH1 0x2 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x50D5 JUMPI PUSH2 0x50CE DUP4 DUP4 PUSH1 0x1 PUSH2 0x55A7 JUMP JUMPDEST SWAP1 POP PUSH2 0x53B4 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x513A JUMPI PUSH2 0x5133 DUP4 DUP4 PUSH1 0x0 PUSH2 0x55A7 JUMP JUMPDEST SWAP1 POP PUSH2 0x53B3 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x0 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x52A6 JUMPI PUSH2 0x51BF PUSH2 0x3E8 PUSH2 0x51B1 DUP5 PUSH1 0x5 PUSH1 0x1 ADD SLOAD PUSH2 0x46CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4755 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0x78D3B79 SWAP1 SWAP2 PUSH1 0x8 PUSH1 0x1 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5289 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x529D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x53B2 JUMP JUMPDEST PUSH2 0x52D2 PUSH2 0x3E8 PUSH2 0x52C4 DUP5 PUSH1 0x5 PUSH1 0x1 ADD SLOAD PUSH2 0x46CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4755 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0x78D3B79 SWAP1 SWAP2 PUSH1 0xE PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5399 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x53AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x540C DUP2 PUSH1 0x1 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x453D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH2 0x5464 DUP2 PUSH1 0x3 SLOAD PUSH2 0x453D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x3 DUP2 SWAP1 SSTORE POP PUSH32 0xAB8530F87DC9B59234C4623BF917212BB2536D647574C8E7E5DA92C2EDE0C9F8 CALLER DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 GT DUP3 SWAP1 PUSH2 0x558D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5552 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x5537 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x557F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x5599 JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x55D6 PUSH2 0x3E8 PUSH2 0x55C8 DUP7 PUSH1 0x5 PUSH1 0x1 ADD SLOAD PUSH2 0x46CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4755 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP6 SWAP1 POP DUP4 ISZERO PUSH2 0x5671 JUMPI DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9DC29FAC ADDRESS DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5654 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5668 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x56DD JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x42966C68 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x56C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x56D8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST DUP2 SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP INVALID MSTORE8 NUMBER COINBASE MSTORE NUMBER 0x49 SLOAD MSIZE GASPRICE KECCAK256 0x4D PUSH10 0x67726174696F6E20636F PUSH15 0x7472616374206F6E6C794F776E6162 PUSH13 0x653A206E6577206F776E657220 PUSH10 0x7320746865207A65726F KECCAK256 PUSH2 0x6464 PUSH19 0x65737345524332303A20617070726F76652074 PUSH16 0x20746865207A65726F20616464726573 PUSH20 0x53636172636974793A207472616E736665722066 PUSH19 0x6F6D20746865207A65726F2061646472657373 MSTORE8 PUSH4 0x61726369 PUSH21 0x793A207472616E7366657220746F20746865207A65 PUSH19 0x6F20616464726573734245484F444C45523A20 GASLIMIT PUSH21 0x68206F6E6C792076616C696420666F722057657468 KECCAK256 PUSH21 0x72616465732E536166654D6174683A206D756C7469 PUSH17 0x6C69636174696F6E206F766572666C6F77 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E63654245484F444C45523A20 MSTORE PUSH6 0x656E7472616E PUSH4 0x79206775 PUSH2 0x7264 KECCAK256 PUSH2 0x6374 PUSH10 0x76652E4245484F444C45 MSTORE GASPRICE KECCAK256 PUSH4 0x616E6E6F PUSH21 0x20626F72726F7720666C6173686C6F616E45524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F76652066726F6D20746865207A65726F2061 PUSH5 0x6472657373 TIMESTAMP GASLIMIT 0x48 0x4F DIFFICULTY 0x4C GASLIMIT MSTORE GASPRICE KECCAK256 CHAINID PUSH13 0x6173686C6F616E207265706179 PUSH14 0x656E74206661696C65644245484F DIFFICULTY 0x4C GASLIMIT MSTORE GASPRICE KECCAK256 PUSH13 0x69717569646974792077697468 PUSH5 0x726177616C KECCAK256 PUSH21 0x6F6F206C617267652E4245484F444C45523A20496E PUSH20 0x756666696369656E742045746865722073656E74 MSTORE8 PUSH4 0x61726369 PUSH21 0x793A207472616E7366657220616D6F756E74206578 PUSH4 0x65656473 KECCAK256 PUSH3 0x616C61 PUSH15 0x6365A26469706673582212209EF437 0x4C TIMESTAMP PUSH7 0x6B7B74DE8BC485 EQ DUP10 SELFBALANCE SWAP6 PUSH30 0x3B1F95989894777D35B03120163564736F6C634300070600330000000000 ", | |
"sourceMap": "5494:15085:0:-:0;;;6580:204;;;;;;;;;;235:10:8;226:6;;:19;;;;;;;;;;;;;;;;;;293:10;260:44;;289:1;260:44;;;;;;;;;;;;6643:2:0;6604:16;:36;;;:41;;;;;;;;;;;;;;;;;;6717:2;6681:16;:33;;;:38;;;;;;;;;;;;;;;;;;6734:7;6729:48;6751:1;6747;:5;;;6729:48;;;6773:4;6759:8;6768:1;6759:11;;;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;;;;;;;6754:3;;;;;;;6729:48;;;;5494:15085;;;;;;" | |
}, | |
"deployedBytecode": { | |
"generatedSources": [], | |
"immutableReferences": {}, | |
"linkReferences": { | |
"contracts/Behodler.sol": { | |
"AddressBalanceCheck": [ | |
{ | |
"length": 20, | |
"start": 5956 | |
}, | |
{ | |
"length": 20, | |
"start": 6870 | |
}, | |
{ | |
"length": 20, | |
"start": 9123 | |
}, | |
{ | |
"length": 20, | |
"start": 9652 | |
}, | |
{ | |
"length": 20, | |
"start": 10069 | |
}, | |
{ | |
"length": 20, | |
"start": 12180 | |
}, | |
{ | |
"length": 20, | |
"start": 12380 | |
}, | |
{ | |
"length": 20, | |
"start": 15127 | |
}, | |
{ | |
"length": 20, | |
"start": 15635 | |
}, | |
{ | |
"length": 20, | |
"start": 16052 | |
}, | |
{ | |
"length": 20, | |
"start": 16308 | |
}, | |
{ | |
"length": 20, | |
"start": 17304 | |
}, | |
{ | |
"length": 20, | |
"start": 20954 | |
}, | |
{ | |
"length": 20, | |
"start": 21229 | |
} | |
] | |
} | |
}, | |
"object": "60806040526004361061020e5760003560e01c806370a0823111610118578063a9059cbb116100a0578063e22bcf841161006f578063e22bcf8414610d86578063e2fc9d0014610ded578063f2fde38b14610e56578063fe02915614610ea7578063fe25e00a14610f355761020e565b8063a9059cbb14610bce578063d2cb010014610c3f578063dd62ed3e14610c9a578063e12fb1b914610d1f5761020e565b80637b12a62c116100e75780637b12a62c14610a275780637cd07e4714610a555780638da5cb5b14610a9657806395d89b4114610ad7578063a451a2c114610b675761020e565b806370a08231146108d9578063715018a61461093e57806372c3fdd91461095557806379502c55146109d85761020e565b806323cf31181161019b57806342966c681161016a57806342966c681461067b57806356688700146106cc578063572861bc1461072e5780636bd50cef146107795780636d3405f1146107c85761020e565b806323cf31181461055e578063313ce567146105af578063349849a3146105dd5780633f40d3a31461061e5761020e565b806307d44e1a116101e257806307d44e1a146103c5578063095ea7b31461040657806318160ddd1461047757806321b77d63146104a257806323b872dd146104cd5761020e565b80627ed4fe146102135780630319f4c61461027857806306d47de9146102d357806306fdde0314610335575b600080fd5b34801561021f57600080fd5b506102766004803603606081101561023657600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f76565b005b34801561028457600080fd5b506102d16004803603604081101561029b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110ae565b005b61031f600480360360408110156102e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611392565b6040518082815260200191505060405180910390f35b34801561034157600080fd5b5061034a611c31565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561038a57808201518184015260208101905061036f565b50505050905090810190601f1680156103b75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156103d157600080fd5b506103da611c6e565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561041257600080fd5b5061045f6004803603604081101561042957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611c94565b60405180821515815260200191505060405180910390f35b34801561048357600080fd5b5061048c611cab565b6040518082815260200191505060405180910390f35b3480156104ae57600080fd5b506104b7611cb5565b6040518082815260200191505060405180910390f35b3480156104d957600080fd5b50610546600480360360608110156104f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cbe565b60405180821515815260200191505060405180910390f35b34801561056a57600080fd5b506105ad6004803603602081101561058157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d89565b005b3480156105bb57600080fd5b506105c4611e8e565b604051808260ff16815260200191505060405180910390f35b3480156105e957600080fd5b506105f2611e97565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561062a57600080fd5b506106796004803603604081101561064157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611ebd565b005b34801561068757600080fd5b506106b46004803603602081101561069e57600080fd5b8101908080359060200190929190505050611fd9565b60405180821515815260200191505060405180910390f35b610718600480360360408110156106e257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611fee565b6040518082815260200191505060405180910390f35b34801561073a57600080fd5b506107776004803603604081101561075157600080fd5b81019080803560ff169060200190929190803560ff1690602001909291905050506129d3565b005b34801561078557600080fd5b5061078e612ad4565b604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390f35b3480156107d457600080fd5b506108d7600480360360e08110156107eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b16565b005b3480156108e557600080fd5b50610928600480360360208110156108fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612db0565b6040518082815260200191505060405180910390f35b34801561094a57600080fd5b50610953612df9565b005b34801561096157600080fd5b506109c26004803603608081101561097857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050612f78565b6040518082815260200191505060405180910390f35b3480156109e457600080fd5b506109ed6131c5565b604051808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405180910390f35b348015610a3357600080fd5b50610a3c6131fd565b604051808260ff16815260200191505060405180910390f35b348015610a6157600080fd5b50610a6a613217565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610aa257600080fd5b50610aab61323d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610ae357600080fd5b50610aec613266565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b2c578082015181840152602081019050610b11565b50505050905090810190601f168015610b595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b7357600080fd5b50610bb660048036036020811015610b8a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132a3565b60405180821515815260200191505060405180910390f35b348015610bda57600080fd5b50610c2760048036036040811015610bf157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506132c3565b60405180821515815260200191505060405180910390f35b348015610c4b57600080fd5b50610c9860048036036040811015610c6257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506132da565b005b348015610ca657600080fd5b50610d0960048036036040811015610cbd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061338e565b6040518082815260200191505060405180910390f35b348015610d2b57600080fd5b50610d6e60048036036020811015610d4257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613415565b60405180821515815260200191505060405180910390f35b348015610d9257600080fd5b50610dd560048036036020811015610da957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613435565b60405180821515815260200191505060405180910390f35b348015610df957600080fd5b50610e5460048036036060811015610e1057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190803515159060200190929190505050613455565b005b348015610e6257600080fd5b50610ea560048036036020811015610e7957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613562565b005b610f1d60048036036080811015610ebd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050613766565b60405180821515815260200191505060405180910390f35b348015610f4157600080fd5b50610f4a614517565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611037576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6103e8600560010154600560000154011061105157600080fd5b826005600001819055508160056001018190555080600560020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e7fc864336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561113957600080fd5b505af115801561114d573d6000803e3d6000fd5b505050506040513d602081101561116357600080fd5b81019080805190602001909291905050506111c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806158356021913960400191505060405180910390fd5b61121b82600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461453d90919063ffffffff16565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff16634b64e492336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff168152602001915050600060405180830381600087803b1580156112c757600080fd5b505af11580156112db573d6000803e3d6000fd5b5050505061134b8260405180606001604052806024815260200161587a60249139600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145c59092919063ffffffff16565b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600082600034111561148a57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611444576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806157a16029913960400191505060405180910390fd5b30601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506114cc565b33601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b83601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061156e5750601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806115ff5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156115fe5750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b5b611671576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4245484f444c45523a20746f6b656e20696e76616c696400000000000000000081525060200191505060405180910390fd5b6002600081600281111561168157fe5b90506011816003811061169057fe5b602091828204019190069054906101000a900460ff166116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806158136022913960400191505060405180910390fd5b60006011826003811061170a57fe5b602091828204019190066101000a81548160ff02191690831515021790555060008773ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63eedc966a90916040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156117a857600080fd5b505af41580156117bc573d6000803e3d6000fd5b505050506040513d60208110156117d257600080fd5b8101908080519060200190929190505050905060006117fa888361468590919063ffffffff16565b905064e8d4a510008111611876576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4245484f444c45523a206d696e206c697175696469747900000000000000000081525060200191505060405180910390fd5b600b60000160019054906101000a900460ff1660ff166118b2836118a460648c6146cf90919063ffffffff16565b61475590919063ffffffff16565b1115611909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061589e6029913960400191505060405180910390fd5b60006119148361479f565b905060006119218361479f565b905060018311611932576000611934565b805b820398506000600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050808a11156119a7576000818b03905060008b61271083028161199a57fe5b0414156119a557819a505b505b6119b1338b6148ba565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415611abd576000339050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663205c2878828e6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611a9f57600080fd5b505af1158015611ab3573d6000803e3d6000fd5b5050505050611b79565b8b73ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63078d3b799091338e6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b158015611b6057600080fd5b505af4158015611b74573d6000803e3d6000fd5b505050505b7fba0b893b2f314a229997e335266881b5ac6b290bd350d2c23cc57160b77882b8338d8d8d604051808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15050505050600160118260038110611c0857fe5b602091828204019190066101000a81548160ff0219169083151502179055505050505092915050565b60606040518060400160405280600881526020017f5363617263697479000000000000000000000000000000000000000000000000815250905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611ca13384846149dc565b6001905092915050565b6000600354905090565b64e8d4a5100081565b6000611ccb848484614bd3565b611d7e8433611d79856040518060600160405280602881526020016157eb60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145c59092919063ffffffff16565b6149dc565b600190509392505050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e4a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006012905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611fe533836148ba565b60019050919050565b60008260003411156120e657600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146120a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806157a16029913960400191505060405180910390fd5b30601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612128565b33601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b83601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806121ca5750601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061225b5750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561225a5750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b5b6122cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4245484f444c45523a20746f6b656e20696e76616c696400000000000000000081525060200191505060405180910390fd5b600160008160028111156122dd57fe5b9050601181600381106122ec57fe5b602091828204019190069054906101000a900460ff16612357576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806158136022913960400191505060405180910390fd5b60006011826003811061236657fe5b602091828204019190066101000a81548160ff02191690831515021790555060006124548873ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__637fed018f909164e8d4a510006040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060206040518083038186803b15801561241457600080fd5b505af4158015612428573d6000803e3d6000fd5b505050506040513d602081101561243e57600080fd5b8101908080519060200190929190505050615044565b600f0b9050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16141561273c5786600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561253957600080fd5b505afa15801561254d573d6000803e3d6000fd5b505050506040513d602081101561256357600080fd5b81019080805190602001909291905050501061265b57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63e4652f499091338a6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b15801561263e57600080fd5b505af4158015612652573d6000803e3d6000fd5b50505050612737565b8634146126b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806158c76021913960400191505060405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561271d57600080fd5b505af1158015612731573d6000803e3d6000fd5b50505050505b61281a565b8773ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63e4652f499091601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168a6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b15801561280157600080fd5b505af4158015612815573d6000803e3d6000fd5b505050505b600061285761285264e8d4a510006128446128358d8d615067565b8c61468590919063ffffffff16565b61475590919063ffffffff16565b615044565b600f0b90506000612871828461453d90919063ffffffff16565b905064e8d4a510008110156128ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4245484f444c45523a206d696e206c69717569646974792e000000000000000081525060200191505060405180910390fd5b600183116128fd576000612907565b6129068361479f565b5b6129108261479f565b03975061291d33896153ba565b7f36f3b2e1a21c19137dd82ec243b0708a1d26b3d1fa1dc49c44c4c366a5878138338b8b8b604051808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15050506001601182600381106129aa57fe5b602091828204019190066101000a81548160ff0219169083151502179055505050505092915050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a94576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b81600b60000160006101000a81548160ff021916908360ff16021790555080600b60000160016101000a81548160ff021916908360ff1602179055505050565b6000806000600560000154600560010154600560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16925092509250909192565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bd7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b86600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600860010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600860000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612eba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000808573ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63eedc966a90916040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612ff857600080fd5b505af415801561300c573d6000803e3d6000fd5b505050506040513d602081101561302257600080fd5b810190808051906020019092919050505090506000805b848110156131b65760008873ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63eedc966a90916040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156130c057600080fd5b505af41580156130d4573d6000803e3d6000fd5b505050506040513d60208110156130ea57600080fd5b810190808051906020019092919050505090506000613112898361468590919063ffffffff16565b9050600061311f8361479f565b9050600061312c8361479f565b905060006001841161313f576000613141565b815b830390506000818c0390506000811415613166578c99505050505050505050506131bd565b600081121561317a5760018d039850613181565b60018d0197505b876002898b038161318e57fe5b04019c50858d1161319f578c6131a1565b855b9c505050505050508080600101915050613039565b5085925050505b949350505050565b60058060000154908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905083565b6000600b60000160019054906101000a900460ff16905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600381526020017f5343580000000000000000000000000000000000000000000000000000000000815250905090565b60126020528060005260406000206000915054906101000a900460ff1681565b60006132d0338484614bd3565b6001905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614613380576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806156ea6021913960400191505060405180910390fd5b61338a82826153ba565b5050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b60146020528060005260406000206000915054906101000a900460ff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146134af57600080fd5b81601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b3373ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613623576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156136a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061570b6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600084600034111561385e57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613818576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806157a16029913960400191505060405180910390fd5b30601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506138a0565b33601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b85601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806139425750601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806139d35750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156139d25750600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b5b613a45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4245484f444c45523a20746f6b656e20696e76616c696400000000000000000081525060200191505060405180910390fd5b600080816002811115613a5457fe5b905060118160038110613a6357fe5b602091828204019190069054906101000a900460ff16613ace576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806158136022913960400191505060405180910390fd5b600060118260038110613add57fe5b602091828204019190066101000a81548160ff02191690831515021790555060008973ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63eedc966a90916040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613b7b57600080fd5b505af4158015613b8f573d6000803e3d6000fd5b505050506040513d6020811015613ba557600080fd5b81019080805190602001909291905050509050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161415613e9b5787600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015613c9857600080fd5b505afa158015613cac573d6000803e3d6000fd5b505050506040513d6020811015613cc257600080fd5b810190808051906020019092919050505010613dba57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63e4652f499091338b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b158015613d9d57600080fd5b505af4158015613db1573d6000803e3d6000fd5b50505050613e96565b873414613e12576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806158c76021913960400191505060405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015613e7c57600080fd5b505af1158015613e90573d6000803e3d6000fd5b50505050505b613f79565b8973ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63e4652f499091601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168b6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b158015613f6057600080fd5b505af4158015613f74573d6000803e3d6000fd5b505050505b6000613f97613f888c8b615067565b8a61468590919063ffffffff16565b905060008a73ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63eedc966a90916040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561401857600080fd5b505af415801561402c573d6000803e3d6000fd5b505050506040513d602081101561404257600080fd5b81019080805190602001909291905050509050600b60000160019054906101000a900460ff1660ff166140918261408360648d6146cf90919063ffffffff16565b61475590919063ffffffff16565b11156140e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018061589e6029913960400191505060405180910390fd5b60006140fd838561453d90919063ffffffff16565b905060006141148b8461468590919063ffffffff16565b9050600061414383600b60000160009054906101000a900460ff1660ff1688901b61475590919063ffffffff16565b9050600061417285600b60000160009054906101000a900460ff1660ff1685901b61475590919063ffffffff16565b90506000821415801561418457508082145b6141f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4245484f444c45523a207377617020696e76617269616e742e0000000000000081525060200191505060405180910390fd5b505064e8d4a51000811015614273576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f4245484f444c45523a206d696e206c69717569646974792e000000000000000081525060200191505060405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff16141561437f576000339050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663205c2878828e6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561436157600080fd5b505af1158015614375573d6000803e3d6000fd5b505050505061443b565b8c73ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63078d3b799091338e6040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b15801561442257600080fd5b505af4158015614436573d6000803e3d6000fd5b505050505b7fcd3829a3813dc3cdd188fd3d01dcf3268c16be2fdd2dd21d0665418816e46062338f8f8f8f604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019550505050505060405180910390a16001995050505050506001601182600381106144ec57fe5b602091828204019190066101000a81548160ff02191690831515021790555050505050949350505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808284019050838110156145bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000838311158290614672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561463757808201518184015260208101905061461c565b50505050905090810190601f1680156146645780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60006146c783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506145c5565b905092915050565b6000808314156146e2576000905061474f565b60008284029050828482816146f357fe5b041461474a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806157ca6021913960400191505060405180910390fd5b809150505b92915050565b600061479783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506154e1565b905092915050565b60008082116147ad57600080fd5b6000808390506801000000000000000081106147d157604081901c90506040820191505b64010000000081106147eb57602081901c90506020820191505b62010000811061480357601081901c90506010820191505b610100811061481a57600881901c90506008820191505b6010811061483057600481901c90506004820191505b6004811061484657600281901c90506002820191505b60028110614855576001820191505b60006040808403901b9050600083607f0386901b9050600067800000000000000090505b60008111156148ad578182029150600060ff83901c905080607f0183901c92508082028401935050600181901c9050614879565b5081945050505050919050565b614943816040518060400160405280601c81526020017f53434152434954593a20696e73756666696369656e742066756e647300000000815250600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145c59092919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061499b8160035461468590919063ffffffff16565b6003819055507fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb816040518082815260200191505060405180910390a15050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614a62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806158566024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614ae8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806157316022913960400191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415614c59576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806157536028913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614cdf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061577b6026913960400191505060405180910390fd5b6000614d0d6103e8614cff846005600001546146cf90919063ffffffff16565b61475590919063ffffffff16565b90506000614d3d6103e8614d2f856005600101546146cf90919063ffffffff16565b61475590919063ffffffff16565b9050614d548160035461468590919063ffffffff16565b6003819055507fb90306ad06b2a6ff86ddc9327db583062895ef6540e62dc50add009db5b356eb816040518082815260200191505060405180910390a1614e088260016000600560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461453d90919063ffffffff16565b60016000600560020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614edc836040518060600160405280602981526020016158e860299139600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546145c59092919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614f95614f47614f38838561453d90919063ffffffff16565b8561468590919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461453d90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35050505050565b6000677fffffffffffffff82111561505b57600080fd5b604082901b9050919050565b6000600860020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156150d5576150ce838360016155a7565b90506153b4565b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561513a57615133838360006155a7565b90506153b3565b600860000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156152a6576151bf6103e86151b1846005600101546146cf90919063ffffffff16565b61475590919063ffffffff16565b90508273ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63078d3b799091600860010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b15801561528957600080fd5b505af415801561529d573d6000803e3d6000fd5b505050506153b2565b6152d26103e86152c4846005600101546146cf90919063ffffffff16565b61475590919063ffffffff16565b90508273ffffffffffffffffffffffffffffffffffffffff1673__$07117496ca73519d0470721ed03d779520$__63078d3b799091600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060006040518083038186803b15801561539957600080fd5b505af41580156153ad573d6000803e3d6000fd5b505050505b5b5b92915050565b61540c81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461453d90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506154648160035461453d90919063ffffffff16565b6003819055507fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8338383604051808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405180910390a15050565b6000808311829061558d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015615552578082015181840152602081019050615537565b50505050905090810190601f16801561557f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161559957fe5b049050809150509392505050565b6000806155d66103e86155c8866005600101546146cf90919063ffffffff16565b61475590919063ffffffff16565b905060008590508315615671578073ffffffffffffffffffffffffffffffffffffffff16639dc29fac30846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561565457600080fd5b505af1158015615668573d6000803e3d6000fd5b505050506156dd565b8073ffffffffffffffffffffffffffffffffffffffff166342966c68836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156156c457600080fd5b505af11580156156d8573d6000803e3d6000fd5b505050505b8192505050939250505056fe53434152434954593a204d6967726174696f6e20636f6e7472616374206f6e6c794f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737353636172636974793a207472616e736665722066726f6d20746865207a65726f206164647265737353636172636974793a207472616e7366657220746f20746865207a65726f20616464726573734245484f444c45523a20457468206f6e6c792076616c696420666f722057657468207472616465732e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654245484f444c45523a205265656e7472616e6379206775617264206163746976652e4245484f444c45523a2063616e6e6f7420626f72726f7720666c6173686c6f616e45524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734245484f444c45523a20466c6173686c6f616e2072657061796d656e74206661696c65644245484f444c45523a206c6971756964697479207769746864726177616c20746f6f206c617267652e4245484f444c45523a20496e73756666696369656e742045746865722073656e7453636172636974793a207472616e7366657220616d6f756e7420657863656564732062616c616e6365a26469706673582212209ef4374c42666b7b74de8bc485148947957d3b1f95989894777d35b03120163564736f6c63430007060033", | |
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH2 0x20E JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x70A08231 GT PUSH2 0x118 JUMPI DUP1 PUSH4 0xA9059CBB GT PUSH2 0xA0 JUMPI DUP1 PUSH4 0xE22BCF84 GT PUSH2 0x6F JUMPI DUP1 PUSH4 0xE22BCF84 EQ PUSH2 0xD86 JUMPI DUP1 PUSH4 0xE2FC9D00 EQ PUSH2 0xDED JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0xE56 JUMPI DUP1 PUSH4 0xFE029156 EQ PUSH2 0xEA7 JUMPI DUP1 PUSH4 0xFE25E00A EQ PUSH2 0xF35 JUMPI PUSH2 0x20E JUMP JUMPDEST DUP1 PUSH4 0xA9059CBB EQ PUSH2 0xBCE JUMPI DUP1 PUSH4 0xD2CB0100 EQ PUSH2 0xC3F JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0xC9A JUMPI DUP1 PUSH4 0xE12FB1B9 EQ PUSH2 0xD1F JUMPI PUSH2 0x20E JUMP JUMPDEST DUP1 PUSH4 0x7B12A62C GT PUSH2 0xE7 JUMPI DUP1 PUSH4 0x7B12A62C EQ PUSH2 0xA27 JUMPI DUP1 PUSH4 0x7CD07E47 EQ PUSH2 0xA55 JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xA96 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0xAD7 JUMPI DUP1 PUSH4 0xA451A2C1 EQ PUSH2 0xB67 JUMPI PUSH2 0x20E JUMP JUMPDEST DUP1 PUSH4 0x70A08231 EQ PUSH2 0x8D9 JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x93E JUMPI DUP1 PUSH4 0x72C3FDD9 EQ PUSH2 0x955 JUMPI DUP1 PUSH4 0x79502C55 EQ PUSH2 0x9D8 JUMPI PUSH2 0x20E JUMP JUMPDEST DUP1 PUSH4 0x23CF3118 GT PUSH2 0x19B JUMPI DUP1 PUSH4 0x42966C68 GT PUSH2 0x16A JUMPI DUP1 PUSH4 0x42966C68 EQ PUSH2 0x67B JUMPI DUP1 PUSH4 0x56688700 EQ PUSH2 0x6CC JUMPI DUP1 PUSH4 0x572861BC EQ PUSH2 0x72E JUMPI DUP1 PUSH4 0x6BD50CEF EQ PUSH2 0x779 JUMPI DUP1 PUSH4 0x6D3405F1 EQ PUSH2 0x7C8 JUMPI PUSH2 0x20E JUMP JUMPDEST DUP1 PUSH4 0x23CF3118 EQ PUSH2 0x55E JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x5AF JUMPI DUP1 PUSH4 0x349849A3 EQ PUSH2 0x5DD JUMPI DUP1 PUSH4 0x3F40D3A3 EQ PUSH2 0x61E JUMPI PUSH2 0x20E JUMP JUMPDEST DUP1 PUSH4 0x7D44E1A GT PUSH2 0x1E2 JUMPI DUP1 PUSH4 0x7D44E1A EQ PUSH2 0x3C5 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x406 JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x477 JUMPI DUP1 PUSH4 0x21B77D63 EQ PUSH2 0x4A2 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x4CD JUMPI PUSH2 0x20E JUMP JUMPDEST DUP1 PUSH3 0x7ED4FE EQ PUSH2 0x213 JUMPI DUP1 PUSH4 0x319F4C6 EQ PUSH2 0x278 JUMPI DUP1 PUSH4 0x6D47DE9 EQ PUSH2 0x2D3 JUMPI DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x335 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x21F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x276 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x236 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0xF76 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x284 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x2D1 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x29B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x10AE JUMP JUMPDEST STOP JUMPDEST PUSH2 0x31F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x2E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1392 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x341 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x34A PUSH2 0x1C31 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x38A JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x36F JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x3B7 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x3D1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x3DA PUSH2 0x1C6E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x412 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x45F PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x429 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1C94 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x483 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x48C PUSH2 0x1CAB JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4AE JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x4B7 PUSH2 0x1CB5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x4D9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x546 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0x4F0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1CBE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x56A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5AD PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x581 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1D89 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5BB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5C4 PUSH2 0x1E8E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x5E9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x5F2 PUSH2 0x1E97 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x62A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x679 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x641 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1EBD JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x687 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x6B4 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x69E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1FD9 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0x718 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x6E2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x1FEE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x73A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x777 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0x751 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH1 0xFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x29D3 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x785 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x78E PUSH2 0x2AD4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x7D4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x8D7 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0xE0 DUP2 LT ISZERO PUSH2 0x7EB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2B16 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x8E5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x928 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x8FC JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2DB0 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x94A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x953 PUSH2 0x2DF9 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x961 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9C2 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0x978 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x2F78 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0x9E4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x9ED PUSH2 0x31C5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP5 DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA33 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA3C PUSH2 0x31FD JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH1 0xFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xA61 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xA6A PUSH2 0x3217 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAA2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAAB PUSH2 0x323D JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xAE3 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xAEC PUSH2 0x3266 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xB2C JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0xB11 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0xB59 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xB73 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xBB6 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xB8A JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x32A3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xBDA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC27 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xBF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x32C3 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xC4B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xC98 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xC62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x32DA JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xCA6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD09 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x40 DUP2 LT ISZERO PUSH2 0xCBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x338E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD2B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xD6E PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xD42 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3415 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xD92 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xDD5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xDA9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3435 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xDF9 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xE54 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x60 DUP2 LT ISZERO PUSH2 0xE10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD ISZERO ISZERO SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3455 JUMP JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xE62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xEA5 PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x20 DUP2 LT ISZERO PUSH2 0xE79 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3562 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xF1D PUSH1 0x4 DUP1 CALLDATASIZE SUB PUSH1 0x80 DUP2 LT ISZERO PUSH2 0xEBD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x3766 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLVALUE DUP1 ISZERO PUSH2 0xF41 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0xF4A PUSH2 0x4517 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1037 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x3E8 PUSH1 0x5 PUSH1 0x1 ADD SLOAD PUSH1 0x5 PUSH1 0x0 ADD SLOAD ADD LT PUSH2 0x1051 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 PUSH1 0x5 PUSH1 0x0 ADD DUP2 SWAP1 SSTORE POP DUP2 PUSH1 0x5 PUSH1 0x1 ADD DUP2 SWAP1 SSTORE POP DUP1 PUSH1 0x5 PUSH1 0x2 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST PUSH1 0xF PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xE7FC864 CALLER PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1139 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x114D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x1163 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x11C9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5835 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x121B DUP3 PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x453D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x4B64E492 CALLER PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x12C7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x12DB JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x134B DUP3 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x587A PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x45C5 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x148A JUMPI PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1444 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x57A1 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST ADDRESS PUSH1 0x10 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x14CC JUMP JUMPDEST CALLER PUSH1 0x10 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST DUP4 PUSH1 0x14 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x156E JUMPI POP PUSH1 0x13 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND JUMPDEST DUP1 PUSH2 0x15FF JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x15FE JUMPI POP PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST JUMPDEST PUSH2 0x1671 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4245484F444C45523A20746F6B656E20696E76616C6964000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x2 PUSH1 0x0 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x1681 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x11 DUP2 PUSH1 0x3 DUP2 LT PUSH2 0x1690 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH2 0x16FB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5813 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x11 DUP3 PUSH1 0x3 DUP2 LT PUSH2 0x170A JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0xEEDC966A SWAP1 SWAP2 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x17A8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x17BC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x17D2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x17FA DUP9 DUP4 PUSH2 0x4685 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH5 0xE8D4A51000 DUP2 GT PUSH2 0x1876 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4245484F444C45523A206D696E206C6971756964697479000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xB PUSH1 0x0 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0xFF AND PUSH2 0x18B2 DUP4 PUSH2 0x18A4 PUSH1 0x64 DUP13 PUSH2 0x46CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4755 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST GT ISZERO PUSH2 0x1909 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x589E PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x1914 DUP4 PUSH2 0x479F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x1921 DUP4 PUSH2 0x479F JUMP JUMPDEST SWAP1 POP PUSH1 0x1 DUP4 GT PUSH2 0x1932 JUMPI PUSH1 0x0 PUSH2 0x1934 JUMP JUMPDEST DUP1 JUMPDEST DUP3 SUB SWAP9 POP PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP DUP1 DUP11 GT ISZERO PUSH2 0x19A7 JUMPI PUSH1 0x0 DUP2 DUP12 SUB SWAP1 POP PUSH1 0x0 DUP12 PUSH2 0x2710 DUP4 MUL DUP2 PUSH2 0x199A JUMPI INVALID JUMPDEST DIV EQ ISZERO PUSH2 0x19A5 JUMPI DUP2 SWAP11 POP JUMPDEST POP JUMPDEST PUSH2 0x19B1 CALLER DUP12 PUSH2 0x48BA JUMP JUMPDEST PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x1ABD JUMPI PUSH1 0x0 CALLER SWAP1 POP PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x205C2878 DUP3 DUP15 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1A9F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x1AB3 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH2 0x1B79 JUMP JUMPDEST DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0x78D3B79 SWAP1 SWAP2 CALLER DUP15 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x1B60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x1B74 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH32 0xBA0B893B2F314A229997E335266881B5AC6B290BD350D2C23CC57160B77882B8 CALLER DUP14 DUP14 DUP14 PUSH1 0x40 MLOAD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP PUSH1 0x1 PUSH1 0x11 DUP3 PUSH1 0x3 DUP2 LT PUSH2 0x1C08 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x8 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5363617263697479000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0xD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CA1 CALLER DUP5 DUP5 PUSH2 0x49DC JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x3 SLOAD SWAP1 POP SWAP1 JUMP JUMPDEST PUSH5 0xE8D4A51000 DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1CCB DUP5 DUP5 DUP5 PUSH2 0x4BD3 JUMP JUMPDEST PUSH2 0x1D7E DUP5 CALLER PUSH2 0x1D79 DUP6 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x57EB PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x2 PUSH1 0x0 DUP12 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x45C5 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x49DC JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1E4A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x4 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x12 SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x1F7E JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x14 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x1FE5 CALLER DUP4 PUSH2 0x48BA JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP3 PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x20E6 JUMPI PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x20A0 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x57A1 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST ADDRESS PUSH1 0x10 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x2128 JUMP JUMPDEST CALLER PUSH1 0x10 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST DUP4 PUSH1 0x14 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x21CA JUMPI POP PUSH1 0x13 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND JUMPDEST DUP1 PUSH2 0x225B JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x225A JUMPI POP PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST JUMPDEST PUSH2 0x22CD JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4245484F444C45523A20746F6B656E20696E76616C6964000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x22DD JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x11 DUP2 PUSH1 0x3 DUP2 LT PUSH2 0x22EC JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH2 0x2357 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5813 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x11 DUP3 PUSH1 0x3 DUP2 LT PUSH2 0x2366 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH1 0x0 PUSH2 0x2454 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0x7FED018F SWAP1 SWAP2 PUSH5 0xE8D4A51000 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2414 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2428 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x243E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH2 0x5044 JUMP JUMPDEST PUSH1 0xF SIGNEXTEND SWAP1 POP PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x273C JUMPI DUP7 PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 CALLER PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2539 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x254D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x2563 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP LT PUSH2 0x265B JUMPI PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0xE4652F49 SWAP1 SWAP2 CALLER DUP11 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x263E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2652 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x2737 JUMP JUMPDEST DUP7 CALLVALUE EQ PUSH2 0x26B3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x58C7 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 CALLVALUE PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x271D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x2731 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST PUSH2 0x281A JUMP JUMPDEST DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0xE4652F49 SWAP1 SWAP2 PUSH1 0x10 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2801 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x2815 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x0 PUSH2 0x2857 PUSH2 0x2852 PUSH5 0xE8D4A51000 PUSH2 0x2844 PUSH2 0x2835 DUP14 DUP14 PUSH2 0x5067 JUMP JUMPDEST DUP13 PUSH2 0x4685 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4755 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x5044 JUMP JUMPDEST PUSH1 0xF SIGNEXTEND SWAP1 POP PUSH1 0x0 PUSH2 0x2871 DUP3 DUP5 PUSH2 0x453D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH5 0xE8D4A51000 DUP2 LT ISZERO PUSH2 0x28EE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4245484F444C45523A206D696E206C69717569646974792E0000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x1 DUP4 GT PUSH2 0x28FD JUMPI PUSH1 0x0 PUSH2 0x2907 JUMP JUMPDEST PUSH2 0x2906 DUP4 PUSH2 0x479F JUMP JUMPDEST JUMPDEST PUSH2 0x2910 DUP3 PUSH2 0x479F JUMP JUMPDEST SUB SWAP8 POP PUSH2 0x291D CALLER DUP10 PUSH2 0x53BA JUMP JUMPDEST PUSH32 0x36F3B2E1A21C19137DD82EC243B0708A1D26B3D1FA1DC49C44C4C366A5878138 CALLER DUP12 DUP12 DUP12 PUSH1 0x40 MLOAD DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP5 POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP PUSH1 0x1 PUSH1 0x11 DUP3 PUSH1 0x3 DUP2 LT PUSH2 0x29AA JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP POP POP POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2A94 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP2 PUSH1 0xB PUSH1 0x0 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 PUSH1 0xFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0xB PUSH1 0x0 ADD PUSH1 0x1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 PUSH1 0xFF AND MUL OR SWAP1 SSTORE POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x5 PUSH1 0x0 ADD SLOAD PUSH1 0x5 PUSH1 0x1 ADD SLOAD PUSH1 0x5 PUSH1 0x2 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP3 POP SWAP3 POP SWAP3 POP SWAP1 SWAP2 SWAP3 JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2BD7 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP7 PUSH1 0xC PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP6 PUSH1 0xD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP5 PUSH1 0xF PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP4 PUSH1 0xE PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP3 PUSH1 0x8 PUSH1 0x1 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP2 PUSH1 0x8 PUSH1 0x0 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0x8 PUSH1 0x2 ADD PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x1 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x2EBA JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 PUSH1 0x0 DUP1 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0xEEDC966A SWAP1 SWAP2 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x2FF8 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x300C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3022 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP SWAP1 POP PUSH1 0x0 DUP1 JUMPDEST DUP5 DUP2 LT ISZERO PUSH2 0x31B6 JUMPI PUSH1 0x0 DUP9 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0xEEDC966A SWAP1 SWAP2 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x30C0 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x30D4 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x30EA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP SWAP1 POP PUSH1 0x0 PUSH2 0x3112 DUP10 DUP4 PUSH2 0x4685 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x311F DUP4 PUSH2 0x479F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x312C DUP4 PUSH2 0x479F JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH1 0x1 DUP5 GT PUSH2 0x313F JUMPI PUSH1 0x0 PUSH2 0x3141 JUMP JUMPDEST DUP2 JUMPDEST DUP4 SUB SWAP1 POP PUSH1 0x0 DUP2 DUP13 SUB SWAP1 POP PUSH1 0x0 DUP2 EQ ISZERO PUSH2 0x3166 JUMPI DUP13 SWAP10 POP POP POP POP POP POP POP POP POP POP PUSH2 0x31BD JUMP JUMPDEST PUSH1 0x0 DUP2 SLT ISZERO PUSH2 0x317A JUMPI PUSH1 0x1 DUP14 SUB SWAP9 POP PUSH2 0x3181 JUMP JUMPDEST PUSH1 0x1 DUP14 ADD SWAP8 POP JUMPDEST DUP8 PUSH1 0x2 DUP10 DUP12 SUB DUP2 PUSH2 0x318E JUMPI INVALID JUMPDEST DIV ADD SWAP13 POP DUP6 DUP14 GT PUSH2 0x319F JUMPI DUP13 PUSH2 0x31A1 JUMP JUMPDEST DUP6 JUMPDEST SWAP13 POP POP POP POP POP POP POP DUP1 DUP1 PUSH1 0x1 ADD SWAP2 POP POP PUSH2 0x3039 JUMP JUMPDEST POP DUP6 SWAP3 POP POP POP JUMPDEST SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x5 DUP1 PUSH1 0x0 ADD SLOAD SWAP1 DUP1 PUSH1 0x1 ADD SLOAD SWAP1 DUP1 PUSH1 0x2 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP DUP4 JUMP JUMPDEST PUSH1 0x0 PUSH1 0xB PUSH1 0x0 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x4 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x3 DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x5343580000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 PUSH2 0x32D0 CALLER DUP5 DUP5 PUSH2 0x4BD3 JUMP JUMPDEST PUSH1 0x1 SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x4 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3380 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x56EA PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x338A DUP3 DUP3 PUSH2 0x53BA JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x2 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x13 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0x14 PUSH1 0x20 MSTORE DUP1 PUSH1 0x0 MSTORE PUSH1 0x40 PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP2 POP SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP2 JUMP JUMPDEST PUSH1 0xD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x34AF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 PUSH1 0x13 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP DUP1 PUSH1 0x12 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP POP POP POP JUMP JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3623 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x20 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x36A9 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x570B PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x0 DUP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 DUP1 PUSH1 0x0 DUP1 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 PUSH1 0x0 CALLVALUE GT ISZERO PUSH2 0x385E JUMPI PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ PUSH2 0x3818 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x57A1 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST ADDRESS PUSH1 0x10 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP PUSH2 0x38A0 JUMP JUMPDEST CALLER PUSH1 0x10 PUSH1 0x0 PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF MUL NOT AND SWAP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND MUL OR SWAP1 SSTORE POP JUMPDEST DUP6 PUSH1 0x14 PUSH1 0x0 CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND DUP1 PUSH2 0x3942 JUMPI POP PUSH1 0x13 PUSH1 0x0 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND JUMPDEST DUP1 PUSH2 0x39D3 JUMPI POP PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO DUP1 ISZERO PUSH2 0x39D2 JUMPI POP PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ JUMPDEST JUMPDEST PUSH2 0x3A45 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x17 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4245484F444C45523A20746F6B656E20696E76616C6964000000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP2 PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x3A54 JUMPI INVALID JUMPDEST SWAP1 POP PUSH1 0x11 DUP2 PUSH1 0x3 DUP2 LT PUSH2 0x3A63 JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH2 0x3ACE JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5813 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH1 0x11 DUP3 PUSH1 0x3 DUP2 LT PUSH2 0x3ADD JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP PUSH1 0x0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0xEEDC966A SWAP1 SWAP2 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3B7B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x3B8F JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3BA5 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP SWAP1 POP PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x3E9B JUMPI DUP8 PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x70A08231 CALLER PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3C98 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS STATICCALL ISZERO DUP1 ISZERO PUSH2 0x3CAC JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x3CC2 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP LT PUSH2 0x3DBA JUMPI PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0xE4652F49 SWAP1 SWAP2 CALLER DUP12 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3D9D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x3DB1 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x3E96 JUMP JUMPDEST DUP8 CALLVALUE EQ PUSH2 0x3E12 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x58C7 PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0xD0E30DB0 CALLVALUE PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3E7C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x3E90 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP JUMPDEST PUSH2 0x3F79 JUMP JUMPDEST DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0xE4652F49 SWAP1 SWAP2 PUSH1 0x10 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP12 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x3F60 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x3F74 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH1 0x0 PUSH2 0x3F97 PUSH2 0x3F88 DUP13 DUP12 PUSH2 0x5067 JUMP JUMPDEST DUP11 PUSH2 0x4685 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP11 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0xEEDC966A SWAP1 SWAP2 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x20 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4018 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x402C JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH1 0x40 MLOAD RETURNDATASIZE PUSH1 0x20 DUP2 LT ISZERO PUSH2 0x4042 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 ADD SWAP1 DUP1 DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP SWAP1 POP PUSH1 0xB PUSH1 0x0 ADD PUSH1 0x1 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0xFF AND PUSH2 0x4091 DUP3 PUSH2 0x4083 PUSH1 0x64 DUP14 PUSH2 0x46CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4755 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST GT ISZERO PUSH2 0x40E8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x589E PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x40FD DUP4 DUP6 PUSH2 0x453D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4114 DUP12 DUP5 PUSH2 0x4685 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4143 DUP4 PUSH1 0xB PUSH1 0x0 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0xFF AND DUP9 SWAP1 SHL PUSH2 0x4755 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4172 DUP6 PUSH1 0xB PUSH1 0x0 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND PUSH1 0xFF AND DUP6 SWAP1 SHL PUSH2 0x4755 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP3 EQ ISZERO DUP1 ISZERO PUSH2 0x4184 JUMPI POP DUP1 DUP3 EQ JUMPDEST PUSH2 0x41F6 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x19 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4245484F444C45523A207377617020696E76617269616E742E00000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP POP PUSH5 0xE8D4A51000 DUP2 LT ISZERO PUSH2 0x4273 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x18 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x4245484F444C45523A206D696E206C69717569646974792E0000000000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP14 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x437F JUMPI PUSH1 0x0 CALLER SWAP1 POP PUSH1 0xC PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x205C2878 DUP3 DUP15 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4361 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x4375 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP POP PUSH2 0x443B JUMP JUMPDEST DUP13 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0x78D3B79 SWAP1 SWAP2 CALLER DUP15 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x4422 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x4436 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST PUSH32 0xCD3829A3813DC3CDD188FD3D01DCF3268C16BE2FDD2DD21D0665418816E46062 CALLER DUP16 DUP16 DUP16 DUP16 PUSH1 0x40 MLOAD DUP1 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP6 POP POP POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH1 0x1 SWAP10 POP POP POP POP POP POP PUSH1 0x1 PUSH1 0x11 DUP3 PUSH1 0x3 DUP2 LT PUSH2 0x44EC JUMPI INVALID JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP3 DIV ADD SWAP2 SWAP1 MOD PUSH2 0x100 EXP DUP2 SLOAD DUP2 PUSH1 0xFF MUL NOT AND SWAP1 DUP4 ISZERO ISZERO MUL OR SWAP1 SSTORE POP POP POP POP POP SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0xF PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 DUP5 ADD SWAP1 POP DUP4 DUP2 LT ISZERO PUSH2 0x45BB JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x1B DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH32 0x536166654D6174683A206164646974696F6E206F766572666C6F770000000000 DUP2 MSTORE POP PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SWAP2 POP POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP4 DUP4 GT ISZERO DUP3 SWAP1 PUSH2 0x4672 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x4637 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x461C JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x4664 JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 DUP4 DUP6 SUB SWAP1 POP DUP1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x46C7 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1E DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A207375627472616374696F6E206F766572666C6F770000 DUP2 MSTORE POP PUSH2 0x45C5 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 EQ ISZERO PUSH2 0x46E2 JUMPI PUSH1 0x0 SWAP1 POP PUSH2 0x474F JUMP JUMPDEST PUSH1 0x0 DUP3 DUP5 MUL SWAP1 POP DUP3 DUP5 DUP3 DUP2 PUSH2 0x46F3 JUMPI INVALID JUMPDEST DIV EQ PUSH2 0x474A JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x21 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x57CA PUSH1 0x21 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 SWAP2 POP POP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH2 0x4797 DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1A DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x536166654D6174683A206469766973696F6E206279207A65726F000000000000 DUP2 MSTORE POP PUSH2 0x54E1 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP3 GT PUSH2 0x47AD JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 DUP1 DUP4 SWAP1 POP PUSH9 0x10000000000000000 DUP2 LT PUSH2 0x47D1 JUMPI PUSH1 0x40 DUP2 SWAP1 SHR SWAP1 POP PUSH1 0x40 DUP3 ADD SWAP2 POP JUMPDEST PUSH5 0x100000000 DUP2 LT PUSH2 0x47EB JUMPI PUSH1 0x20 DUP2 SWAP1 SHR SWAP1 POP PUSH1 0x20 DUP3 ADD SWAP2 POP JUMPDEST PUSH3 0x10000 DUP2 LT PUSH2 0x4803 JUMPI PUSH1 0x10 DUP2 SWAP1 SHR SWAP1 POP PUSH1 0x10 DUP3 ADD SWAP2 POP JUMPDEST PUSH2 0x100 DUP2 LT PUSH2 0x481A JUMPI PUSH1 0x8 DUP2 SWAP1 SHR SWAP1 POP PUSH1 0x8 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x10 DUP2 LT PUSH2 0x4830 JUMPI PUSH1 0x4 DUP2 SWAP1 SHR SWAP1 POP PUSH1 0x4 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x4 DUP2 LT PUSH2 0x4846 JUMPI PUSH1 0x2 DUP2 SWAP1 SHR SWAP1 POP PUSH1 0x2 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x2 DUP2 LT PUSH2 0x4855 JUMPI PUSH1 0x1 DUP3 ADD SWAP2 POP JUMPDEST PUSH1 0x0 PUSH1 0x40 DUP1 DUP5 SUB SWAP1 SHL SWAP1 POP PUSH1 0x0 DUP4 PUSH1 0x7F SUB DUP7 SWAP1 SHL SWAP1 POP PUSH1 0x0 PUSH8 0x8000000000000000 SWAP1 POP JUMPDEST PUSH1 0x0 DUP2 GT ISZERO PUSH2 0x48AD JUMPI DUP2 DUP3 MUL SWAP2 POP PUSH1 0x0 PUSH1 0xFF DUP4 SWAP1 SHR SWAP1 POP DUP1 PUSH1 0x7F ADD DUP4 SWAP1 SHR SWAP3 POP DUP1 DUP3 MUL DUP5 ADD SWAP4 POP POP PUSH1 0x1 DUP2 SWAP1 SHR SWAP1 POP PUSH2 0x4879 JUMP JUMPDEST POP DUP2 SWAP5 POP POP POP POP POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH2 0x4943 DUP2 PUSH1 0x40 MLOAD DUP1 PUSH1 0x40 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x1C DUP2 MSTORE PUSH1 0x20 ADD PUSH32 0x53434152434954593A20696E73756666696369656E742066756E647300000000 DUP2 MSTORE POP PUSH1 0x1 PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x45C5 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH2 0x499B DUP2 PUSH1 0x3 SLOAD PUSH2 0x4685 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x3 DUP2 SWAP1 SSTORE POP PUSH32 0xB90306AD06B2A6FF86DDC9327DB583062895EF6540E62DC50ADD009DB5B356EB DUP2 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x4A62 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5856 PUSH1 0x24 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x4AE8 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x22 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5731 PUSH1 0x22 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST DUP1 PUSH1 0x2 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 DUP4 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x4C59 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x28 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x5753 PUSH1 0x28 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x4CDF JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE PUSH1 0x26 DUP2 MSTORE PUSH1 0x20 ADD DUP1 PUSH2 0x577B PUSH1 0x26 SWAP2 CODECOPY PUSH1 0x40 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH1 0x0 PUSH2 0x4D0D PUSH2 0x3E8 PUSH2 0x4CFF DUP5 PUSH1 0x5 PUSH1 0x0 ADD SLOAD PUSH2 0x46CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4755 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 PUSH2 0x4D3D PUSH2 0x3E8 PUSH2 0x4D2F DUP6 PUSH1 0x5 PUSH1 0x1 ADD SLOAD PUSH2 0x46CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4755 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH2 0x4D54 DUP2 PUSH1 0x3 SLOAD PUSH2 0x4685 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x3 DUP2 SWAP1 SSTORE POP PUSH32 0xB90306AD06B2A6FF86DDC9327DB583062895EF6540E62DC50ADD009DB5B356EB DUP2 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 PUSH2 0x4E08 DUP3 PUSH1 0x1 PUSH1 0x0 PUSH1 0x5 PUSH1 0x2 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x453D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 PUSH1 0x5 PUSH1 0x2 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH2 0x4EDC DUP4 PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 ADD PUSH1 0x40 MSTORE DUP1 PUSH1 0x29 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0x58E8 PUSH1 0x29 SWAP2 CODECOPY PUSH1 0x1 PUSH1 0x0 DUP10 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x45C5 SWAP1 SWAP3 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH2 0x4F95 PUSH2 0x4F47 PUSH2 0x4F38 DUP4 DUP6 PUSH2 0x453D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST DUP6 PUSH2 0x4685 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP8 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x453D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP7 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF DUP6 PUSH1 0x40 MLOAD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH8 0x7FFFFFFFFFFFFFFF DUP3 GT ISZERO PUSH2 0x505B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP3 SWAP1 SHL SWAP1 POP SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x8 PUSH1 0x2 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x50D5 JUMPI PUSH2 0x50CE DUP4 DUP4 PUSH1 0x1 PUSH2 0x55A7 JUMP JUMPDEST SWAP1 POP PUSH2 0x53B4 JUMP JUMPDEST PUSH1 0x12 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH1 0xFF AND ISZERO PUSH2 0x513A JUMPI PUSH2 0x5133 DUP4 DUP4 PUSH1 0x0 PUSH2 0x55A7 JUMP JUMPDEST SWAP1 POP PUSH2 0x53B3 JUMP JUMPDEST PUSH1 0x8 PUSH1 0x0 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND EQ ISZERO PUSH2 0x52A6 JUMPI PUSH2 0x51BF PUSH2 0x3E8 PUSH2 0x51B1 DUP5 PUSH1 0x5 PUSH1 0x1 ADD SLOAD PUSH2 0x46CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4755 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0x78D3B79 SWAP1 SWAP2 PUSH1 0x8 PUSH1 0x1 ADD PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5289 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x529D JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x53B2 JUMP JUMPDEST PUSH2 0x52D2 PUSH2 0x3E8 PUSH2 0x52C4 DUP5 PUSH1 0x5 PUSH1 0x1 ADD SLOAD PUSH2 0x46CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4755 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0x0 PUSH4 0x78D3B79 SWAP1 SWAP2 PUSH1 0xE PUSH1 0x0 SWAP1 SLOAD SWAP1 PUSH2 0x100 EXP SWAP1 DIV PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP5 PUSH1 0x40 MLOAD DUP5 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP7 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5399 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS DELEGATECALL ISZERO DUP1 ISZERO PUSH2 0x53AD JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST JUMPDEST JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH2 0x540C DUP2 PUSH1 0x1 PUSH1 0x0 DUP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 SLOAD PUSH2 0x453D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x0 KECCAK256 DUP2 SWAP1 SSTORE POP PUSH2 0x5464 DUP2 PUSH1 0x3 SLOAD PUSH2 0x453D SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH1 0x3 DUP2 SWAP1 SSTORE POP PUSH32 0xAB8530F87DC9B59234C4623BF917212BB2536D647574C8E7E5DA92C2EDE0C9F8 CALLER DUP4 DUP4 PUSH1 0x40 MLOAD DUP1 DUP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP4 POP POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 GT DUP3 SWAP1 PUSH2 0x558D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP1 PUSH1 0x20 ADD DUP3 DUP2 SUB DUP3 MSTORE DUP4 DUP2 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP DUP1 MLOAD SWAP1 PUSH1 0x20 ADD SWAP1 DUP1 DUP4 DUP4 PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x5552 JUMPI DUP1 DUP3 ADD MLOAD DUP2 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD SWAP1 POP PUSH2 0x5537 JUMP JUMPDEST POP POP POP POP SWAP1 POP SWAP1 DUP2 ADD SWAP1 PUSH1 0x1F AND DUP1 ISZERO PUSH2 0x557F JUMPI DUP1 DUP3 SUB DUP1 MLOAD PUSH1 0x1 DUP4 PUSH1 0x20 SUB PUSH2 0x100 EXP SUB NOT AND DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP JUMPDEST POP SWAP3 POP POP POP PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x0 DUP4 DUP6 DUP2 PUSH2 0x5599 JUMPI INVALID JUMPDEST DIV SWAP1 POP DUP1 SWAP2 POP POP SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH2 0x55D6 PUSH2 0x3E8 PUSH2 0x55C8 DUP7 PUSH1 0x5 PUSH1 0x1 ADD SLOAD PUSH2 0x46CF SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST PUSH2 0x4755 SWAP1 SWAP2 SWAP1 PUSH4 0xFFFFFFFF AND JUMP JUMPDEST SWAP1 POP PUSH1 0x0 DUP6 SWAP1 POP DUP4 ISZERO PUSH2 0x5671 JUMPI DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x9DC29FAC ADDRESS DUP5 PUSH1 0x40 MLOAD DUP4 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 MSTORE PUSH1 0x20 ADD DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP3 POP POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x5654 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x5668 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP PUSH2 0x56DD JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH4 0x42966C68 DUP4 PUSH1 0x40 MLOAD DUP3 PUSH4 0xFFFFFFFF AND PUSH1 0xE0 SHL DUP2 MSTORE PUSH1 0x4 ADD DUP1 DUP3 DUP2 MSTORE PUSH1 0x20 ADD SWAP2 POP POP PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 PUSH1 0x0 DUP8 DUP1 EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x56C4 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP GAS CALL ISZERO DUP1 ISZERO PUSH2 0x56D8 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP POP POP JUMPDEST DUP2 SWAP3 POP POP POP SWAP4 SWAP3 POP POP POP JUMP INVALID MSTORE8 NUMBER COINBASE MSTORE NUMBER 0x49 SLOAD MSIZE GASPRICE KECCAK256 0x4D PUSH10 0x67726174696F6E20636F PUSH15 0x7472616374206F6E6C794F776E6162 PUSH13 0x653A206E6577206F776E657220 PUSH10 0x7320746865207A65726F KECCAK256 PUSH2 0x6464 PUSH19 0x65737345524332303A20617070726F76652074 PUSH16 0x20746865207A65726F20616464726573 PUSH20 0x53636172636974793A207472616E736665722066 PUSH19 0x6F6D20746865207A65726F2061646472657373 MSTORE8 PUSH4 0x61726369 PUSH21 0x793A207472616E7366657220746F20746865207A65 PUSH19 0x6F20616464726573734245484F444C45523A20 GASLIMIT PUSH21 0x68206F6E6C792076616C696420666F722057657468 KECCAK256 PUSH21 0x72616465732E536166654D6174683A206D756C7469 PUSH17 0x6C69636174696F6E206F766572666C6F77 GASLIMIT MSTORE NUMBER ORIGIN ADDRESS GASPRICE KECCAK256 PUSH21 0x72616E7366657220616D6F756E7420657863656564 PUSH20 0x20616C6C6F77616E63654245484F444C45523A20 MSTORE PUSH6 0x656E7472616E PUSH4 0x79206775 PUSH2 0x7264 KECCAK256 PUSH2 0x6374 PUSH10 0x76652E4245484F444C45 MSTORE GASPRICE KECCAK256 PUSH4 0x616E6E6F PUSH21 0x20626F72726F7720666C6173686C6F616E45524332 ADDRESS GASPRICE KECCAK256 PUSH2 0x7070 PUSH19 0x6F76652066726F6D20746865207A65726F2061 PUSH5 0x6472657373 TIMESTAMP GASLIMIT 0x48 0x4F DIFFICULTY 0x4C GASLIMIT MSTORE GASPRICE KECCAK256 CHAINID PUSH13 0x6173686C6F616E207265706179 PUSH14 0x656E74206661696C65644245484F DIFFICULTY 0x4C GASLIMIT MSTORE GASPRICE KECCAK256 PUSH13 0x69717569646974792077697468 PUSH5 0x726177616C KECCAK256 PUSH21 0x6F6F206C617267652E4245484F444C45523A20496E PUSH20 0x756666696369656E742045746865722073656E74 MSTORE8 PUSH4 0x61726369 PUSH21 0x793A207472616E7366657220616D6F756E74206578 PUSH4 0x65656473 KECCAK256 PUSH3 0x616C61 PUSH15 0x6365A26469706673582212209EF437 0x4C TIMESTAMP PUSH7 0x6B7B74DE8BC485 EQ DUP10 SELFBALANCE SWAP6 PUSH30 0x3B1F95989894777D35B03120163564736F6C634300070600330000000000 ", | |
"sourceMap": "5494:15085:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;978:328:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19006:513:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14834:1564;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1635:86:1;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6418:23:0;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2554:186:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1905:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7781:44:0;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2746:429:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1551:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1816:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6393:19:0;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19650:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3181:114:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;12871:1470:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6790:257;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1312:233:1;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7175:505:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2011:154:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;943:145:8;;;;;;;;;;;;;:::i;:::-;;16891:1425:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;947:24:1;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7053:116:0;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;694:23:1;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;322:77:8;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;1727:83:1;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7832:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2171:192:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3793:179;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2369;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7883:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7932:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20376:201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1237:240:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9969:2561:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;6487:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;978:328:1;536:10:8;526:20;;:6;;;;;;;;;;:20;;;518:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1170:4:1::1;1153:6;:14;;;1132:6;:18;;;:35;:42;1124:51;;;::::0;::::1;;1206:11;1185:6;:18;;:32;;;;1244:7;1227:6;:14;;:24;;;;1285:14;1261:6;:21;;;:38;;;;;;;;;;;;;;;;;;978:328:::0;;;:::o;19006:513:0:-;19125:7;;;;;;;;;;;:17;;;19143:10;19125:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19104:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19253:39;19285:6;19253:8;:27;19262:17;19253:27;;;;;;;;;;;;;;;;:31;;:39;;;;:::i;:::-;19223:8;:27;19232:17;19223:27;;;;;;;;;;;;;;;:69;;;;19320:17;19302:44;;;19347:10;19302:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19399:113;19444:6;19399:113;;;;;;;;;;;;;;;;;:8;:27;19408:17;19399:27;;;;;;;;;;;;;;;;:31;;:113;;;;;:::i;:::-;19369:8;:27;19378:17;19369:27;;;;;;;;;;;;;;;:143;;;;19006:513;;:::o;14834:1564::-;15058:16;14964:11;8449:1;8437:9;:13;8433:258;;;8505:4;;;;;;;;;;;8491:18;;:10;:18;;;8466:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8620:4;8598:11;;:27;;;;;;;;;;;;;;;;;;8433:258;;;8670:10;8656:11;;:24;;;;;;;;;;;;;;;;;;8433:258;15000:11:::1;8183:14;:26;8198:10;8183:26;;;;;;;;;;;;;;;;;;;;;;;;;:64;;;;8229:11;:18;8241:5;8229:18;;;;;;;;;;;;;;;;;;;;;;;;;8183:64;:122;;;;8285:1;8268:19;;:5;:19;;;;:36;;;;;8300:4;;;;;;;;;;;8291:13;;:5;:13;;;8268:36;8183:122;8162:192;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;15026:13:::2;8786;8810:4;8802:13;;;;;;;;8786:29;;8833:8;8842:5;8833:15;;;;;;;;;;;;;;;;;;;;;;;;;8825:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8915:5;8897:8;8906:5;8897:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;15090:22:::3;15115:11;:24;;;;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;15090:51;;15151:20;15174:35;15193:15;15174:14;:18;;:35;;;;:::i;:::-;15151:58;;7821:4;15227:12;:28;15219:64;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;15378:16;:33;;;;;;;;;;;;15314:97;;:44;15343:14;15314:24;15334:3;15314:15;:19;;:24;;;;:::i;:::-;:28;;:44;;;;:::i;:::-;:97;;15293:185;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15489:18;15510:22;:14;:20;:22::i;:::-;15489:43;;15542:16;15561:20;:12;:18;:20::i;:::-;15542:39;;15632:1;15617:12;:16;:31;;15647:1;15617:31;;;15636:8;15617:31;15603:10;:46;15592:57;;15659:18;15680:8;:20;15689:10;15680:20;;;;;;;;;;;;;;;;15659:41;;15726:10;15715:8;:21;15711:261;;;15842:18;15874:10;15863:8;:21;15842:42;;15937:1;15925:8;15916:5;15903:10;:18;15902:31;;;;;;:36;15898:63;;;15951:10;15940:21;;15898:63;15711:261;;15981:26;15986:10;15998:8;15981:4;:26::i;:::-;16037:4;;;;;;;;;;;16022:19;;:11;:19;;;16018:231;;;16057:22;16082:10;16057:35;;16114:4;;;;;;;;;;;16106:24;;;16131:6;16139:15;16106:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;16018:231;;;;16186:11;:23;;;;;;16210:10;16222:15;16186:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;16018:231;16263:128;16295:10;16319:11;16344:15;16373:8;16263:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8930:1;;;;;8959:4:::2;8941:8;8950:5;8941:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;8364:1;;8700::::1;14834:1564:::0;;;;;:::o;1635:86:1:-;1672:13;1697:17;;;;;;;;;;;;;;;;;;;1635:86;:::o;6418:23:0:-;;;;;;;;;;;;;:::o;2554:186:1:-;2655:4;2675:37;2684:10;2696:7;2705:6;2675:8;:37::i;:::-;2729:4;2722:11;;2554:186;;;;:::o;1905:100::-;1960:7;1986:12;;1979:19;;1905:100;:::o;7781:44:0:-;7821:4;7781:44;:::o;2746:429:1:-;2876:4;2892:36;2902:6;2910:9;2921:6;2892:9;:36::i;:::-;2938:209;2960:6;2980:10;3004:133;3057:6;3004:133;;;;;;;;;;;;;;;;;:11;:19;3016:6;3004:19;;;;;;;;;;;;;;;:31;3024:10;3004:31;;;;;;;;;;;;;;;;:35;;:133;;;;;:::i;:::-;2938:8;:209::i;:::-;3164:4;3157:11;;2746:429;;;;;:::o;1551:78::-;536:10:8;526:20;;:6;;;;;;;;;;:20;;;518:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1621:1:1::1;1610:8;;:12;;;;;;;;;;;;;;;;;;1551:78:::0;:::o;1816:83::-;1866:5;1890:2;1883:9;;1816:83;:::o;6393:19:0:-;;;;;;;;;;;;;:::o;19650:124::-;536:10:8;526:20;;:6;;;;;;;;;;:20;;;518:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19758:9:0::1;19735:14;:20;19750:4;19735:20;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19650:124:::0;;:::o;3181:114:1:-;3228:4;3244:23;3249:10;3261:5;3244:4;:23::i;:::-;3284:4;3277:11;;3181:114;;;:::o;12871:1470:0:-;13073:16;12986:10;8449:1;8437:9;:13;8433:258;;;8505:4;;;;;;;;;;;8491:18;;:10;:18;;;8466:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8620:4;8598:11;;:27;;;;;;;;;;;;;;;;;;8433:258;;;8670:10;8656:11;;:24;;;;;;;;;;;;;;;;;;8433:258;13021:10:::1;8183:14;:26;8198:10;8183:26;;;;;;;;;;;;;;;;;;;;;;;;;:64;;;;8229:11;:18;8241:5;8229:18;;;;;;;;;;;;;;;;;;;;;;;;;8183:64;:122;;;;8285:1;8268:19;;:5;:19;;;;:36;;;;;8300:4;;;;;;;;;;;8291:13;;:5;:13;;;8268:36;8183:122;8162:192;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;13046:8:::2;8786:13;8810:4;8802:13;;;;;;;;8786:29;;8833:8;8842:5;8833:15;;;;;;;;;;;;;;;;;;;;;;;;;8825:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8915:5;8897:8;8906:5;8897:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;13105:22:::3;13150:51;:10;:25;;;;;;7821:4;13150:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;:49;:51::i;:::-;13142:60;;13105:97;;13230:4;;;;;;;;;;;13216:18;;:10;:18;;;13212:460;;;13292:6;13261:4;;;;;;;;;;;13254:22;;;13277:10;13254:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;:44;13250:339;;13318:4;;;;;;;;;;;:15;;;;;;13334:10;13346:6;13318:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;13250:339;;;13434:6;13421:9;:19;13392:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13541:4;;;;;;;;;;;13533:21;;;13562:9;13533:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;13250:339;13212:460;;;13619:10;:21;;;;;;13641:11;;;;;;;;;;;13654:6;13619:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;13212:460;13681:22;13743:134;:102;7821:4;13743:62;13775:29;13785:10;13797:6;13775:9;:29::i;:::-;13743:6;:31;;:62;;;;:::i;:::-;:87;;:102;;;;:::i;:::-;:132;:134::i;:::-;13718:173;;13681:210;;13902:20;13933:34;13952:14;13933;:18;;:34;;;;:::i;:::-;13902:66;;7821:4;14007:12;13999:38;;13978:109;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;14186:1;14169:14;:18;:47;;14215:1;14169:47;;;14190:22;:14;:20;:22::i;:::-;14169:47;14129:20;:12;:18;:20::i;:::-;:88;14097:130;;14237:26;14242:10;14254:8;14237:4;:26::i;:::-;14278:56;14293:10;14305;14317:6;14325:8;14278:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8930:1;;;8959:4:::2;8941:8;8950:5;8941:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;8364:1;;8700::::1;12871:1470:::0;;;;;:::o;6790:257::-;536:10:8;526:20;;:6;;;;;;;;;;:20;;;518:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6959:19:0::1;6920:16;:36;;;:58;;;;;;;;;;;;;;;;;;7024:16;6988;:33;;;:52;;;;;;;;;;;;;;;;;;6790:257:::0;;:::o;1312:233:1:-;1398:7;1419;1440;1480:6;:18;;;1500:6;:14;;;1516:6;:21;;;;;;;;;;;;1472:66;;;;;;1312:233;;;:::o;7175:505:0:-;536:10:8;526:20;;:6;;;;;;;;;;:20;;;518:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7434:4:0::1;7427;;:11;;;;;;;;;;;;;;;;;;7459:8;7448;;:19;;;;;;;;;;;;;;;;;;7504:16;7477:7;;:44;;;;;;;;;;;;;;;;;;7560:27;7531:26;;:56;;;;;;;;;;;;;;;;;;7610:13;7597:2;:10;;;:26;;;;;;;;;;;;;;;;;;7642:3;7633:2;:6;;;:12;;;;;;;;;;;;;;;;;;7667:6;7655:2;:9;;;:18;;;;;;;;;;;;;;;;;;7175:505:::0;;;;;;;:::o;2011:154:1:-;2111:7;2141:8;:17;2150:7;2141:17;;;;;;;;;;;;;;;;2134:24;;2011:154;;;:::o;943:145:8:-;536:10;526:20;;:6;;;;;;;;;;:20;;;518:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1049:1:::1;1012:40;;1033:6;::::0;::::1;;;;;;;;1012:40;;;;;;;;;;;;1079:1;1062:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;943:145::o:0;16891:1425:0:-;17061:7;17080:21;17104:11;:24;;;;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17080:50;;17140:21;17181:9;17176:1102;17200:6;17196:1;:10;17176:1102;;;17227:22;17252:11;:24;;;;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17227:51;;17292:20;17315:35;17334:15;17315:14;:18;;:35;;;;:::i;:::-;17292:58;;17365:18;17386:22;:14;:20;:22::i;:::-;17365:43;;17422:16;17441:20;:12;:18;:20::i;:::-;17422:39;;17476:15;17546:1;17531:12;:16;:31;;17561:1;17531:31;;;17550:8;17531:31;17517:10;:46;17476:88;;17578:17;17612:8;17605:3;17598:22;17578:42;;17720:1;17706:10;:15;17702:43;;;17730:15;17723:22;;;;;;;;;;;;;17702:43;17776:1;17763:10;:14;17759:250;;;17876:1;17858:15;:19;17842:35;;17759:250;;;17993:1;17975:15;:19;17959:35;;17759:250;18112:13;18091:1;18074:13;18058;:29;18057:35;;;;;;18056:69;18022:103;;18186:14;18168:15;:32;:99;;18252:15;18168:99;;;18219:14;18168:99;18150:117;;17176:1102;;;;;;17208:3;;;;;;;17176:1102;;;;18294:15;18287:22;;;;16891:1425;;;;;;;:::o;947:24:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7053:116:0:-;7105:5;7129:16;:33;;;;;;;;;;;;7122:40;;7053:116;:::o;694:23:1:-;;;;;;;;;;;;;:::o;322:77:8:-;360:7;386:6;;;;;;;;;;;379:13;;322:77;:::o;1727:83:1:-;1766:13;1791:12;;;;;;;;;;;;;;;;;;;1727:83;:::o;7832:45:0:-;;;;;;;;;;;;;;;;;;;;;;:::o;2171:192:1:-;2275:4;2295:40;2305:10;2317:9;2328:6;2295:9;:40::i;:::-;2352:4;2345:11;;2171:192;;;;:::o;3793:179::-;3887:8;;;;;;;;;;;3873:22;;:10;:22;;;3865:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3943:22;3948:9;3959:5;3943:4;:22::i;:::-;3793:179;;:::o;2369:::-;2484:7;2514:11;:18;2526:5;2514:18;;;;;;;;;;;;;;;:27;2533:7;2514:27;;;;;;;;;;;;;;;;2507:34;;2369:179;;;;:::o;7883:43:0:-;;;;;;;;;;;;;;;;;;;;;;:::o;7932:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;20376:201::-;8080:8;;;;;;;;;;;8066:22;;:10;:22;;;8058:31;;;;;;20524:5:::1;20503:11;:18;20515:5;20503:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;20562:8;20539:13;:20;20553:5;20539:20;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;20376:201:::0;;;:::o;1237:240:8:-;536:10;526:20;;:6;;;;;;;;;;:20;;;518:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1345:1:::1;1325:22;;:8;:22;;;;1317:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1434:8;1405:38;;1426:6;::::0;::::1;;;;;;;;1405:38;;;;;;;;;;;;1462:8;1453:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;1237:240:::0;:::o;9969:2561:0:-;10250:12;10162:10;8449:1;8437:9;:13;8433:258;;;8505:4;;;;;;;;;;;8491:18;;:10;:18;;;8466:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8620:4;8598:11;;:27;;;;;;;;;;;;;;;;;;8433:258;;;8670:10;8656:11;;:24;;;;;;;;;;;;;;;;;;8433:258;10197:10:::1;8183:14;:26;8198:10;8183:26;;;;;;;;;;;;;;;;;;;;;;;;;:64;;;;8229:11;:18;8241:5;8229:18;;;;;;;;;;;;;;;;;;;;;;;;;8183:64;:122;;;;8285:1;8268:19;;:5;:19;;;;:36;;;;;8300:4;;;;;;;;;;;8291:13;;:5;:13;;;8268:36;8183:122;8162:192;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;10222:9:::2;8786:13:::0;8810:4:::2;8802:13;;;;;;;;8786:29;;8833:8;8842:5;8833:15;;;;;;;;;;;;;;;;;;;;;;;;;8825:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8915:5;8897:8;8906:5;8897:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;10278:27:::3;10308:10;:23;;;;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;10278:55;;10361:4;;;;;;;;;;;10347:18;;:10;:18;;;10343:480;;;10423:11;10392:4;;;;;;;;;;;10385:22;;;10408:10;10385:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;:49;10381:354;;10454:4;;;;;;;;;;;:15;;;;;;10470:10;10482:11;10454:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;10381:354;;;10575:11;10562:9;:24;10533:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10687:4;;;;;;;;;;;10679:21;;;10708:9;10679:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;10381:354;10343:480;;;10765:10;:21;;;;;;10787:11;;;;;;;;;;;10800;10765:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;10343:480;10833:22;10870:51;10886:34;10896:10;10908:11;10886:9;:34::i;:::-;10870:11;:15;;:51;;;;:::i;:::-;10833:88;;10931:28;10962:11;:24;;;;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;10931:57;;11086:16;:33;;;;;;;;;;;;11019:100;;:47;11045:20;11019:21;11036:3;11019:12;:16;;:21;;;;:::i;:::-;:25;;:47;;;;:::i;:::-;:100;;10998:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11196:25;11224:39;11248:14;11224:19;:23;;:39;;;;:::i;:::-;11196:67;;11273:26;11302:38;11327:12;11302:20;:24;;:38;;;;:::i;:::-;11273:67;;11539:18;11576:105;11663:17;11600:16;:36;;;;;;;;;;;;11577:59;;:19;:59;;11576:86;;:105;;;;:::i;:::-;11539:142;;11695:19;11733:107;11819:20;11756:16;:36;;;;;;;;;;;;11734:58;;:18;:58;;11733:85;;:107;;;;:::i;:::-;11695:145;;11894:1;11880:10;:15;;:44;;;;;11913:11;11899:10;:25;11880:44;11855:128;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;8930:1;;7821:4;12025:18;:35;;12004:106;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;12140:4;;;;;;;;;;;12125:19;;:11;:19;;;12121:225;;;12160:22;12185:10;12160:35;;12217:4;;;;;;;;;;;12209:24;;;12234:6;12242:12;12209:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;12121:225;;;;12286:11;:23;;;;;;12310:10;12322:12;12286:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;12121:225;12361:138;12379:10;12403;12427:11;12452;12477:12;12361:138;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12519:4;12509:14;;8930:1;;;;;8959:4:::2;8941:8;8950:5;8941:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;8364:1;;8700::::1;9969:2561:::0;;;;;;;:::o;6487:31::-;;;;;;;;;;;;;:::o;874:176:9:-;932:7;951:9;967:1;963;:5;951:17;;991:1;986;:6;;978:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1042:1;1035:8;;;874:176;;;;:::o;1746:187::-;1832:7;1864:1;1859;:6;;1867:12;1851:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1890:9;1906:1;1902;:5;1890:17;;1925:1;1918:8;;;1746:187;;;;;:::o;1321:134::-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1398:50;;1321:134;;;;:::o;2180:459::-;2238:7;2484:1;2479;:6;2475:45;;;2508:1;2501:8;;;;2475:45;2530:9;2546:1;2542;:5;2530:17;;2574:1;2569;2565;:5;;;;;;:10;2557:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2631:1;2624:8;;;2180:459;;;;;:::o;3101:130::-;3159:7;3185:39;3189:1;3192;3185:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3178:46;;3101:130;;;;:::o;2795:1032:0:-;2844:7;2875:1;2871;:5;2863:14;;;;;;2888:11;2913:10;2926:1;2913:14;;2947:19;2941:2;:25;2937:88;;2989:2;2982:9;;;;;3012:2;3005:9;;;;2937:88;3044:11;3038:2;:17;3034:80;;3078:2;3071:9;;;;;3101:2;3094:9;;;;3034:80;3133:7;3127:2;:13;3123:76;;3163:2;3156:9;;;;;3186:2;3179:9;;;;3123:76;3218:5;3212:2;:11;3208:72;;3246:1;3239:8;;;;;3268:1;3261:8;;;;3208:72;3299:4;3293:2;:10;3289:71;;3326:1;3319:8;;;;;3348:1;3341:8;;;;3289:71;3379:3;3373:2;:9;3369:70;;3405:1;3398:8;;;;;3427:1;3420:8;;;;3369:70;3458:3;3452:2;:9;3448:23;;3470:1;3463:8;;;;3448:23;3513:14;3544:2;3537;3531:3;:8;3530:16;;3513:33;;3556:10;3597:3;3591;:9;3577:1;3569:32;;3556:45;;3616:11;3630:18;3616:32;;3611:186;3656:1;3650:3;:7;3611:186;;;3690:2;3684:8;;;;3706:9;3724:3;3718:2;:9;;3706:21;;3754:1;3748:3;:7;3741:14;;;;;3785:1;3779:3;:7;3769:17;;;;3611:186;3667:1;3659:9;;;;;3611:186;;;;3814:6;3807:13;;;;;;2795:1032;;;:::o;3301:257:1:-;3384:93;3418:5;3384:93;;;;;;;;;;;;;;;;;:8;:16;3393:6;3384:16;;;;;;;;;;;;;;;;:20;;:93;;;;;:::i;:::-;3365:8;:16;3374:6;3365:16;;;;;;;;;;;;;;;:112;;;;3502:23;3519:5;3502:12;;:16;;:23;;;;:::i;:::-;3487:12;:38;;;;3540:11;3545:5;3540:11;;;;;;;;;;;;;;;;;;3301:257;;:::o;3978:370::-;4126:1;4109:19;;:5;:19;;;;4101:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4206:1;4187:21;;:7;:21;;;;4179:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4288:6;4258:11;:18;4270:5;4258:18;;;;;;;;;;;;;;;:27;4277:7;4258:27;;;;;;;;;;;;;;;:36;;;;4325:7;4309:32;;4318:5;4309:32;;;4334:6;4309:32;;;;;;;;;;;;;;;;;;3978:370;;;:::o;4413:1019::-;4579:1;4561:20;;:6;:20;;;;4540:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4699:1;4678:23;;:9;:23;;;;4657:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4776:20;4799:40;4834:4;4799:30;4822:6;4799;:18;;;:22;;:30;;;;:::i;:::-;:34;;:40;;;;:::i;:::-;4776:63;;4849:21;4873:36;4904:4;4873:26;4892:6;4873;:14;;;:18;;:26;;;;:::i;:::-;:30;;:36;;;;:::i;:::-;4849:60;;4934:31;4951:13;4934:12;;:16;;:31;;;;:::i;:::-;4919:12;:46;;;;4980:19;4985:13;4980:19;;;;;;;;;;;;;;;;;;5044:71;5093:12;5044:8;:31;5053:6;:21;;;;;;;;;;;;5044:31;;;;;;;;;;;;;;;;:35;;:71;;;;:::i;:::-;5010:8;:31;5019:6;:21;;;;;;;;;;;;5010:31;;;;;;;;;;;;;;;:105;;;;5145:107;5179:6;5145:107;;;;;;;;;;;;;;;;;:8;:16;5154:6;5145:16;;;;;;;;;;;;;;;;:20;;:107;;;;;:::i;:::-;5126:8;:16;5135:6;5126:16;;;;;;;;;;;;;;;:126;;;;5285:90;5322:43;5333:31;5350:13;5333:12;:16;;:31;;;;:::i;:::-;5322:6;:10;;:43;;;;:::i;:::-;5285:8;:19;5294:9;5285:19;;;;;;;;;;;;;;;;:23;;:90;;;;:::i;:::-;5263:8;:19;5272:9;5263:19;;;;;;;;;;;;;;;:112;;;;5407:9;5390:35;;5399:6;5390:35;;;5418:6;5390:35;;;;;;;;;;;;;;;;;;4413:1019;;;;;:::o;2032:141:0:-;2084:6;2115:18;2110:1;:23;;2102:32;;;;;;2163:2;2158:1;:7;;2144:22;;2032:141;;;:::o;19780:590::-;19863:13;19905:2;:9;;;;;;;;;;;;19896:18;;:5;:18;;;19892:472;;;19938:33;19951:5;19958:6;19966:4;19938:12;:33::i;:::-;19930:41;;19892:472;;;19992:13;:20;20006:5;19992:20;;;;;;;;;;;;;;;;;;;;;;;;;19988:376;;;20034:34;20047:5;20054:6;20062:5;20034:12;:34::i;:::-;20026:42;;19988:376;;;20096:2;:6;;;;;;;;;;;;20087:15;;:5;:15;;;20083:281;;;20126:36;20157:4;20126:26;20145:6;20126;:14;;;:18;;:26;;;;:::i;:::-;:30;;:36;;;;:::i;:::-;20118:44;;20176:5;:17;;;;;;20194:2;:10;;;;;;;;;;;;20206:5;20176:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20083:281;;;20251:36;20282:4;20251:26;20270:6;20251;:14;;;:18;;:26;;;;:::i;:::-;:30;;:36;;;;:::i;:::-;20243:44;;20301:5;:17;;;;;;20319:26;;;;;;;;;;;20347:5;20301:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20083:281;19988:376;19892:472;19780:590;;;;:::o;3564:223:1:-;3653:30;3677:5;3653:8;:19;3662:9;3653:19;;;;;;;;;;;;;;;;:23;;:30;;;;:::i;:::-;3631:8;:19;3640:9;3631:19;;;;;;;;;;;;;;;:52;;;;3708:23;3725:5;3708:12;;:16;;:23;;;;:::i;:::-;3693:12;:38;;;;3746:34;3751:10;3763:9;3774:5;3746:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3564:223;;:::o;3713:272:9:-;3799:7;3830:1;3826;:5;3833:12;3818:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3856:9;3872:1;3868;:5;;;;;;3856:17;;3977:1;3970:8;;;3713:272;;;;;:::o;5438:401:1:-;5540:7;5563:18;5584:36;5615:4;5584:26;5603:6;5584;:14;;;:18;;:26;;;;:::i;:::-;:30;;:36;;;;:::i;:::-;5563:57;;5630:15;5657:5;5630:33;;5677:9;5673:132;;;5702:6;:11;;;5722:4;5729:10;5702:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5673:132;;;5771:6;:11;;;5783:10;5771:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5673:132;5822:10;5815:17;;;;5438:401;;;;;:::o" | |
}, | |
"gasEstimates": { | |
"creation": { | |
"codeDepositCost": "4570800", | |
"executionCost": "infinite", | |
"totalCost": "infinite" | |
}, | |
"external": { | |
"Lachesis()": "1093", | |
"MIN_LIQUIDITY()": "317", | |
"Weth()": "1137", | |
"addLiquidity(address,uint256)": "infinite", | |
"allowance(address,address)": "1410", | |
"approve(address,uint256)": "infinite", | |
"arbiter()": "1179", | |
"balanceOf(address)": "1242", | |
"burn(uint256)": "infinite", | |
"config()": "2837", | |
"configureScarcity(uint256,uint256,address)": "63760", | |
"decimals()": "287", | |
"getConfiguration()": "2852", | |
"getMaxLiquidityExit()": "1156", | |
"grantFlashLoan(uint256,address)": "infinite", | |
"migrateMint(address,uint256)": "infinite", | |
"migrator()": "1114", | |
"name()": "infinite", | |
"owner()": "1144", | |
"renounceOwnership()": "24324", | |
"seed(address,address,address,address,address,address,address)": "147531", | |
"setMigrator(address)": "22014", | |
"setSafetParameters(uint8,uint8)": "43021", | |
"setValidToken(address,bool,bool)": "43154", | |
"setWhiteListUser(address,bool)": "22205", | |
"swap(address,address,uint256,uint256)": "infinite", | |
"symbol()": "infinite", | |
"tokenBurnable(address)": "1333", | |
"totalSupply()": "1103", | |
"transfer(address,uint256)": "infinite", | |
"transferFrom(address,address,uint256)": "infinite", | |
"transferOwnership(address)": "infinite", | |
"validTokens(address)": "1311", | |
"whiteListUsers(address)": "1244", | |
"withdrawLiquidity(address,uint256)": "infinite", | |
"withdrawLiquidityFindSCX(address,uint256,uint256,uint256)": "infinite" | |
}, | |
"internal": { | |
"burnToken(address,uint256)": "infinite" | |
} | |
}, | |
"methodIdentifiers": { | |
"Lachesis()": "07d44e1a", | |
"MIN_LIQUIDITY()": "21b77d63", | |
"Weth()": "349849a3", | |
"addLiquidity(address,uint256)": "56688700", | |
"allowance(address,address)": "dd62ed3e", | |
"approve(address,uint256)": "095ea7b3", | |
"arbiter()": "fe25e00a", | |
"balanceOf(address)": "70a08231", | |
"burn(uint256)": "42966c68", | |
"config()": "79502c55", | |
"configureScarcity(uint256,uint256,address)": "007ed4fe", | |
"decimals()": "313ce567", | |
"getConfiguration()": "6bd50cef", | |
"getMaxLiquidityExit()": "7b12a62c", | |
"grantFlashLoan(uint256,address)": "0319f4c6", | |
"migrateMint(address,uint256)": "d2cb0100", | |
"migrator()": "7cd07e47", | |
"name()": "06fdde03", | |
"owner()": "8da5cb5b", | |
"renounceOwnership()": "715018a6", | |
"seed(address,address,address,address,address,address,address)": "6d3405f1", | |
"setMigrator(address)": "23cf3118", | |
"setSafetParameters(uint8,uint8)": "572861bc", | |
"setValidToken(address,bool,bool)": "e2fc9d00", | |
"setWhiteListUser(address,bool)": "3f40d3a3", | |
"swap(address,address,uint256,uint256)": "fe029156", | |
"symbol()": "95d89b41", | |
"tokenBurnable(address)": "a451a2c1", | |
"totalSupply()": "18160ddd", | |
"transfer(address,uint256)": "a9059cbb", | |
"transferFrom(address,address,uint256)": "23b872dd", | |
"transferOwnership(address)": "f2fde38b", | |
"validTokens(address)": "e12fb1b9", | |
"whiteListUsers(address)": "e22bcf84", | |
"withdrawLiquidity(address,uint256)": "06d47de9", | |
"withdrawLiquidityFindSCX(address,uint256,uint256,uint256)": "72c3fdd9" | |
} | |
}, | |
"abi": [ | |
{ | |
"inputs": [], | |
"stateMutability": "nonpayable", | |
"type": "constructor" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": true, | |
"internalType": "address", | |
"name": "owner", | |
"type": "address" | |
}, | |
{ | |
"indexed": true, | |
"internalType": "address", | |
"name": "spender", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "value", | |
"type": "uint256" | |
} | |
], | |
"name": "Approval", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "value", | |
"type": "uint256" | |
} | |
], | |
"name": "Burn", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": false, | |
"internalType": "address", | |
"name": "sender", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "address", | |
"name": "token", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "tokenValue", | |
"type": "uint256" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "scx", | |
"type": "uint256" | |
} | |
], | |
"name": "LiquidityAdded", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": false, | |
"internalType": "address", | |
"name": "recipient", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "address", | |
"name": "token", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "tokenValue", | |
"type": "uint256" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "scx", | |
"type": "uint256" | |
} | |
], | |
"name": "LiquidityWithdrawn", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": false, | |
"internalType": "address", | |
"name": "sender", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "address", | |
"name": "recipient", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "value", | |
"type": "uint256" | |
} | |
], | |
"name": "Mint", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": true, | |
"internalType": "address", | |
"name": "previousOwner", | |
"type": "address" | |
}, | |
{ | |
"indexed": true, | |
"internalType": "address", | |
"name": "newOwner", | |
"type": "address" | |
} | |
], | |
"name": "OwnershipTransferred", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": false, | |
"internalType": "address", | |
"name": "sender", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "address", | |
"name": "inputToken", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "address", | |
"name": "outputToken", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "inputValue", | |
"type": "uint256" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "outputValue", | |
"type": "uint256" | |
} | |
], | |
"name": "Swap", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": true, | |
"internalType": "address", | |
"name": "from", | |
"type": "address" | |
}, | |
{ | |
"indexed": true, | |
"internalType": "address", | |
"name": "to", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "value", | |
"type": "uint256" | |
} | |
], | |
"name": "Transfer", | |
"type": "event" | |
}, | |
{ | |
"inputs": [], | |
"name": "Lachesis", | |
"outputs": [ | |
{ | |
"internalType": "address", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "MIN_LIQUIDITY", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "Weth", | |
"outputs": [ | |
{ | |
"internalType": "address", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "inputToken", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "amount", | |
"type": "uint256" | |
} | |
], | |
"name": "addLiquidity", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "deltaSCX", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "payable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "owner", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "spender", | |
"type": "address" | |
} | |
], | |
"name": "allowance", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "spender", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "amount", | |
"type": "uint256" | |
} | |
], | |
"name": "approve", | |
"outputs": [ | |
{ | |
"internalType": "bool", | |
"name": "", | |
"type": "bool" | |
} | |
], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "arbiter", | |
"outputs": [ | |
{ | |
"internalType": "contract FlashLoanArbiter", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "account", | |
"type": "address" | |
} | |
], | |
"name": "balanceOf", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "value", | |
"type": "uint256" | |
} | |
], | |
"name": "burn", | |
"outputs": [ | |
{ | |
"internalType": "bool", | |
"name": "", | |
"type": "bool" | |
} | |
], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "config", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "transferFee", | |
"type": "uint256" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "burnFee", | |
"type": "uint256" | |
}, | |
{ | |
"internalType": "address", | |
"name": "feeDestination", | |
"type": "address" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "transferFee", | |
"type": "uint256" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "burnFee", | |
"type": "uint256" | |
}, | |
{ | |
"internalType": "address", | |
"name": "feeDestination", | |
"type": "address" | |
} | |
], | |
"name": "configureScarcity", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "decimals", | |
"outputs": [ | |
{ | |
"internalType": "uint8", | |
"name": "", | |
"type": "uint8" | |
} | |
], | |
"stateMutability": "pure", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "getConfiguration", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
}, | |
{ | |
"internalType": "address", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "getMaxLiquidityExit", | |
"outputs": [ | |
{ | |
"internalType": "uint8", | |
"name": "", | |
"type": "uint8" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "amount", | |
"type": "uint256" | |
}, | |
{ | |
"internalType": "address", | |
"name": "flashLoanContract", | |
"type": "address" | |
} | |
], | |
"name": "grantFlashLoan", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "recipient", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "value", | |
"type": "uint256" | |
} | |
], | |
"name": "migrateMint", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "migrator", | |
"outputs": [ | |
{ | |
"internalType": "address", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "name", | |
"outputs": [ | |
{ | |
"internalType": "string", | |
"name": "", | |
"type": "string" | |
} | |
], | |
"stateMutability": "pure", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "owner", | |
"outputs": [ | |
{ | |
"internalType": "address", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "renounceOwnership", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "weth", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "lachesis", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "flashLoanArbiter", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "_pyroTokenLiquidityReceiver", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "weidaiReserve", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "dai", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "weiDai", | |
"type": "address" | |
} | |
], | |
"name": "seed", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "m", | |
"type": "address" | |
} | |
], | |
"name": "setMigrator", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "uint8", | |
"name": "swapPrecisionFactor", | |
"type": "uint8" | |
}, | |
{ | |
"internalType": "uint8", | |
"name": "maxLiquidityExit", | |
"type": "uint8" | |
} | |
], | |
"name": "setSafetParameters", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "token", | |
"type": "address" | |
}, | |
{ | |
"internalType": "bool", | |
"name": "valid", | |
"type": "bool" | |
}, | |
{ | |
"internalType": "bool", | |
"name": "burnable", | |
"type": "bool" | |
} | |
], | |
"name": "setValidToken", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "user", | |
"type": "address" | |
}, | |
{ | |
"internalType": "bool", | |
"name": "whiteList", | |
"type": "bool" | |
} | |
], | |
"name": "setWhiteListUser", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "inputToken", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "outputToken", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "inputAmount", | |
"type": "uint256" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "outputAmount", | |
"type": "uint256" | |
} | |
], | |
"name": "swap", | |
"outputs": [ | |
{ | |
"internalType": "bool", | |
"name": "success", | |
"type": "bool" | |
} | |
], | |
"stateMutability": "payable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "symbol", | |
"outputs": [ | |
{ | |
"internalType": "string", | |
"name": "", | |
"type": "string" | |
} | |
], | |
"stateMutability": "pure", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"name": "tokenBurnable", | |
"outputs": [ | |
{ | |
"internalType": "bool", | |
"name": "", | |
"type": "bool" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "totalSupply", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "recipient", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "amount", | |
"type": "uint256" | |
} | |
], | |
"name": "transfer", | |
"outputs": [ | |
{ | |
"internalType": "bool", | |
"name": "", | |
"type": "bool" | |
} | |
], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "sender", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "recipient", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "amount", | |
"type": "uint256" | |
} | |
], | |
"name": "transferFrom", | |
"outputs": [ | |
{ | |
"internalType": "bool", | |
"name": "", | |
"type": "bool" | |
} | |
], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "newOwner", | |
"type": "address" | |
} | |
], | |
"name": "transferOwnership", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"name": "validTokens", | |
"outputs": [ | |
{ | |
"internalType": "bool", | |
"name": "", | |
"type": "bool" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"name": "whiteListUsers", | |
"outputs": [ | |
{ | |
"internalType": "bool", | |
"name": "", | |
"type": "bool" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "outputToken", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "tokensToRelease", | |
"type": "uint256" | |
} | |
], | |
"name": "withdrawLiquidity", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "deltaSCX", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "payable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "outputToken", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "tokensToRelease", | |
"type": "uint256" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "scx", | |
"type": "uint256" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "passes", | |
"type": "uint256" | |
} | |
], | |
"name": "withdrawLiquidityFindSCX", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
} | |
] | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"compiler": { | |
"version": "0.7.6+commit.7338295f" | |
}, | |
"language": "Solidity", | |
"output": { | |
"abi": [ | |
{ | |
"inputs": [], | |
"stateMutability": "nonpayable", | |
"type": "constructor" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": true, | |
"internalType": "address", | |
"name": "owner", | |
"type": "address" | |
}, | |
{ | |
"indexed": true, | |
"internalType": "address", | |
"name": "spender", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "value", | |
"type": "uint256" | |
} | |
], | |
"name": "Approval", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "value", | |
"type": "uint256" | |
} | |
], | |
"name": "Burn", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": false, | |
"internalType": "address", | |
"name": "sender", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "address", | |
"name": "token", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "tokenValue", | |
"type": "uint256" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "scx", | |
"type": "uint256" | |
} | |
], | |
"name": "LiquidityAdded", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": false, | |
"internalType": "address", | |
"name": "recipient", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "address", | |
"name": "token", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "tokenValue", | |
"type": "uint256" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "scx", | |
"type": "uint256" | |
} | |
], | |
"name": "LiquidityWithdrawn", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": false, | |
"internalType": "address", | |
"name": "sender", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "address", | |
"name": "recipient", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "value", | |
"type": "uint256" | |
} | |
], | |
"name": "Mint", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": true, | |
"internalType": "address", | |
"name": "previousOwner", | |
"type": "address" | |
}, | |
{ | |
"indexed": true, | |
"internalType": "address", | |
"name": "newOwner", | |
"type": "address" | |
} | |
], | |
"name": "OwnershipTransferred", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": false, | |
"internalType": "address", | |
"name": "sender", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "address", | |
"name": "inputToken", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "address", | |
"name": "outputToken", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "inputValue", | |
"type": "uint256" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "outputValue", | |
"type": "uint256" | |
} | |
], | |
"name": "Swap", | |
"type": "event" | |
}, | |
{ | |
"anonymous": false, | |
"inputs": [ | |
{ | |
"indexed": true, | |
"internalType": "address", | |
"name": "from", | |
"type": "address" | |
}, | |
{ | |
"indexed": true, | |
"internalType": "address", | |
"name": "to", | |
"type": "address" | |
}, | |
{ | |
"indexed": false, | |
"internalType": "uint256", | |
"name": "value", | |
"type": "uint256" | |
} | |
], | |
"name": "Transfer", | |
"type": "event" | |
}, | |
{ | |
"inputs": [], | |
"name": "Lachesis", | |
"outputs": [ | |
{ | |
"internalType": "address", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "MIN_LIQUIDITY", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "Weth", | |
"outputs": [ | |
{ | |
"internalType": "address", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "inputToken", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "amount", | |
"type": "uint256" | |
} | |
], | |
"name": "addLiquidity", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "deltaSCX", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "payable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "owner", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "spender", | |
"type": "address" | |
} | |
], | |
"name": "allowance", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "spender", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "amount", | |
"type": "uint256" | |
} | |
], | |
"name": "approve", | |
"outputs": [ | |
{ | |
"internalType": "bool", | |
"name": "", | |
"type": "bool" | |
} | |
], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "arbiter", | |
"outputs": [ | |
{ | |
"internalType": "contract FlashLoanArbiter", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "account", | |
"type": "address" | |
} | |
], | |
"name": "balanceOf", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "value", | |
"type": "uint256" | |
} | |
], | |
"name": "burn", | |
"outputs": [ | |
{ | |
"internalType": "bool", | |
"name": "", | |
"type": "bool" | |
} | |
], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "config", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "transferFee", | |
"type": "uint256" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "burnFee", | |
"type": "uint256" | |
}, | |
{ | |
"internalType": "address", | |
"name": "feeDestination", | |
"type": "address" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "transferFee", | |
"type": "uint256" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "burnFee", | |
"type": "uint256" | |
}, | |
{ | |
"internalType": "address", | |
"name": "feeDestination", | |
"type": "address" | |
} | |
], | |
"name": "configureScarcity", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "decimals", | |
"outputs": [ | |
{ | |
"internalType": "uint8", | |
"name": "", | |
"type": "uint8" | |
} | |
], | |
"stateMutability": "pure", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "getConfiguration", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
}, | |
{ | |
"internalType": "address", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "getMaxLiquidityExit", | |
"outputs": [ | |
{ | |
"internalType": "uint8", | |
"name": "", | |
"type": "uint8" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "amount", | |
"type": "uint256" | |
}, | |
{ | |
"internalType": "address", | |
"name": "flashLoanContract", | |
"type": "address" | |
} | |
], | |
"name": "grantFlashLoan", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "recipient", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "value", | |
"type": "uint256" | |
} | |
], | |
"name": "migrateMint", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "migrator", | |
"outputs": [ | |
{ | |
"internalType": "address", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "name", | |
"outputs": [ | |
{ | |
"internalType": "string", | |
"name": "", | |
"type": "string" | |
} | |
], | |
"stateMutability": "pure", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "owner", | |
"outputs": [ | |
{ | |
"internalType": "address", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "renounceOwnership", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "weth", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "lachesis", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "flashLoanArbiter", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "_pyroTokenLiquidityReceiver", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "weidaiReserve", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "dai", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "weiDai", | |
"type": "address" | |
} | |
], | |
"name": "seed", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "m", | |
"type": "address" | |
} | |
], | |
"name": "setMigrator", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "uint8", | |
"name": "swapPrecisionFactor", | |
"type": "uint8" | |
}, | |
{ | |
"internalType": "uint8", | |
"name": "maxLiquidityExit", | |
"type": "uint8" | |
} | |
], | |
"name": "setSafetParameters", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "token", | |
"type": "address" | |
}, | |
{ | |
"internalType": "bool", | |
"name": "valid", | |
"type": "bool" | |
}, | |
{ | |
"internalType": "bool", | |
"name": "burnable", | |
"type": "bool" | |
} | |
], | |
"name": "setValidToken", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "user", | |
"type": "address" | |
}, | |
{ | |
"internalType": "bool", | |
"name": "whiteList", | |
"type": "bool" | |
} | |
], | |
"name": "setWhiteListUser", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "inputToken", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "outputToken", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "inputAmount", | |
"type": "uint256" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "outputAmount", | |
"type": "uint256" | |
} | |
], | |
"name": "swap", | |
"outputs": [ | |
{ | |
"internalType": "bool", | |
"name": "success", | |
"type": "bool" | |
} | |
], | |
"stateMutability": "payable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "symbol", | |
"outputs": [ | |
{ | |
"internalType": "string", | |
"name": "", | |
"type": "string" | |
} | |
], | |
"stateMutability": "pure", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"name": "tokenBurnable", | |
"outputs": [ | |
{ | |
"internalType": "bool", | |
"name": "", | |
"type": "bool" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [], | |
"name": "totalSupply", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "recipient", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "amount", | |
"type": "uint256" | |
} | |
], | |
"name": "transfer", | |
"outputs": [ | |
{ | |
"internalType": "bool", | |
"name": "", | |
"type": "bool" | |
} | |
], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "sender", | |
"type": "address" | |
}, | |
{ | |
"internalType": "address", | |
"name": "recipient", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "amount", | |
"type": "uint256" | |
} | |
], | |
"name": "transferFrom", | |
"outputs": [ | |
{ | |
"internalType": "bool", | |
"name": "", | |
"type": "bool" | |
} | |
], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "newOwner", | |
"type": "address" | |
} | |
], | |
"name": "transferOwnership", | |
"outputs": [], | |
"stateMutability": "nonpayable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"name": "validTokens", | |
"outputs": [ | |
{ | |
"internalType": "bool", | |
"name": "", | |
"type": "bool" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "", | |
"type": "address" | |
} | |
], | |
"name": "whiteListUsers", | |
"outputs": [ | |
{ | |
"internalType": "bool", | |
"name": "", | |
"type": "bool" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "outputToken", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "tokensToRelease", | |
"type": "uint256" | |
} | |
], | |
"name": "withdrawLiquidity", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "deltaSCX", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "payable", | |
"type": "function" | |
}, | |
{ | |
"inputs": [ | |
{ | |
"internalType": "address", | |
"name": "outputToken", | |
"type": "address" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "tokensToRelease", | |
"type": "uint256" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "scx", | |
"type": "uint256" | |
}, | |
{ | |
"internalType": "uint256", | |
"name": "passes", | |
"type": "uint256" | |
} | |
], | |
"name": "withdrawLiquidityFindSCX", | |
"outputs": [ | |
{ | |
"internalType": "uint256", | |
"name": "", | |
"type": "uint256" | |
} | |
], | |
"stateMutability": "view", | |
"type": "function" | |
} | |
], | |
"devdoc": { | |
"kind": "dev", | |
"methods": { | |
"renounceOwnership()": { | |
"details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." | |
}, | |
"transferOwnership(address)": { | |
"details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." | |
} | |
}, | |
"version": 1 | |
}, | |
"userdoc": { | |
"kind": "user", | |
"methods": {}, | |
"version": 1 | |
} | |
}, | |
"settings": { | |
"compilationTarget": { | |
"contracts/Behodler.sol": "Behodler" | |
}, | |
"evmVersion": "istanbul", | |
"libraries": {}, | |
"metadata": { | |
"bytecodeHash": "ipfs" | |
}, | |
"optimizer": { | |
"enabled": false, | |
"runs": 200 | |
}, | |
"remappings": [] | |
}, | |
"sources": { | |
"contracts/Behodler.sol": { | |
"keccak256": "0x70baea701598eb662bbbadec118cd66a7f14baa50c3013ec56a38d1842fbbacd", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://982e001e5558b7d33f82a1a3e4c409cdc2fc1c4b78a53b7ea9b3ba176e3fd134", | |
"dweb:/ipfs/QmcRMsK9Pw5DzmFwMZLJNcKFyH2fNBnnRewJhy7bsUta11" | |
] | |
}, | |
"contracts/Scarcity.sol": { | |
"keccak256": "0x17c40957f005c9d595e0f08351e4179e55872992df117427527f260e0f038383", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://2ccb5822dd846d3e7ff301c454b8121ad2744bce66d2211f485147278d4ddcdd", | |
"dweb:/ipfs/QmS52ihG7Ztksqvy4pxU8h2MqhDeqJNTvyk4wWpaARPGXJ" | |
] | |
}, | |
"contracts/WETH10.sol": { | |
"keccak256": "0x960576429cc994a2d765c081380f44cad7c3da2d197bb181755cf0da8d48380c", | |
"license": "GPL-3.0-or-later", | |
"urls": [ | |
"bzz-raw://f377986eeb4f5b8d097e1b19d1a1a4ab203f6504c7fe564cbdbbcc8897c0dd05", | |
"dweb:/ipfs/Qma5PVdq8JuKY51pFFc8Y3YUXqaU9UHRPvXeXzDfkm1SdF" | |
] | |
}, | |
"contracts/facades/Burnable.sol": { | |
"keccak256": "0xa9221a3871f78f5ef03aa957eb88d29898c1d8be1dd9e273d59263864acca86c", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://942944c64572b5cb41e2214e2583821b3044065bc42308110cf471ad15e987d5", | |
"dweb:/ipfs/QmduV5WdXk9W7kmb41MnYLJ3dPordBfiABCKqLk9oBPw2y" | |
] | |
}, | |
"contracts/facades/LachesisLike.sol": { | |
"keccak256": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", | |
"urls": [ | |
"bzz-raw://0000000000000000000000000000000000000000000000000000000000000000", | |
"dweb:/ipfs/QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH" | |
] | |
}, | |
"contracts/flashLoans/FlashLoanArbiter.sol": { | |
"keccak256": "0x4a5c466e81174d8b7b973c364c856b8b15eef92a4ce962d8f30b9d6031c4c12a", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://0eaf1e3cca5cad5c83a538d8e98804cd9654f09e0b2ae31ea02ce9fbd3cc0859", | |
"dweb:/ipfs/QmfBfd9DC1r5V4ZK2HMdVtD56mcXaww6d3qNsTXbNHiM2B" | |
] | |
}, | |
"contracts/flashLoans/FlashLoanReceiver.sol": { | |
"keccak256": "0xbf0ae7198f59755c43fcd9185d00700578923db6ab2fb4617820826b0b5dd0e5", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://1d074b3e5d9c73a49b11d5f507b8f220efff1c1919d140e31a438d594e0fcdff", | |
"dweb:/ipfs/QmTuhc4fdVE58UwTGmp26CmvqoK2DN9aKav8PjgXRgF61B" | |
] | |
}, | |
"contracts/openzeppelin/IERC20.sol": { | |
"keccak256": "0x13da75cceaf994fafe2781278b4969946fb77adf7f3c7bbd16ba44cc7e8a9170", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://3e9d06ef8b97ad0bc5f5a9a781e1ebb0280602ab14dfa25f4ffc6aca16851451", | |
"dweb:/ipfs/QmVEZYk7GfAoMgwGQQvrrWb8asfYiXTvHiuVwpt5UFbC4i" | |
] | |
}, | |
"contracts/openzeppelin/Ownable.sol": { | |
"keccak256": "0x887bbbfa05029a3af14a15381685383200d763d0e363aabe945399ca3efa1b71", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://4464e666bb954986a6af9e7f76ee47c734cd338f1ec1943da24dfc9bbeed50db", | |
"dweb:/ipfs/QmZazYKEWnNW3xcRhLfrL3GCnBw4uoSpnVNqV4Nz9sg4HW" | |
] | |
}, | |
"contracts/openzeppelin/SafeMath.sol": { | |
"keccak256": "0x98ec6c011810ef2825bbc46084e7e502cf23d627903796c800ff05c84e7659ae", | |
"license": "MIT", | |
"urls": [ | |
"bzz-raw://733ff6c848e6e42f65c9d32db953c0d7bd88376845d33b737ab2c7351dc119a5", | |
"dweb:/ipfs/QmXWh2RtVKBF2RNfGv7jQoMXeSxjMD6ZmqZnqdjWbSc5Ng" | |
] | |
} | |
}, | |
"version": 1 | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.7.6; | |
import "./openzeppelin/Ownable.sol"; | |
import "./Scarcity.sol"; | |
import "./facades/LachesisLike.sol"; | |
import "./facades/Burnable.sol"; | |
import "./openzeppelin/SafeMath.sol"; | |
import "./openzeppelin/IERC20.sol"; | |
import "./flashLoans/FlashLoanReceiver.sol"; | |
import "./flashLoans/FlashLoanArbiter.sol"; | |
import "./WETH10.sol"; | |
library AddressBalanceCheck { | |
function tokenBalance(address token) public view returns (uint256) { | |
return IERC20(token).balanceOf(address(this)); | |
} | |
function shiftedBalance(address token, uint256 factor) | |
public | |
view | |
returns (uint256) | |
{ | |
return IERC20(token).balanceOf(address(this)) / factor; | |
} | |
function transferIn( | |
address token, | |
address sender, | |
uint256 value | |
) public { | |
IERC20(token).transferFrom(sender, address(this), value); | |
} | |
function transferOut( | |
address token, | |
address recipient, | |
uint256 value | |
) public { | |
IERC20(token).transfer(recipient, value); | |
} | |
} | |
/*To following code is sourced from the ABDK library for assistance in dealing with precision logarithms in Ethereum. | |
* ABDK Math 64.64 Smart Contract Library. Copyright © 2019 by ABDK Consulting. | |
* Author: Mikhail Vladimirov <[email protected]> | |
* Source: https://github.com/abdk-consulting/abdk-libraries-solidity/blob/master/ABDKMath64x64.sol#L366 | |
*/ | |
library ABDK { | |
/* | |
* Minimum value signed 64.64-bit fixed point number may have. | |
*/ | |
int128 private constant MIN_64x64 = -0x80000000000000000000000000000000; | |
/* | |
* Maximum value signed 64.64-bit fixed point number may have. | |
*/ | |
int128 private constant MAX_64x64 = 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; | |
/** | |
* Convert unsigned 256-bit integer number into signed 64.64-bit fixed point | |
* number. Revert on overflow. | |
* | |
* @param x unsigned 256-bit integer number | |
* @return signed 64.64-bit fixed point number | |
*/ | |
function fromUInt(uint256 x) internal pure returns (int128) { | |
require(x <= 0x7FFFFFFFFFFFFFFF); | |
return int128(x << 64); | |
} | |
/** | |
* Calculate x + y. Revert on overflow. | |
* | |
* @param x signed 64.64-bit fixed point number | |
* @param y signed 64.64-bit fixed point number | |
* @return signed 64.64-bit fixed point number | |
*/ | |
function add(int128 x, int128 y) internal pure returns (int128) { | |
int256 result = int256(x) + y; | |
require(result >= MIN_64x64 && result <= MAX_64x64); | |
return int128(result); | |
} | |
/** | |
* Calculate binary logarithm of x. Revert if x <= 0. | |
* | |
* @param x signed 64.64-bit fixed point number | |
* @return signed 64.64-bit fixed point number | |
*/ | |
function log_2(uint256 x) internal pure returns (uint256) { | |
require(x > 0); | |
uint256 msb = 0; | |
uint256 xc = x; | |
if (xc >= 0x10000000000000000) { | |
xc >>= 64; | |
msb += 64; | |
} | |
if (xc >= 0x100000000) { | |
xc >>= 32; | |
msb += 32; | |
} | |
if (xc >= 0x10000) { | |
xc >>= 16; | |
msb += 16; | |
} | |
if (xc >= 0x100) { | |
xc >>= 8; | |
msb += 8; | |
} | |
if (xc >= 0x10) { | |
xc >>= 4; | |
msb += 4; | |
} | |
if (xc >= 0x4) { | |
xc >>= 2; | |
msb += 2; | |
} | |
if (xc >= 0x2) msb += 1; // No need to shift xc anymore | |
uint256 result = (msb - 64) << 64; | |
uint256 ux = uint256(x) << uint256(127 - msb); | |
for (uint256 bit = 0x8000000000000000; bit > 0; bit >>= 1) { | |
ux *= ux; | |
uint256 b = ux >> 255; | |
ux >>= 127 + b; | |
result += bit * b; | |
} | |
return result; | |
} | |
} | |
/* | |
Behodler orchestrates trades using an omnischedule bonding curve. | |
The name is inspired by the Beholder of D&D, a monster with multiple arms ending in eyes peering in all directions. | |
The Behodler is a smart contract that can see the prices of all tokens simultaneously without need for composition or delay. | |
The hodl part of Behodler refers to the fact that with every trade of a token pair, the liquidity pool of each token held by Behodler increases | |
Behodler 1 performed square root calculations which are gas intensive for fixed point arithmetic algorithms. | |
To save gas, Behodler2 never performs square root calculations. It just checks the numbers passed in by the user and reverts if needs be. | |
This techique is called invariant checking and offloads maximum calculation to clients while guaranteeing no cheating is possible. | |
In Behodler 1 some operations were duplicated. For instance, a swap was a scarcity purchase followed by a scarcity sale. Instead, cutting out | |
the middle scarcity allows the factor scaling to be dropped altogether. | |
By bringing Scarcity, Janus, Kharon and Behodler together in one contract, Behodler 2 avoids the EXT_CALL gas fees and can take gas saving shortcuts with Scarcity | |
transfers. The drawback to this approach is less flexibility with fees in the way that Kharon allowed. | |
Behodler 2 now has Flashloan support. Instead of charging a liquidity growing fee, Behodler 2 requires the user fulfil some requirement | |
such as holding an NFT or staking Scarcity. This allows for zero fee flash loans that are front runner resistant and | |
allows a secondary flashloan market to evolve. | |
*/ | |
contract Behodler is Scarcity { | |
using SafeMath for uint256; | |
using ABDK for int128; | |
using ABDK for uint256; | |
using AddressBalanceCheck for address; | |
event LiquidityAdded( | |
address sender, | |
address token, | |
uint256 tokenValue, | |
uint256 scx | |
); | |
event LiquidityWithdrawn( | |
address recipient, | |
address token, | |
uint256 tokenValue, | |
uint256 scx | |
); | |
event Swap( | |
address sender, | |
address inputToken, | |
address outputToken, | |
uint256 inputValue, | |
uint256 outputValue | |
); | |
struct WeidaiTokens { | |
address dai; | |
address reserve; | |
address weiDai; | |
} | |
struct PrecisionFactors { | |
uint8 swapPrecisionFactor; | |
uint8 maxLiquidityExit; //percentage as number between 1 and 100 | |
} | |
WeidaiTokens WD; | |
PrecisionFactors safetyParameters; | |
address public Weth; | |
address public Lachesis; | |
address pyroTokenLiquidityReceiver; | |
FlashLoanArbiter public arbiter; | |
address private inputSender; | |
bool[3] unlocked; | |
constructor() { | |
safetyParameters.swapPrecisionFactor = 30; //approximately a billion | |
safetyParameters.maxLiquidityExit = 90; | |
for (uint8 i = 0; i < 3; i++) unlocked[i] = true; | |
} | |
function setSafetParameters( | |
uint8 swapPrecisionFactor, | |
uint8 maxLiquidityExit | |
) external onlyOwner { | |
safetyParameters.swapPrecisionFactor = swapPrecisionFactor; | |
safetyParameters.maxLiquidityExit = maxLiquidityExit; | |
} | |
function getMaxLiquidityExit() public view returns (uint8) { | |
return safetyParameters.maxLiquidityExit; | |
} | |
function seed( | |
address weth, | |
address lachesis, | |
address flashLoanArbiter, | |
address _pyroTokenLiquidityReceiver, | |
address weidaiReserve, | |
address dai, | |
address weiDai | |
) external onlyOwner { | |
Weth = weth; | |
Lachesis = lachesis; | |
arbiter = FlashLoanArbiter(flashLoanArbiter); | |
pyroTokenLiquidityReceiver = _pyroTokenLiquidityReceiver; | |
WD.reserve = weidaiReserve; | |
WD.dai = dai; | |
WD.weiDai = weiDai; | |
} | |
//Logarithmic growth can get quite flat beyond the first chunk. We divide input amounts by | |
uint256 public constant MIN_LIQUIDITY = 1e12; | |
mapping(address => bool) public tokenBurnable; | |
mapping(address => bool) public validTokens; | |
mapping(address => bool) public whiteListUsers; // can trade on tokens that are disabled | |
modifier onlyLachesis { | |
require(msg.sender == Lachesis); | |
_; | |
} | |
modifier onlyValidToken(address token) { | |
require( | |
whiteListUsers[msg.sender] || | |
validTokens[token] || | |
(token != address(0) && token == Weth), | |
"BEHODLER: token invalid" | |
); | |
_; | |
} | |
modifier determineSender(address inputToken) { | |
if (msg.value > 0) { | |
require( | |
inputToken == Weth, | |
"BEHODLER: Eth only valid for Weth trades." | |
); | |
inputSender = address(this); | |
} else { | |
inputSender = msg.sender; | |
} | |
_; | |
} | |
enum Slot {Swap, Add, Withdraw} | |
modifier lock(Slot slot) { | |
uint256 index = uint256(slot); | |
require(unlocked[index], "BEHODLER: Reentrancy guard active."); | |
unlocked[index] = false; | |
_; | |
unlocked[index] = true; | |
} | |
/* | |
Let config.burnFee be b. | |
Let F = 1-b | |
Let input token be I and Output token be O | |
_i is initial and _f is final. Eg. I_i is initial input token balance | |
The swap equation, when simplified, is given by | |
√F(√I_f - √I_i) = (√O_i - √O_f)/(F) | |
However, the gradient of square root becomes untenable when | |
the value of tokens diverge too much. The gradient favours the addition of low | |
value tokens disportionately. A gradient that favours tokens equally is given by | |
a log. The lowest gas implementation is base 2. | |
The new swap equation is thus | |
log(I_f) - log(I_i) = log(O_i) - log(O_f) | |
Technical note on ETH handling: we don't duplicate functions for accepting Eth as an input. Instead we wrap on receipt | |
and apply a reentrancy guard. The determineSender modifier fixes an isse in Behodler 1 which required the user to approve | |
both sending and receiving Eth because of the nature of Weth deposit and withdraw functionality. | |
*/ | |
function swap( | |
address inputToken, | |
address outputToken, | |
uint256 inputAmount, | |
uint256 outputAmount | |
) | |
external | |
payable | |
determineSender(inputToken) | |
onlyValidToken(inputToken) | |
lock(Slot.Swap) | |
returns (bool success) | |
{ | |
uint256 initialInputBalance = inputToken.tokenBalance(); | |
if (inputToken == Weth) { | |
if (IERC20(Weth).balanceOf(msg.sender) >= inputAmount) { | |
Weth.transferIn(msg.sender, inputAmount); | |
} else { | |
require( | |
msg.value == inputAmount, | |
"BEHODLER: Insufficient Ether sent" | |
); | |
IWETH10(Weth).deposit{value: msg.value}(); | |
} | |
} else { | |
inputToken.transferIn(inputSender, inputAmount); | |
} | |
uint256 netInputAmount = | |
inputAmount.sub(burnToken(inputToken, inputAmount)); | |
uint256 initialOutputBalance = outputToken.tokenBalance(); | |
require( | |
outputAmount.mul(100).div(initialOutputBalance) <= | |
safetyParameters.maxLiquidityExit, | |
"BEHODLER: liquidity withdrawal too large." | |
); | |
uint256 finalInputBalance = initialInputBalance.add(netInputAmount); | |
uint256 finalOutputBalance = initialOutputBalance.sub(outputAmount); | |
//new scope to avoid stack too deep errors. | |
{ | |
//if the input balance after adding input liquidity is 1073741824 bigger than the initial balance, we revert. | |
uint256 inputRatio = | |
(initialInputBalance << safetyParameters.swapPrecisionFactor) | |
.div(finalInputBalance); | |
uint256 outputRatio = | |
(finalOutputBalance << safetyParameters.swapPrecisionFactor) | |
.div(initialOutputBalance); | |
require( | |
inputRatio != 0 && inputRatio == outputRatio, | |
"BEHODLER: swap invariant." | |
); | |
} | |
require( | |
finalOutputBalance >= MIN_LIQUIDITY, | |
"BEHODLER: min liquidity." | |
); | |
if (outputToken == Weth) { | |
address payable sender = msg.sender; | |
IWETH10(Weth).withdrawTo(sender, outputAmount); | |
} else { | |
outputToken.transferOut(msg.sender, outputAmount); | |
} | |
emit Swap( | |
msg.sender, | |
inputToken, | |
outputToken, | |
inputAmount, | |
outputAmount | |
); | |
success = true; | |
} | |
/* | |
ΔSCX = log(FinalBalance) - log(InitialBalance) | |
The choice of base for the log isn't relevant from a mathematical point of view | |
but from a computational point of view, base 2 is the cheapest for obvious reasons. | |
"What I told you was true, from a certain point of view." - Obi-Wan Kenobi | |
*/ | |
function addLiquidity(address inputToken, uint256 amount) | |
external | |
payable | |
determineSender(inputToken) | |
onlyValidToken(inputToken) | |
lock(Slot.Add) | |
returns (uint256 deltaSCX) | |
{ | |
uint256 initialBalance = | |
uint256(inputToken.shiftedBalance(MIN_LIQUIDITY).fromUInt()); | |
if (inputToken == Weth) { | |
if (IERC20(Weth).balanceOf(msg.sender) >= amount) { | |
Weth.transferIn(msg.sender, amount); | |
} else { | |
require( | |
msg.value == amount, | |
"BEHODLER: Insufficient Ether sent" | |
); | |
IWETH10(Weth).deposit{value: msg.value}(); | |
} | |
} else { | |
inputToken.transferIn(inputSender, amount); | |
} | |
uint256 netInputAmount = | |
uint256( | |
amount | |
.sub(burnToken(inputToken, amount)) | |
.div(MIN_LIQUIDITY) | |
.fromUInt() | |
); | |
uint256 finalBalance = uint256(initialBalance.add(netInputAmount)); | |
require( | |
uint256(finalBalance) >= MIN_LIQUIDITY, | |
"BEHODLER: min liquidity." | |
); | |
deltaSCX = uint256( | |
finalBalance.log_2() - | |
(initialBalance > 1 ? initialBalance.log_2() : 0) | |
); | |
mint(msg.sender, deltaSCX); | |
emit LiquidityAdded(msg.sender, inputToken, amount, deltaSCX); | |
} | |
/* | |
ΔSCX = log(InitialBalance) - log(FinalBalance) | |
tokensToRelease = InitialBalance -FinalBalance | |
=>FinalBalance = InitialBalance - tokensToRelease | |
Then apply logs and deduct SCX from msg.sender | |
The choice of base for the log isn't relevant from a mathematical point of view | |
but from a computational point of view, base 2 is the cheapest for obvious reasons. | |
"From my point of view, the Jedi are evil" - Darth Vader | |
*/ | |
function withdrawLiquidity(address outputToken, uint256 tokensToRelease) | |
external | |
payable | |
determineSender(outputToken) | |
onlyValidToken(outputToken) | |
lock(Slot.Withdraw) | |
returns (uint256 deltaSCX) | |
{ | |
uint256 initialBalance = outputToken.tokenBalance(); | |
uint256 finalBalance = initialBalance.sub(tokensToRelease); | |
require(finalBalance > MIN_LIQUIDITY, "BEHODLER: min liquidity"); | |
require( | |
tokensToRelease.mul(100).div(initialBalance) <= | |
safetyParameters.maxLiquidityExit, | |
"BEHODLER: liquidity withdrawal too large." | |
); | |
uint256 logInitial = initialBalance.log_2(); | |
uint256 logFinal = finalBalance.log_2(); | |
deltaSCX = logInitial - (finalBalance > 1 ? logFinal : 0); | |
uint256 scxBalance = balances[msg.sender]; | |
if (deltaSCX > scxBalance) { | |
//rounding errors in scx creation and destruction. Err on the side of holders | |
uint256 difference = deltaSCX - scxBalance; | |
if ((difference * 10000) / deltaSCX == 0) deltaSCX = scxBalance; | |
} | |
burn(msg.sender, deltaSCX); | |
if (outputToken == Weth) { | |
address payable sender = msg.sender; | |
IWETH10(Weth).withdrawTo(sender, tokensToRelease); | |
} else { | |
outputToken.transferOut(msg.sender, tokensToRelease); | |
} | |
emit LiquidityWithdrawn( | |
msg.sender, | |
outputToken, | |
tokensToRelease, | |
deltaSCX | |
); | |
} | |
/* | |
ΔSCX = log(InitialBalance) - log(FinalBalance) | |
tokensToRelease = InitialBalance -FinalBalance | |
=>FinalBalance = InitialBalance - tokensToRelease | |
Then apply logs and deduct SCX from msg.sender | |
The choice of base for the log isn't relevant from a mathematical point of view | |
but from a computational point of view, base 2 is the cheapest for obvious reasons. | |
"From my point of view, the Jedi are evil" - Darth Vader | |
*/ | |
function withdrawLiquidityFindSCX( | |
address outputToken, | |
uint256 tokensToRelease, | |
uint256 scx, | |
uint256 passes | |
) external view returns (uint256) { | |
uint256 upperBoundary = outputToken.tokenBalance(); | |
uint256 lowerBoundary = 0; | |
for (uint256 i = 0; i < passes; i++) { | |
uint256 initialBalance = outputToken.tokenBalance(); | |
uint256 finalBalance = initialBalance.sub(tokensToRelease); | |
uint256 logInitial = initialBalance.log_2(); | |
uint256 logFinal = finalBalance.log_2(); | |
int256 deltaSCX = | |
int256(logInitial - (finalBalance > 1 ? logFinal : 0)); | |
int256 difference = int256(scx) - deltaSCX; | |
// if (difference**2 < 1000000) return tokensToRelease; | |
if (difference == 0) return tokensToRelease; | |
if (difference < 0) { | |
// too many tokens requested | |
upperBoundary = tokensToRelease - 1; | |
} else { | |
//too few tokens requested | |
lowerBoundary = tokensToRelease + 1; | |
} | |
tokensToRelease = | |
((upperBoundary - lowerBoundary) / 2) + | |
lowerBoundary; //bitshift | |
tokensToRelease = tokensToRelease > initialBalance | |
? initialBalance | |
: tokensToRelease; | |
} | |
return tokensToRelease; | |
} | |
//TODO: possibly comply with the flash loan standard https://eips.ethereum.org/EIPS/eip-3156 | |
// - however, the more I reflect on this, the less keen I am due to gas and simplicity | |
//example: a user must hold 10% of SCX total supply or user must hold an NFT | |
//The initial arbiter will have no constraints. | |
//The flashloan system on behodler is inverted. Instead of being able to borrow any individual token, | |
//the borrower asks for SCX. Theoretically you can borrow more SCX than currently exists so long | |
//as you can think of a clever way to pay it back. | |
//Note: Borrower doesn't have to send scarcity back, they just need to have high enough balance. | |
function grantFlashLoan(uint256 amount, address flashLoanContract) | |
external | |
{ | |
require( | |
arbiter.canBorrow(msg.sender), | |
"BEHODLER: cannot borrow flashloan" | |
); | |
balances[flashLoanContract] = balances[flashLoanContract].add(amount); | |
FlashLoanReceiver(flashLoanContract).execute(msg.sender); | |
balances[flashLoanContract] = balances[flashLoanContract].sub( | |
amount, | |
"BEHODLER: Flashloan repayment failed" | |
); | |
} | |
//useful for when we want the ability to add tokens without trading. For instance, the initial liquidity queueing event. | |
function setWhiteListUser(address user, bool whiteList) external onlyOwner { | |
whiteListUsers[user] = whiteList; | |
} | |
function burnToken(address token, uint256 amount) | |
private | |
returns (uint256 burnt) | |
{ | |
if (token == WD.weiDai) { | |
burnt = applyBurnFee(token, amount, true); | |
} else if (tokenBurnable[token]) | |
burnt = applyBurnFee(token, amount, false); | |
else if (token == WD.dai) { | |
burnt = config.burnFee.mul(amount).div(1000); | |
token.transferOut(WD.reserve, burnt); | |
} else { | |
burnt = config.burnFee.mul(amount).div(1000); | |
token.transferOut(pyroTokenLiquidityReceiver, burnt); | |
} | |
} | |
function setValidToken( | |
address token, | |
bool valid, | |
bool burnable | |
) external onlyLachesis { | |
validTokens[token] = valid; | |
tokenBurnable[token] = burnable; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.7.6; | |
import './ABDK.sol'; | |
import './openzeppelin/SafeMath.sol'; | |
contract BehodlerPrice { | |
using SafeMath for uint256; | |
using ABDK for int128; | |
using ABDK for uint256; | |
uint256 public constant MIN_LIQUIDITY = 1e12; | |
function priceETHSCX( | |
uint256 amountETH, | |
uint256 ethInPool, | |
uint256 burnFee | |
) | |
public | |
pure | |
returns (uint256 deltaSCX) | |
{ | |
uint256 initialBalance = uint256((uint256(ethInPool / MIN_LIQUIDITY)).fromUInt()); | |
uint256 netInputAmount = | |
uint256( | |
amountETH | |
.sub(amountETH.mul(burnFee).div(1000)) | |
.div(MIN_LIQUIDITY) | |
.fromUInt() | |
); | |
uint256 finalBalance = uint256(initialBalance.add(netInputAmount)); | |
require( | |
uint256(finalBalance) >= MIN_LIQUIDITY, | |
"BEHODLER: min liquidity." | |
); | |
deltaSCX = uint256( | |
finalBalance.log_2() - | |
(initialBalance > 1 ? initialBalance.log_2() : 0) | |
); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.7.6; | |
abstract contract BehodlerLike { | |
function addLiquidity(address it, uint256 ia) | |
public | |
virtual | |
returns (uint256); | |
function withdrawLiquidity(address ot, uint256 oa) | |
public | |
virtual | |
returns (uint256); | |
function setValidToken( | |
address token, | |
bool valid, | |
bool burnable | |
) public virtual; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.7.6; | |
abstract contract Burnable { | |
function burn (uint amount) public virtual; | |
function symbol() public virtual pure returns (string memory); | |
function burn (address holder, uint amount) public virtual; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// this line is added to create a gist. Empty file is not allowed. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.7.6; | |
/** | |
* @dev Wrappers over Solidity's arithmetic operations with added overflow | |
* checks. | |
* | |
* Arithmetic operations in Solidity wrap on overflow. This can easily result | |
* in bugs, because programmers usually assume that an overflow raises an | |
* error, which is the standard behavior in high level programming languages. | |
* `SafeMath` restores this intuition by reverting the transaction when an | |
* operation overflows. | |
* | |
* Using this library instead of the unchecked operations eliminates an entire | |
* class of bugs, so it's recommended to use it always. | |
*/ | |
library SafeMath { | |
/** | |
* @dev Returns the addition of two unsigned integers, reverting on | |
* overflow. | |
* | |
* Counterpart to Solidity's `+` operator. | |
* | |
* Requirements: | |
* | |
* - Addition cannot overflow. | |
*/ | |
function add(uint256 a, uint256 b) internal pure returns (uint256) { | |
uint256 c = a + b; | |
require(c >= a, "SafeMath: addition overflow"); | |
return c; | |
} | |
/** | |
* @dev Returns the subtraction of two unsigned integers, reverting on | |
* overflow (when the result is negative). | |
* | |
* Counterpart to Solidity's `-` operator. | |
* | |
* Requirements: | |
* | |
* - Subtraction cannot overflow. | |
*/ | |
function sub(uint256 a, uint256 b) internal pure returns (uint256) { | |
return sub(a, b, "SafeMath: subtraction overflow"); | |
} | |
/** | |
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on | |
* overflow (when the result is negative). | |
* | |
* Counterpart to Solidity's `-` operator. | |
* | |
* Requirements: | |
* | |
* - Subtraction cannot overflow. | |
*/ | |
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { | |
require(b <= a, errorMessage); | |
uint256 c = a - b; | |
return c; | |
} | |
/** | |
* @dev Returns the multiplication of two unsigned integers, reverting on | |
* overflow. | |
* | |
* Counterpart to Solidity's `*` operator. | |
* | |
* Requirements: | |
* | |
* - Multiplication cannot overflow. | |
*/ | |
function mul(uint256 a, uint256 b) internal pure returns (uint256) { | |
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the | |
// benefit is lost if 'b' is also tested. | |
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 | |
if (a == 0) { | |
return 0; | |
} | |
uint256 c = a * b; | |
require(c / a == b, "SafeMath: multiplication overflow"); | |
return c; | |
} | |
/** | |
* @dev Returns the integer division of two unsigned integers. Reverts on | |
* division by zero. The result is rounded towards zero. | |
* | |
* Counterpart to Solidity's `/` operator. Note: this function uses a | |
* `revert` opcode (which leaves remaining gas untouched) while Solidity | |
* uses an invalid opcode to revert (consuming all remaining gas). | |
* | |
* Requirements: | |
* | |
* - The divisor cannot be zero. | |
*/ | |
function div(uint256 a, uint256 b) internal pure returns (uint256) { | |
return div(a, b, "SafeMath: division by zero"); | |
} | |
/** | |
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on | |
* division by zero. The result is rounded towards zero. | |
* | |
* Counterpart to Solidity's `/` operator. Note: this function uses a | |
* `revert` opcode (which leaves remaining gas untouched) while Solidity | |
* uses an invalid opcode to revert (consuming all remaining gas). | |
* | |
* Requirements: | |
* | |
* - The divisor cannot be zero. | |
*/ | |
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { | |
require(b > 0, errorMessage); | |
uint256 c = a / b; | |
// assert(a == b * c + a % b); // There is no case in which this doesn't hold | |
return c; | |
} | |
/** | |
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), | |
* Reverts when dividing by zero. | |
* | |
* Counterpart to Solidity's `%` operator. This function uses a `revert` | |
* opcode (which leaves remaining gas untouched) while Solidity uses an | |
* invalid opcode to revert (consuming all remaining gas). | |
* | |
* Requirements: | |
* | |
* - The divisor cannot be zero. | |
*/ | |
function mod(uint256 a, uint256 b) internal pure returns (uint256) { | |
return mod(a, b, "SafeMath: modulo by zero"); | |
} | |
/** | |
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), | |
* Reverts with custom message when dividing by zero. | |
* | |
* Counterpart to Solidity's `%` operator. This function uses a `revert` | |
* opcode (which leaves remaining gas untouched) while Solidity uses an | |
* invalid opcode to revert (consuming all remaining gas). | |
* | |
* Requirements: | |
* | |
* - The divisor cannot be zero. | |
*/ | |
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { | |
require(b != 0, errorMessage); | |
return a % b; | |
} | |
} | |
/*To following code is sourced from the ABDK library for assistance in dealing with precision logarithms in Ethereum. | |
* ABDK Math 64.64 Smart Contract Library. Copyright © 2019 by ABDK Consulting. | |
* Author: Mikhail Vladimirov <[email protected]> | |
* Source: https://github.com/abdk-consulting/abdk-libraries-solidity/blob/master/ABDKMath64x64.sol#L366 | |
*/ | |
library ABDK { | |
/* | |
* Minimum value signed 64.64-bit fixed point number may have. | |
*/ | |
int128 private constant MIN_64x64 = -0x80000000000000000000000000000000; | |
/* | |
* Maximum value signed 64.64-bit fixed point number may have. | |
*/ | |
int128 private constant MAX_64x64 = 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; | |
/** | |
* Convert unsigned 256-bit integer number into signed 64.64-bit fixed point | |
* number. Revert on overflow. | |
* | |
* @param x unsigned 256-bit integer number | |
* @return signed 64.64-bit fixed point number | |
*/ | |
function fromUInt(uint256 x) internal pure returns (int128) { | |
require(x <= 0x7FFFFFFFFFFFFFFF); | |
return int128(x << 64); | |
} | |
/** | |
* Calculate x + y. Revert on overflow. | |
* | |
* @param x signed 64.64-bit fixed point number | |
* @param y signed 64.64-bit fixed point number | |
* @return signed 64.64-bit fixed point number | |
*/ | |
function add(int128 x, int128 y) internal pure returns (int128) { | |
int256 result = int256(x) + y; | |
require(result >= MIN_64x64 && result <= MAX_64x64); | |
return int128(result); | |
} | |
/** | |
* Calculate binary logarithm of x. Revert if x <= 0. | |
* | |
* @param x signed 64.64-bit fixed point number | |
* @return signed 64.64-bit fixed point number | |
*/ | |
function log_2(uint256 x) internal pure returns (uint256) { | |
require(x > 0); | |
uint256 msb = 0; | |
uint256 xc = x; | |
if (xc >= 0x10000000000000000) { | |
xc >>= 64; | |
msb += 64; | |
} | |
if (xc >= 0x100000000) { | |
xc >>= 32; | |
msb += 32; | |
} | |
if (xc >= 0x10000) { | |
xc >>= 16; | |
msb += 16; | |
} | |
if (xc >= 0x100) { | |
xc >>= 8; | |
msb += 8; | |
} | |
if (xc >= 0x10) { | |
xc >>= 4; | |
msb += 4; | |
} | |
if (xc >= 0x4) { | |
xc >>= 2; | |
msb += 2; | |
} | |
if (xc >= 0x2) msb += 1; // No need to shift xc anymore | |
uint256 result = (msb - 64) << 64; | |
uint256 ux = uint256(x) << uint256(127 - msb); | |
for (uint256 bit = 0x8000000000000000; bit > 0; bit >>= 1) { | |
ux *= ux; | |
uint256 b = ux >> 255; | |
ux >>= 127 + b; | |
result += bit * b; | |
} | |
return result; | |
} | |
} | |
contract BehodlerPrice { | |
using SafeMath for uint256; | |
using ABDK for int128; | |
using ABDK for uint256; | |
uint256 public constant MIN_LIQUIDITY = 1e12; | |
function addLiquidity( | |
uint256 amountETH, | |
uint256 ethInPool, | |
uint256 burnFee | |
) | |
public | |
pure | |
returns (uint256 deltaSCX) | |
{ | |
uint256 initialBalance = uint256((uint256(ethInPool / MIN_LIQUIDITY)).fromUInt()); | |
uint256 netInputAmount = | |
uint256( | |
amountETH | |
.sub(amountETH.mul(burnFee).div(1000)) | |
.div(MIN_LIQUIDITY) | |
.fromUInt() | |
); | |
uint256 finalBalance = uint256(initialBalance.add(netInputAmount)); | |
require( | |
uint256(finalBalance) >= MIN_LIQUIDITY, | |
"BEHODLER: min liquidity." | |
); | |
deltaSCX = uint256( | |
finalBalance.log_2() - | |
(initialBalance > 1 ? initialBalance.log_2() : 0) | |
); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.7.6; | |
abstract contract FlashLoanArbiter { | |
function canBorrow (address borrower) public virtual returns (bool); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.7.6; | |
abstract contract FlashLoanReceiver { | |
function execute (address caller) public virtual; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.7.6; | |
import "./FlashLoanArbiter.sol"; | |
import "../openzeppelin/Ownable.sol"; | |
import "../openzeppelin/SafeMath.sol"; | |
//TODO: implement after launch. For now flashloans can be free | |
// contract NFTFlashLoanArbiter is FlashLoanArbiter, Ownable{ | |
// using SafeMath for uint; | |
// } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.7.6; | |
import "./FlashLoanArbiter.sol"; | |
import "../openzeppelin/SafeMath.sol"; | |
//stand in until a better scheme enabled. | |
contract OpenArbiter is FlashLoanArbiter{ | |
function canBorrow (address borrower) public pure override returns (bool){ | |
return true; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.7.6; | |
import "./FlashLoanArbiter.sol"; | |
import "../openzeppelin/Ownable.sol"; | |
import "../openzeppelin/SafeMath.sol"; | |
import "../openzeppelin/IERC20.sol"; | |
contract TokenHODLFlashLoanArbiter is FlashLoanArbiter,Ownable { | |
using SafeMath for uint; | |
IERC20 token; | |
uint holdRatio; //0-100 | |
function setToken (address tkn) public onlyOwner { | |
token = IERC20(tkn); | |
} | |
function setHoldRatio(uint ratio) public onlyOwner { | |
require (ratio <=100, "FLASHLOANS: ratio < 100"); | |
holdRatio = ratio; | |
} | |
function canBorrow (address borrower) public view override returns (bool){ | |
return token.balanceOf(borrower).mul(100).div(token.totalSupply())>=holdRatio; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.7.6; | |
import "./openzeppelin/Ownable.sol"; | |
import "./facades/LachesisLike.sol"; | |
import "./facades/BehodlerLike.sol"; | |
abstract contract FactoryFacade { | |
mapping(address => mapping(address => address)) public getPair; | |
} | |
contract Lachesis is Ownable, LachesisLike { | |
struct tokenConfig { | |
bool valid; | |
bool burnable; | |
} | |
address public behodler; | |
mapping(address => tokenConfig) private config; | |
struct Factory { | |
FactoryFacade uni; | |
FactoryFacade sushi; | |
} | |
Factory swapFactory; | |
constructor(address uniswapFactory, address sushiSwapFactory) { | |
swapFactory.uni = FactoryFacade(uniswapFactory); | |
swapFactory.sushi = FactoryFacade(sushiSwapFactory); | |
} | |
function cut(address token) public view override returns (bool, bool) { | |
tokenConfig memory parameters = config[token]; | |
return (parameters.valid, parameters.burnable); | |
} | |
function measure( | |
address token, | |
bool valid, | |
bool burnable | |
) public override onlyOwner { | |
_measure(token, valid, burnable); | |
} | |
function _measure( | |
address token, | |
bool valid, | |
bool burnable | |
) internal { | |
config[token] = tokenConfig({valid: valid, burnable: burnable}); | |
} | |
function measureLP(address token1, address token2) public { | |
require( | |
config[token1].valid && config[token2].valid, | |
"LACHESIS: Only valid tokens can have their LP added" | |
); | |
address uniswapLP = swapFactory.uni.getPair(token1, token2); | |
address sushiswapLP = swapFactory.sushi.getPair(token1, token2); | |
if (uniswapLP != address(0)) _measure(uniswapLP, true, false); | |
else if (sushiswapLP != address(0)) _measure(sushiswapLP, true, false); | |
else revert("LACHESIS: LP token not found."); | |
} | |
function setBehodler(address b) public onlyOwner { | |
behodler = b; | |
} | |
function updateBehodler(address token) public onlyOwner { | |
(bool valid, bool burnable) = cut(token); | |
BehodlerLike(behodler).setValidToken(token, valid, burnable); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.7.6; | |
interface IERC20 { | |
function totalSupply() external view returns (uint256); | |
function balanceOf(address account) external view returns (uint256); | |
function decimals() external returns (uint8); | |
function transfer(address recipient, uint256 amount) | |
external | |
returns (bool); | |
function allowance(address owner, address spender) | |
external | |
view | |
returns (uint256); | |
function approve(address spender, uint256 amount) external returns (bool); | |
function transferFrom( | |
address sender, | |
address recipient, | |
uint256 amount | |
) external returns (bool); | |
event Transfer(address indexed from, address indexed to, uint256 value); | |
event Approval( | |
address indexed owner, | |
address indexed spender, | |
uint256 value | |
); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.7.6; | |
contract Ownable { | |
address private _owner; | |
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); | |
constructor () { | |
_owner = msg.sender; | |
emit OwnershipTransferred(address(0), msg.sender); | |
} | |
function owner() public view returns (address) { | |
return _owner; | |
} | |
/** | |
* @dev Throws if called by any account other than the owner. | |
*/ | |
modifier onlyOwner() { | |
require(_owner == msg.sender, "Ownable: caller is not the owner"); | |
_; | |
} | |
/** | |
* @dev Leaves the contract without owner. It will not be possible to call | |
* `onlyOwner` functions anymore. Can only be called by the current owner. | |
* | |
* NOTE: Renouncing ownership will leave the contract without an owner, | |
* thereby removing any functionality that is only available to the owner. | |
*/ | |
function renounceOwnership() public virtual onlyOwner { | |
emit OwnershipTransferred(_owner, address(0)); | |
_owner = address(0); | |
} | |
/** | |
* @dev Transfers ownership of the contract to a new account (`newOwner`). | |
* Can only be called by the current owner. | |
*/ | |
function transferOwnership(address newOwner) public virtual onlyOwner { | |
require(newOwner != address(0), "Ownable: new owner is the zero address"); | |
emit OwnershipTransferred(_owner, newOwner); | |
_owner = newOwner; | |
} | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.7.6; | |
/** | |
* @dev Wrappers over Solidity's arithmetic operations with added overflow | |
* checks. | |
* | |
* Arithmetic operations in Solidity wrap on overflow. This can easily result | |
* in bugs, because programmers usually assume that an overflow raises an | |
* error, which is the standard behavior in high level programming languages. | |
* `SafeMath` restores this intuition by reverting the transaction when an | |
* operation overflows. | |
* | |
* Using this library instead of the unchecked operations eliminates an entire | |
* class of bugs, so it's recommended to use it always. | |
*/ | |
library SafeMath { | |
/** | |
* @dev Returns the addition of two unsigned integers, reverting on | |
* overflow. | |
* | |
* Counterpart to Solidity's `+` operator. | |
* | |
* Requirements: | |
* | |
* - Addition cannot overflow. | |
*/ | |
function add(uint256 a, uint256 b) internal pure returns (uint256) { | |
uint256 c = a + b; | |
require(c >= a, "SafeMath: addition overflow"); | |
return c; | |
} | |
/** | |
* @dev Returns the subtraction of two unsigned integers, reverting on | |
* overflow (when the result is negative). | |
* | |
* Counterpart to Solidity's `-` operator. | |
* | |
* Requirements: | |
* | |
* - Subtraction cannot overflow. | |
*/ | |
function sub(uint256 a, uint256 b) internal pure returns (uint256) { | |
return sub(a, b, "SafeMath: subtraction overflow"); | |
} | |
/** | |
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on | |
* overflow (when the result is negative). | |
* | |
* Counterpart to Solidity's `-` operator. | |
* | |
* Requirements: | |
* | |
* - Subtraction cannot overflow. | |
*/ | |
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { | |
require(b <= a, errorMessage); | |
uint256 c = a - b; | |
return c; | |
} | |
/** | |
* @dev Returns the multiplication of two unsigned integers, reverting on | |
* overflow. | |
* | |
* Counterpart to Solidity's `*` operator. | |
* | |
* Requirements: | |
* | |
* - Multiplication cannot overflow. | |
*/ | |
function mul(uint256 a, uint256 b) internal pure returns (uint256) { | |
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the | |
// benefit is lost if 'b' is also tested. | |
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 | |
if (a == 0) { | |
return 0; | |
} | |
uint256 c = a * b; | |
require(c / a == b, "SafeMath: multiplication overflow"); | |
return c; | |
} | |
/** | |
* @dev Returns the integer division of two unsigned integers. Reverts on | |
* division by zero. The result is rounded towards zero. | |
* | |
* Counterpart to Solidity's `/` operator. Note: this function uses a | |
* `revert` opcode (which leaves remaining gas untouched) while Solidity | |
* uses an invalid opcode to revert (consuming all remaining gas). | |
* | |
* Requirements: | |
* | |
* - The divisor cannot be zero. | |
*/ | |
function div(uint256 a, uint256 b) internal pure returns (uint256) { | |
return div(a, b, "SafeMath: division by zero"); | |
} | |
/** | |
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on | |
* division by zero. The result is rounded towards zero. | |
* | |
* Counterpart to Solidity's `/` operator. Note: this function uses a | |
* `revert` opcode (which leaves remaining gas untouched) while Solidity | |
* uses an invalid opcode to revert (consuming all remaining gas). | |
* | |
* Requirements: | |
* | |
* - The divisor cannot be zero. | |
*/ | |
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { | |
require(b > 0, errorMessage); | |
uint256 c = a / b; | |
// assert(a == b * c + a % b); // There is no case in which this doesn't hold | |
return c; | |
} | |
/** | |
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), | |
* Reverts when dividing by zero. | |
* | |
* Counterpart to Solidity's `%` operator. This function uses a `revert` | |
* opcode (which leaves remaining gas untouched) while Solidity uses an | |
* invalid opcode to revert (consuming all remaining gas). | |
* | |
* Requirements: | |
* | |
* - The divisor cannot be zero. | |
*/ | |
function mod(uint256 a, uint256 b) internal pure returns (uint256) { | |
return mod(a, b, "SafeMath: modulo by zero"); | |
} | |
/** | |
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), | |
* Reverts with custom message when dividing by zero. | |
* | |
* Counterpart to Solidity's `%` operator. This function uses a `revert` | |
* opcode (which leaves remaining gas untouched) while Solidity uses an | |
* invalid opcode to revert (consuming all remaining gas). | |
* | |
* Requirements: | |
* | |
* - The divisor cannot be zero. | |
*/ | |
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { | |
require(b != 0, errorMessage); | |
return a % b; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.7.6; | |
import "../openzeppelin/IERC20.sol"; | |
import "./Pyrotoken.sol"; | |
import "../Lachesis.sol"; | |
import "../openzeppelin/Ownable.sol"; | |
contract LiquidityReceiver is Ownable { | |
Lachesis lachesis; | |
mapping(address => address) public baseTokenMapping; | |
constructor(address _lachesis) { | |
lachesis = Lachesis(_lachesis); | |
} | |
function setLachesis(address _lachesis) public onlyOwner { | |
lachesis = Lachesis(_lachesis); | |
} | |
function registerPyroToken(address baseToken) public { | |
require( | |
baseTokenMapping[baseToken] == address(0), | |
"BEHODLER: pyrotoken already registered" | |
); | |
(bool valid, bool burnable) = lachesis.cut(baseToken); | |
require(valid && !burnable, "invalid pyrotoken registration."); | |
Pyrotoken pyro = new Pyrotoken(baseToken, address(this)); | |
baseTokenMapping[baseToken] = address(pyro); | |
} | |
function drain(address pyroToken) public { | |
address baseToken = Pyrotoken(pyroToken).baseToken(); | |
require( | |
baseTokenMapping[baseToken] == pyroToken, | |
"BEHODLER: pyrotoken not registered." | |
); | |
address self = address(this); | |
uint256 balance = IERC20(baseToken).balanceOf(self); | |
IERC20(baseToken).transfer(pyroToken, balance); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// this line is added to create a gist. Empty file is not allowed. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.7.6; | |
import "./openzeppelin/IERC20.sol"; | |
import "./openzeppelin/Ownable.sol"; | |
import "./openzeppelin/SafeMath.sol"; | |
import "./facades/Burnable.sol"; | |
/* | |
Scarcity is the bonding curve token that underpins Behodler functionality | |
Scarcity burns on transfer and also exacts a fee outside of Behodler. | |
*/ | |
contract Scarcity is IERC20, Ownable { | |
using SafeMath for uint256; | |
event Mint(address sender, address recipient, uint256 value); | |
event Burn(uint256 value); | |
mapping(address => uint256) internal balances; | |
mapping(address => mapping(address => uint256)) internal _allowances; | |
uint256 internal _totalSupply; | |
address public migrator; | |
struct BurnConfig { | |
uint256 transferFee; // percentage expressed as number betewen 1 and 1000 | |
uint256 burnFee; // percentage expressed as number betewen 1 and 1000 | |
address feeDestination; | |
} | |
BurnConfig public config; | |
function configureScarcity( | |
uint256 transferFee, | |
uint256 burnFee, | |
address feeDestination | |
) public onlyOwner { | |
require(config.transferFee + config.burnFee < 1000); | |
config.transferFee = transferFee; | |
config.burnFee = burnFee; | |
config.feeDestination = feeDestination; | |
} | |
function getConfiguration() | |
public | |
view | |
returns ( | |
uint256, | |
uint256, | |
address | |
) | |
{ | |
return (config.transferFee, config.burnFee, config.feeDestination); | |
} | |
function setMigrator(address m) public onlyOwner { | |
migrator = m; | |
} | |
function name() public pure returns (string memory) { | |
return "Scarcity"; | |
} | |
function symbol() public pure returns (string memory) { | |
return "SCX"; | |
} | |
function decimals() public override pure returns (uint8) { | |
return 18; | |
} | |
function totalSupply() external view override returns (uint256) { | |
return _totalSupply; | |
} | |
function balanceOf(address account) | |
external | |
view | |
override | |
returns (uint256) | |
{ | |
return balances[account]; | |
} | |
function transfer(address recipient, uint256 amount) | |
external | |
override | |
returns (bool) | |
{ | |
_transfer(msg.sender, recipient, amount); | |
return true; | |
} | |
function allowance(address owner, address spender) | |
external | |
view | |
override | |
returns (uint256) | |
{ | |
return _allowances[owner][spender]; | |
} | |
function approve(address spender, uint256 amount) | |
external | |
override | |
returns (bool) | |
{ | |
_approve(msg.sender, spender, amount); | |
return true; | |
} | |
function transferFrom( | |
address sender, | |
address recipient, | |
uint256 amount | |
) external override returns (bool) { | |
_transfer(sender, recipient, amount); | |
_approve( | |
sender, | |
msg.sender, | |
_allowances[sender][msg.sender].sub( | |
amount, | |
"ERC20: transfer amount exceeds allowance" | |
) | |
); | |
return true; | |
} | |
function burn(uint256 value) external returns (bool) { | |
burn(msg.sender, value); | |
return true; | |
} | |
function burn(address holder, uint256 value) internal { | |
balances[holder] = balances[holder].sub( | |
value, | |
"SCARCITY: insufficient funds" | |
); | |
_totalSupply = _totalSupply.sub(value); | |
emit Burn(value); | |
} | |
function mint(address recipient, uint256 value) internal { | |
balances[recipient] = balances[recipient].add(value); | |
_totalSupply = _totalSupply.add(value); | |
emit Mint(msg.sender, recipient, value); | |
} | |
function migrateMint(address recipient, uint256 value) public { | |
require(msg.sender == migrator, "SCARCITY: Migration contract only"); | |
mint(recipient, value); | |
} | |
function _approve( | |
address owner, | |
address spender, | |
uint256 amount | |
) internal virtual { | |
require(owner != address(0), "ERC20: approve from the zero address"); | |
require(spender != address(0), "ERC20: approve to the zero address"); | |
_allowances[owner][spender] = amount; | |
emit Approval(owner, spender, amount); | |
} | |
//outside of Behodler, Scarcity transfer incurs a fee. | |
function _transfer( | |
address sender, | |
address recipient, | |
uint256 amount | |
) internal virtual { | |
require( | |
sender != address(0), | |
"Scarcity: transfer from the zero address" | |
); | |
require( | |
recipient != address(0), | |
"Scarcity: transfer to the zero address" | |
); | |
uint256 feeComponent = config.transferFee.mul(amount).div(1000); | |
uint256 burnComponent = config.burnFee.mul(amount).div(1000); | |
_totalSupply = _totalSupply.sub(burnComponent); | |
emit Burn(burnComponent); | |
balances[config.feeDestination] = balances[config.feeDestination].add( | |
feeComponent | |
); | |
balances[sender] = balances[sender].sub( | |
amount, | |
"Scarcity: transfer amount exceeds balance" | |
); | |
balances[recipient] = balances[recipient].add( | |
amount.sub(feeComponent.add(burnComponent)) | |
); | |
emit Transfer(sender, recipient, amount); | |
} | |
function applyBurnFee(address token, uint256 amount,bool proxyBurn) | |
internal | |
returns (uint256) | |
{ | |
uint256 burnAmount = config.burnFee.mul(amount).div(1000); | |
Burnable bToken = Burnable(token); | |
if (proxyBurn) { | |
bToken.burn(address(this), burnAmount); | |
} else { | |
bToken.burn(burnAmount); | |
} | |
return burnAmount; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: GPL-3.0-or-later | |
// Copyright (C) 2015, 2016, 2017 Dapphub | |
// Adapted by Ethereum Community 2020 | |
pragma solidity 0.7.6; | |
import './openzeppelin/IERC20.sol'; | |
interface IERC2612 { | |
/** | |
* @dev Sets `amount` as the allowance of `spender` over `owner`'s tokens, | |
* given `owner`'s signed approval. | |
* | |
* IMPORTANT: The same issues {IERC20-approve} has related to transaction | |
* ordering also apply here. | |
* | |
* Emits an {Approval} event. | |
* | |
* Requirements: | |
* | |
* - `owner` cannot be the zero address. | |
* - `spender` cannot be the zero address. | |
* - `deadline` must be a timestamp in the future. | |
* - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` | |
* over the EIP712-formatted function arguments. | |
* - the signature must use ``owner``'s current nonce (see {nonces}). | |
* | |
* For more information on the signature format, see the | |
* https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP | |
* section]. | |
*/ | |
function permit(address owner, address spender, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; | |
/** | |
* @dev Returns the current ERC2612 nonce for `owner`. This value must be | |
* included whenever a signature is generated for {permit}. | |
* | |
* Every successful call to {permit} increases ``owner``'s nonce by one. This | |
* prevents a signature from being used multiple times. | |
*/ | |
function nonces(address owner) external view returns (uint256); | |
} | |
interface IERC3156FlashBorrower { | |
/** | |
* @dev Receive a flash loan. | |
* @param initiator The initiator of the loan. | |
* @param token The loan currency. | |
* @param amount The amount of tokens lent. | |
* @param fee The additional amount of tokens to repay. | |
* @param data Arbitrary data structure, intended to contain user-defined parameters. | |
* @return The keccak256 hash of "ERC3156FlashBorrower.onFlashLoan" | |
*/ | |
function onFlashLoan( | |
address initiator, | |
address token, | |
uint256 amount, | |
uint256 fee, | |
bytes calldata data | |
) external returns (bytes32); | |
} | |
interface IERC3156FlashLender { | |
/** | |
* @dev The amount of currency available to be lended. | |
* @param token The loan currency. | |
* @return The amount of `token` that can be borrowed. | |
*/ | |
function maxFlashLoan( | |
address token | |
) external view returns (uint256); | |
/** | |
* @dev The fee to be charged for a given loan. | |
* @param token The loan currency. | |
* @param amount The amount of tokens lent. | |
* @return The amount of `token` to be charged for the loan, on top of the returned principal. | |
*/ | |
function flashFee( | |
address token, | |
uint256 amount | |
) external view returns (uint256); | |
/** | |
* @dev Initiate a flash loan. | |
* @param receiver The receiver of the tokens in the loan, and the receiver of the callback. | |
* @param token The loan currency. | |
* @param amount The amount of tokens lent. | |
* @param data Arbitrary data structure, intended to contain user-defined parameters. | |
*/ | |
function flashLoan( | |
IERC3156FlashBorrower receiver, | |
address token, | |
uint256 amount, | |
bytes calldata data | |
) external returns (bool); | |
} | |
/// @dev Wrapped Ether v10 (WETH10) is an Ether (ETH) ERC-20 wrapper. You can `deposit` ETH and obtain an WETH10 balance which can then be operated as an ERC-20 token. You can | |
/// `withdraw` ETH from WETH10, which will then burn WETH10 token in your wallet. The amount of WETH10 token in any wallet is always identical to the | |
/// balance of ETH deposited minus the ETH withdrawn with that specific wallet. | |
interface IWETH10 is IERC20, IERC2612, IERC3156FlashLender { | |
/// @dev Returns current amount of flash-minted WETH10 token. | |
function flashMinted() external view returns(uint256); | |
/// @dev `msg.value` of ETH sent to this contract grants caller account a matching increase in WETH10 token balance. | |
/// Emits {Transfer} event to reflect WETH10 token mint of `msg.value` from zero address to caller account. | |
function deposit() external payable; | |
/// @dev `msg.value` of ETH sent to this contract grants `to` account a matching increase in WETH10 token balance. | |
/// Emits {Transfer} event to reflect WETH10 token mint of `msg.value` from zero address to `to` account. | |
function depositTo(address to) external payable; | |
/// @dev Burn `value` WETH10 token from caller account and withdraw matching ETH to the same. | |
/// Emits {Transfer} event to reflect WETH10 token burn of `value` to zero address from caller account. | |
/// Requirements: | |
/// - caller account must have at least `value` balance of WETH10 token. | |
function withdraw(uint256 value) external; | |
/// @dev Burn `value` WETH10 token from caller account and withdraw matching ETH to account (`to`). | |
/// Emits {Transfer} event to reflect WETH10 token burn of `value` to zero address from caller account. | |
/// Requirements: | |
/// - caller account must have at least `value` balance of WETH10 token. | |
function withdrawTo(address payable to, uint256 value) external; | |
/// @dev Burn `value` WETH10 token from account (`from`) and withdraw matching ETH to account (`to`). | |
/// Emits {Approval} event to reflect reduced allowance `value` for caller account to spend from account (`from`), | |
/// unless allowance is set to `type(uint256).max` | |
/// Emits {Transfer} event to reflect WETH10 token burn of `value` to zero address from account (`from`). | |
/// Requirements: | |
/// - `from` account must have at least `value` balance of WETH10 token. | |
/// - `from` account must have approved caller to spend at least `value` of WETH10 token, unless `from` and caller are the same account. | |
function withdrawFrom(address from, address payable to, uint256 value) external; | |
/// @dev `msg.value` of ETH sent to this contract grants `to` account a matching increase in WETH10 token balance, | |
/// after which a call is executed to an ERC677-compliant contract with the `data` parameter. | |
/// Emits {Transfer} event. | |
/// Returns boolean value indicating whether operation succeeded. | |
/// For more information on *transferAndCall* format, see https://github.com/ethereum/EIPs/issues/677. | |
function depositToAndCall(address to, bytes calldata data) external payable returns (bool); | |
/// @dev Sets `value` as allowance of `spender` account over caller account's WETH10 token, | |
/// after which a call is executed to an ERC677-compliant contract with the `data` parameter. | |
/// Emits {Approval} event. | |
/// Returns boolean value indicating whether operation succeeded. | |
/// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677. | |
function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool); | |
/// @dev Moves `value` WETH10 token from caller's account to account (`to`), | |
/// after which a call is executed to an ERC677-compliant contract with the `data` parameter. | |
/// A transfer to `address(0)` triggers an ETH withdraw matching the sent WETH10 token in favor of caller. | |
/// Emits {Transfer} event. | |
/// Returns boolean value indicating whether operation succeeded. | |
/// Requirements: | |
/// - caller account must have at least `value` WETH10 token. | |
/// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677. | |
function transferAndCall(address to, uint value, bytes calldata data) external returns (bool); | |
} | |
interface ITransferReceiver { | |
function onTokenTransfer(address, uint, bytes calldata) external returns (bool); | |
} | |
interface IApprovalReceiver { | |
function onTokenApproval(address, uint, bytes calldata) external returns (bool); | |
} | |
/// @dev Wrapped Ether v10 (WETH10) is an Ether (ETH) ERC-20 wrapper. You can `deposit` ETH and obtain an WETH10 balance which can then be operated as an ERC-20 token. You can | |
/// `withdraw` ETH from WETH10, which will then burn WETH10 token in your wallet. The amount of WETH10 token in any wallet is always identical to the | |
/// balance of ETH deposited minus the ETH withdrawn with that specific wallet. | |
contract WETH10 is IWETH10 { | |
string public constant name = "WETH10"; | |
string public constant symbol = "WETH10"; | |
uint8 public override constant decimals = 18; | |
bytes32 public immutable CALLBACK_SUCCESS = keccak256("ERC3156FlashBorrower.onFlashLoan"); | |
bytes32 public immutable PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"); | |
/// @dev Records amount of WETH10 token owned by account. | |
mapping (address => uint256) public override balanceOf; | |
/// @dev Records current ERC2612 nonce for account. This value must be included whenever signature is generated for {permit}. | |
/// Every successful call to {permit} increases account's nonce by one. This prevents signature from being used multiple times. | |
mapping (address => uint256) public override nonces; | |
/// @dev Records number of WETH10 token that account (second) will be allowed to spend on behalf of another account (first) through {transferFrom}. | |
mapping (address => mapping (address => uint256)) public override allowance; | |
/// @dev Current amount of flash-minted WETH10 token. | |
uint256 public override flashMinted; | |
/// @dev Returns the total supply of WETH10 token as the ETH held in this contract. | |
function totalSupply() external view override returns(uint256) { | |
return address(this).balance + flashMinted; | |
} | |
/// @dev Fallback, `msg.value` of ETH sent to this contract grants caller account a matching increase in WETH10 token balance. | |
/// Emits {Transfer} event to reflect WETH10 token mint of `msg.value` from zero address to caller account. | |
receive() external payable { | |
// _mintTo(msg.sender, msg.value); | |
balanceOf[msg.sender] += msg.value; | |
emit Transfer(address(0), msg.sender, msg.value); | |
} | |
/// @dev `msg.value` of ETH sent to this contract grants caller account a matching increase in WETH10 token balance. | |
/// Emits {Transfer} event to reflect WETH10 token mint of `msg.value` from zero address to caller account. | |
function deposit() external override payable { | |
// _mintTo(msg.sender, msg.value); | |
balanceOf[msg.sender] += msg.value; | |
emit Transfer(address(0), msg.sender, msg.value); | |
} | |
/// @dev `msg.value` of ETH sent to this contract grants `to` account a matching increase in WETH10 token balance. | |
/// Emits {Transfer} event to reflect WETH10 token mint of `msg.value` from zero address to `to` account. | |
function depositTo(address to) external override payable { | |
// _mintTo(to, msg.value); | |
balanceOf[to] += msg.value; | |
emit Transfer(address(0), to, msg.value); | |
} | |
/// @dev `msg.value` of ETH sent to this contract grants `to` account a matching increase in WETH10 token balance, | |
/// after which a call is executed to an ERC677-compliant contract with the `data` parameter. | |
/// Emits {Transfer} event. | |
/// Returns boolean value indicating whether operation succeeded. | |
/// For more information on *transferAndCall* format, see https://github.com/ethereum/EIPs/issues/677. | |
function depositToAndCall(address to, bytes calldata data) external override payable returns (bool success) { | |
// _mintTo(to, msg.value); | |
balanceOf[to] += msg.value; | |
emit Transfer(address(0), to, msg.value); | |
return ITransferReceiver(to).onTokenTransfer(msg.sender, msg.value, data); | |
} | |
/// @dev Return the amount of WETH10 token that can be flash-lent. | |
function maxFlashLoan(address token) external view override returns (uint256) { | |
return token == address(this) ? type(uint112).max - flashMinted : 0; // Can't underflow | |
} | |
/// @dev Return the fee (zero) for flash-lending an amount of WETH10 token. | |
function flashFee(address token, uint256) external view override returns (uint256) { | |
require(token == address(this), "WETH: flash mint only WETH10"); | |
return 0; | |
} | |
/// @dev Flash lends `value` WETH10 token to the receiver address. | |
/// By the end of the transaction, `value` WETH10 token will be burned from the receiver. | |
/// The flash-minted WETH10 token is not backed by real ETH, but can be withdrawn as such up to the ETH balance of this contract. | |
/// Arbitrary data can be passed as a bytes calldata parameter. | |
/// Emits {Approval} event to reflect reduced allowance `value` for this contract to spend from receiver account (`receiver`), | |
/// unless allowance is set to `type(uint256).max` | |
/// Emits two {Transfer} events for minting and burning of the flash-minted amount. | |
/// Returns boolean value indicating whether operation succeeded. | |
/// Requirements: | |
/// - `value` must be less or equal to type(uint112).max. | |
/// - The total of all flash loans in a tx must be less or equal to type(uint112).max. | |
function flashLoan(IERC3156FlashBorrower receiver, address token, uint256 value, bytes calldata data) external override returns(bool) { | |
require(token == address(this), "WETH: flash mint only WETH10"); | |
require(value <= type(uint112).max, "WETH: individual loan limit exceeded"); | |
flashMinted = flashMinted + value; | |
require(flashMinted <= type(uint112).max, "WETH: total loan limit exceeded"); | |
// _mintTo(address(receiver), value); | |
balanceOf[address(receiver)] += value; | |
emit Transfer(address(0), address(receiver), value); | |
require( | |
receiver.onFlashLoan(msg.sender, address(this), value, 0, data) == CALLBACK_SUCCESS, | |
"WETH: flash loan failed" | |
); | |
// _decreaseAllowance(address(receiver), address(this), value); | |
uint256 allowed = allowance[address(receiver)][address(this)]; | |
if (allowed != type(uint256).max) { | |
require(allowed >= value, "WETH: request exceeds allowance"); | |
uint256 reduced = allowed - value; | |
allowance[address(receiver)][address(this)] = reduced; | |
emit Approval(address(receiver), address(this), reduced); | |
} | |
// _burnFrom(address(receiver), value); | |
uint256 balance = balanceOf[address(receiver)]; | |
require(balance >= value, "WETH: burn amount exceeds balance"); | |
balanceOf[address(receiver)] = balance - value; | |
emit Transfer(address(receiver), address(0), value); | |
flashMinted = flashMinted - value; | |
return true; | |
} | |
/// @dev Burn `value` WETH10 token from caller account and withdraw matching ETH to the same. | |
/// Emits {Transfer} event to reflect WETH10 token burn of `value` to zero address from caller account. | |
/// Requirements: | |
/// - caller account must have at least `value` balance of WETH10 token. | |
function withdraw(uint256 value) external override { | |
// _burnFrom(msg.sender, value); | |
uint256 balance = balanceOf[msg.sender]; | |
require(balance >= value, "WETH: burn amount exceeds balance"); | |
balanceOf[msg.sender] = balance - value; | |
emit Transfer(msg.sender, address(0), value); | |
// _transferEther(msg.sender, value); | |
(bool success, ) = msg.sender.call{value: value}(""); | |
require(success, "WETH: ETH transfer failed"); | |
} | |
/// @dev Burn `value` WETH10 token from caller account and withdraw matching ETH to account (`to`). | |
/// Emits {Transfer} event to reflect WETH10 token burn of `value` to zero address from caller account. | |
/// Requirements: | |
/// - caller account must have at least `value` balance of WETH10 token. | |
function withdrawTo(address payable to, uint256 value) external override { | |
// _burnFrom(msg.sender, value); | |
uint256 balance = balanceOf[msg.sender]; | |
require(balance >= value, "WETH: burn amount exceeds balance"); | |
balanceOf[msg.sender] = balance - value; | |
emit Transfer(msg.sender, address(0), value); | |
// _transferEther(to, value); | |
(bool success, ) = to.call{value: value}(""); | |
require(success, "WETH: ETH transfer failed"); | |
} | |
/// @dev Burn `value` WETH10 token from account (`from`) and withdraw matching ETH to account (`to`). | |
/// Emits {Approval} event to reflect reduced allowance `value` for caller account to spend from account (`from`), | |
/// unless allowance is set to `type(uint256).max` | |
/// Emits {Transfer} event to reflect WETH10 token burn of `value` to zero address from account (`from`). | |
/// Requirements: | |
/// - `from` account must have at least `value` balance of WETH10 token. | |
/// - `from` account must have approved caller to spend at least `value` of WETH10 token, unless `from` and caller are the same account. | |
function withdrawFrom(address from, address payable to, uint256 value) external override { | |
if (from != msg.sender) { | |
// _decreaseAllowance(from, msg.sender, value); | |
uint256 allowed = allowance[from][msg.sender]; | |
if (allowed != type(uint256).max) { | |
require(allowed >= value, "WETH: request exceeds allowance"); | |
uint256 reduced = allowed - value; | |
allowance[from][msg.sender] = reduced; | |
emit Approval(from, msg.sender, reduced); | |
} | |
} | |
// _burnFrom(from, value); | |
uint256 balance = balanceOf[from]; | |
require(balance >= value, "WETH: burn amount exceeds balance"); | |
balanceOf[from] = balance - value; | |
emit Transfer(from, address(0), value); | |
// _transferEther(to, value); | |
(bool success, ) = to.call{value: value}(""); | |
require(success, "WETH: Ether transfer failed"); | |
} | |
/// @dev Sets `value` as allowance of `spender` account over caller account's WETH10 token. | |
/// Emits {Approval} event. | |
/// Returns boolean value indicating whether operation succeeded. | |
function approve(address spender, uint256 value) external override returns (bool) { | |
// _approve(msg.sender, spender, value); | |
allowance[msg.sender][spender] = value; | |
emit Approval(msg.sender, spender, value); | |
return true; | |
} | |
/// @dev Sets `value` as allowance of `spender` account over caller account's WETH10 token, | |
/// after which a call is executed to an ERC677-compliant contract with the `data` parameter. | |
/// Emits {Approval} event. | |
/// Returns boolean value indicating whether operation succeeded. | |
/// For more information on approveAndCall format, see https://github.com/ethereum/EIPs/issues/677. | |
function approveAndCall(address spender, uint256 value, bytes calldata data) external override returns (bool) { | |
// _approve(msg.sender, spender, value); | |
allowance[msg.sender][spender] = value; | |
emit Approval(msg.sender, spender, value); | |
return IApprovalReceiver(spender).onTokenApproval(msg.sender, value, data); | |
} | |
/// @dev Sets `value` as allowance of `spender` account over `owner` account's WETH10 token, given `owner` account's signed approval. | |
/// Emits {Approval} event. | |
/// Requirements: | |
/// - `deadline` must be timestamp in future. | |
/// - `v`, `r` and `s` must be valid `secp256k1` signature from `owner` account over EIP712-formatted function arguments. | |
/// - the signature must use `owner` account's current nonce (see {nonces}). | |
/// - the signer cannot be zero address and must be `owner` account. | |
/// For more information on signature format, see https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. | |
/// WETH10 token implementation adapted from https://github.com/albertocuestacanada/ERC20Permit/blob/master/contracts/ERC20Permit.sol. | |
function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external override { | |
require(block.timestamp <= deadline, "WETH: Expired permit"); | |
uint256 chainId; | |
assembly {chainId := chainid()} | |
bytes32 DOMAIN_SEPARATOR = keccak256( | |
abi.encode( | |
keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), | |
keccak256(bytes(name)), | |
keccak256(bytes("1")), | |
chainId, | |
address(this))); | |
bytes32 hashStruct = keccak256( | |
abi.encode( | |
PERMIT_TYPEHASH, | |
owner, | |
spender, | |
value, | |
nonces[owner]++, | |
deadline)); | |
bytes32 hash = keccak256( | |
abi.encodePacked( | |
"\x19\x01", | |
DOMAIN_SEPARATOR, | |
hashStruct)); | |
address signer = ecrecover(hash, v, r, s); | |
require(signer != address(0) && signer == owner, "WETH: invalid permit"); | |
// _approve(owner, spender, value); | |
allowance[owner][spender] = value; | |
emit Approval(owner, spender, value); | |
} | |
/// @dev Moves `value` WETH10 token from caller's account to account (`to`). | |
/// A transfer to `address(0)` triggers an ETH withdraw matching the sent WETH10 token in favor of caller. | |
/// Emits {Transfer} event. | |
/// Returns boolean value indicating whether operation succeeded. | |
/// Requirements: | |
/// - caller account must have at least `value` WETH10 token. | |
function transfer(address to, uint256 value) external override returns (bool) { | |
// _transferFrom(msg.sender, to, value); | |
if (to != address(0)) { // Transfer | |
uint256 balance = balanceOf[msg.sender]; | |
require(balance >= value, "WETH: transfer amount exceeds balance"); | |
balanceOf[msg.sender] = balance - value; | |
balanceOf[to] += value; | |
emit Transfer(msg.sender, to, value); | |
} else { // Withdraw | |
uint256 balance = balanceOf[msg.sender]; | |
require(balance >= value, "WETH: burn amount exceeds balance"); | |
balanceOf[msg.sender] = balance - value; | |
emit Transfer(msg.sender, address(0), value); | |
(bool success, ) = msg.sender.call{value: value}(""); | |
require(success, "WETH: ETH transfer failed"); | |
} | |
return true; | |
} | |
/// @dev Moves `value` WETH10 token from account (`from`) to account (`to`) using allowance mechanism. | |
/// `value` is then deducted from caller account's allowance, unless set to `type(uint256).max`. | |
/// A transfer to `address(0)` triggers an ETH withdraw matching the sent WETH10 token in favor of caller. | |
/// Emits {Approval} event to reflect reduced allowance `value` for caller account to spend from account (`from`), | |
/// unless allowance is set to `type(uint256).max` | |
/// Emits {Transfer} event. | |
/// Returns boolean value indicating whether operation succeeded. | |
/// Requirements: | |
/// - `from` account must have at least `value` balance of WETH10 token. | |
/// - `from` account must have approved caller to spend at least `value` of WETH10 token, unless `from` and caller are the same account. | |
function transferFrom(address from, address to, uint256 value) external override returns (bool) { | |
if (from != msg.sender) { | |
// _decreaseAllowance(from, msg.sender, value); | |
uint256 allowed = allowance[from][msg.sender]; | |
if (allowed != type(uint256).max) { | |
require(allowed >= value, "WETH: request exceeds allowance"); | |
uint256 reduced = allowed - value; | |
allowance[from][msg.sender] = reduced; | |
emit Approval(from, msg.sender, reduced); | |
} | |
} | |
// _transferFrom(from, to, value); | |
if (to != address(0)) { // Transfer | |
uint256 balance = balanceOf[from]; | |
require(balance >= value, "WETH: transfer amount exceeds balance"); | |
balanceOf[from] = balance - value; | |
balanceOf[to] += value; | |
emit Transfer(from, to, value); | |
} else { // Withdraw | |
uint256 balance = balanceOf[from]; | |
require(balance >= value, "WETH: burn amount exceeds balance"); | |
balanceOf[from] = balance - value; | |
emit Transfer(from, address(0), value); | |
(bool success, ) = msg.sender.call{value: value}(""); | |
require(success, "WETH: ETH transfer failed"); | |
} | |
return true; | |
} | |
/// @dev Moves `value` WETH10 token from caller's account to account (`to`), | |
/// after which a call is executed to an ERC677-compliant contract with the `data` parameter. | |
/// A transfer to `address(0)` triggers an ETH withdraw matching the sent WETH10 token in favor of caller. | |
/// Emits {Transfer} event. | |
/// Returns boolean value indicating whether operation succeeded. | |
/// Requirements: | |
/// - caller account must have at least `value` WETH10 token. | |
/// For more information on transferAndCall format, see https://github.com/ethereum/EIPs/issues/677. | |
function transferAndCall(address to, uint value, bytes calldata data) external override returns (bool) { | |
// _transferFrom(msg.sender, to, value); | |
if (to != address(0)) { // Transfer | |
uint256 balance = balanceOf[msg.sender]; | |
require(balance >= value, "WETH: transfer amount exceeds balance"); | |
balanceOf[msg.sender] = balance - value; | |
balanceOf[to] += value; | |
emit Transfer(msg.sender, to, value); | |
} else { // Withdraw | |
uint256 balance = balanceOf[msg.sender]; | |
require(balance >= value, "WETH: burn amount exceeds balance"); | |
balanceOf[msg.sender] = balance - value; | |
emit Transfer(msg.sender, address(0), value); | |
(bool success, ) = msg.sender.call{value: value}(""); | |
require(success, "WETH: ETH transfer failed"); | |
} | |
return ITransferReceiver(to).onTokenTransfer(msg.sender, value, data); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Right click on the script name and hit "Run" to execute | |
(async () => { | |
try { | |
console.log('Running deployWithEthers script...') | |
const contractName = 'Storage' // Change this for other contract | |
const constructorArgs = [] // Put constructor args (if any) here for your contract | |
// Note that the script needs the ABI which is generated from the compilation artifact. | |
// Make sure contract is compiled and artifacts are generated | |
const artifactsPath = `browser/contracts/artifacts/${contractName}.json` // Change this for different path | |
const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) | |
// 'web3Provider' is a remix global variable object | |
const signer = (new ethers.providers.Web3Provider(web3Provider)).getSigner() | |
let factory = new ethers.ContractFactory(metadata.abi, metadata.data.bytecode.object, signer); | |
let contract = await factory.deploy(...constructorArgs); | |
console.log('Contract Address: ', contract.address); | |
// The contract is NOT deployed yet; we must wait until it is mined | |
await contract.deployed() | |
console.log('Deployment successful.') | |
} catch (e) { | |
console.log(e.message) | |
} | |
})() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Right click on the script name and hit "Run" to execute | |
(async () => { | |
try { | |
console.log('Running deployWithWeb3 script...') | |
const contractName = 'Storage' // Change this for other contract | |
const constructorArgs = [] // Put constructor args (if any) here for your contract | |
// Note that the script needs the ABI which is generated from the compilation artifact. | |
// Make sure contract is compiled and artifacts are generated | |
const artifactsPath = `browser/contracts/artifacts/${contractName}.json` // Change this for different path | |
const metadata = JSON.parse(await remix.call('fileManager', 'getFile', artifactsPath)) | |
const accounts = await web3.eth.getAccounts() | |
let contract = new web3.eth.Contract(metadata.abi) | |
contract = contract.deploy({ | |
data: metadata.data.bytecode.object, | |
arguments: constructorArgs | |
}) | |
const newContractInstance = await contract.send({ | |
from: accounts[0], | |
gas: 1500000, | |
gasPrice: '30000000000' | |
}) | |
console.log('Contract deployed at address: ', newContractInstance.options.address) | |
} catch (e) { | |
console.log(e.message) | |
} | |
})() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: GPL-3.0 | |
pragma solidity >=0.7.0 <0.9.0; | |
import "remix_tests.sol"; // this import is automatically injected by Remix. | |
import "../contracts/3_Ballot.sol"; | |
contract BallotTest { | |
bytes32[] proposalNames; | |
Ballot ballotToTest; | |
function beforeAll () public { | |
proposalNames.push(bytes32("candidate1")); | |
ballotToTest = new Ballot(proposalNames); | |
} | |
function checkWinningProposal () public { | |
ballotToTest.vote(0); | |
Assert.equal(ballotToTest.winningProposal(), uint(0), "proposal at index 0 should be the winning proposal"); | |
Assert.equal(ballotToTest.winnerName(), bytes32("candidate1"), "candidate1 should be the winner name"); | |
} | |
function checkWinninProposalWithReturnValue () public view returns (bool) { | |
return ballotToTest.winningProposal() == 0; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment