@daofi/uniswap-v2-core
Version:
🎛 Core contracts for the UniswapV2 protocol
904 lines • 283 kB
JSON
{
"abi": [
{
"inputs": [],
"payable": false,
"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": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount0",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
}
],
"name": "Burn",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount0",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
}
],
"name": "Mint",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount0In",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount1In",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount0Out",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount1Out",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
}
],
"name": "Swap",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint112",
"name": "reserve0",
"type": "uint112"
},
{
"indexed": false,
"internalType": "uint112",
"name": "reserve1",
"type": "uint112"
}
],
"name": "Sync",
"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"
},
{
"constant": true,
"inputs": [],
"name": "DOMAIN_SEPARATOR",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "LIQUIDITY_PRECISION",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "MINIMUM_LIQUIDITY",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "PERMIT_TYPEHASH",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "baseToken",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "blockTimestampLast",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
}
],
"name": "burn",
"outputs": [
{
"internalType": "uint256",
"name": "amount0",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount1",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "factory",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "fee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getCurveParams",
"outputs": [
{
"internalType": "bytes",
"name": "packed",
"type": "bytes"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getReserves",
"outputs": [
{
"internalType": "uint112",
"name": "_reserve0",
"type": "uint112"
},
{
"internalType": "uint112",
"name": "_reserve1",
"type": "uint112"
},
{
"internalType": "uint32",
"name": "_blockTimestampLast",
"type": "uint32"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "_token0",
"type": "address"
},
{
"internalType": "address",
"name": "_token1",
"type": "address"
},
{
"internalType": "address",
"name": "_baseToken",
"type": "address"
},
{
"internalType": "address",
"name": "_pairOwner",
"type": "address"
},
{
"internalType": "uint256",
"name": "_slope",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_exp",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_fee",
"type": "uint256"
}
],
"name": "initialize",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "kLast",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "m",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
}
],
"name": "mint",
"outputs": [
{
"internalType": "uint256",
"name": "liquidity",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "n",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "nonces",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "pairOwner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
},
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "permit",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "price0CumulativeLast",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "price1CumulativeLast",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "_nextOwner",
"type": "address"
}
],
"name": "setPairOwner",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "uint256",
"name": "_nextSlope",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_nextExp",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_nextFee",
"type": "uint256"
}
],
"name": "setParams",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
}
],
"name": "skim",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "uint256",
"name": "amount0Out",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount1Out",
"type": "uint256"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "swap",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [],
"name": "sync",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "token0",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "token1",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": false,
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
}
],
"evm": {
"bytecode": {
"linkReferences": {},
"object": "608060405260016011553480156200001657600080fd5b50604051469062000027906200019a565b604080519182900382208282018252600a8352692ab734b9bbb0b8102b1960b11b6020938401528151808301835260018152603160f81b908401529051620000b8927fbfcc8ef98ffbf7b6c3fec7bf5185b566b9863e35a9d83acd49ad6824b5969738917fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6918691309101620001ad565b60408051601f1981840301815291905280516020909101206003908155600580546001600160a01b03191633179055670de0b6b3a7640000600a556001600b55600c555062000224565b6200010d8162000208565b82525050565b6200010d8162000215565b60006200012d60528362000203565b7f454950373132446f6d61696e28737472696e67206e616d652c737472696e672081527f76657273696f6e2c75696e7432353620636861696e49642c6164647265737320602082015271766572696679696e67436f6e74726163742960701b604082015260520192915050565b6000620001a7826200011e565b92915050565b60a08101620001bd828862000113565b620001cc602083018762000113565b620001db604083018662000113565b620001ea606083018562000113565b620001f9608083018462000102565b9695505050505050565b919050565b6000620001a78262000218565b90565b6001600160a01b031690565b6135f980620002346000396000f3fe608060405234801561001057600080fd5b50600436106102775760003560e01c806370a0823111610160578063c45a0155116100d8578063d505accf1161008c578063ddca3f4311610071578063ddca3f4314610491578063e77fc7a414610499578063fff6cae9146104ac57610277565b8063d505accf1461046b578063dd62ed3e1461047e57610277565b8063c5700a02116100bd578063c5700a0214610446578063ce51fc5a1461045b578063d21220a71461046357610277565b8063c45a015514610436578063c55dae631461043e57610277565b806389afcb441161012f578063a9059cbb11610114578063a9059cbb14610408578063ba9a7a561461041b578063bc25cf771461042357610277565b806389afcb44146103df57806395d89b411461040057610277565b806370a08231146103a95780637464fc3d146103bc5780637ecebe00146103c4578063808413fa146103d757610277565b80632ec2fe3d116101f35780635909c0d5116101c25780635a2ee019116101a75780635a2ee019146103865780635a3d54931461038e5780636a6278421461039657610277565b80635909c0d51461036b5780635a0ce6761461037357610277565b80632ec2fe3d1461033e57806330adf81f14610346578063313ce5671461034e5780633644e5151461036357610277565b80630dfe16811161024a57806323b872dd1161022f57806323b872dd146103105780632dd2a921146103235780632e52d6061461033657610277565b80630dfe1681146102e657806318160ddd146102fb57610277565b8063022c0d9f1461027c57806306fdde03146102915780630902f1ac146102af578063095ea7b3146102c6575b600080fd5b61028f61028a366004612aa1565b6104b4565b005b610299610a69565b6040516102a691906132f8565b60405180910390f35b6102b7610aa2565b6040516102a693929190613454565b6102d96102d4366004612a35565b610af7565b6040516102a69190613272565b6102ee610b0e565b6040516102a691906131c5565b610303610b2a565b6040516102a69190613280565b6102d961031e36600461297d565b610b30565b61028f610331366004612863565b610c10565b610303610ca8565b6102ee610cae565b610303610cca565b610356610cee565b6040516102a691906134a6565b610303610cf3565b610303610cf9565b61028f610381366004612b1f565b610cff565b610303610d5e565b610303610d64565b6103036103a4366004612863565b610d6a565b6103036103b7366004612863565b6110f9565b61030361110b565b6103036103d2366004612863565b611111565b610299611123565b6103f26103ed366004612863565b611172565b6040516102a692919061347c565b6102996115d9565b6102d9610416366004612a35565b611612565b61030361161f565b61028f610431366004612863565b611625565b6102ee6117b4565b6102ee6117d0565b61044e6117ec565b6040516102a69190613498565b610303611818565b6102ee611824565b61028f6104793660046129ca565b611840565b61030361048c3660046128a7565b611a35565b610303611a52565b61028f6104a73660046128e1565b611a58565b61028f611bed565b6011546001146104f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133b9565b60405180910390fd5b60006011558415158061050c5750600084115b610542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613319565b60008061054d610aa2565b5091509150816dffffffffffffffffffffffffffff16871080156105805750806dffffffffffffffffffffffffffff1686105b6105b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613399565b600654600754600091829173ffffffffffffffffffffffffffffffffffffffff91821691908116908916821480159061061b57508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b610651576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613359565b8a1561066257610662828a8d611db1565b891561067357610673818a8c611db1565b8615610706576040517f10d1e85c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16906310d1e85c906106d39033908f908f908e908e906004016131d3565b600060405180830381600087803b1580156106ed57600080fd5b505af1158015610701573d6000803e3d6000fd5b505050505b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316906370a08231906107589030906004016131c5565b60206040518083038186803b15801561077057600080fd5b505afa158015610784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107a89190810190612a83565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815290945073ffffffffffffffffffffffffffffffffffffffff8216906370a08231906107fd9030906004016131c5565b60206040518083038186803b15801561081557600080fd5b505afa158015610829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061084d9190810190612a83565b92505050600089856dffffffffffffffffffffffffffff16038311610873576000610889565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff160383116108ad5760006108c3565b89856dffffffffffffffffffffffffffff160383035b905060008211806108d45750600081115b61090a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613339565b6000610942610924600c5485611f6890919063ffffffff16565b610936876103e863ffffffff611f6816565b9063ffffffff611fb916565b9050600061095e610924600c5485611f6890919063ffffffff16565b9050610996620f424061098a6dffffffffffffffffffffffffffff8b8116908b1663ffffffff611f6816565b9063ffffffff611f6816565b6109a6838363ffffffff611f6816565b10156109de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133c9565b50506109ec84848888611ff6565b8873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82284848f8f604051610a4f949392919061348a565b60405180910390a350506001601155505050505050505050565b6040518060400160405280600a81526020017f556e69737761702056320000000000000000000000000000000000000000000081525081565b600d546dffffffffffffffffffffffffffff808216926e0100000000000000000000000000008304909116917c0100000000000000000000000000000000000000000000000000000000900463ffffffff1690565b6000610b0433848461227a565b5060015b92915050565b60065473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b73ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083203384529091528120547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14610bfa5773ffffffffffffffffffffffffffffffffffffffff84166000908152600260209081526040808320338452909152902054610bc8908363ffffffff611fb916565b73ffffffffffffffffffffffffffffffffffffffff851660009081526002602090815260408083203384529091529020555b610c058484846122ef565b5060015b9392505050565b60095473ffffffffffffffffffffffffffffffffffffffff163314610c61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133f9565b600980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600b5481565b60095473ffffffffffffffffffffffffffffffffffffffff1681565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b600e5481565b60095473ffffffffffffffffffffffffffffffffffffffff163314610d50576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133f9565b600a92909255600b55600c55565b600a5481565b600f5481565b6000601154600114610da8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133b9565b6000601181905580610db8610aa2565b506006546040517f70a0823100000000000000000000000000000000000000000000000000000000815292945090925060009173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190610e189030906004016131c5565b60206040518083038186803b158015610e3057600080fd5b505afa158015610e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e689190810190612a83565b6007546040517f70a0823100000000000000000000000000000000000000000000000000000000815291925060009173ffffffffffffffffffffffffffffffffffffffff909116906370a0823190610ec49030906004016131c5565b60206040518083038186803b158015610edc57600080fd5b505afa158015610ef0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610f149190810190612a83565b90506000610f38836dffffffffffffffffffffffffffff871663ffffffff611fb916565b90506000610f5c836dffffffffffffffffffffffffffff871663ffffffff611fb916565b90506000610f6a87876123c6565b60005490915080610fa757610f936103e8610936610f8e878763ffffffff611f6816565b61255e565b9850610fa260006103e86125b0565b611004565b6110016dffffffffffffffffffffffffffff8916610fcb868463ffffffff611f6816565b81610fd257fe5b046dffffffffffffffffffffffffffff8916610ff4868563ffffffff611f6816565b81610ffb57fe5b04612663565b98505b6000891161103e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133e9565b6110488a8a6125b0565b61105486868a8a611ff6565b811561109657600d54611092906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff611f6816565b6010555b3373ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f85856040516110de92919061347c565b60405180910390a25050600160115550949695505050505050565b60016020526000908152604090205481565b60105481565b60046020526000908152604090205481565b600854600a54600b54600c5460405160609461115e9473ffffffffffffffffffffffffffffffffffffffff9091169390929091602001613234565b604051602081830303815290604052905090565b6000806011546001146111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133b9565b60006011819055806111c1610aa2565b506006546007546040517f70a0823100000000000000000000000000000000000000000000000000000000815293955091935073ffffffffffffffffffffffffffffffffffffffff9081169291169060009083906370a08231906112299030906004016131c5565b60206040518083038186803b15801561124157600080fd5b505afa158015611255573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112799190810190612a83565b905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112b691906131c5565b60206040518083038186803b1580156112ce57600080fd5b505afa1580156112e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113069190810190612a83565b3060009081526001602052604081205491925061132388886123c6565b6000549091508061133a848763ffffffff611f6816565b8161134157fe5b049a5080611355848663ffffffff611f6816565b8161135c57fe5b04995060008b11801561136f575060008a115b6113a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133d9565b6113af3084612679565b6113ba878d8d611db1565b6113c5868d8c611db1565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8816906370a08231906114179030906004016131c5565b60206040518083038186803b15801561142f57600080fd5b505afa158015611443573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506114679190810190612a83565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815290955073ffffffffffffffffffffffffffffffffffffffff8716906370a08231906114bc9030906004016131c5565b60206040518083038186803b1580156114d457600080fd5b505afa1580156114e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061150c9190810190612a83565b935061151a85858b8b611ff6565b811561155c57600d54611558906dffffffffffffffffffffffffffff808216916e01000000000000000000000000000090041663ffffffff611f6816565b6010555b8b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d819364968d8d6040516115bb92919061347c565b60405180910390a35050505050505050506001601181905550915091565b6040518060400160405280600681526020017f554e492d5632000000000000000000000000000000000000000000000000000081525081565b6000610b043384846122ef565b6103e881565b601154600114611661576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133b9565b6000601155600654600754600d546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff938416939092169161173c9184918691611737916dffffffffffffffffffffffffffff9091169084906370a08231906116e79030906004016131c5565b60206040518083038186803b1580156116ff57600080fd5b505afa158015611713573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109369190810190612a83565b611db1565b6117aa8184611737600d600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016116e791906131c5565b5050600160115550565b60055473ffffffffffffffffffffffffffffffffffffffff1681565b60085473ffffffffffffffffffffffffffffffffffffffff1681565b600d547c0100000000000000000000000000000000000000000000000000000000900463ffffffff1681565b670de0b6b3a764000081565b60075473ffffffffffffffffffffffffffffffffffffffff1681565b4284101561187a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133a9565b60035473ffffffffffffffffffffffffffffffffffffffff8816600090815260046020908152604080832080546001810190915590519293926118e8927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928d928d928d92918d910161328e565b6040516020818303038152906040528051906020012060405160200161190f929190613194565b60405160208183030381529060405280519060200120905060006001828686866040516000815260200160405260405161194c94939291906132dd565b6020604051602081039080840390855afa15801561196e573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116158015906119e957508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b611a1f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613379565b611a2a89898961227a565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c5481565b60055473ffffffffffffffffffffffffffffffffffffffff163314611aa9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133f9565b81600114611ae3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613419565b6001831015611b1e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613369565b60018110158015611b305750600a8111155b611b66576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613329565b6006805473ffffffffffffffffffffffffffffffffffffffff9889167fffffffffffffffffffffffff0000000000000000000000000000000000000000918216179091556007805497891697821697909717909655600880549588169587169590951790945560098054939096169290941691909117909355600a92909255600b55600c55565b601154600114611c29576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f0906133b9565b60006011556006546040517f70a08231000000000000000000000000000000000000000000000000000000008152611daa9173ffffffffffffffffffffffffffffffffffffffff16906370a0823190611c869030906004016131c5565b60206040518083038186803b158015611c9e57600080fd5b505afa158015611cb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611cd69190810190612a83565b6007546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190611d2c9030906004016131c5565b60206040518083038186803b158015611d4457600080fd5b505afa158015611d58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611d7c9190810190612a83565b600d546dffffffffffffffffffffffffffff808216916e010000000000000000000000000000900416611ff6565b6001601155565b604080518082018252601981527f7472616e7366657228616464726573732c75696e7432353629000000000000006020909101525160009060609073ffffffffffffffffffffffffffffffffffffffff8616907fa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b90611e369087908790602401613219565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051611ebf9190613188565b6000604051808303816000865af19150503d8060008114611efc576040519150601f19603f3d011682016040523d82523d6000602084013e611f01565b606091505b5091509150818015611f2b575080511580611f2b575080806020019051611f2b9190810190612a65565b611f61576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613429565b5050505050565b6000811580611f8357505080820282828281611f8057fe5b04145b610b08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613349565b80820382811115610b08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613309565b6dffffffffffffffffffffffffffff841180159061202257506dffffffffffffffffffffffffffff8311155b612058576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613409565b600d5463ffffffff428116917c0100000000000000000000000000000000000000000000000000000000900481168203908116158015906120a857506dffffffffffffffffffffffffffff841615155b80156120c357506dffffffffffffffffffffffffffff831615155b15612173578063ffffffff16612106856120dc86612736565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169063ffffffff61275a16565b600e80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092169290920201905563ffffffff8116612146846120dc87612736565b600f80547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216929092020190555b600d80547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000166dffffffffffffffffffffffffffff888116919091177fffffffff0000000000000000000000000000ffffffffffffffffffffffffffff166e0100000000000000000000000000008883168102919091177bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff87160217928390556040517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad19361226a93818116939091041690613439565b60405180910390a1505050505050565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526002602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906122e2908590613280565b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040902054612325908263ffffffff611fb916565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160205260408082209390935590841681522054612367908263ffffffff61279b16565b73ffffffffffffffffffffffffffffffffffffffff80841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122e2908590613280565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561243157600080fd5b505afa158015612445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506124699190810190612889565b60105473ffffffffffffffffffffffffffffffffffffffff821615801594509192509061254a5780156125455760006124be610f8e6dffffffffffffffffffffffffffff88811690881663ffffffff611f6816565b905060006124cb8361255e565b9050808211156125425760006124f96124ea848463ffffffff611fb916565b6000549063ffffffff611f6816565b9050600061251e8361251286600563ffffffff611f6816565b9063ffffffff61279b16565b9050600081838161252b57fe5b049050801561253e5761253e87826125b0565b5050505b50505b612556565b80156125565760006010555b505092915050565b600060038211156125a1575080600160028204015b8181101561259b5780915060028182858161258a57fe5b04018161259357fe5b049050612573565b506125ab565b81156125ab575060015b919050565b6000546125c3908263ffffffff61279b16565b600090815573ffffffffffffffffffffffffffffffffffffffff83168152600160205260409020546125fb908263ffffffff61279b16565b73ffffffffffffffffffffffffffffffffffffffff83166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612657908590613280565b60405180910390a35050565b60008183106126725781610c09565b5090919050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600160205260409020546126af908263ffffffff611fb916565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020526040812091909155546126e9908263ffffffff611fb916565b600090815560405173ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612657908590613280565b6dffffffffffffffffffffffffffff166e0100000000000000000000000000000290565b60006dffffffffffffffffffffffffffff82167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff84168161279357fe5b049392505050565b80820182811015610b08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104f090613389565b8035610b0881613584565b8051610b0881613584565b8051610b088161359b565b8035610b08816135a4565b60008083601f84011261281657600080fd5b50813567ffffffffffffffff81111561282e57600080fd5b60208301915083600182028301111561284657600080fd5b9250929050565b8051610b08816135a4565b8035610b08816135ad565b60006020828403121561287557600080fd5b600061288184846127d8565b949350505050565b60006020828403121561289b57600080fd5b600061288184846127e3565b600080604083850312156128ba57600080fd5b60006128c685856127d8565b92505060206128d7858286016127d8565b9150509250929050565b600080600080600080600060e0888a0312156128fc57600080fd5b60006129088a8a6127d8565b97505060206129198a828b016127d8565b965050604061292a8a828b016127d8565b955050606061293b8a828b016127d8565b945050608061294c8a828b016127f9565b93505060a061295d8a828b016127f9565b92505060c061296e8a828b016127f9565b91505092959891949750929550565b60008060006060848603121561299257600080fd5b600061299e86866127d8565b93505060206129af868287016127d8565b92505060406129c0868287016127f9565b9150509250925092565b600080600080600080600060e0888a0312156129e557600080fd5b60006129f18a8a6127d8565b9750506020612a028a828b016127d8565b9650506040612a138a828b016127f9565b9550506060612a248a828b016127f9565b945050608061294c8a828b01612858565b60008060408385031215612a4857600080fd5b6000612a5485856127d8565b92505060206128d7858286016127f9565b600060208284031215612a7757600080fd5b600061288184846127ee565b600060208284031215612a9557600080fd5b6000612881848461284d565b600080600080600060808688031215612ab957600080fd5b6000612ac588886127f9565b9550506020612ad6888289016127f9565b9450506040612ae7888289016127d8565b935050606086013567ffffffffffffffff811115612b0457600080fd5b612b1088828901612804565b92509250509295509295909350565b600080600060608486031215612b3457600080fd5b6000612b4086866127f9565b93505060206129af868287016127f9565b612b5a8161350f565b82525050565b612b5a816134c1565b612b5a816134cc565b612b5a816134d1565b612b5a612b87826134d1565b6134d1565b6000612b9883856134b8565b9350612ba5838584613520565b612bae8361355c565b9093019392505050565b6000612bc3826134b4565b612bcd81856134b8565b9350612bdd81856020860161352c565b612bae8161355c565b6000612bf1826134b4565b612bfb81856125ab565b9350612c0b81856020860161352c565b9290920192915050565b6000612c226015836134b8565b7f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000815260200192915050565b6000612c5b6025836134b8565b7f556e697377617056323a20494e53554646494349454e545f4f55545055545f4181527f4d4f554e54000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000612cba6025836134b8565b7f556e697377617056323a20666565206d757374206265203e3d203120616e642081527f3c3d203130000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000612d196024836134b8565b7f556e697377617056323a20494e53554646494349454e545f494e5055545f414d81527f4f554e5400000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000612d786014836134b8565b7f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000815260200192915050565b6000612db16015836134b8565b7f556e697377617056323a20494e56414c49445f544f0000000000000000000000815260200192915050565b6000612dea601d836134b8565b7f556e697377617056323a20736c6f7065206d757374206265203e3d2031000000815260200192915050565b6000612e23601c836134b8565b7f556e697377617056323a20494e56414c49445f5349474e415455524500000000815260200192915050565b6000612e5c6002836125ab565b7f1901000000000000000000000000000000000000000000000000000000000000815260020192915050565b6000612e956014836134b8565b7f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000815260200192915050565b6000612ece6021836134b8565b7f556e697377617056323a20494e53554646494349454e545f4c4951554944495481527f5900000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000612f2d6012836134b8565b7f556e697377617056323a20455850495245440000000000000000000000000000815260200192915050565b6000612f666011836134b8565b7f556e697377617056323a204c4f434b4544000000000000000000000000000000815260200192915050565b6000612f9f600c836134b8565b7f556e697377617056323a204b0000000000000000000000000000000000000000815260200192915050565b6000612fd86028836134b8565b7f556e697377617056323a20494e53554646494349454e545f4c4951554944495481527f595f4255524e4544000000000000000000000000000000000000000000000000602082015260400192915050565b60006130376028836134b8565b7f556e697377617056323a20494e53554646494349454e545f4c4951554944495481527f595f4d494e544544000000000000000000000000000000000000000000000000602082015260400192915050565b60006130966014836134b8565b7f556e697377617056323a20464f5242494444454e000000000000000000000000815260200192915050565b60006130cf6013836134b8565b7f556e697377617056323a204f564552464c4f5700000000000000000000000000815260200192915050565b60006131086020836134b8565b7f556e697377617056323a206578706f6e656e74206d757374206265203d3d2031815260200192915050565b6000613141601a836134b8565b7f556e697377617056323a205452414e534645525f4641494c4544000000000000815260200192915050565b612b5a816134d4565b612b5a81613500565b612b5a81613509565b6000610c098284612be6565b600061319f82612e4f565b91506131ab8285612b7b565b6020820191506131bb8284612b7b565b5060200192915050565b60208101610b088284612b60565b608081016131e18288612b51565b6131ee6020830187612b72565b6131fb6040830186612b72565b818103606083015261320e818486612b8c565b979650505050505050565b604081016132278285612b60565b610c096020830184612b72565b608081016132428287612b60565b61324f6020830186612b72565b61325c6040830185612b72565b6132696060830184612b72565b95945050505050565b60208101610b088284612b69565b60208101610b088284612b72565b60c0810161329c8289612b72565b6132a96020830188612b60565b6132b66040830187612b60565b6132c36060830186612b72565b6132d06080830185612b72565b61320e60a0830184612b72565b608081016132eb8287612b72565b61324f602083018661317f565b60208082528101610c098184612bb8565b60208082528101610b0881612c15565b60208082528101610b0881612c4e565b60208082528101610b0881612cad565b60208082528101610b0881612d0c565b60208082528101610b0881612d6b565b60208082528101610b0881612da4565b60208082528101610b0881612ddd565b60208082528101610b0881612e16565b60208082528101610b0881612e88565b60208082528101610b0881612ec1565b60208082528101610b0881612f20565b60208082528101610b0881612f59565b60208082528101610b0881612f92565b60208082528101610b0881612fcb565b60208082528101610b088161302a565b60208082528101610b0881613089565b60208082528101610b08816130c2565b60208082528101610b08816130fb565b60208082528101610b0881613134565b60408101613447828561316d565b610c09602083018461316d565b60608101613462828661316d565b61346f602083018561316d565b6128816040830184613176565b604081016132278285612b72565b608081016132428287612b72565b60208101610b088284613176565b60208101610b08828461317f565b5190565b90815260200190565b6000610b08826134e7565b151590565b90565b6dffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b63ffffffff1690565b60ff1690565b6000610b08826000610b08826134c1565b82818337506000910152565b60005b8381101561354757818101518382015260200161352f565b83811115613556576000848401525b50505050565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690565b61358d816134c1565b811461359857600080fd5b50565b61358d816134cc565b61358d816134d1565b61358d8161350956fea365627a7a723158200a93a5da13bb9ac7561d6ab259f0c416e79d014e32fdabce8bdbee93f91c25056c6578706572696d656e74616cf564736f6c63430005100040",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x1 PUSH1 0x11 SSTORE CALLVALUE DUP1 ISZERO PUSH3 0x16 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD CHAINID SWAP1 PUSH3 0x27 SWAP1 PUSH3 0x19A JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 SWAP1 SUB DUP3 KECCAK256 DUP3 DUP3 ADD DUP3 MSTORE PUSH1 0xA DUP4 MSTORE PUSH10 0x2AB734B9BBB0B8102B19 PUSH1 0xB1 SHL PUSH1 0x20 SWAP4 DUP5 ADD MSTORE DUP2 MLOAD DUP1 DUP4 ADD DUP4 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x31 PUSH1 0xF8 SHL SWAP1 DUP5 ADD MSTORE SWAP1 MLOAD PUSH3 0xB8 SWAP3 PUSH32 0xBFCC8EF98FFBF7B6C3FEC7BF5185B566B9863E35A9D83ACD49AD6824B5969738 SWAP2 PUSH32 0xC89EFDAA54C0F20C7ADF612882DF0950F5A951637E0307CDCB4C672F298B8BC6 SWAP2 DUP7 SWAP2 ADDRESS SWAP2 ADD PUSH3 0x1AD JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 SWAP1 MSTORE DUP1 MLOAD PUSH1 0x20 SWAP1 SWAP2 ADD KECCAK256 PUSH1 0x3 SWAP1 DUP2 SSTORE PUSH1 0x5 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND CALLER OR SWAP1 SSTORE PUSH8 0xDE0B6B3A7640000 PUSH1 0xA SSTORE PUSH1 0x1 PUSH1 0xB SSTORE PUSH1 0xC SSTORE POP PUSH3 0x224 JUMP JUMPDEST PUSH3 0x10D DUP2 PUSH3 0x208 JUMP JUMPDEST DUP3 MSTORE POP POP JUMP JUMPDEST PUSH3 0x10D DUP2 PUSH3 0x215 JUMP JUMPDEST PUSH1 0x0 PUSH3 0x12D PUSH1 0x52 DUP4 PUSH3 0x203 JUMP JUMPDEST PUSH32 0x454950373132446F6D61696E28737472696E67206E616D652C737472696E6720 DUP2 MSTORE PUSH32 0x76657273696F6E2C75696E7432353620636861696E49642C6164647265737320 PUSH1 0x20 DUP3 ADD MSTORE PUSH18 0x766572696679696E67436F6E747261637429 PUSH1 0x70 SHL PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x52 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x1A7 DUP3 PUSH3 0x11E JUMP JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD PUSH3 0x1BD DUP3 DUP9 PUSH3 0x113 JUMP JUMPDEST PUSH3 0x1CC PUSH1 0x20 DUP4 ADD DUP8 PUSH3 0x113 JUMP JUMPDEST PUSH3 0x1DB PUSH1 0x40 DUP4 ADD DUP7 PUSH3 0x113 JUMP JUMPDEST PUSH3 0x1EA PUSH1 0x60 DUP4 ADD DUP6 PUSH3 0x113 JUMP JUMPDEST PUSH3 0x1F9 PUSH1 0x80 DUP4 ADD DUP5 PUSH3 0x102 JUMP JUMPDEST SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 PUSH3 0x1A7 DUP3 PUSH3 0x218 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x35F9 DUP1 PUSH3 0x234 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT P