ee30879d-f4f6-499a-b2bf-d4745076b528
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 30261 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 73750 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 73751 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 73752 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 73753 | capability.graph | complete | 1 / 3 | 1 week ago |
| 73754 | detector.run | complete | 1 / 3 | 1 week ago |
| 73755 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:1502981] OpenAI Codex v0.77.0 (research preview)
[codex:1502981] --------
[codex:1502981] workdir: /tmp/codex-multi-7cwnzsf_
[codex:1502981] model: gpt-5.2-codex
[codex:1502981] provider: openai
[codex:1502981] approval: never
[codex:1502981] sandbox: read-only
[codex:1502981] reasoning effort: xhigh
[codex:1502981] reasoning summaries: auto
[codex:1502981] session id: 019b6297-f59a-7151-b6de-1f058b1cc1aa
[codex:1502981] --------
[codex:1502981] user
[codex:1502981] You are a security auditor. You are given EVM runtime bytecode (and possibly a disassembly) for a contract with NO verified source.
[codex:1502981] This is best-effort. Do not hallucinate: only flag issues when there's a concrete, explainable angle from bytecode/disasm patterns.
[codex:1502981]
[codex:1502981] You MUST read the full `BYTECODE_BUNDLE.txt` before concluding.
[codex:1502981]
[codex:1502981] Output MUST be valid JSON matching the provided schema.
[codex:1502981] - If you cannot identify a concrete issue from bytecode/disasm alone: set no_findings=true and findings=[].
[codex:1502981] - Otherwise: include findings with severity/category/title/evidence and point locations to BYTECODE_BUNDLE.txt line ranges when possible.
[codex:1502981]
[codex:1502981] Output constraints (IMPORTANT):
[codex:1502981] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1502981] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1502981] mcp startup: no servers
[codex:1502981]
[codex:1502981] thinking
[codex:1502981] **Preparing to read BYTECODE_BUNDLE.txt**
[codex:1502981] exec
[codex:1502981] /bin/bash -lc ls in /tmp/codex-multi-7cwnzsf_ succeeded in 5ms:
[codex:1502981] BYTECODE_BUNDLE.txt
[codex:1502981] codex-output-schema.json
[codex:1502981]
[codex:1502981] thinking
[codex:1502981] **Opening file**
[codex:1502981] exec
[codex:1502981] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-7cwnzsf_ succeeded in 6ms:
[codex:1502981] Runtime bytecode bundle for best-effort auditing.
[codex:1502981] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:1502981]
[codex:1502981] FILE: runtime_bytecode.hex
[codex:1502981] 0x6080604052600436106100955760003560e01c80637c04575b116100595780637c04575b1461036e578063a7b8e68814610383578063d292572314610396578063d69ea74d146103a9578063fa461e33146103d257610120565b80630cb7f13c146102f557806310c117ab1461031557806323a69e75146103285780632768b07e146103485780635c19a95c1461035b57610120565b36610120573373c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21461011e5773c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561010457600080fd5b505af1158015610118573d6000803e3d6000fd5b50505050505b005b6101286103f2565b60008060405160016000823780519250600a600182375190506001600160b01b03198116156101db574261015d60014361230d565b40604051602001610178929190918252602082015260400190565b604051602081830303815290604052805190602001206001600160b01b031916816001600160b01b031916146101db5760405162461bcd60e51b815260206004820152600360248201526226222360e91b60448201526064015b60405180910390fd5b600160f91b6001600160f81b03198316908111159015806102095750600360f81b6001600160f81b03198416145b156102175761011e8161048b565b600560f81b6001600160f81b031984161161028f576102358161057e565b600160f91b6001600160f81b03198416148061025e5750600560f81b6001600160f81b03198416145b1561011e5760405141903480156108fc02916000818181858888f1935050505015801561011e573d6000803e3d6000fd5b6001600160f81b03198316600360f91b036102ac5761011e610644565b6102b46108b6565b6001600160f81b03198316600160fb1b0361011e5760405141903480156108fc02916000818181858888f1935050505015801561011e573d6000803e3d6000fd5b34801561030157600080fd5b5061011e610310366004612320565b610b01565b61011e6103233660046123b6565b610c12565b34801561033457600080fd5b5061011e61034336600461241c565b610d3c565b61011e6103563660046123b6565b610d4a565b61011e61036936600461246f565b610f08565b34801561037a57600080fd5b5061011e610f42565b61011e61039136600461249c565b610f55565b61011e6103a4366004612523565b611098565b6103bc6103b7366004612577565b6112bf565b6040516103c99190612609565b60405180910390f35b3480156103de57600080fd5b5061011e6103ed36600461241c565b6113cc565b61048973d8349e874934593c85eafa8e534b495d80848e4133148061042a5750732f5abb45c283a7e6661c205d38215b10ee6fb06433145b80610448575073c5798cd00276dbfdcd85bc751f5edace052e5cdd33145b80610466575073e00456d3af6e9b8715a9c29c88c1932983e064c133145b8061048457507371889d0c1101dc57045d08962e1a5c246662911233145b6113da565b565b600080600080600080604051603b600b8237600c8103519650601481015160f81c60021b601582015160e01c80821b945050506019810151955060398101519450603a8101519150506104dd81611478565b9250861561050857610503610484878585896001600160f81b03198a1615156000611496565b610575565b600080604051601660468237805160149091015190925090508661053e868a876001600160f81b03198b161515600088886114dc565b10156105725760405162461bcd60e51b815260206004820152600360248201526254413160e81b60448201526064016101d2565b50505b50505050505050565b6000806000806000604051604e600b8237600c81035195506008810151945060288101519350604881015160f81c60021b604982015160e01c80821b94505050604d81015191505085156105ee576105e9610484858786866001600160f81b03198716156000611496565b61063c565b60008060405160036059823780516001909101519092509050610639846106328989896001600160f81b03198916151560006106298a611478565b60601b896114dc565b10156113da565b50505b505050505050565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152600080600080600060405160bb600b8237805160f81c6002600182180660208a015260018160011c16955060018160021c1696508060031c60a0890152506001600160a01b03600b8203511688526001600160a01b0360098201511687526001600160a01b03601d820151166020880152603d81015160f81c60021b603e82015160e01c80821b60808b015250506042810151604088015260628101519250608281015191506083810151935060858101516060890152608781015160808801526001600160a01b03609b8201511660608801525061077f81611478565b6001600160a01b031660408801525082156107d3578061079f87876115c1565b10156105e95760405162461bcd60e51b815260206004820152600360248201526254543160e81b60448201526064016101d2565b856020015115610832576107fb86600001518760400151886080015185888a60000151611496565b61082d5760405162461bcd60e51b81526020600482015260036024820152622a2a1960e91b60448201526064016101d2565b610894565b81610860876040015188600001518960800151888a600001518b6020015160601b8d6060015160f01b6114dc565b10156108945760405162461bcd60e51b815260206004820152600360248201526254543360e81b60448201526064016101d2565b61063c610484866000015187602001518860400151858a60a001516000611496565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152600080600080600060405160bb600b8237805160f81c6002600182180660208a015260018160011c16955060018160021c1696508060031c60a0890152506001600160a01b03600b8203511688526001600160a01b0360098201511687526001600160a01b03601d8201511660408901526001600160a01b03603182015116602088015260518101516080890152607181015193506091810151604088015260b181015160f81c60021b60b282015160e01c80821b9450505060b6810151915060998101516060890152609b8101516080880152506109f181611478565b6001600160a01b03166060870152508215610a455780610a1187876115c1565b10156105e95760405162461bcd60e51b815260206004820152600360248201526254543360e81b60448201526064016101d2565b856020015115610a9f57610a6d86600001518760400151886080015185888a60000151611496565b61082d5760405162461bcd60e51b815260206004820152600360248201526215150d60ea1b60448201526064016101d2565b81610acd876040015188600001518960800151888a600001518b6020015160601b8d6060015160f01b6114dc565b10156108945760405162461bcd60e51b815260206004820152600360248201526254543560e81b60448201526064016101d2565b610b096103f2565b8015610c0f57604051632e1a7d4d60e01b81526004810182905273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290632e1a7d4d90602401600060405180830381600087803b158015610b5c57600080fd5b505af1158015610b70573d6000803e3d6000fd5b5050604080516000808252602082019283905293503392508491610b949190612632565b60006040518083038185875af1925050503d8060008114610bd1576040519150601f19603f3d011682016040523d82523d6000602084013e610bd6565b606091505b5050905080610c0d5760405162461bcd60e51b8152602060048201526003602482015262524f5960e81b60448201526064016101d2565b505b33ff5b610c1a611768565b610c27602082018261264e565b6001600160b01b03191615610cc95742610c4260014361230d565b40604051602001610c5d929190918252602082015260400190565b60408051601f1981840301815291905280516020918201206001600160b01b03191690610c8c9083018361264e565b6001600160b01b03191614610cc95760405162461bcd60e51b815260206004820152600360248201526246444560e81b60448201526064016101d2565b604051633095c05760e01b81526001600160a01b03851690633095c05790610cf790869086906004016126a1565b600060405180830381600087803b158015610d1157600080fd5b505af1158015610d25573d6000803e3d6000fd5b50505050610d3681602001356117a4565b50505050565b610d36848484846001611912565b610d52611768565b610d5f602082018261264e565b6001600160b01b03191615610e015742610d7a60014361230d565b40604051602001610d95929190918252602082015260400190565b60408051601f1981840301815291905280516020918201206001600160b01b03191690610dc49083018361264e565b6001600160b01b03191614610e015760405162461bcd60e51b815260206004820152600360248201526246445360e81b60448201526064016101d2565b6040516370a0823160e01b815230600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a0823190602401602060405180830381865afa158015610e53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7791906126bd565b9050610e9c73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2868460200135611d65565b604051633095c05760e01b81526001600160a01b03861690633095c05790610eca90879087906004016126a1565b600060405180830381600087803b158015610ee457600080fd5b505af1158015610ef8573d6000803e3d6000fd5b5050506000919091555050505050565b610f106103f2565b6040516024360380602483376000808284865af43d9150816000843e808015610f37578284f35b8284fd5b5050505050565b610f4a611e8f565b600160008190558055565b610f5d611e8f565b610f6a602086018661264e565b6001600160b01b0319161561100c5742610f8560014361230d565b40604051602001610fa0929190918252602082015260400190565b60408051601f1981840301815291905280516020918201206001600160b01b03191690610fcf9087018761264e565b6001600160b01b0319161461100c5760405162461bcd60e51b81526020600482015260036024820152624e444560e81b60448201526064016101d2565b61101c604086016020870161246f565b6001600160a01b031663dcb698ab34868686866040518663ffffffff1660e01b815260040161104e94939291906126d6565b6000604051808303818588803b15801561106757600080fd5b505af115801561107b573d6000803e3d6000fd5b505050505061108d8560400135611f60565b505060018055505050565b6110a0611e8f565b341580156110b057506001546001145b6110e25760405162461bcd60e51b8152602060048201526003602482015262272b2960e91b60448201526064016101d2565b6110ef602084018461264e565b6001600160b01b03191615611191574261110a60014361230d565b40604051602001611125929190918252602082015260400190565b60408051601f1981840301815291905280516020918201206001600160b01b031916906111549085018561264e565b6001600160b01b031916146111915760405162461bcd60e51b81526020600482015260036024820152624e445360e81b60448201526064016101d2565b6040516370a0823160e01b815230600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a0823190602401602060405180830381865afa1580156111e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120791906126bd565b90506040840135156112455761124573c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261123b604087016020880161246f565b8660400135611d65565b611255604085016020860161246f565b6001600160a01b03166307a1018e84846040518363ffffffff1660e01b81526004016112829291906126a1565b600060405180830381600087803b15801561129c57600080fd5b505af11580156112b0573d6000803e3d6000fd5b50505060019190915550505050565b60606112c9611e8f565b83156112ee576112ee73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc28686611d65565b600080866001600160a01b031634868660405161130c929190612708565b60006040518083038185875af1925050503d8060008114611349576040519150601f19603f3d011682016040523d82523d6000602084013e61134e565b606091505b5091509150816113c25760448151101561138f5760405162461bcd60e51b815260206004820152600260248201526129a960f11b60448201526064016101d2565b600481019050808060200190518101906113a99190612718565b60405162461bcd60e51b81526004016101d29190612609565b9695505050505050565b610d36848484846000611912565b806114755760408051630570923880825263ae1247208201909252600090826020820163ae1247008036833701905050905060005b61141a8360016127cd565b811015610d365761142b814361230d565b6040805191406020830152016040516020818303038152906040528051906020012060001c828281518110611462576114626127e0565b602090810291909101015260010161140f565b50565b600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25b92915050565b60006114a3868887612095565b156114cf5782156114c2576114bb84600089856120e2565b90506113c2565b6114bb60008589856120e2565b5060009695505050505050565b600060606000806114ec8b612140565b915091508015611542576040516001600160f01b0319861660208201526001600160601b0319871660228201526001600160f81b0319831660368201526037016040516020818303038152906040529250611586565b6040516001600160f01b0319861660208201526001600160601b0319808816602283015260608d901b166036820152604a0160405160208183030381529060405292505b6000806115968c8a8c8e89612155565b91509150896115a557816115a7565b805b6115b0906127f6565b9d9c50505050505050505050505050565b600060606000806115d58560200151612140565b9150915080156116865760208087015187516040808a01516080808c01516060808e0151928d01518d820151955197151560f81b988801989098526001600160601b031995811b8616602188015292831b8516603587015260498601526001600160f01b031960f091821b8116606987015295901b909416606b84015290921b909116606d8201526001600160f81b031983166081820152608201604051602081830303815290604052925061172b565b60208087015187516040808a01516080808c01516060808e0151928d01518d8201518e8a0151965198151560f81b998901999099526001600160601b031996821b8716602189015293811b8616603588015260498701919091526001600160f01b031960f092831b811660698801529290911b909116606b85015293841b8216606d84015290921b909116608182015260950160405160208183030381529060405292505b505060008061174a856000015160008760a00151886040015187612155565b915091508460a0015161175d578161175f565b805b6113c2906127f6565b610489736e6759b3ef49bab693127c9ea126eb6e549bc3d3331480610484575073ea35df26f76aae16bb7175695525d562efae138f33146113da565b34156117d85760405141903480156108fc02916000818181858888f193505050501580156117d6573d6000803e3d6000fd5b505b60005468056bc75e2d6310000081116118195760405162461bcd60e51b815260206004820152600360248201526205030360ec1b60448201526064016101d2565b6040516370a0823160e01b815230600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a0823190602401602060405180830381865afa15801561186b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188f91906126bd565b90508261189c348361230d565b116118cf5760405162461bcd60e51b815260206004820152600360248201526250303160e81b60448201526064016101d2565b816118da348361230d565b1161190d5760405162461bcd60e51b815260206004820152600360248201526228181960e91b60448201526064016101d2565b505050565b61191a612220565b60008513806119295750600084135b61195b5760405162461bcd60e51b815260206004820152600360248201526205633360ec1b60448201526064016101d2565b81601681116119925760405162461bcd60e51b815260206004820152600360248201526256333160e81b60448201526064016101d2565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152602a821160008080808085611a0b57604051602a6084823761ffff601e820351169250600a810351935088601781146119fc57600a8201519550611a04565b601682015192505b5050611a87565b604051607560848237601f81035188526001600160a01b03600b8203511660208901526001600160a01b036009820151166040890152602981015160608901526049810151608089015261ffff602d820151169250604181015193508860628114611a7c5760558201519550611a84565b606182015192505b50505b6001600160a01b038416611aa157611a9e81611478565b93505b600080846001600160a01b0316866001600160a01b031610611ac4578486611ac7565b85855b915091508a611aed577307e610c722b66148d8c6b92967c99cd1ba8c7e6160621b611b06565b7341ff9aa7e16b8b1a8a8dc4f0efacd93d02d071c960601b5b604080516001600160a01b03808616602083015284169181019190915262ffffff86166060820152608001604051602081830303815290604052805190602001208c611b72577fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54611b94565b7f6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e25b6040516001600160f81b031960208201526001600160601b03199093166021840152603583019190915260558201526075016040516020818303038152906040528051906020012060001c965050505050506000808b13611bf55789611bf7565b8a5b9050336001600160a01b03841614611c375760405162461bcd60e51b81526020600482015260036024820152622b199960e91b60448201526064016101d2565b8315611d1c57845115611cad57611c7685602001518660400151876060015184866001600160a01b03168a604001516001600160a01b03161188611496565b611ca85760405162461bcd60e51b815260206004820152600360248201526205632360ec1b60448201526064016101d2565b611d58565b80611ce8866040015187602001518860600151866001600160a01b03168a604001516001600160a01b031610888860601b8c608001516114dc565b1015611ca85760405162461bcd60e51b815260206004820152600360248201526256333360e81b60448201526064016101d2565b611d27828483612095565b611d585760405162461bcd60e51b8152602060048201526002602482015261056360f41b60448201526064016101d2565b5050505050505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1790529151600092839290871691611dc19190612632565b6000604051808303816000865af19150503d8060008114611dfe576040519150601f19603f3d011682016040523d82523d6000602084013e611e03565b606091505b5091509150818015611e2d575080511580611e2d575080806020019051810190611e2d9190612812565b610f3b5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b60648201526084016101d2565b61048973d8349e874934593c85eafa8e534b495d80848e41331480611ec75750732f5abb45c283a7e6661c205d38215b10ee6fb06433145b80611ee5575073c5798cd00276dbfdcd85bc751f5edace052e5cdd33145b80611f03575073e00456d3af6e9b8715a9c29c88c1932983e064c133145b80611f215750736e6759b3ef49bab693127c9ea126eb6e549bc3d333145b80610466575073ea35df26f76aae16bb7175695525d562efae138f33148061048457507371889d0c1101dc57045d08962e1a5c246662911233146113da565b6040516370a0823160e01b815230600482015260009073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2906370a0823190602401602060405180830381865afa158015611fb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd691906126bd565b905034811161200d5760405162461bcd60e51b815260206004820152600360248201526205031360ec1b60448201526064016101d2565b612017348261230d565b6001549091508082116120525760405162461bcd60e51b815260206004820152600360248201526250313160e81b60448201526064016101d2565b600061205e828461230d565b9050838111610d365760405162461bcd60e51b815260206004820152600360248201526228189960e91b60448201526064016101d2565b6000816000036120a7575060016120db565b60405163a9059cbb60e01b81526001600160a01b03841660048201528260248201526020816044836000895af19051935090505b9392505050565b60405163022c0d9f60e01b8152600481018590526024810184905260009030908380156121145784604483015261211b565b8260448301525b50608060648201526000608482015260208160a4836000895af1979650505050505050565b60008061214c836122b8565b91509150915091565b6000806000856121795773fffd8963efd1fc6a506488495d951d5263988d25612180565b6401000276a45b604051630251596160e31b815290915030908880156121a4578960048301526121ab565b8260048301525b5087602482015286604482015282606482015260a0608482015285518060a483015260005b818110156121ed57602081890181015160c48584010152016121d0565b506040828260c4018460008f5af190508061220757600080fd5b5080519450602081015193505050509550959350505050565b73d8349e874934593c85eafa8e534b495d80848e413214806122555750732f5abb45c283a7e6661c205d38215b10ee6fb06432145b80612273575073c5798cd00276dbfdcd85bc751f5edace052e5cdd32145b80612291575073e00456d3af6e9b8715a9c29c88c1932983e064c132145b806122af57507371889d0c1101dc57045d08962e1a5c246662911232145b61048957600080fd5b60008073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc1196001600160a01b038416016122ec5750600092600192509050565b506000928392509050565b634e487b7160e01b600052601160045260246000fd5b81810381811115611490576114906122f7565b60006020828403121561233257600080fd5b5035919050565b80356001600160a01b038116811461235057600080fd5b919050565b60008083601f84011261236757600080fd5b50813567ffffffffffffffff81111561237f57600080fd5b60208301915083602082850101111561239757600080fd5b9250929050565b6000604082840312156123b057600080fd5b50919050565b600080600080608085870312156123cc57600080fd5b6123d585612339565b9350602085013567ffffffffffffffff8111156123f157600080fd5b6123fd87828801612355565b90945092506124119050866040870161239e565b905092959194509250565b6000806000806060858703121561243257600080fd5b8435935060208501359250604085013567ffffffffffffffff81111561245757600080fd5b61246387828801612355565b95989497509550505050565b60006020828403121561248157600080fd5b6120db82612339565b6000606082840312156123b057600080fd5b600080600080600060a086880312156124b457600080fd5b6124be878761248a565b9450606086013567ffffffffffffffff8111156124da57600080fd5b6124e688828901612355565b909550935050608086013567ffffffffffffffff81111561250657600080fd5b61251288828901612355565b969995985093965092949392505050565b60008060006080848603121561253857600080fd5b612542858561248a565b9250606084013567ffffffffffffffff81111561255e57600080fd5b61256a86828701612355565b9497909650939450505050565b6000806000806060858703121561258d57600080fd5b61259685612339565b935060208501359250604085013567ffffffffffffffff81111561245757600080fd5b60005b838110156125d45781810151838201526020016125bc565b50506000910152565b600081518084526125f58160208601602086016125b9565b601f01601f19169290920160200192915050565b6020815260006120db60208301846125dd565b634e487b7160e01b600052604160045260246000fd5b600082516126448184602087016125b9565b9190910192915050565b60006020828403121561266057600080fd5b81356001600160b01b0319811681146120db57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006126b5602083018486612678565b949350505050565b6000602082840312156126cf57600080fd5b5051919050565b6040815260006126ea604083018688612678565b82810360208401526126fd818587612678565b979650505050505050565b8183823760009101908152919050565b60006020828403121561272a57600080fd5b815167ffffffffffffffff81111561274157600080fd5b8201601f8101841361275257600080fd5b805167ffffffffffffffff81111561276c5761276c61261c565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561279b5761279b61261c565b6040528181528282016020018610156127b357600080fd5b6127c48260208301602086016125b9565b95945050505050565b80820180821115611490576114906122f7565b634e487b7160e01b600052603260045260246000fd5b6000600160ff1b820161280b5761280b6122f7565b5060000390565b60006020828403121561282457600080fd5b815180151581146120db57600080fdfea264697066735822122051f9e0b3b242cefb39f1b2aae18fb612871bdae3ec99a1d54726886a2c7a414364736f6c634300081c0033
[codex:1502981]
[codex:1502981] thinking
[codex:1502981] **Analyzing bytecode for delegatecall patterns**
[codex:1502981] exec
[codex:1502981] /bin/bash -lc "python - <<'PY'
[codex:1502981] import re
[codex:1502981] from textwrap import wrap
[codex:1502981] path='/tmp/codex-multi-7cwnzsf_/BYTECODE_BUNDLE.txt'
[codex:1502981] with open(path) as f:
[codex:1502981] data=f.read()
[codex:1502981] # extract hex after 'runtime_bytecode.hex' line
[codex:1502981] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)', data)
[codex:1502981] if not m:
[codex:1502981] raise SystemExit('no hex')
[codex:1502981] hexstr=m.group(1)
[codex:1502981] # opcode table
[codex:1502981] opcodes={
[codex:1502981] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1502981] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1502981] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1502981] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1502981] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1502981] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1502981] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1502981] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1502981] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1502981] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1502981] }
[codex:1502981]
[codex:1502981] # disassemble and record positions of DELEGATECALL
[codex:1502981] bytecode=bytes.fromhex(hexstr)
[codex:1502981] res=[]
[codex:1502981] idx=0
[codex:1502981] while idx<len(bytecode):
[codex:1502981] op=bytecode[idx]
[codex:1502981] name=opcodes.get(op, f'OP_{op:02x}')
[codex:1502981] start=idx
[codex:1502981] idx+=1
[codex:1502981] if 0x60<=op<=0x7f:
[codex:1502981] n=op-0x5f
[codex:1502981] data=bytecode[idx:idx+n]
[codex:1502981] idx+=n
[codex:1502981] res.append((start, f'{name} 0x{data.hex()}'))
[codex:1502981] else:
[codex:1502981] res.append((start, name))
[codex:1502981]
[codex:1502981] # find delegatecall positions
[codex:1502981] for pos, ins in res:
[codex:1502981] if ins.startswith('DELEGATECALL'):
[codex:1502981] # print 15 instructions before and after
[codex:1502981] i=[j for j,(p,_) in enumerate(res) if p==pos][0]
[codex:1502981] lo=max(0,i-15); hi=min(len(res), i+15)
[codex:1502981] print('--- around', pos)
[codex:1502981] for p,ins in res[lo:hi]:
[codex:1502981] print(f'{p:04x}: {ins}')
[codex:1502981] print()
[codex:1502981] PY" in /tmp/codex-multi-7cwnzsf_ succeeded in 47ms:
[codex:1502981] --- around 3876
[codex:1502981] 0f11: PUSH1 0x40
[codex:1502981] 0f13: MLOAD
[codex:1502981] 0f14: PUSH1 0x24
[codex:1502981] 0f16: CALLDATASIZE
[codex:1502981] 0f17: SUB
[codex:1502981] 0f18: DUP1
[codex:1502981] 0f19: PUSH1 0x24
[codex:1502981] 0f1b: DUP4
[codex:1502981] 0f1c: CALLDATACOPY
[codex:1502981] 0f1d: PUSH1 0x00
[codex:1502981] 0f1f: DUP1
[codex:1502981] 0f20: DUP3
[codex:1502981] 0f21: DUP5
[codex:1502981] 0f22: DUP7
[codex:1502981] 0f23: GAS
[codex:1502981] 0f24: DELEGATECALL
[codex:1502981] 0f25: RETURNDATASIZE
[codex:1502981] 0f26: SWAP2
[codex:1502981] 0f27: POP
[codex:1502981]
[codex:1502981] thinking
[codex:1502981] **Analyzing delegatecall target setup**
[codex:1502981] exec
[codex:1502981] /bin/bash -lc "python - <<'PY'
[codex:1502981] import re
[codex:1502981] path='/tmp/codex-multi-7cwnzsf_/BYTECODE_BUNDLE.txt'
[codex:1502981] with open(path) as f:
[codex:1502981] data=f.read()
[codex:1502981] import re
[codex:1502981] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)', data)
[codex:1502981] hexstr=m.group(1)
[codex:1502981] bytecode=bytes.fromhex(hexstr)
[codex:1502981] # opcode map same as before
[codex:1502981] opcodes={
[codex:1502981] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1502981] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1502981] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1502981] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1502981] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1502981] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1502981] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1502981] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1502981] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1502981] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1502981] }
[codex:1502981]
[codex:1502981] # disassemble to list
[codex:1502981] res=[]
[codex:1502981] idx=0
[codex:1502981] while idx<len(bytecode):
[codex:1502981] op=bytecode[idx]
[codex:1502981] name=opcodes.get(op, f'OP_{op:02x}')
[codex:1502981] start=idx
[codex:1502981] idx+=1
[codex:1502981] if 0x60<=op<=0x7f:
[codex:1502981] n=op-0x5f
[codex:1502981] data=bytecode[idx:idx+n]
[codex:1502981] idx+=n
[codex:1502981] res.append((start, f'{name} 0x{data.hex()}'))
[codex:1502981] else:
[codex:1502981] res.append((start, name))
[codex:1502981]
[codex:1502981] # print range around 0x0ee0-0x0f40
[codex:1502981] lo=0x0ee0; hi=0x0f60
[codex:1502981] for p,ins in res:
[codex:1502981] if lo<=p<=hi:
[codex:1502981] print(f'{p:04x}: {ins}')
[codex:1502981] PY" in /tmp/codex-multi-7cwnzsf_ succeeded in 32ms:
[codex:1502981] 0ee0: PUSH1 0x00
[codex:1502981] 0ee2: DUP1
[codex:1502981] 0ee3: REVERT
[codex:1502981] 0ee4: JUMPDEST
[codex:1502981] 0ee5: POP
[codex:1502981] 0ee6: GAS
[codex:1502981] 0ee7: CALL
[codex:1502981] 0ee8: ISZERO
[codex:1502981] 0ee9: DUP1
[codex:1502981] 0eea: ISZERO
[codex:1502981] 0eeb: PUSH2 0x0ef8
[codex:1502981] 0eee: JUMPI
[codex:1502981] 0eef: RETURNDATASIZE
[codex:1502981] 0ef0: PUSH1 0x00
[codex:1502981] 0ef2: DUP1
[codex:1502981] 0ef3: RETURNDATACOPY
[codex:1502981] 0ef4: RETURNDATASIZE
[codex:1502981] 0ef5: PUSH1 0x00
[codex:1502981] 0ef7: REVERT
[codex:1502981] 0ef8: JUMPDEST
[codex:1502981]
[codex:1502981] thinking
[codex:1502981] **Inspecting jump destination and target**
[codex:1502981] exec
[codex:1502981] /bin/bash -lc "python - <<'PY'
[codex:1502981] import re
[codex:1502981] path='/tmp/codex-multi-7cwnzsf_/BYTECODE_BUNDLE.txt'
[codex:1502981] with open(path) as f:
[codex:1502981] data=f.read()
[codex:1502981] import re
[codex:1502981] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)', data)
[codex:1502981] hexstr=m.group(1)
[codex:1502981] bytecode=bytes.fromhex(hexstr)
[codex:1502981] # opcode map
[codex:1502981] opcodes={
[codex:1502981] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1502981] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1502981] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1502981] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1502981] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1502981] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1502981] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1502981] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1502981] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1502981] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1502981] }
[codex:1502981]
[codex:1502981] res=[]
[codex:1502981] idx=0
[codex:1502981] while idx<len(bytecode):
[codex:1502981] op=bytecode[idx]
[codex:1502981] name=opcodes.get(op, f'OP_{op:02x}')
[codex:1502981] start=idx
[codex:1502981] idx+=1
[codex:1502981] if 0x60<=op<=0x7f:
[codex:1502981] n=op-0x5f
[codex:1502981] data=bytecode[idx:idx+n]
[codex:1502981] idx+=n
[codex:1502981] res.append((start, f'{name} 0x{data.hex()}'))
[codex:1502981] else:
[codex:1502981] res.append((start, name))
[codex:1502981]
[codex:1502981] lo=0x03c0; hi=0x0430
[codex:1502981] for p,ins in res:
[codex:1502981] if lo<=p<=hi:
[codex:1502981] print(f'{p:04x}: {ins}')
[codex:1502981] PY" in /tmp/codex-multi-7cwnzsf_ succeeded in 31ms:
[codex:1502981] 03c0: PUSH2 0x03c9
[codex:1502981] 03c3: SWAP2
[codex:1502981] 03c4: SWAP1
[codex:1502981] 03c5: PUSH2 0x2609
[codex:1502981] 03c8: JUMP
[codex:1502981] 03c9: JUMPDEST
[codex:1502981] 03ca: PUSH1 0x40
[codex:1502981] 03cc: MLOAD
[codex:1502981] 03cd: DUP1
[codex:1502981] 03ce: SWAP2
[codex:1502981] 03cf: SUB
[codex:1502981] 03d0: SWAP1
[codex:1502981] 03d1: RETURN
[codex:1502981] 03d2: JUMPDEST
[codex:1502981] 03d3: CALLVALUE
[codex:1502981] 03d4: DUP1
[codex:1502981] 03d5: ISZERO
[codex:1502981] 03d6: PUSH2 0x03de
[codex:1502981] 03d9: JUMPI
[codex:1502981] 03da: PUSH1 0x00
[codex:1502981]
[codex:1502981] thinking
[codex:1502981] **Examining authorization codes**
[codex:1502981] exec
[codex:1502981] /bin/bash -lc "python - <<'PY'
[codex:1502981] import re
[codex:1502981] path='/tmp/codex-multi-7cwnzsf_/BYTECODE_BUNDLE.txt'
[codex:1502981] with open(path) as f:
[codex:1502981] data=f.read()
[codex:1502981] import re
[codex:1502981] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)', data)
[codex:1502981] hexstr=m.group(1)
[codex:1502981] bytecode=bytes.fromhex(hexstr)
[codex:1502981] # opcode map
[codex:1502981] opcodes={
[codex:1502981] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1502981] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1502981] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1502981] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1502981] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1502981] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1502981] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1502981] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1502981] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1502981] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1502981] }
[codex:1502981]
[codex:1502981] res=[]
[codex:1502981] idx=0
[codex:1502981] while idx<len(bytecode):
[codex:1502981] op=bytecode[idx]
[codex:1502981] name=opcodes.get(op, f'OP_{op:02x}')
[codex:1502981] start=idx
[codex:1502981] idx+=1
[codex:1502981] if 0x60<=op<=0x7f:
[codex:1502981] n=op-0x5f
[codex:1502981] data=bytecode[idx:idx+n]
[codex:1502981] idx+=n
[codex:1502981] res.append((start, f'{name} 0x{data.hex()}'))
[codex:1502981] else:
[codex:1502981] res.append((start, name))
[codex:1502981]
[codex:1502981] lo=0x0400; hi=0x04b0
[codex:1502981] for p,ins in res:
[codex:1502981] if lo<=p<=hi:
[codex:1502981] print(f'{p:04x}: {ins}')
[codex:1502981] PY" in /tmp/codex-multi-7cwnzsf_ succeeded in 31ms:
[codex:1502981] 040b: CALLER
[codex:1502981] 040c: EQ
[codex:1502981] 040d: DUP1
[codex:1502981] 040e: PUSH2 0x042a
[codex:1502981] 0411: JUMPI
[codex:1502981] 0412: POP
[codex:1502981] 0413: PUSH20 0x2f5abb45c283a7e6661c205d38215b10ee6fb064
[codex:1502981] 0428: CALLER
[codex:1502981] 0429: EQ
[codex:1502981] 042a: JUMPDEST
[codex:1502981] 042b: DUP1
[codex:1502981] 042c: PUSH2 0x0448
[codex:1502981] 042f: JUMPI
[codex:1502981] 0430: POP
[codex:1502981] 0431: PUSH20 0xc5798cd00276dbfdcd85bc751f5edace052e5cdd
[codex:1502981] 0446: CALLER
[codex:1502981] 0447: EQ
[codex:1502981] 0448: JUMPDEST
[codex:1502981] 0449: DUP1
[codex:1502981] 044a: PUSH2 0x0466
[codex:1502981]
[codex:1502981] thinking
[codex:1502981] **Analyzing access control flow**
[codex:1502981] exec
[codex:1502981] /bin/bash -lc "python - <<'PY'
[codex:1502981] import re
[codex:1502981] path='/tmp/codex-multi-7cwnzsf_/BYTECODE_BUNDLE.txt'
[codex:1502981] with open(path) as f:
[codex:1502981] data=f.read()
[codex:1502981] import re
[codex:1502981] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)', data)
[codex:1502981] hexstr=m.group(1)
[codex:1502981] bytecode=bytes.fromhex(hexstr)
[codex:1502981] # opcode map
[codex:1502981] opcodes={
[codex:1502981] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1502981] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1502981] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1502981] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1502981] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1502981] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1502981] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1502981] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1502981] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1502981] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1502981] }
[codex:1502981]
[codex:1502981] res=[]
[codex:1502981] idx=0
[codex:1502981] while idx<len(bytecode):
[codex:1502981] op=bytecode[idx]
[codex:1502981] name=opcodes.get(op, f'OP_{op:02x}')
[codex:1502981] start=idx
[codex:1502981] idx+=1
[codex:1502981] if 0x60<=op<=0x7f:
[codex:1502981] n=op-0x5f
[codex:1502981] data=bytecode[idx:idx+n]
[codex:1502981] idx+=n
[codex:1502981] res.append((start, f'{name} 0x{data.hex()}'))
[codex:1502981] else:
[codex:1502981] res.append((start, name))
[codex:1502981]
[codex:1502981] lo=0x13b0; hi=0x1400
[codex:1502981] for p,ins in res:
[codex:1502981] if lo<=p<=hi:
[codex:1502981] print(f'{p:04x}: {ins}')
[codex:1502981] PY" in /tmp/codex-multi-7cwnzsf_ succeeded in 35ms:
[codex:1502981] 13b1: PUSH1 0xe5
[codex:1502981] 13b3: SHL
[codex:1502981] 13b4: DUP2
[codex:1502981] 13b5: MSTORE
[codex:1502981] 13b6: PUSH1 0x04
[codex:1502981] 13b8: ADD
[codex:1502981] 13b9: PUSH2 0x01d2
[codex:1502981] 13bc: SWAP2
[codex:1502981] 13bd: SWAP1
[codex:1502981] 13be: PUSH2 0x2609
[codex:1502981] 13c1: JUMP
[codex:1502981] 13c2: JUMPDEST
[codex:1502981] 13c3: SWAP7
[codex:1502981] 13c4: SWAP6
[codex:1502981] 13c5: POP
[codex:1502981] 13c6: POP
[codex:1502981] 13c7: POP
[codex:1502981] 13c8: POP
[codex:1502981] 13c9: POP
[codex:1502981] 13ca: POP
[codex:1502981]
[codex:1502981] thinking
[codex:1502981] **Analyzing jump and authorization flow**
[codex:1502981] exec
[codex:1502981] /bin/bash -lc "python - <<'PY'
[codex:1502981] import re
[codex:1502981] path='/tmp/codex-multi-7cwnzsf_/BYTECODE_BUNDLE.txt'
[codex:1502981] with open(path) as f:
[codex:1502981] data=f.read()
[codex:1502981] import re
[codex:1502981] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)', data)
[codex:1502981] hexstr=m.group(1)
[codex:1502981] bytecode=bytes.fromhex(hexstr)
[codex:1502981] # opcode map
[codex:1502981] opcodes={
[codex:1502981] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1502981] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1502981] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1502981] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1502981] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1502981] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1502981] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1502981] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1502981] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1502981] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1502981] }
[codex:1502981]
[codex:1502981] res=[]
[codex:1502981] idx=0
[codex:1502981] while idx<len(bytecode):
[codex:1502981] op=bytecode[idx]
[codex:1502981] name=opcodes.get(op, f'OP_{op:02x}')
[codex:1502981] start=idx
[codex:1502981] idx+=1
[codex:1502981] if 0x60<=op<=0x7f:
[codex:1502981] n=op-0x5f
[codex:1502981] data=bytecode[idx:idx+n]
[codex:1502981] idx+=n
[codex:1502981] res.append((start, f'{name} 0x{data.hex()}'))
[codex:1502981] else:
[codex:1502981] res.append((start, name))
[codex:1502981]
[codex:1502981] lo=0x1460; hi=0x1495
[codex:1502981] for p,ins in res:
[codex:1502981] if lo<=p<=hi:
[codex:1502981] print(f'{p:04x}: {ins}')
[codex:1502981] PY" in /tmp/codex-multi-7cwnzsf_ succeeded in 30ms:
[codex:1502981] 1461: JUMP
[codex:1502981] 1462: JUMPDEST
[codex:1502981] 1463: PUSH1 0x20
[codex:1502981] 1465: SWAP1
[codex:1502981] 1466: DUP2
[codex:1502981] 1467: MUL
[codex:1502981] 1468: SWAP2
[codex:1502981] 1469: SWAP1
[codex:1502981] 146a: SWAP2
[codex:1502981] 146b: ADD
[codex:1502981] 146c: ADD
[codex:1502981] 146d: MSTORE
[codex:1502981] 146e: PUSH1 0x01
[codex:1502981] 1470: ADD
[codex:1502981] 1471: PUSH2 0x140f
[codex:1502981] 1474: JUMP
[codex:1502981] 1475: JUMPDEST
[codex:1502981] 1476: POP
[codex:1502981] 1477: JUMP
[codex:1502981] 1478: JUMPDEST
[codex:1502981]
[codex:1502981] thinking
[codex:1502981] **Analyzing EVM call flow and delegatecall setup**
[codex:1502981]
[codex:1502981] I'm examining the EVM bytecode's internal function call pattern, especially how return addresses and jumps work in the access control flow. I'm carefully tracing how the delegatecall target address is set up, suspecting it's passed on the stack rather than loaded from storage, and exploring the function selector dispatch to understand how calldata is decoded to enable controlled delegatecalls. This detailed symbolic stack analysis will help clarify the contract's delegatecall mechanism and access restrictions.
[codex:1502981] exec
[codex:1502981] /bin/bash -lc "python - <<'PY'
[codex:1502981] import re
[codex:1502981] path='/tmp/codex-multi-7cwnzsf_/BYTECODE_BUNDLE.txt'
[codex:1502981] with open(path) as f:
[codex:1502981] data=f.read()
[codex:1502981] import re
[codex:1502981] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)', data)
[codex:1502981] hexstr=m.group(1)
[codex:1502981] bytecode=bytes.fromhex(hexstr)
[codex:1502981] # opcode map
[codex:1502981] opcodes={
[codex:1502981] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1502981] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1502981] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1502981] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1502981] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1502981] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1502981] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1502981] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1502981] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1502981] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1502981] }
[codex:1502981]
[codex:1502981] res=[]
[codex:1502981] idx=0
[codex:1502981] while idx<len(bytecode):
[codex:1502981] op=bytecode[idx]
[codex:1502981] name=opcodes.get(op, f'OP_{op:02x}')
[codex:1502981] start=idx
[codex:1502981] idx+=1
[codex:1502981] if 0x60<=op<=0x7f:
[codex:1502981] n=op-0x5f
[codex:1502981] data=bytecode[idx:idx+n]
[codex:1502981] idx+=n
[codex:1502981] res.append((start, f'{name} 0x{data.hex()}'))
[codex:1502981] else:
[codex:1502981] res.append((start, name))
[codex:1502981]
[codex:1502981] lo=0x0100; hi=0x0130
[codex:1502981] for p,ins in res:
[codex:1502981] if lo<=p<=hi:
[codex:1502981] print(f'{p:04x}: {ins}')
[codex:1502981] PY" in /tmp/codex-multi-7cwnzsf_ succeeded in 35ms:
[codex:1502981] 0100: PUSH1 0x00
[codex:1502981] 0102: DUP1
[codex:1502981] 0103: REVERT
[codex:1502981] 0104: JUMPDEST
[codex:1502981] 0105: POP
[codex:1502981] 0106: GAS
[codex:1502981] 0107: CALL
[codex:1502981] 0108: ISZERO
[codex:1502981] 0109: DUP1
[codex:1502981] 010a: ISZERO
[codex:1502981] 010b: PUSH2 0x0118
[codex:1502981] 010e: JUMPI
[codex:1502981] 010f: RETURNDATASIZE
[codex:1502981] 0110: PUSH1 0x00
[codex:1502981] 0112: DUP1
[codex:1502981] 0113: RETURNDATACOPY
[codex:1502981] 0114: RETURNDATASIZE
[codex:1502981] 0115: PUSH1 0x00
[codex:1502981] 0117: REVERT
[codex:1502981] 0118: JUMPDEST
[codex:1502981]
[codex:1502981] thinking
[codex:1502981] **Analyzing delegatecall control flow**
[codex:1502981] exec
[codex:1502981] /bin/bash -lc "python - <<'PY'
[codex:1502981] import re
[codex:1502981] path='/tmp/codex-multi-7cwnzsf_/BYTECODE_BUNDLE.txt'
[codex:1502981] with open(path) as f:
[codex:1502981] data=f.read()
[codex:1502981] import re
[codex:1502981] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)', data)
[codex:1502981] hexstr=m.group(1)
[codex:1502981] bytecode=bytes.fromhex(hexstr)
[codex:1502981] # opcode map
[codex:1502981] opcodes={
[codex:1502981] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1502981] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1502981] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1502981] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1502981] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1502981] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1502981] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1502981] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1502981] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1502981] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1502981] }
[codex:1502981]
[codex:1502981] res=[]
[codex:1502981] idx=0
[codex:1502981] while idx<len(bytecode):
[codex:1502981] op=bytecode[idx]
[codex:1502981] name=opcodes.get(op, f'OP_{op:02x}')
[codex:1502981] start=idx
[codex:1502981] idx+=1
[codex:1502981] if 0x60<=op<=0x7f:
[codex:1502981] n=op-0x5f
[codex:1502981] data=bytecode[idx:idx+n]
[codex:1502981] idx+=n
[codex:1502981] res.append((start, f'{name} 0x{data.hex()}'))
[codex:1502981] else:
[codex:1502981] res.append((start, name))
[codex:1502981]
[codex:1502981] lo=0x2440; hi=0x24b5
[codex:1502981] for p,ins in res:
[codex:1502981] if lo<=p<=hi:
[codex:1502981] print(f'{p:04x}: {ins}')
[codex:1502981] PY" in /tmp/codex-multi-7cwnzsf_ succeeded in 31ms:
[codex:1502981] 2440: DUP6
[codex:1502981] 2441: ADD
[codex:1502981] 2442: CALLDATALOAD
[codex:1502981] 2443: PUSH8 0xffffffffffffffff
[codex:1502981] 244c: DUP2
[codex:1502981] 244d: GT
[codex:1502981] 244e: ISZERO
[codex:1502981] 244f: PUSH2 0x2457
[codex:1502981] 2452: JUMPI
[codex:1502981] 2453: PUSH1 0x00
[codex:1502981] 2455: DUP1
[codex:1502981] 2456: REVERT
[codex:1502981] 2457: JUMPDEST
[codex:1502981] 2458: PUSH2 0x2463
[codex:1502981] 245b: DUP8
[codex:1502981] 245c: DUP3
[codex:1502981] 245d: DUP9
[codex:1502981] 245e: ADD
[codex:1502981] 245f: PUSH2 0x2355
[codex:1502981] 2462: JUMP
[codex:1502981]
[codex:1502981] thinking
[codex:1502981] **Analyzing byte decoder behavior**
[codex:1502981] exec
[codex:1502981] /bin/bash -lc "python - <<'PY'
[codex:1502981] import re
[codex:1502981] path='/tmp/codex-multi-7cwnzsf_/BYTECODE_BUNDLE.txt'
[codex:1502981] with open(path) as f:
[codex:1502981] data=f.read()
[codex:1502981] import re
[codex:1502981] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)', data)
[codex:1502981] hexstr=m.group(1)
[codex:1502981] bytecode=bytes.fromhex(hexstr)
[codex:1502981] # opcode map
[codex:1502981] opcodes={
[codex:1502981] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1502981] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1502981] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1502981] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1502981] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1502981] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1502981] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1502981] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1502981] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1502981] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1502981] }
[codex:1502981]
[codex:1502981] res=[]
[codex:1502981] idx=0
[codex:1502981] while idx<len(bytecode):
[codex:1502981] op=bytecode[idx]
[codex:1502981] name=opcodes.get(op, f'OP_{op:02x}')
[codex:1502981] start=idx
[codex:1502981] idx+=1
[codex:1502981] if 0x60<=op<=0x7f:
[codex:1502981] n=op-0x5f
[codex:1502981] data=bytecode[idx:idx+n]
[codex:1502981] idx+=n
[codex:1502981] res.append((start, f'{name} 0x{data.hex()}'))
[codex:1502981] else:
[codex:1502981] res.append((start, name))
[codex:1502981]
[codex:1502981] lo=0x2400; hi=0x2435
[codex:1502981] for p,ins in res:
[codex:1502981] if lo<=p<=hi:
[codex:1502981] print(f'{p:04x}: {ins}')
[codex:1502981] PY" in /tmp/codex-multi-7cwnzsf_ succeeded in 31ms:
[codex:1502981] 2400: POP
[codex:1502981] 2401: SWAP3
[codex:1502981] 2402: POP
[codex:1502981] 2403: PUSH2 0x2411
[codex:1502981] 2406: SWAP1
[codex:1502981] 2407: POP
[codex:1502981] 2408: DUP7
[codex:1502981] 2409: PUSH1 0x40
[codex:1502981] 240b: DUP8
[codex:1502981] 240c: ADD
[codex:1502981] 240d: PUSH2 0x239e
[codex:1502981] 2410: JUMP
[codex:1502981] 2411: JUMPDEST
[codex:1502981] 2412: SWAP1
[codex:1502981] 2413: POP
[codex:1502981] 2414: SWAP3
[codex:1502981] 2415: SWAP6
[codex:1502981] 2416: SWAP2
[codex:1502981] 2417: SWAP5
[codex:1502981] 2418: POP
[codex:1502981]
[codex:1502981] thinking
[codex:1502981] **Analyzing disassembly for vulnerabilities**
[codex:1502981] exec
[codex:1502981] /bin/bash -lc "python - <<'PY'
[codex:1502981] import re
[codex:1502981] from collections import defaultdict
[codex:1502981] path='/tmp/codex-multi-7cwnzsf_/BYTECODE_BUNDLE.txt'
[codex:1502981] with open(path) as f:
[codex:1502981] data=f.read()
[codex:1502981] import re
[codex:1502981] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)', data)
[codex:1502981] hexstr=m.group(1)
[codex:1502981] bytecode=bytes.fromhex(hexstr)
[codex:1502981]
[codex:1502981] opcodes={
[codex:1502981] 0x32:'ORIGIN',0x33:'CALLER',0xf4:'DELEGATECALL',0xff:'SELFDESTRUCT'
[codex:1502981] }
[codex:1502981]
[codex:1502981] idx=0
[codex:1502981] positions=defaultdict(list)
[codex:1502981] while idx<len(bytecode):
[codex:1502981] op=bytecode[idx]
[codex:1502981] if op in opcodes:
[codex:1502981] positions[opcodes[op]].append(idx)
[codex:1502981] if 0x60<=op<=0x7f:
[codex:1502981] idx+=1+(op-0x5f)
[codex:1502981] else:
[codex:1502981] idx+=1
[codex:1502981]
[codex:1502981] print('ORIGIN positions', positions['ORIGIN'][:10])
[codex:1502981] print('SELFDESTRUCT positions', positions['SELFDESTRUCT'][:10])
[codex:1502981] print('DELEGATECALL positions', positions['DELEGATECALL'][:10])
[codex:1502981] PY" in /tmp/codex-multi-7cwnzsf_ succeeded in 32ms:
[codex:1502981] ORIGIN positions [8758, 8787, 8817, 8847, 8877]
[codex:1502981] SELFDESTRUCT positions [3089]
[codex:1502981] DELEGATECALL positions [3876]
[codex:1502981]
[codex:1502981] thinking
[codex:1502981] **Investigating SELFDESTRUCT instruction**
[codex:1502981] exec
[codex:1502981] /bin/bash -lc "python - <<'PY'
[codex:1502981] import re
[codex:1502981] path='/tmp/codex-multi-7cwnzsf_/BYTECODE_BUNDLE.txt'
[codex:1502981] with open(path) as f:
[codex:1502981] data=f.read()
[codex:1502981] import re
[codex:1502981] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)', data)
[codex:1502981] hexstr=m.group(1)
[codex:1502981] bytecode=bytes.fromhex(hexstr)
[codex:1502981] # opcode map
[codex:1502981] opcodes={
[codex:1502981] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1502981] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1502981] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1502981] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1502981] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1502981] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1502981] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1502981] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1502981] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1502981] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1502981] }
[codex:1502981]
[codex:1502981] res=[]
[codex:1502981] idx=0
[codex:1502981] while idx<len(bytecode):
[codex:1502981] op=bytecode[idx]
[codex:1502981] name=opcodes.get(op, f'OP_{op:02x}')
[codex:1502981] start=idx
[codex:1502981] idx+=1
[codex:1502981] if 0x60<=op<=0x7f:
[codex:1502981] n=op-0x5f
[codex:1502981] data=bytecode[idx:idx+n]
[codex:1502981] idx+=n
[codex:1502981] res.append((start, f'{name} 0x{data.hex()}'))
[codex:1502981] else:
[codex:1502981] res.append((start, name))
[codex:1502981]
[codex:1502981] lo=0x0bf0; hi=0x0c30
[codex:1502981] for p,ins in res:
[codex:1502981] if lo<=p<=hi:
[codex:1502981] print(f'{p:04x}: {ins}')
[codex:1502981] PY" in /tmp/codex-multi-7cwnzsf_ succeeded in 32ms:
[codex:1502981] 0bf0: DUP3
[codex:1502981] 0bf1: ADD
[codex:1502981] 0bf2: MSTORE
[codex:1502981] 0bf3: PUSH1 0x03
[codex:1502981] 0bf5: PUSH1 0x24
[codex:1502981] 0bf7: DUP3
[codex:1502981] 0bf8: ADD
[codex:1502981] 0bf9: MSTORE
[codex:1502981] 0bfa: PUSH3 0x524f59
[codex:1502981] 0bfe: PUSH1 0xe8
[codex:1502981] 0c00: SHL
[codex:1502981] 0c01: PUSH1 0x44
[codex:1502981] 0c03: DUP3
[codex:1502981] 0c04: ADD
[codex:1502981] 0c05: MSTORE
[codex:1502981] 0c06: PUSH1 0x64
[codex:1502981] 0c08: ADD
[codex:1502981] 0c09: PUSH2 0x01d2
[codex:1502981] 0c0c: JUMP
[codex:1502981] 0c0d: JUMPDEST
[codex:1502981]
[codex:1502981] thinking
[codex:1502981] **Analyzing SELFDESTRUCT context and control flow**
[codex:1502981] exec
[codex:1502981] /bin/bash -lc "python - <<'PY'
[codex:1502981] import re
[codex:1502981] path='/tmp/codex-multi-7cwnzsf_/BYTECODE_BUNDLE.txt'
[codex:1502981] with open(path) as f:
[codex:1502981] data=f.read()
[codex:1502981] import re
[codex:1502981] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)', data)
[codex:1502981] hexstr=m.group(1)
[codex:1502981] bytecode=bytes.fromhex(hexstr)
[codex:1502981] # opcode map
[codex:1502981] opcodes={
[codex:1502981] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1502981] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1502981] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1502981] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1502981] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1502981] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1502981] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1502981] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1502981] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1502981] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1502981] }
[codex:1502981]
[codex:1502981] res=[]
[codex:1502981] idx=0
[codex:1502981] while idx<len(bytecode):
[codex:1502981] op=bytecode[idx]
[codex:1502981] name=opcodes.get(op, f'OP_{op:02x}')
[codex:1502981] start=idx
[codex:1502981] idx+=1
[codex:1502981] if 0x60<=op<=0x7f:
[codex:1502981] n=op-0x5f
[codex:1502981] data=bytecode[idx:idx+n]
[codex:1502981] idx+=n
[codex:1502981] res.append((start, f'{name} 0x{data.hex()}'))
[codex:1502981] else:
[codex:1502981] res.append((start, name))
[codex:1502981]
[codex:1502981] lo=0x0a80; hi=0x0c20
[codex:1502981] for p,ins in res:
[codex:1502981] if lo<=p<=hi:
[codex:1502981] print(f'{p:04x}: {ins}')
[codex:1502981] PY" in /tmp/codex-multi-7cwnzsf_ succeeded in 30ms:
[codex:1502981] 0a80: PUSH1 0x04
[codex:1502981] 0a82: DUP3
[codex:1502981] 0a83: ADD
[codex:1502981] 0a84: MSTORE
[codex:1502981] 0a85: PUSH1 0x03
[codex:1502981] 0a87: PUSH1 0x24
[codex:1502981] 0a89: DUP3
[codex:1502981] 0a8a: ADD
[codex:1502981] 0a8b: MSTORE
[codex:1502981] 0a8c: PUSH3 0x15150d
[codex:1502981] 0a90: PUSH1 0xea
[codex:1502981] 0a92: SHL
[codex:1502981] 0a93: PUSH1 0x44
[codex:1502981] 0a95: DUP3
[codex:1502981] 0a96: ADD
[codex:1502981] 0a97: MSTORE
[codex:1502981] 0a98: PUSH1 0x64
[codex:1502981] 0a9a: ADD
[codex:1502981] 0a9b: PUSH2 0x01d2
[codex:1502981] 0a9e: JUMP
[codex:1502981]
[codex:1502981] thinking
[codex:1502981] **Analyzing selfdestruct gated by access control**
[codex:1502981] exec
[codex:1502981] /bin/bash -lc "python - <<'PY'
[codex:1502981] import re
[codex:1502981] path='/tmp/codex-multi-7cwnzsf_/BYTECODE_BUNDLE.txt'
[codex:1502981] with open(path) as f:
[codex:1502981] data=f.read()
[codex:1502981] import re
[codex:1502981] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)', data)
[codex:1502981] hexstr=m.group(1)
[codex:1502981] bytecode=bytes.fromhex(hexstr)
[codex:1502981] # opcode map
[codex:1502981] opcodes={
[codex:1502981] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1502981] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1502981] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1502981] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1502981] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1502981] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1502981] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1502981] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1502981] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1502981] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1502981] }
[codex:1502981]
[codex:1502981] res=[]
[codex:1502981] idx=0
[codex:1502981] while idx<len(bytecode):
[codex:1502981] op=bytecode[idx]
[codex:1502981] name=opcodes.get(op, f'OP_{op:02x}')
[codex:1502981] start=idx
[codex:1502981] idx+=1
[codex:1502981] if 0x60<=op<=0x7f:
[codex:1502981] n=op-0x5f
[codex:1502981] data=bytecode[idx:idx+n]
[codex:1502981] idx+=n
[codex:1502981] res.append((start, f'{name} 0x{data.hex()}'))
[codex:1502981] else:
[codex:1502981] res.append((start, name))
[codex:1502981]
[codex:1502981] lo=0x2220; hi=0x2260
[codex:1502981] for p,ins in res:
[codex:1502981] if lo<=p<=hi:
[codex:1502981] print(f'{p:04x}: {ins}')
[codex:1502981] PY" in /tmp/codex-multi-7cwnzsf_ succeeded in 38ms:
[codex:1502981] 2220: JUMPDEST
[codex:1502981] 2221: PUSH20 0xd8349e874934593c85eafa8e534b495d80848e41
[codex:1502981] 2236: ORIGIN
[codex:1502981] 2237: EQ
[codex:1502981] 2238: DUP1
[codex:1502981] 2239: PUSH2 0x2255
[codex:1502981] 223c: JUMPI
[codex:1502981] 223d: POP
[codex:1502981] 223e: PUSH20 0x2f5abb45c283a7e6661c205d38215b10ee6fb064
[codex:1502981] 2253: ORIGIN
[codex:1502981] 2254: EQ
[codex:1502981] 2255: JUMPDEST
[codex:1502981] 2256: DUP1
[codex:1502981] 2257: PUSH2 0x2273
[codex:1502981] 225a: JUMPI
[codex:1502981] 225b: POP
[codex:1502981] 225c: PUSH20 0xc5798cd00276dbfdcd85bc751f5edace052e5cdd
[codex:1502981]
[codex:1502981] thinking
[codex:1502981] **Analyzing ORIGIN usage for security**
[codex:1502981] exec
[codex:1502981] /bin/bash -lc "python - <<'PY'
[codex:1502981] import re
[codex:1502981] path='/tmp/codex-multi-7cwnzsf_/BYTECODE_BUNDLE.txt'
[codex:1502981] with open(path) as f:
[codex:1502981] data=f.read()
[codex:1502981] import re
[codex:1502981] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)', data)
[codex:1502981] hexstr=m.group(1)
[codex:1502981] bytecode=bytes.fromhex(hexstr)
[codex:1502981] # opcode map
[codex:1502981] opcodes={
[codex:1502981] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1502981] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1502981] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1502981] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1502981] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1502981] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1502981] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1502981] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1502981] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1502981] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1502981] }
[codex:1502981]
[codex:1502981] res=[]
[codex:1502981] idx=0
[codex:1502981] while idx<len(bytecode):
[codex:1502981] op=bytecode[idx]
[codex:1502981] name=opcodes.get(op, f'OP_{op:02x}')
[codex:1502981] start=idx
[codex:1502981] idx+=1
[codex:1502981] if 0x60<=op<=0x7f:
[codex:1502981] n=op-0x5f
[codex:1502981] data=bytecode[idx:idx+n]
[codex:1502981] idx+=n
[codex:1502981] res.append((start, f'{name} 0x{data.hex()}'))
[codex:1502981] else:
[codex:1502981] res.append((start, name))
[codex:1502981]
[codex:1502981] lo=0x2260; hi=0x22c5
[codex:1502981] for p,ins in res:
[codex:1502981] if lo<=p<=hi:
[codex:1502981] print(f'{p:04x}: {ins}')
[codex:1502981] PY" in /tmp/codex-multi-7cwnzsf_ succeeded in 31ms:
[codex:1502981] 2271: ORIGIN
[codex:1502981] 2272: EQ
[codex:1502981] 2273: JUMPDEST
[codex:1502981] 2274: DUP1
[codex:1502981] 2275: PUSH2 0x2291
[codex:1502981] 2278: JUMPI
[codex:1502981] 2279: POP
[codex:1502981] 227a: PUSH20 0xe00456d3af6e9b8715a9c29c88c1932983e064c1
[codex:1502981] 228f: ORIGIN
[codex:1502981] 2290: EQ
[codex:1502981] 2291: JUMPDEST
[codex:1502981] 2292: DUP1
[codex:1502981] 2293: PUSH2 0x22af
[codex:1502981] 2296: JUMPI
[codex:1502981] 2297: POP
[codex:1502981] 2298: PUSH20 0x71889d0c1101dc57045d08962e1a5c2466629112
[codex:1502981] 22ad: ORIGIN
[codex:1502981] 22ae: EQ
[codex:1502981] 22af: JUMPDEST
[codex:1502981] 22b0: PUSH2 0x0489
[codex:1502981]
[codex:1502981] thinking
[codex:1502981] **Analyzing access control and delegatecall patterns**
[codex:1502981]
[codex:1502981] I'm examining how the contract uses `tx.origin` for access control, noting its security risks due to phishing potential, especially if admin EOAs are tricked. I’m also looking into selfdestruct and delegatecall functions restricted by a whitelist, recognizing these as centralization concerns and possible backdoors. To understand delegatecall’s target sourcing, I’m decoding function entries and calldata patterns to confirm parameters and control flow. This detailed investigation will clarify how access control and upgradeability risks manifest here.
[codex:1502981] exec
[codex:1502981] /bin/bash -lc "python - <<'PY'
[codex:1502981] import re
[codex:1502981] path='/tmp/codex-multi-7cwnzsf_/BYTECODE_BUNDLE.txt'
[codex:1502981] with open(path) as f:
[codex:1502981] data=f.read()
[codex:1502981] import re
[codex:1502981] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)', data)
[codex:1502981] hexstr=m.group(1)
[codex:1502981] bytecode=bytes.fromhex(hexstr)
[codex:1502981] # opcode map
[codex:1502981] opcodes={
[codex:1502981] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1502981] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1502981] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1502981] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1502981] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1502981] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1502981] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1502981] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1502981] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1502981] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1502981] }
[codex:1502981]
[codex:1502981] res=[]
[codex:1502981] idx=0
[codex:1502981] while idx<len(bytecode):
[codex:1502981] op=bytecode[idx]
[codex:1502981] name=opcodes.get(op, f'OP_{op:02x}')
[codex:1502981] start=idx
[codex:1502981] idx+=1
[codex:1502981] if 0x60<=op<=0x7f:
[codex:1502981] n=op-0x5f
[codex:1502981] data=bytecode[idx:idx+n]
[codex:1502981] idx+=n
[codex:1502981] res.append((start, f'{name} 0x{data.hex()}'))
[codex:1502981] else:
[codex:1502981] res.append((start, name))
[codex:1502981]
[codex:1502981] lo=0x0340; hi=0x0375
[codex:1502981] for p,ins in res:
[codex:1502981] if lo<=p<=hi:
[codex:1502981] print(f'{p:04x}: {ins}')
[codex:1502981] PY" in /tmp/codex-multi-7cwnzsf_ succeeded in 40ms:
[codex:1502981] 0342: JUMP
[codex:1502981] 0343: JUMPDEST
[codex:1502981] 0344: PUSH2 0x0d3c
[codex:1502981] 0347: JUMP
[codex:1502981] 0348: JUMPDEST
[codex:1502981] 0349: PUSH2 0x011e
[codex:1502981] 034c: PUSH2 0x0356
[codex:1502981] 034f: CALLDATASIZE
[codex:1502981] 0350: PUSH1 0x04
[codex:1502981] 0352: PUSH2 0x23b6
[codex:1502981] 0355: JUMP
[codex:1502981] 0356: JUMPDEST
[codex:1502981] 0357: PUSH2 0x0d4a
[codex:1502981] 035a: JUMP
[codex:1502981] 035b: JUMPDEST
[codex:1502981] 035c: PUSH2 0x011e
[codex:1502981] 035f: PUSH2 0x0369
[codex:1502981] 0362: CALLDATASIZE
[codex:1502981] 0363: PUSH1 0x04
[codex:1502981] 0365: PUSH2 0x246f
[codex:1502981]
[codex:1502981] thinking
[codex:1502981] **Analyzing function argument decoding**
[codex:1502981] exec
[codex:1502981] /bin/bash -lc "python - <<'PY'
[codex:1502981] import re
[codex:1502981] path='/tmp/codex-multi-7cwnzsf_/BYTECODE_BUNDLE.txt'
[codex:1502981] with open(path) as f:
[codex:1502981] data=f.read()
[codex:1502981] import re
[codex:1502981] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)', data)
[codex:1502981] hexstr=m.group(1)
[codex:1502981] bytecode=bytes.fromhex(hexstr)
[codex:1502981] # opcode map
[codex:1502981] opcodes={
[codex:1502981] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1502981] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1502981] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1502981] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1502981] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1502981] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1502981] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1502981] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1502981] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1502981] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1502981] }
[codex:1502981]
[codex:1502981] res=[]
[codex:1502981] idx=0
[codex:1502981] while idx<len(bytecode):
[codex:1502981] op=bytecode[idx]
[codex:1502981] name=opcodes.get(op, f'OP_{op:02x}')
[codex:1502981] start=idx
[codex:1502981] idx+=1
[codex:1502981] if 0x60<=op<=0x7f:
[codex:1502981] n=op-0x5f
[codex:1502981] data=bytecode[idx:idx+n]
[codex:1502981] idx+=n
[codex:1502981] res.append((start, f'{name} 0x{data.hex()}'))
[codex:1502981] else:
[codex:1502981] res.append((start, name))
[codex:1502981]
[codex:1502981] lo=0x24b0; hi=0x2530
[codex:1502981] for p,ins in res:
[codex:1502981] if lo<=p<=hi:
[codex:1502981] print(f'{p:04x}: {ins}')
[codex:1502981] PY" in /tmp/codex-multi-7cwnzsf_ succeeded in 43ms:
[codex:1502981] 24b0: PUSH1 0x00
[codex:1502981] 24b2: DUP1
[codex:1502981] 24b3: REVERT
[codex:1502981] 24b4: JUMPDEST
[codex:1502981] 24b5: PUSH2 0x24be
[codex:1502981] 24b8: DUP8
[codex:1502981] 24b9: DUP8
[codex:1502981] 24ba: PUSH2 0x248a
[codex:1502981] 24bd: JUMP
[codex:1502981] 24be: JUMPDEST
[codex:1502981] 24bf: SWAP5
[codex:1502981] 24c0: POP
[codex:1502981] 24c1: PUSH1 0x60
[codex:1502981] 24c3: DUP7
[codex:1502981] 24c4: ADD
[codex:1502981] 24c5: CALLDATALOAD
[codex:1502981] 24c6: PUSH8 0xffffffffffffffff
[codex:1502981] 24cf: DUP2
[codex:1502981] 24d0: GT
[codex:1502981] 24d1: ISZERO
[codex:1502981]
[codex:1502981] thinking
[codex:1502981] **Analyzing delegatecall, selfdestruct, and tx.origin patterns**
[codex:1502981]
[codex:1502981] I'm inspecting how the contract uses delegatecall with calldata-derived targets, noting that the delegatecall target likely comes from the stack and thus user input, which allows arbitrary code execution via whitelisted callers. I'll also map out the presence of SELFDESTRUCT guarded by access control and pinpoint the explicit tx.origin-based authentication. For evidence, I'll tie findings to exact lines and offsets in BYTECODE_BUNDLE.txt, especially line 5 where the runtime bytecode resides, to correlate opcodes with these security considerations.
[codex:1502981] exec
[codex:1502981] /bin/bash -lc "python - <<'PY'
[codex:1502981] import re
[codex:1502981] path='/tmp/codex-multi-7cwnzsf_/BYTECODE_BUNDLE.txt'
[codex:1502981] with open(path) as f:
[codex:1502981] data=f.read()
[codex:1502981] import re
[codex:1502981] m=re.search(r'runtime_bytecode\\.hex\\n0x([0-9a-fA-F]+)', data)
[codex:1502981] hexstr=m.group(1)
[codex:1502981] bytecode=bytes.fromhex(hexstr)
[codex:1502981] # opcode map
[codex:1502981] opcodes={
[codex:1502981] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:1502981] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1502981] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:1502981] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1502981] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
[codex:1502981] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1502981] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1502981] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1502981] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1502981] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1502981] }
[codex:1502981]
[codex:1502981] res=[]
[codex:1502981] idx=0
[codex:1502981] while idx<len(bytecode):
[codex:1502981] op=bytecode[idx]
[codex:1502981] name=opcodes.get(op, f'OP_{op:02x}')
[codex:1502981] start=idx
[codex:1502981] idx+=1
[codex:1502981] if 0x60<=op<=0x7f:
[codex:1502981] n=op-0x5f
[codex:1502981] data=bytecode[idx:idx+n]
[codex:1502981] idx+=n
[codex:1502981] res.append((start, f'{name} 0x{data.hex()}'))
[codex:1502981] else:
[codex:1502981] res.append((start, name))
[codex:1502981]
[codex:1502981] lo=0x1900; hi=0x1935
[codex:1502981] for p,ins in res:
[codex:1502981] if lo<=p<=hi:
[codex:1502981] print(f'{p:04x}: {ins}')
[codex:1502981] PY" in /tmp/codex-multi-7cwnzsf_ succeeded in 30ms:
[codex:1502981] 1900: SHL
[codex:1502981] 1901: PUSH1 0x44
[codex:1502981] 1903: DUP3
[codex:1502981] 1904: ADD
[codex:1502981] 1905: MSTORE
[codex:1502981] 1906: PUSH1 0x64
[codex:1502981] 1908: ADD
[codex:1502981] 1909: PUSH2 0x01d2
[codex:1502981] 190c: JUMP
[codex:1502981] 190d: JUMPDEST
[codex:1502981] 190e: POP
[codex:1502981] 190f: POP
[codex:1502981] 1910: POP
[codex:1502981] 1911: JUMP
[codex:1502981] 1912: JUMPDEST
[codex:1502981] 1913: PUSH2 0x191a
[codex:1502981] 1916: PUSH2 0x2220
[codex:1502981] 1919: JUMP
[codex:1502981] 191a: JUMPDEST
[codex:1502981] 191b: PUSH1 0x00
[codex:1502981]
[codex:1502981] thinking
[codex:1502981] **Summarizing bytecode security findings**
[codex:1502981]
[codex:1502981] I'll identify and explain three main issues supported by bytecode evidence: tx.origin-based authorization posing phishing risks; a privileged selfdestruct path letting whitelisted addresses destroy the contract and claim its ETH; and a delegatecall accessible to whitelisted callers allowing arbitrary code execution—essentially an upgradeability backdoor. I'll frame the findings per instructions with severity, categories, and locations in the bytecode bundle.
[codex:1502981] codex
[codex:1502981] {"no_findings":false,"summary":"Found a privileged selfdestruct path, a tx.origin-based authorization check, and an admin-gated delegatecall entry that enables arbitrary execution by whitelisted addresses.","findings":[{"severity":"high","category":"access_control","title":"Privileged selfdestruct sends balance to caller","exploit_scenario":"If any whitelisted address invokes the function path that reaches the zero-flag branch, the contract executes SELFDESTRUCT and transfers its ETH balance to the caller, permanently bricking the contract.","recommendation":"Remove SELFDESTRUCT or restrict it to a timelocked governance process; at minimum, require multi-step approvals and send funds to a safe treasury instead of msg.sender.","evidence":"Bytecode at offset 0x0c10 executes CALLER then SELFDESTRUCT. This path is reachable from the function at 0x0b01 which first runs the caller whitelist at 0x03f2 (CALLER compared against hard-coded addresses) before branching to 0x0c0f.","locations":["BYTECODE_BUNDLE.txt:5"]},{"severity":"medium","category":"auth","title":"Authorization uses tx.origin","exploit_scenario":"An attacker can deploy an intermediary contract and trick a whitelisted EOA into calling it; tx.origin remains the whitelisted address, bypassing the check and allowing privileged actions through the attacker-controlled contract.","recommendation":"Replace tx.origin with msg.sender and enforce explicit role-based access control.","evidence":"At offsets 0x2221–0x22af the code uses ORIGIN and compares it to hard-coded addresses, then jumps to privileged logic or reverts (JUMPI to 0x0489).","locations":["BYTECODE_BUNDLE.txt:5"]},{"severity":"high","category":"upgradeability","title":"Whitelisted delegatecall enables arbitrary code execution","exploit_scenario":"A whitelisted address can invoke the delegatecall entry point with a chosen target and calldata, executing external code in this contract’s context to modify storage or drain funds.","recommendation":"If not intended, remove the delegatecall entry point. If intended, restrict targets to audited implementations and add governance/timelocks for upgrades.","evidence":"The function at 0x035b decodes calldata (0x246f) and jumps to 0x0f08, which runs the whitelist at 0x03f2 and then executes DELEGATECALL at 0x0f24 after copying calldata. No constant target address is pushed in this stub, so the target is supplied via decoded arguments.","locations":["BYTECODE_BUNDLE.txt:5"]}]}
[codex:1502981] tokens used
[codex:1502981] 92,852
[codex:1502981] {"no_findings":false,"summary":"Found a privileged selfdestruct path, a tx.origin-based authorization check, and an admin-gated delegatecall entry that enables arbitrary execution by whitelisted addresses.","findings":[{"severity":"high","category":"access_control","title":"Privileged selfdestruct sends balance to caller","exploit_scenario":"If any whitelisted address invokes the function path that reaches the zero-flag branch, the contract executes SELFDESTRUCT and transfers its ETH balance to the caller, permanently bricking the contract.","recommendation":"Remove SELFDESTRUCT or restrict it to a timelocked governance process; at minimum, require multi-step approvals and send funds to a safe treasury instead of msg.sender.","evidence":"Bytecode at offset 0x0c10 executes CALLER then SELFDESTRUCT. This path is reachable from the function at 0x0b01 which first runs the caller whitelist at 0x03f2 (CALLER compared against hard-coded addresses) before branching to 0x0c0f.","locations":["BYTECODE_BUNDLE.txt:5"]},{"severity":"medium","category":"auth","title":"Authorization uses tx.origin","exploit_scenario":"An attacker can deploy an intermediary contract and trick a whitelisted EOA into calling it; tx.origin remains the whitelisted address, bypassing the check and allowing privileged actions through the attacker-controlled contract.","recommendation":"Replace tx.origin with msg.sender and enforce explicit role-based access control.","evidence":"At offsets 0x2221–0x22af the code uses ORIGIN and compares it to hard-coded addresses, then jumps to privileged logic or reverts (JUMPI to 0x0489).","locations":["BYTECODE_BUNDLE.txt:5"]},{"severity":"high","category":"upgradeability","title":"Whitelisted delegatecall enables arbitrary code execution","exploit_scenario":"A whitelisted address can invoke the delegatecall entry point with a chosen target and calldata, executing external code in this contract’s context to modify storage or drain funds.","recommendation":"If not intended, remove the delegatecall entry point. If intended, restrict targets to audited implementations and add governance/timelocks for upgrades.","evidence":"The function at 0x035b decodes calldata (0x246f) and jumps to 0x0f08, which runs the whitelist at 0x03f2 and then executes DELEGATECALL at 0x0f24 after copying calldata. No constant target address is pushed in this stub, so the target is supplied via decoded arguments.","locations":["BYTECODE_BUNDLE.txt:5"]}]}
{
"codex": {
"ran_at": "2025-12-28T01:46:23.398951+00:00",
"returncode": 0
},
"summary": "Found a privileged selfdestruct path, a tx.origin-based authorization check, and an admin-gated delegatecall entry that enables arbitrary execution by whitelisted addresses.",
"raw_final": {
"summary": "Found a privileged selfdestruct path, a tx.origin-based authorization check, and an admin-gated delegatecall entry that enables arbitrary execution by whitelisted addresses.",
"findings": [
{
"title": "Privileged selfdestruct sends balance to caller",
"category": "access_control",
"evidence": "Bytecode at offset 0x0c10 executes CALLER then SELFDESTRUCT. This path is reachable from the function at 0x0b01 which first runs the caller whitelist at 0x03f2 (CALLER compared against hard-coded addresses) before branching to 0x0c0f.",
"severity": "high",
"locations": [
"BYTECODE_BUNDLE.txt:5"
],
"recommendation": "Remove SELFDESTRUCT or restrict it to a timelocked governance process; at minimum, require multi-step approvals and send funds to a safe treasury instead of msg.sender.",
"exploit_scenario": "If any whitelisted address invokes the function path that reaches the zero-flag branch, the contract executes SELFDESTRUCT and transfers its ETH balance to the caller, permanently bricking the contract."
},
{
"title": "Authorization uses tx.origin",
"category": "auth",
"evidence": "At offsets 0x2221\u20130x22af the code uses ORIGIN and compares it to hard-coded addresses, then jumps to privileged logic or reverts (JUMPI to 0x0489).",
"severity": "medium",
"locations": [
"BYTECODE_BUNDLE.txt:5"
],
"recommendation": "Replace tx.origin with msg.sender and enforce explicit role-based access control.",
"exploit_scenario": "An attacker can deploy an intermediary contract and trick a whitelisted EOA into calling it; tx.origin remains the whitelisted address, bypassing the check and allowing privileged actions through the attacker-controlled contract."
},
{
"title": "Whitelisted delegatecall enables arbitrary code execution",
"category": "upgradeability",
"evidence": "The function at 0x035b decodes calldata (0x246f) and jumps to 0x0f08, which runs the whitelist at 0x03f2 and then executes DELEGATECALL at 0x0f24 after copying calldata. No constant target address is pushed in this stub, so the target is supplied via decoded arguments.",
"severity": "high",
"locations": [
"BYTECODE_BUNDLE.txt:5"
],
"recommendation": "If not intended, remove the delegatecall entry point. If intended, restrict targets to audited implementations and add governance/timelocks for upgrades.",
"exploit_scenario": "A whitelisted address can invoke the delegatecall entry point with a chosen target and calldata, executing external code in this contract\u2019s context to modify storage or drain funds."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x0095 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x7c04575b 00000019: GT 0000001a: PUSH2 0x0059 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0x7c04575b 00000024: EQ 00000025: PUSH2 0x036e 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0xa7b8e688 0000002f: EQ 00000030: PUSH2 0x0383 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xd2925723 0000003a: EQ 0000003b: PUSH2 0x0396 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xd69ea74d 00000045: EQ 00000046: PUSH2 0x03a9 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xfa461e33 00000050: EQ 00000051: PUSH2 0x03d2 00000054: JUMPI 00000055: PUSH2 0x0120 00000058: JUMP 00000059: JUMPDEST 0000005a: DUP1 0000005b: PUSH4 0x0cb7f13c 00000060: EQ 00000061: PUSH2 0x02f5 00000064: JUMPI 00000065: DUP1 00000066: PUSH4 0x10c117ab 0000006b: EQ 0000006c: PUSH2 0x0315 0000006f: JUMPI 00000070: DUP1 00000071: PUSH4 0x23a69e75 00000076: EQ 00000077: PUSH2 0x0328 0000007a: JUMPI 0000007b: DUP1 0000007c: PUSH4 0x2768b07e 00000081: EQ 00000082: PUSH2 0x0348 00000085: JUMPI 00000086: DUP1 00000087: PUSH4 0x5c19a95c 0000008c: EQ 0000008d: PUSH2 0x035b 00000090: JUMPI 00000091: PUSH2 0x0120 00000094: JUMP 00000095: JUMPDEST 00000096: CALLDATASIZE 00000097: PUSH2 0x0120 0000009a: JUMPI 0000009b: CALLER 0000009c: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 000000b1: EQ 000000b2: PUSH2 0x011e 000000b5: JUMPI 000000b6: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 000000cb: PUSH1 0x01 000000cd: PUSH1 0x01 000000cf: PUSH1 0xa0 000000d1: SHL 000000d2: SUB 000000d3: AND 000000d4: PUSH4 0xd0e30db0 000000d9: CALLVALUE 000000da: PUSH1 0x40 000000dc: MLOAD 000000dd: DUP3 000000de: PUSH4 0xffffffff 000000e3: AND 000000e4: PUSH1 0xe0 000000e6: SHL 000000e7: DUP2 000000e8: MSTORE 000000e9: PUSH1 0x04 000000eb: ADD 000000ec: PUSH1 0x00 000000ee: PUSH1 0x40 000000f0: MLOAD 000000f1: DUP1 000000f2: DUP4 000000f3: SUB 000000f4: DUP2 000000f5: DUP6 000000f6: DUP9 000000f7: DUP1 000000f8: EXTCODESIZE 000000f9: ISZERO 000000fa: DUP1 000000fb: ISZERO 000000fc: PUSH2 0x0104 000000ff: JUMPI 00000100: PUSH1 0x00 00000102: DUP1 00000103: REVERT 00000104: JUMPDEST 00000105: POP 00000106: GAS 00000107: CALL 00000108: ISZERO 00000109: DUP1 0000010a: ISZERO 0000010b: PUSH2 0x0118 0000010e: JUMPI 0000010f: RETURNDATASIZE 00000110: PUSH1 0x00 00000112: DUP1 00000113: RETURNDATACOPY 00000114: RETURNDATASIZE 00000115: PUSH1 0x00 00000117: REVERT 00000118: JUMPDEST 00000119: POP 0000011a: POP 0000011b: POP 0000011c: POP 0000011d: POP 0000011e: JUMPDEST 0000011f: STOP 00000120: JUMPDEST 00000121: PUSH2 0x0128 00000124: PUSH2 0x03f2 00000127: JUMP 00000128: JUMPDEST 00000129: PUSH1 0x00 0000012b: DUP1 0000012c: PUSH1 0x40 0000012e: MLOAD 0000012f: PUSH1 0x01 00000131: PUSH1 0x00 00000133: DUP3 00000134: CALLDATACOPY 00000135: DUP1 00000136: MLOAD 00000137: SWAP3 00000138: POP 00000139: PUSH1 0x0a 0000013b: PUSH1 0x01 0000013d: DUP3 0000013e: CALLDATACOPY 0000013f: MLOAD 00000140: SWAP1 00000141: POP 00000142: PUSH1 0x01 00000144: PUSH1 0x01 00000146: PUSH1 0xb0 00000148: SHL 00000149: SUB 0000014a: NOT 0000014b: DUP2 0000014c: AND 0000014d: ISZERO 0000014e: PUSH2 0x01db 00000151: JUMPI 00000152: TIMESTAMP 00000153: PUSH2 0x015d 00000156: PUSH1 0x01 00000158: NUMBER 00000159: PUSH2 0x230d 0000015c: JUMP 0000015d: JUMPDEST 0000015e: BLOCKHASH 0000015f: PUSH1 0x40 00000161: MLOAD 00000162: PUSH1 0x20 00000164: ADD 00000165: PUSH2 0x0178 00000168: SWAP3 00000169: SWAP2 0000016a: SWAP1 0000016b: SWAP2 0000016c: DUP3 0000016d: MSTORE 0000016e: PUSH1 0x20 00000170: DUP3 00000171: ADD 00000172: MSTORE 00000173: PUSH1 0x40 00000175: ADD 00000176: SWAP1 00000177: JUMP 00000178: JUMPDEST 00000179: PUSH1 0x40 0000017b: MLOAD 0000017c: PUSH1 0x20 0000017e: DUP2 0000017f: DUP4 00000180: SUB 00000181: SUB 00000182: DUP2 00000183: MSTORE 00000184: SWAP1 00000185: PUSH1 0x40 00000187: MSTORE 00000188: DUP1 00000189: MLOAD 0000018a: SWAP1 0000018b: PUSH1 0x20 0000018d: ADD 0000018e: KECCAK256 0000018f: PUSH1 0x01 00000191: PUSH1 0x01 00000193: PUSH1 0xb0 00000195: SHL 00000196: SUB 00000197: NOT 00000198: AND 00000199: DUP2 0000019a: PUSH1 0x01 0000019c: PUSH1 0x01 0000019e: PUSH1 0xb0 000001a0: SHL 000001a1: SUB 000001a2: NOT 000001a3: AND 000001a4: EQ 000001a5: PUSH2 0x01db 000001a8: JUMPI 000001a9: PUSH1 0x40 000001ab: MLOAD 000001ac: PUSH3 0x461bcd 000001b0: PUSH1 0xe5 000001b2: SHL 000001b3: DUP2 000001b4: MSTORE 000001b5: PUSH1 0x20 000001b7: PUSH1 0x04 000001b9: DUP3 000001ba: ADD 000001bb: MSTORE 000001bc: PUSH1 0x03 000001be: PUSH1 0x24 000001c0: DUP3 000001c1: ADD 000001c2: MSTORE 000001c3: PUSH3 0x262223 000001c7: PUSH1 0xe9 000001c9: SHL 000001ca: PUSH1 0x44 000001cc: DUP3 000001cd: ADD 000001ce: MSTORE 000001cf: PUSH1 0x64 000001d1: ADD 000001d2: JUMPDEST 000001d3: PUSH1 0x40 000001d5: MLOAD 000001d6: DUP1 000001d7: SWAP2 000001d8: SUB 000001d9: SWAP1 000001da: REVERT 000001db: JUMPDEST 000001dc: PUSH1 0x01 000001de: PUSH1 0xf9 000001e0: SHL 000001e1: PUSH1 0x01 000001e3: PUSH1 0x01 000001e5: PUSH1 0xf8 000001e7: SHL 000001e8: SUB 000001e9: NOT 000001ea: DUP4 000001eb: AND 000001ec: SWAP1 000001ed: DUP2 000001ee: GT 000001ef: ISZERO 000001f0: SWAP1 000001f1: ISZERO 000001f2: DUP1 000001f3: PUSH2 0x0209 000001f6: JUMPI 000001f7: POP 000001f8: PUSH1 0x03 000001fa: PUSH1 0xf8 000001fc: SHL 000001fd: PUSH1 0x01 000001ff: PUSH1 0x01 00000201: PUSH1 0xf8 00000203: SHL 00000204: SUB 00000205: NOT 00000206: DUP5 00000207: AND 00000208: EQ 00000209: JUMPDEST 0000020a: ISZERO 0000020b: PUSH2 0x0217 0000020e: JUMPI 0000020f: PUSH2 0x011e 00000212: DUP2 00000213: PUSH2 0x048b 00000216: JUMP 00000217: JUMPDEST 00000218: PUSH1 0x05 0000021a: PUSH1 0xf8 0000021c: SHL 0000021d: PUSH1 0x01 0000021f: PUSH1 0x01 00000221: PUSH1 0xf8 00000223: SHL 00000224: SUB 00000225: NOT 00000226: DUP5 00000227: AND 00000228: GT 00000229: PUSH2 0x028f 0000022c: JUMPI 0000022d: PUSH2 0x0235 00000230: DUP2 00000231: PUSH2 0x057e 00000234: JUMP 00000235: JUMPDEST 00000236: PUSH1 0x01 00000238: PUSH1 0xf9 0000023a: SHL 0000023b: PUSH1 0x01 0000023d: PUSH1 0x01 0000023f: PUSH1 0xf8 00000241: SHL 00000242: SUB 00000243: NOT 00000244: DUP5 00000245: AND 00000246: EQ 00000247: DUP1 00000248: PUSH2 0x025e 0000024b: JUMPI 0000024c: POP 0000024d: PUSH1 0x05 0000024f: PUSH1 0xf8 00000251: SHL 00000252: PUSH1 0x01 00000254: PUSH1 0x01 00000256: PUSH1 0xf8 00000258: SHL 00000259: SUB 0000025a: NOT 0000025b: DUP5 0000025c: AND 0000025d: EQ 0000025e: JUMPDEST 0000025f: ISZERO 00000260: PUSH2 0x011e 00000263: JUMPI 00000264: PUSH1 0x40 00000266: MLOAD 00000267: COINBASE 00000268: SWAP1 00000269: CALLVALUE 0000026a: DUP1 0000026b: ISZERO 0000026c: PUSH2 0x08fc 0000026f: MUL 00000270: SWAP2 00000271: PUSH1 0x00 00000273: DUP2 00000274: DUP2 00000275: DUP2 00000276: DUP6 00000277: DUP9 00000278: DUP9 00000279: CALL 0000027a: SWAP4 0000027b: POP 0000027c: POP 0000027d: POP 0000027e: POP 0000027f: ISZERO 00000280: DUP1 00000281: ISZERO 00000282: PUSH2 0x011e 00000285: JUMPI 00000286: RETURNDATASIZE 00000287: PUSH1 0x00 00000289: DUP1 0000028a: RETURNDATACOPY 0000028b: RETURNDATASIZE 0000028c: PUSH1 0x00 0000028e: REVERT 0000028f: JUMPDEST 00000290: PUSH1 0x01 00000292: PUSH1 0x01 00000294: PUSH1 0xf8 00000296: SHL 00000297: SUB 00000298: NOT 00000299: DUP4 0000029a: AND 0000029b: PUSH1 0x03 0000029d: PUSH1 0xf9 0000029f: SHL 000002a0: SUB 000002a1: PUSH2 0x02ac 000002a4: JUMPI 000002a5: PUSH2 0x011e 000002a8: PUSH2 0x0644 000002ab: JUMP 000002ac: JUMPDEST 000002ad: PUSH2 0x02b4 000002b0: PUSH2 0x08b6 000002b3: JUMP 000002b4: JUMPDEST 000002b5: PUSH1 0x01 000002b7: PUSH1 0x01 000002b9: PUSH1 0xf8 000002bb: SHL 000002bc: SUB 000002bd: NOT 000002be: DUP4 000002bf: AND 000002c0: PUSH1 0x01 000002c2: PUSH1 0xfb 000002c4: SHL 000002c5: SUB 000002c6: PUSH2 0x011e 000002c9: JUMPI 000002ca: PUSH1 0x40 000002cc: MLOAD 000002cd: COINBASE 000002ce: SWAP1 000002cf: CALLVALUE 000002d0: DUP1 000002d1: ISZERO 000002d2: PUSH2 0x08fc 000002d5: MUL 000002d6: SWAP2 000002d7: PUSH1 0x00 000002d9: DUP2 000002da: DUP2 000002db: DUP2 000002dc: DUP6 000002dd: DUP9 000002de: DUP9 000002df: CALL 000002e0: SWAP4 000002e1: POP 000002e2: POP 000002e3: POP 000002e4: POP 000002e5: ISZERO 000002e6: DUP1 000002e7: ISZERO 000002e8: PUSH2 0x011e 000002eb: JUMPI 000002ec: RETURNDATASIZE 000002ed: PUSH1 0x00 000002ef: DUP1 000002f0: RETURNDATACOPY 000002f1: RETURNDATASIZE 000002f2: PUSH1 0x00 000002f4: REVERT 000002f5: JUMPDEST 000002f6: CALLVALUE 000002f7: DUP1 000002f8: ISZERO 000002f9: PUSH2 0x0301 000002fc: JUMPI 000002fd: PUSH1 0x00 000002ff: DUP1 00000300: REVERT 00000301: JUMPDEST 00000302: POP 00000303: PUSH2 0x011e 00000306: PUSH2 0x0310 00000309: CALLDATASIZE 0000030a: PUSH1 0x04 0000030c: PUSH2 0x2320 0000030f: JUMP 00000310: JUMPDEST 00000311: PUSH2 0x0b01 00000314: JUMP 00000315: JUMPDEST 00000316: PUSH2 0x011e 00000319: PUSH2 0x0323 0000031c: CALLDATASIZE 0000031d: PUSH1 0x04 0000031f: PUSH2 0x23b6 00000322: JUMP 00000323: JUMPDEST 00000324: PUSH2 0x0c12 00000327: JUMP 00000328: JUMPDEST 00000329: CALLVALUE 0000032a: DUP1 0000032b: ISZERO 0000032c: PUSH2 0x0334 0000032f: JUMPI 00000330: PUSH1 0x00 00000332: DUP1 00000333: REVERT 00000334: JUMPDEST 00000335: POP 00000336: PUSH2 0x011e 00000339: PUSH2 0x0343 0000033c: CALLDATASIZE 0000033d: PUSH1 0x04 0000033f: PUSH2 0x241c 00000342: JUMP 00000343: JUMPDEST 00000344: PUSH2 0x0d3c 00000347: JUMP 00000348: JUMPDEST 00000349: PUSH2 0x011e 0000034c: PUSH2 0x0356 0000034f: CALLDATASIZE 00000350: PUSH1 0x04 00000352: PUSH2 0x23b6 00000355: JUMP 00000356: JUMPDEST 00000357: PUSH2 0x0d4a 0000035a: JUMP 0000035b: JUMPDEST 0000035c: PUSH2 0x011e 0000035f: PUSH2 0x0369 00000362: CALLDATASIZE 00000363: PUSH1 0x04 00000365: PUSH2 0x246f 00000368: JUMP 00000369: JUMPDEST 0000036a: PUSH2 0x0f08 0000036d: JUMP 0000036e: JUMPDEST 0000036f: CALLVALUE 00000370: DUP1 00000371: ISZERO 00000372: PUSH2 0x037a 00000375: JUMPI 00000376: PUSH1 0x00 00000378: DUP1 00000379: REVERT 0000037a: JUMPDEST 0000037b: POP 0000037c: PUSH2 0x011e 0000037f: PUSH2 0x0f42 00000382: JUMP 00000383: JUMPDEST 00000384: PUSH2 0x011e 00000387: PUSH2 0x0391 0000038a: CALLDATASIZE 0000038b: PUSH1 0x04 0000038d: PUSH2 0x249c 00000390: JUMP 00000391: JUMPDEST 00000392: PUSH2 0x0f55 00000395: JUMP 00000396: JUMPDEST 00000397: PUSH2 0x011e 0000039a: PUSH2 0x03a4 0000039d: CALLDATASIZE 0000039e: PUSH1 0x04 000003a0: PUSH2 0x2523 000003a3: JUMP 000003a4: JUMPDEST 000003a5: PUSH2 0x1098 000003a8: JUMP 000003a9: JUMPDEST 000003aa: PUSH2 0x03bc 000003ad: PUSH2 0x03b7 000003b0: CALLDATASIZE 000003b1: PUSH1 0x04 000003b3: PUSH2 0x2577 000003b6: JUMP 000003b7: JUMPDEST 000003b8: PUSH2 0x12bf 000003bb: JUMP 000003bc: JUMPDEST 000003bd: PUSH1 0x40 000003bf: MLOAD 000003c0: PUSH2 0x03c9 000003c3: SWAP2 000003c4: SWAP1 000003c5: PUSH2 0x2609 000003c8: JUMP 000003c9: JUMPDEST 000003ca: PUSH1 0x40 000003cc: MLOAD 000003cd: DUP1 000003ce: SWAP2 000003cf: SUB 000003d0: SWAP1 000003d1: RETURN 000003d2: JUMPDEST 000003d3: CALLVALUE 000003d4: DUP1 000003d5: ISZERO 000003d6: PUSH2 0x03de 000003d9: JUMPI 000003da: PUSH1 0x00 000003dc: DUP1 000003dd: REVERT 000003de: JUMPDEST 000003df: POP 000003e0: PUSH2 0x011e 000003e3: PUSH2 0x03ed 000003e6: CALLDATASIZE 000003e7: PUSH1 0x04 000003e9: PUSH2 0x241c 000003ec: JUMP 000003ed: JUMPDEST 000003ee: PUSH2 0x13cc 000003f1: JUMP 000003f2: JUMPDEST 000003f3: PUSH2 0x0489 000003f6: PUSH20 0xd8349e874934593c85eafa8e534b495d80848e41 0000040b: CALLER 0000040c: EQ 0000040d: DUP1 0000040e: PUSH2 0x042a 00000411: JUMPI 00000412: POP 00000413: PUSH20 0x2f5abb45c283a7e6661c205d38215b10ee6fb064 00000428: CALLER 00000429: EQ 0000042a: JUMPDEST 0000042b: DUP1 0000042c: PUSH2 0x0448 0000042f: JUMPI 00000430: POP 00000431: PUSH20 0xc5798cd00276dbfdcd85bc751f5edace052e5cdd 00000446: CALLER 00000447: EQ 00000448: JUMPDEST 00000449: DUP1 0000044a: PUSH2 0x0466 0000044d: JUMPI 0000044e: POP 0000044f: PUSH20 0xe00456d3af6e9b8715a9c29c88c1932983e064c1 00000464: CALLER 00000465: EQ 00000466: JUMPDEST 00000467: DUP1 00000468: PUSH2 0x0484 0000046b: JUMPI 0000046c: POP 0000046d: PUSH20 0x71889d0c1101dc57045d08962e1a5c2466629112 00000482: CALLER 00000483: EQ 00000484: JUMPDEST 00000485: PUSH2 0x13da 00000488: JUMP 00000489: JUMPDEST 0000048a: JUMP 0000048b: JUMPDEST 0000048c: PUSH1 0x00 0000048e: DUP1 0000048f: PUSH1 0x00 00000491: DUP1 00000492: PUSH1 0x00 00000494: DUP1 00000495: PUSH1 0x40 00000497: MLOAD 00000498: PUSH1 0x3b 0000049a: PUSH1 0x0b 0000049c: DUP3 0000049d: CALLDATACOPY 0000049e: PUSH1 0x0c 000004a0: DUP2 000004a1: SUB 000004a2: MLOAD 000004a3: SWAP7 000004a4: POP 000004a5: PUSH1 0x14 000004a7: DUP2 000004a8: ADD 000004a9: MLOAD 000004aa: PUSH1 0xf8 000004ac: SHR 000004ad: PUSH1 0x02 000004af: SHL 000004b0: PUSH1 0x15 000004b2: DUP3 000004b3: ADD 000004b4: MLOAD 000004b5: PUSH1 0xe0 000004b7: SHR 000004b8: DUP1 000004b9: DUP3 000004ba: SHL 000004bb: SWAP5 000004bc: POP 000004bd: POP 000004be: POP 000004bf: PUSH1 0x19 000004c1: DUP2 000004c2: ADD 000004c3: MLOAD 000004c4: SWAP6 000004c5: POP 000004c6: PUSH1 0x39 000004c8: DUP2 000004c9: ADD 000004ca: MLOAD 000004cb: SWAP5 000004cc: POP 000004cd: PUSH1 0x3a 000004cf: DUP2 000004d0: ADD 000004d1: MLOAD 000004d2: SWAP2 000004d3: POP 000004d4: POP 000004d5: PUSH2 0x04dd 000004d8: DUP2 000004d9: PUSH2 0x1478 000004dc: JUMP 000004dd: JUMPDEST 000004de: SWAP3 000004df: POP 000004e0: DUP7 000004e1: ISZERO 000004e2: PUSH2 0x0508 000004e5: JUMPI 000004e6: PUSH2 0x0503 000004e9: PUSH2 0x0484 000004ec: DUP8 000004ed: DUP6 000004ee: DUP6 000004ef: DUP10 000004f0: PUSH1 0x01 000004f2: PUSH1 0x01 000004f4: PUSH1 0xf8 000004f6: SHL 000004f7: SUB 000004f8: NOT 000004f9: DUP11 000004fa: AND 000004fb: ISZERO 000004fc: ISZERO 000004fd: PUSH1 0x00 000004ff: PUSH2 0x1496 00000502: JUMP 00000503: JUMPDEST 00000504: PUSH2 0x0575 00000507: JUMP 00000508: JUMPDEST 00000509: PUSH1 0x00 0000050b: DUP1 0000050c: PUSH1 0x40 0000050e: MLOAD 0000050f: PUSH1 0x16 00000511: PUSH1 0x46 00000513: DUP3 00000514: CALLDATACOPY 00000515: DUP1 00000516: MLOAD 00000517: PUSH1 0x14 00000519: SWAP1 0000051a: SWAP2 0000051b: ADD 0000051c: MLOAD 0000051d: SWAP1 0000051e: SWAP3 0000051f: POP 00000520: SWAP1 00000521: POP 00000522: DUP7 00000523: PUSH2 0x053e 00000526: DUP7 00000527: DUP11 00000528: DUP8 00000529: PUSH1 0x01 0000052b: PUSH1 0x01 0000052d: PUSH1 0xf8 0000052f: SHL 00000530: SUB 00000531: NOT 00000532: DUP12 00000533: AND 00000534: ISZERO 00000535: ISZERO 00000536: PUSH1 0x00 00000538: DUP9 00000539: DUP9 0000053a: PUSH2 0x14dc 0000053d: JUMP 0000053e: JUMPDEST 0000053f: LT 00000540: ISZERO 00000541: PUSH2 0x0572 00000544: JUMPI 00000545: PUSH1 0x40 00000547: MLOAD 00000548: PUSH3 0x461bcd 0000054c: PUSH1 0xe5 0000054e: SHL 0000054f: DUP2 00000550: MSTORE 00000551: PUSH1 0x20 00000553: PUSH1 0x04 00000555: DUP3 00000556: ADD 00000557: MSTORE 00000558: PUSH1 0x03 0000055a: PUSH1 0x24 0000055c: DUP3 0000055d: ADD 0000055e: MSTORE 0000055f: PUSH3 0x544131 00000563: PUSH1 0xe8 00000565: SHL 00000566: PUSH1 0x44 00000568: DUP3 00000569: ADD 0000056a: MSTORE 0000056b: PUSH1 0x64 0000056d: ADD 0000056e: PUSH2 0x01d2 00000571: JUMP 00000572: JUMPDEST 00000573: POP 00000574: POP 00000575: JUMPDEST 00000576: POP 00000577: POP 00000578: POP 00000579: POP 0000057a: POP 0000057b: POP 0000057c: POP 0000057d: JUMP 0000057e: JUMPDEST 0000057f: PUSH1 0x00 00000581: DUP1 00000582: PUSH1 0x00 00000584: DUP1 00000585: PUSH1 0x00 00000587: PUSH1 0x40 00000589: MLOAD 0000058a: PUSH1 0x4e 0000058c: PUSH1 0x0b 0000058e: DUP3 0000058f: CALLDATACOPY 00000590: PUSH1 0x0c 00000592: DUP2 00000593: SUB 00000594: MLOAD 00000595: SWAP6 00000596: POP 00000597: PUSH1 0x08 00000599: DUP2 0000059a: ADD 0000059b: MLOAD 0000059c: SWAP5 0000059d: POP 0000059e: PUSH1 0x28 000005a0: DUP2 000005a1: ADD 000005a2: MLOAD 000005a3: SWAP4 000005a4: POP 000005a5: PUSH1 0x48 000005a7: DUP2 000005a8: ADD 000005a9: MLOAD 000005aa: PUSH1 0xf8 000005ac: SHR 000005ad: PUSH1 0x02 000005af: SHL 000005b0: PUSH1 0x49 000005b2: DUP3 000005b3: ADD 000005b4: MLOAD 000005b5: PUSH1 0xe0 000005b7: SHR 000005b8: DUP1 000005b9: DUP3 000005ba: SHL 000005bb: SWAP5 000005bc: POP 000005bd: POP 000005be: POP 000005bf: PUSH1 0x4d 000005c1: DUP2 000005c2: ADD 000005c3: MLOAD 000005c4: SWAP2 000005c5: POP 000005c6: POP 000005c7: DUP6 000005c8: ISZERO 000005c9: PUSH2 0x05ee 000005cc: JUMPI 000005cd: PUSH2 0x05e9 000005d0: PUSH2 0x0484 000005d3: DUP6 000005d4: DUP8 000005d5: DUP7 000005d6: DUP7 000005d7: PUSH1 0x01 000005d9: PUSH1 0x01 000005db: PUSH1 0xf8 000005dd: SHL 000005de: SUB 000005df: NOT 000005e0: DUP8 000005e1: AND 000005e2: ISZERO 000005e3: PUSH1 0x00 000005e5: PUSH2 0x1496 000005e8: JUMP 000005e9: JUMPDEST 000005ea: PUSH2 0x063c 000005ed: JUMP 000005ee: JUMPDEST 000005ef: PUSH1 0x00 000005f1: DUP1 000005f2: PUSH1 0x40 000005f4: MLOAD 000005f5: PUSH1 0x03 000005f7: PUSH1 0x59 000005f9: DUP3 000005fa: CALLDATACOPY 000005fb: DUP1 000005fc: MLOAD 000005fd: PUSH1 0x01 000005ff: SWAP1 00000600: SWAP2 00000601: ADD 00000602: MLOAD 00000603: SWAP1 00000604: SWAP3 00000605: POP 00000606: SWAP1 00000607: POP 00000608: PUSH2 0x0639 0000060b: DUP5 0000060c: PUSH2 0x0632 0000060f: DUP10 00000610: DUP10 00000611: DUP10 00000612: PUSH1 0x01 00000614: PUSH1 0x01 00000616: PUSH1 0xf8 00000618: SHL 00000619: SUB 0000061a: NOT 0000061b: DUP10 0000061c: AND 0000061d: ISZERO 0000061e: ISZERO 0000061f: PUSH1 0x00 00000621: PUSH2 0x0629 00000624: DUP11 00000625: PUSH2 0x1478 00000628: JUMP 00000629: JUMPDEST 0000062a: PUSH1 0x60 0000062c: SHL 0000062d: DUP10 0000062e: PUSH2 0x14dc 00000631: JUMP 00000632: JUMPDEST 00000633: LT 00000634: ISZERO 00000635: PUSH2 0x13da 00000638: JUMP 00000639: JUMPDEST 0000063a: POP 0000063b: POP 0000063c: JUMPDEST 0000063d: POP 0000063e: POP 0000063f: POP 00000640: POP 00000641: POP 00000642: POP 00000643: JUMP 00000644: JUMPDEST 00000645: PUSH1 0x40 00000647: DUP1 00000648: MLOAD 00000649: PUSH1 0xa0 0000064b: DUP2 0000064c: ADD 0000064d: DUP3 0000064e: MSTORE 0000064f: PUSH1 0x00 00000651: DUP1 00000652: DUP3 00000653: MSTORE 00000654: PUSH1 0x20 00000656: DUP3 00000657: ADD 00000658: DUP2 00000659: SWAP1 0000065a: MSTORE 0000065b: SWAP2 0000065c: DUP2 0000065d: ADD 0000065e: DUP3 0000065f: SWAP1 00000660: MSTORE 00000661: PUSH1 0x60 00000663: DUP2 00000664: ADD 00000665: DUP3 00000666: SWAP1 00000667: MSTORE 00000668: PUSH1 0x80 0000066a: DUP2 0000066b: ADD 0000066c: SWAP2 0000066d: SWAP1 0000066e: SWAP2 0000066f: MSTORE 00000670: PUSH1 0x40 00000672: DUP1 00000673: MLOAD 00000674: PUSH1 0xc0 00000676: DUP2 00000677: ADD 00000678: DUP3 00000679: MSTORE 0000067a: PUSH1 0x00 0000067c: DUP1 0000067d: DUP3 0000067e: MSTORE 0000067f: PUSH1 0x20 00000681: DUP3 00000682: ADD 00000683: DUP2 00000684: SWAP1 00000685: MSTORE 00000686: SWAP2 00000687: DUP2 00000688: ADD 00000689: DUP3 0000068a: SWAP1 0000068b: MSTORE 0000068c: PUSH1 0x60 0000068e: DUP2 0000068f: ADD 00000690: DUP3 00000691: SWAP1 00000692: MSTORE 00000693: PUSH1 0x80 00000695: DUP2 00000696: ADD 00000697: DUP3 00000698: SWAP1 00000699: MSTORE 0000069a: PUSH1 0xa0 0000069c: DUP2 0000069d: ADD 0000069e: SWAP2 0000069f: SWAP1 000006a0: SWAP2 000006a1: MSTORE 000006a2: PUSH1 0x00 000006a4: DUP1 000006a5: PUSH1 0x00 000006a7: DUP1 000006a8: PUSH1 0x00 000006aa: PUSH1 0x40 000006ac: MLOAD 000006ad: PUSH1 0xbb 000006af: PUSH1 0x0b 000006b1: DUP3 000006b2: CALLDATACOPY 000006b3: DUP1 000006b4: MLOAD 000006b5: PUSH1 0xf8 000006b7: SHR 000006b8: PUSH1 0x02 000006ba: PUSH1 0x01 000006bc: DUP3 000006bd: XOR 000006be: MOD 000006bf: PUSH1 0x20 000006c1: DUP11 000006c2: ADD 000006c3: MSTORE 000006c4: PUSH1 0x01 000006c6: DUP2 000006c7: PUSH1 0x01 000006c9: SHR 000006ca: AND 000006cb: SWAP6 000006cc: POP 000006cd: PUSH1 0x01 000006cf: DUP2 000006d0: PUSH1 0x02 000006d2: SHR 000006d3: AND 000006d4: SWAP7 000006d5: POP 000006d6: DUP1 000006d7: PUSH1 0x03 000006d9: SHR 000006da: PUSH1 0xa0 000006dc: DUP10 000006dd: ADD 000006de: MSTORE 000006df: POP 000006e0: PUSH1 0x01 000006e2: PUSH1 0x01 000006e4: PUSH1 0xa0 000006e6: SHL 000006e7: SUB 000006e8: PUSH1 0x0b 000006ea: DUP3 000006eb: SUB 000006ec: MLOAD 000006ed: AND 000006ee: DUP9 000006ef: MSTORE 000006f0: PUSH1 0x01 000006f2: PUSH1 0x01 000006f4: PUSH1 0xa0 000006f6: SHL 000006f7: SUB 000006f8: PUSH1 0x09 000006fa: DUP3 000006fb: ADD 000006fc: MLOAD 000006fd: AND 000006fe: DUP8 000006ff: MSTORE 00000700: PUSH1 0x01 00000702: PUSH1 0x01 00000704: PUSH1 0xa0 00000706: SHL 00000707: SUB 00000708: PUSH1 0x1d 0000070a: DUP3 0000070b: ADD 0000070c: MLOAD 0000070d: AND 0000070e: PUSH1 0x20 00000710: DUP9 00000711: ADD 00000712: MSTORE 00000713: PUSH1 0x3d 00000715: DUP2 00000716: ADD 00000717: MLOAD 00000718: PUSH1 0xf8 0000071a: SHR 0000071b: PUSH1 0x02 0000071d: SHL 0000071e: PUSH1 0x3e 00000720: DUP3 00000721: ADD 00000722: MLOAD 00000723: PUSH1 0xe0 00000725: SHR 00000726: DUP1 00000727: DUP3 00000728: SHL 00000729: PUSH1 0x80 0000072b: DUP12 0000072c: ADD 0000072d: MSTORE 0000072e: POP 0000072f: POP 00000730: PUSH1 0x42 00000732: DUP2 00000733: ADD 00000734: MLOAD 00000735: PUSH1 0x40 00000737: DUP9 00000738: ADD 00000739: MSTORE 0000073a: PUSH1 0x62 0000073c: DUP2 0000073d: ADD 0000073e: MLOAD 0000073f: SWAP3 00000740: POP 00000741: PUSH1 0x82 00000743: DUP2 00000744: ADD 00000745: MLOAD 00000746: SWAP2 00000747: POP 00000748: PUSH1 0x83 0000074a: DUP2 0000074b: ADD 0000074c: MLOAD 0000074d: SWAP4 0000074e: POP 0000074f: PUSH1 0x85 00000751: DUP2 00000752: ADD 00000753: MLOAD 00000754: PUSH1 0x60 00000756: DUP10 00000757: ADD 00000758: MSTORE 00000759: PUSH1 0x87 0000075b: DUP2 0000075c: ADD 0000075d: MLOAD 0000075e: PUSH1 0x80 00000760: DUP9 00000761: ADD 00000762: MSTORE 00000763: PUSH1 0x01 00000765: PUSH1 0x01 00000767: PUSH1 0xa0 00000769: SHL 0000076a: SUB 0000076b: PUSH1 0x9b 0000076d: DUP3 0000076e: ADD 0000076f: MLOAD 00000770: AND 00000771: PUSH1 0x60 00000773: DUP9 00000774: ADD 00000775: MSTORE 00000776: POP 00000777: PUSH2 0x077f 0000077a: DUP2 0000077b: PUSH2 0x1478 0000077e: JUMP 0000077f: JUMPDEST 00000780: PUSH1 0x01 00000782: PUSH1 0x01 00000784: PUSH1 0xa0 00000786: SHL 00000787: SUB 00000788: AND 00000789: PUSH1 0x40 0000078b: DUP9 0000078c: ADD 0000078d: MSTORE 0000078e: POP 0000078f: DUP3 00000790: ISZERO 00000791: PUSH2 0x07d3 00000794: JUMPI 00000795: DUP1 00000796: PUSH2 0x079f 00000799: DUP8 0000079a: DUP8 0000079b: PUSH2 0x15c1 0000079e: JUMP 0000079f: JUMPDEST 000007a0: LT 000007a1: ISZERO 000007a2: PUSH2 0x05e9 000007a5: JUMPI 000007a6: PUSH1 0x40 000007a8: MLOAD 000007a9: PUSH3 0x461bcd 000007ad: PUSH1 0xe5 000007af: SHL 000007b0: DUP2 000007b1: MSTORE 000007b2: PUSH1 0x20 000007b4: PUSH1 0x04 000007b6: DUP3 000007b7: ADD 000007b8: MSTORE 000007b9: PUSH1 0x03 000007bb: PUSH1 0x24 000007bd: DUP3 000007be: ADD 000007bf: MSTORE 000007c0: PUSH3 0x545431 000007c4: PUSH1 0xe8 000007c6: SHL 000007c7: PUSH1 0x44 000007c9: DUP3 000007ca: ADD 000007cb: MSTORE 000007cc: PUSH1 0x64 000007ce: ADD 000007cf: PUSH2 0x01d2 000007d2: JUMP 000007d3: JUMPDEST 000007d4: DUP6 000007d5: PUSH1 0x20 000007d7: ADD 000007d8: MLOAD 000007d9: ISZERO 000007da: PUSH2 0x0832 000007dd: JUMPI 000007de: PUSH2 0x07fb 000007e1: DUP7 000007e2: PUSH1 0x00 000007e4: ADD 000007e5: MLOAD 000007e6: DUP8 000007e7: PUSH1 0x40 000007e9: ADD 000007ea: MLOAD 000007eb: DUP9 000007ec: PUSH1 0x80 000007ee: ADD 000007ef: MLOAD 000007f0: DUP6 000007f1: DUP9 000007f2: DUP11 000007f3: PUSH1 0x00 000007f5: ADD 000007f6: MLOAD 000007f7: PUSH2 0x1496 000007fa: JUMP 000007fb: JUMPDEST 000007fc: PUSH2 0x082d 000007ff: JUMPI 00000800: PUSH1 0x40 00000802: MLOAD 00000803: PUSH3 0x461bcd 00000807: PUSH1 0xe5 00000809: SHL 0000080a: DUP2 0000080b: MSTORE 0000080c: PUSH1 0x20 0000080e: PUSH1 0x04 00000810: DUP3 00000811: ADD 00000812: MSTORE 00000813: PUSH1 0x03 00000815: PUSH1 0x24 00000817: DUP3 00000818: ADD 00000819: MSTORE 0000081a: PUSH3 0x2a2a19 0000081e: PUSH1 0xe9 00000820: SHL 00000821: PUSH1 0x44 00000823: DUP3 00000824: ADD 00000825: MSTORE 00000826: PUSH1 0x64 00000828: ADD 00000829: PUSH2 0x01d2 0000082c: JUMP 0000082d: JUMPDEST 0000082e: PUSH2 0x0894 00000831: JUMP 00000832: JUMPDEST 00000833: DUP2 00000834: PUSH2 0x0860 00000837: DUP8 00000838: PUSH1 0x40 0000083a: ADD 0000083b: MLOAD 0000083c: DUP9 0000083d: PUSH1 0x00 0000083f: ADD 00000840: MLOAD 00000841: DUP10 00000842: PUSH1 0x80 00000844: ADD 00000845: MLOAD 00000846: DUP9 00000847: DUP11 00000848: PUSH1 0x00 0000084a: ADD 0000084b: MLOAD 0000084c: DUP12 0000084d: PUSH1 0x20 0000084f: ADD 00000850: MLOAD 00000851: PUSH1 0x60 00000853: SHL 00000854: DUP14 00000855: PUSH1 0x60 00000857: ADD 00000858: MLOAD 00000859: PUSH1 0xf0 0000085b: SHL 0000085c: PUSH2 0x14dc 0000085f: JUMP 00000860: JUMPDEST 00000861: LT 00000862: ISZERO 00000863: PUSH2 0x0894 00000866: JUMPI 00000867: PUSH1 0x40 00000869: MLOAD 0000086a: PUSH3 0x461bcd 0000086e: PUSH1 0xe5 00000870: SHL 00000871: DUP2 00000872: MSTORE 00000873: PUSH1 0x20 00000875: PUSH1 0x04 00000877: DUP3 00000878: ADD 00000879: MSTORE 0000087a: PUSH1 0x03 0000087c: PUSH1 0x24 0000087e: DUP3 0000087f: ADD 00000880: MSTORE 00000881: PUSH3 0x545433 00000885: PUSH1 0xe8 00000887: SHL 00000888: PUSH1 0x44 0000088a: DUP3 0000088b: ADD 0000088c: MSTORE 0000088d: PUSH1 0x64 0000088f: ADD 00000890: PUSH2 0x01d2 00000893: JUMP 00000894: JUMPDEST 00000895: PUSH2 0x063c 00000898: PUSH2 0x0484 0000089b: DUP7 0000089c: PUSH1 0x00 0000089e: ADD 0000089f: MLOAD 000008a0: DUP8 000008a1: PUSH1 0x20 000008a3: ADD 000008a4: MLOAD 000008a5: DUP9 000008a6: PUSH1 0x40 000008a8: ADD 000008a9: MLOAD 000008aa: DUP6 000008ab: DUP11 000008ac: PUSH1 0xa0 000008ae: ADD 000008af: MLOAD 000008b0: PUSH1 0x00 000008b2: PUSH2 0x1496 000008b5: JUMP 000008b6: JUMPDEST 000008b7: PUSH1 0x40 000008b9: DUP1 000008ba: MLOAD 000008bb: PUSH1 0xa0 000008bd: DUP2 000008be: ADD 000008bf: DUP3 000008c0: MSTORE 000008c1: PUSH1 0x00 000008c3: DUP1 000008c4: DUP3 000008c5: MSTORE 000008c6: PUSH1 0x20 000008c8: DUP3 000008c9: ADD 000008ca: DUP2 000008cb: SWAP1 000008cc: MSTORE 000008cd: SWAP2 000008ce: DUP2 000008cf: ADD 000008d0: DUP3 000008d1: SWAP1 000008d2: MSTORE 000008d3: PUSH1 0x60 000008d5: DUP2 000008d6: ADD 000008d7: DUP3 000008d8: SWAP1 000008d9: MSTORE 000008da: PUSH1 0x80 000008dc: DUP2 000008dd: ADD 000008de: SWAP2 000008df: SWAP1 000008e0: SWAP2 000008e1: MSTORE 000008e2: PUSH1 0x40 000008e4: DUP1 000008e5: MLOAD 000008e6: PUSH1 0xc0 000008e8: DUP2 000008e9: ADD 000008ea: DUP3 000008eb: MSTORE 000008ec: PUSH1 0x00 000008ee: DUP1 000008ef: DUP3 000008f0: MSTORE 000008f1: PUSH1 0x20 000008f3: DUP3 000008f4: ADD 000008f5: DUP2 000008f6: SWAP1 000008f7: MSTORE 000008f8: SWAP2 000008f9: DUP2 000008fa: ADD 000008fb: DUP3 000008fc: SWAP1 000008fd: MSTORE 000008fe: PUSH1 0x60 00000900: DUP2 00000901: ADD 00000902: DUP3 00000903: SWAP1 00000904: MSTORE 00000905: PUSH1 0x80 00000907: DUP2 00000908: ADD 00000909: DUP3 0000090a: SWAP1 0000090b: MSTORE 0000090c: PUSH1 0xa0 0000090e: DUP2 0000090f: ADD 00000910: SWAP2 00000911: SWAP1 00000912: SWAP2 00000913: MSTORE 00000914: PUSH1 0x00 00000916: DUP1 00000917: PUSH1 0x00 00000919: DUP1 0000091a: PUSH1 0x00 0000091c: PUSH1 0x40 0000091e: MLOAD 0000091f: PUSH1 0xbb 00000921: PUSH1 0x0b 00000923: DUP3 00000924: CALLDATACOPY 00000925: DUP1 00000926: MLOAD 00000927: PUSH1 0xf8 00000929: SHR 0000092a: PUSH1 0x02 0000092c: PUSH1 0x01 0000092e: DUP3 0000092f: XOR 00000930: MOD 00000931: PUSH1 0x20 00000933: DUP11 00000934: ADD 00000935: MSTORE 00000936: PUSH1 0x01 00000938: DUP2 00000939: PUSH1 0x01 0000093b: SHR 0000093c: AND 0000093d: SWAP6 0000093e: POP 0000093f: PUSH1 0x01 00000941: DUP2 00000942: PUSH1 0x02 00000944: SHR 00000945: AND 00000946: SWAP7 00000947: POP 00000948: DUP1 00000949: PUSH1 0x03 0000094b: SHR 0000094c: PUSH1 0xa0 0000094e: DUP10 0000094f: ADD 00000950: MSTORE 00000951: POP 00000952: PUSH1 0x01 00000954: PUSH1 0x01 00000956: PUSH1 0xa0 00000958: SHL 00000959: SUB 0000095a: PUSH1 0x0b 0000095c: DUP3 0000095d: SUB 0000095e: MLOAD 0000095f: AND 00000960: DUP9 00000961: MSTORE 00000962: PUSH1 0x01 00000964: PUSH1 0x01 00000966: PUSH1 0xa0 00000968: SHL 00000969: SUB 0000096a: PUSH1 0x09 0000096c: DUP3 0000096d: ADD 0000096e: MLOAD 0000096f: AND 00000970: DUP8 00000971: MSTORE 00000972: PUSH1 0x01 00000974: PUSH1 0x01 00000976: PUSH1 0xa0 00000978: SHL 00000979: SUB 0000097a: PUSH1 0x1d 0000097c: DUP3 0000097d: ADD 0000097e: MLOAD 0000097f: AND 00000980: PUSH1 0x40 00000982: DUP10 00000983: ADD 00000984: MSTORE 00000985: PUSH1 0x01 00000987: PUSH1 0x01 00000989: PUSH1 0xa0 0000098b: SHL 0000098c: SUB 0000098d: PUSH1 0x31 0000098f: DUP3 00000990: ADD 00000991: MLOAD 00000992: AND 00000993: PUSH1 0x20 00000995: DUP9 00000996: ADD 00000997: MSTORE 00000998: PUSH1 0x51 0000099a: DUP2 0000099b: ADD 0000099c: MLOAD 0000099d: PUSH1 0x80 0000099f: DUP10 000009a0: ADD 000009a1: MSTORE 000009a2: PUSH1 0x71 000009a4: DUP2 000009a5: ADD 000009a6: MLOAD 000009a7: SWAP4 000009a8: POP 000009a9: PUSH1 0x91 000009ab: DUP2 000009ac: ADD 000009ad: MLOAD 000009ae: PUSH1 0x40 000009b0: DUP9 000009b1: ADD 000009b2: MSTORE 000009b3: PUSH1 0xb1 000009b5: DUP2 000009b6: ADD 000009b7: MLOAD 000009b8: PUSH1 0xf8 000009ba: SHR 000009bb: PUSH1 0x02 000009bd: SHL 000009be: PUSH1 0xb2 000009c0: DUP3 000009c1: ADD 000009c2: MLOAD 000009c3: PUSH1 0xe0 000009c5: SHR 000009c6: DUP1 000009c7: DUP3 000009c8: SHL 000009c9: SWAP5 000009ca: POP 000009cb: POP 000009cc: POP 000009cd: PUSH1 0xb6 000009cf: DUP2 000009d0: ADD 000009d1: MLOAD 000009d2: SWAP2 000009d3: POP 000009d4: PUSH1 0x99 000009d6: DUP2 000009d7: ADD 000009d8: MLOAD 000009d9: PUSH1 0x60 000009db: DUP10 000009dc: ADD 000009dd: MSTORE 000009de: PUSH1 0x9b 000009e0: DUP2 000009e1: ADD 000009e2: MLOAD 000009e3: PUSH1 0x80 000009e5: DUP9 000009e6: ADD 000009e7: MSTORE 000009e8: POP 000009e9: PUSH2 0x09f1 000009ec: DUP2 000009ed: PUSH2 0x1478 000009f0: JUMP 000009f1: JUMPDEST 000009f2: PUSH1 0x01 000009f4: PUSH1 0x01 000009f6: PUSH1 0xa0 000009f8: SHL 000009f9: SUB 000009fa: AND 000009fb: PUSH1 0x60 000009fd: DUP8 000009fe: ADD 000009ff: MSTORE 00000a00: POP 00000a01: DUP3 00000a02: ISZERO 00000a03: PUSH2 0x0a45 00000a06: JUMPI 00000a07: DUP1 00000a08: PUSH2 0x0a11 00000a0b: DUP8 00000a0c: DUP8 00000a0d: PUSH2 0x15c1 00000a10: JUMP 00000a11: JUMPDEST 00000a12: LT 00000a13: ISZERO 00000a14: PUSH2 0x05e9 00000a17: JUMPI 00000a18: PUSH1 0x40 00000a1a: MLOAD 00000a1b: PUSH3 0x461bcd 00000a1f: PUSH1 0xe5 00000a21: SHL 00000a22: DUP2 00000a23: MSTORE 00000a24: PUSH1 0x20 00000a26: PUSH1 0x04 00000a28: DUP3 00000a29: ADD 00000a2a: MSTORE 00000a2b: PUSH1 0x03 00000a2d: PUSH1 0x24 00000a2f: DUP3 00000a30: ADD 00000a31: MSTORE 00000a32: PUSH3 0x545433 00000a36: PUSH1 0xe8 00000a38: SHL 00000a39: PUSH1 0x44 00000a3b: DUP3 00000a3c: ADD 00000a3d: MSTORE 00000a3e: PUSH1 0x64 00000a40: ADD 00000a41: PUSH2 0x01d2 00000a44: JUMP 00000a45: JUMPDEST 00000a46: DUP6 00000a47: PUSH1 0x20 00000a49: ADD 00000a4a: MLOAD 00000a4b: ISZERO 00000a4c: PUSH2 0x0a9f 00000a4f: JUMPI 00000a50: PUSH2 0x0a6d 00000a53: DUP7 00000a54: PUSH1 0x00 00000a56: ADD 00000a57: MLOAD 00000a58: DUP8 00000a59: PUSH1 0x40 00000a5b: ADD 00000a5c: MLOAD 00000a5d: DUP9 00000a5e: PUSH1 0x80 00000a60: ADD 00000a61: MLOAD 00000a62: DUP6 00000a63: DUP9 00000a64: DUP11 00000a65: PUSH1 0x00 00000a67: ADD 00000a68: MLOAD 00000a69: PUSH2 0x1496 00000a6c: JUMP 00000a6d: JUMPDEST 00000a6e: PUSH2 0x082d 00000a71: JUMPI 00000a72: PUSH1 0x40 00000a74: MLOAD 00000a75: PUSH3 0x461bcd 00000a79: PUSH1 0xe5 00000a7b: SHL 00000a7c: DUP2 00000a7d: MSTORE 00000a7e: PUSH1 0x20 00000a80: PUSH1 0x04 00000a82: DUP3 00000a83: ADD 00000a84: MSTORE 00000a85: PUSH1 0x03 00000a87: PUSH1 0x24 00000a89: DUP3 00000a8a: ADD 00000a8b: MSTORE 00000a8c: PUSH3 0x15150d 00000a90: PUSH1 0xea 00000a92: SHL 00000a93: PUSH1 0x44 00000a95: DUP3 00000a96: ADD 00000a97: MSTORE 00000a98: PUSH1 0x64 00000a9a: ADD 00000a9b: PUSH2 0x01d2 00000a9e: JUMP 00000a9f: JUMPDEST 00000aa0: DUP2 00000aa1: PUSH2 0x0acd 00000aa4: DUP8 00000aa5: PUSH1 0x40 00000aa7: ADD 00000aa8: MLOAD 00000aa9: DUP9 00000aaa: PUSH1 0x00 00000aac: ADD 00000aad: MLOAD 00000aae: DUP10 00000aaf: PUSH1 0x80 00000ab1: ADD 00000ab2: MLOAD 00000ab3: DUP9 00000ab4: DUP11 00000ab5: PUSH1 0x00 00000ab7: ADD 00000ab8: MLOAD 00000ab9: DUP12 00000aba: PUSH1 0x20 00000abc: ADD 00000abd: MLOAD 00000abe: PUSH1 0x60 00000ac0: SHL 00000ac1: DUP14 00000ac2: PUSH1 0x60 00000ac4: ADD 00000ac5: MLOAD 00000ac6: PUSH1 0xf0 00000ac8: SHL 00000ac9: PUSH2 0x14dc 00000acc: JUMP 00000acd: JUMPDEST 00000ace: LT 00000acf: ISZERO 00000ad0: PUSH2 0x0894 00000ad3: JUMPI 00000ad4: PUSH1 0x40 00000ad6: MLOAD 00000ad7: PUSH3 0x461bcd 00000adb: PUSH1 0xe5 00000add: SHL 00000ade: DUP2 00000adf: MSTORE 00000ae0: PUSH1 0x20 00000ae2: PUSH1 0x04 00000ae4: DUP3 00000ae5: ADD 00000ae6: MSTORE 00000ae7: PUSH1 0x03 00000ae9: PUSH1 0x24 00000aeb: DUP3 00000aec: ADD 00000aed: MSTORE 00000aee: PUSH3 0x545435 00000af2: PUSH1 0xe8 00000af4: SHL 00000af5: PUSH1 0x44 00000af7: DUP3 00000af8: ADD 00000af9: MSTORE 00000afa: PUSH1 0x64 00000afc: ADD 00000afd: PUSH2 0x01d2 00000b00: JUMP 00000b01: JUMPDEST 00000b02: PUSH2 0x0b09 00000b05: PUSH2 0x03f2 00000b08: JUMP 00000b09: JUMPDEST 00000b0a: DUP1 00000b0b: ISZERO 00000b0c: PUSH2 0x0c0f 00000b0f: JUMPI 00000b10: PUSH1 0x40 00000b12: MLOAD 00000b13: PUSH4 0x2e1a7d4d 00000b18: PUSH1 0xe0 00000b1a: SHL 00000b1b: DUP2 00000b1c: MSTORE 00000b1d: PUSH1 0x04 00000b1f: DUP2 00000b20: ADD 00000b21: DUP3 00000b22: SWAP1 00000b23: MSTORE 00000b24: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00000b39: SWAP1 00000b3a: PUSH4 0x2e1a7d4d 00000b3f: SWAP1 00000b40: PUSH1 0x24 00000b42: ADD 00000b43: PUSH1 0x00 00000b45: PUSH1 0x40 00000b47: MLOAD 00000b48: DUP1 00000b49: DUP4 00000b4a: SUB 00000b4b: DUP2 00000b4c: PUSH1 0x00 00000b4e: DUP8 00000b4f: DUP1 00000b50: EXTCODESIZE 00000b51: ISZERO 00000b52: DUP1 00000b53: ISZERO 00000b54: PUSH2 0x0b5c 00000b57: JUMPI 00000b58: PUSH1 0x00 00000b5a: DUP1 00000b5b: REVERT 00000b5c: JUMPDEST 00000b5d: POP 00000b5e: GAS 00000b5f: CALL 00000b60: ISZERO 00000b61: DUP1 00000b62: ISZERO 00000b63: PUSH2 0x0b70 00000b66: JUMPI 00000b67: RETURNDATASIZE 00000b68: PUSH1 0x00 00000b6a: DUP1 00000b6b: RETURNDATACOPY 00000b6c: RETURNDATASIZE 00000b6d: PUSH1 0x00 00000b6f: REVERT 00000b70: JUMPDEST 00000b71: POP 00000b72: POP 00000b73: PUSH1 0x40 00000b75: DUP1 00000b76: MLOAD 00000b77: PUSH1 0x00 00000b79: DUP1 00000b7a: DUP3 00000b7b: MSTORE 00000b7c: PUSH1 0x20 00000b7e: DUP3 00000b7f: ADD 00000b80: SWAP3 00000b81: DUP4 00000b82: SWAP1 00000b83: MSTORE 00000b84: SWAP4 00000b85: POP 00000b86: CALLER 00000b87: SWAP3 00000b88: POP 00000b89: DUP5 00000b8a: SWAP2 00000b8b: PUSH2 0x0b94 00000b8e: SWAP2 00000b8f: SWAP1 00000b90: PUSH2 0x2632 00000b93: JUMP 00000b94: JUMPDEST 00000b95: PUSH1 0x00 00000b97: PUSH1 0x40 00000b99: MLOAD 00000b9a: DUP1 00000b9b: DUP4 00000b9c: SUB 00000b9d: DUP2 00000b9e: DUP6 00000b9f: DUP8 00000ba0: GAS 00000ba1: CALL 00000ba2: SWAP3 00000ba3: POP 00000ba4: POP 00000ba5: POP 00000ba6: RETURNDATASIZE 00000ba7: DUP1 00000ba8: PUSH1 0x00 00000baa: DUP2 00000bab: EQ 00000bac: PUSH2 0x0bd1 00000baf: JUMPI 00000bb0: PUSH1 0x40 00000bb2: MLOAD 00000bb3: SWAP2 00000bb4: POP 00000bb5: PUSH1 0x1f 00000bb7: NOT 00000bb8: PUSH1 0x3f 00000bba: RETURNDATASIZE 00000bbb: ADD 00000bbc: AND 00000bbd: DUP3 00000bbe: ADD 00000bbf: PUSH1 0x40 00000bc1: MSTORE 00000bc2: RETURNDATASIZE 00000bc3: DUP3 00000bc4: MSTORE 00000bc5: RETURNDATASIZE 00000bc6: PUSH1 0x00 00000bc8: PUSH1 0x20 00000bca: DUP5 00000bcb: ADD 00000bcc: RETURNDATACOPY 00000bcd: PUSH2 0x0bd6 00000bd0: JUMP 00000bd1: JUMPDEST 00000bd2: PUSH1 0x60 00000bd4: SWAP2 00000bd5: POP 00000bd6: JUMPDEST 00000bd7: POP 00000bd8: POP 00000bd9: SWAP1 00000bda: POP 00000bdb: DUP1 00000bdc: PUSH2 0x0c0d 00000bdf: JUMPI 00000be0: PUSH1 0x40 00000be2: MLOAD 00000be3: PUSH3 0x461bcd 00000be7: PUSH1 0xe5 00000be9: SHL 00000bea: DUP2 00000beb: MSTORE 00000bec: PUSH1 0x20 00000bee: PUSH1 0x04 00000bf0: DUP3 00000bf1: ADD 00000bf2: MSTORE 00000bf3: PUSH1 0x03 00000bf5: PUSH1 0x24 00000bf7: DUP3 00000bf8: ADD 00000bf9: MSTORE 00000bfa: PUSH3 0x524f59 00000bfe: PUSH1 0xe8 00000c00: SHL 00000c01: PUSH1 0x44 00000c03: DUP3 00000c04: ADD 00000c05: MSTORE 00000c06: PUSH1 0x64 00000c08: ADD 00000c09: PUSH2 0x01d2 00000c0c: JUMP 00000c0d: JUMPDEST 00000c0e: POP 00000c0f: JUMPDEST 00000c10: CALLER 00000c11: SELFDESTRUCT 00000c12: JUMPDEST 00000c13: PUSH2 0x0c1a 00000c16: PUSH2 0x1768 00000c19: JUMP 00000c1a: JUMPDEST 00000c1b: PUSH2 0x0c27 00000c1e: PUSH1 0x20 00000c20: DUP3 00000c21: ADD 00000c22: DUP3 00000c23: PUSH2 0x264e 00000c26: JUMP 00000c27: JUMPDEST 00000c28: PUSH1 0x01 00000c2a: PUSH1 0x01 00000c2c: PUSH1 0xb0 00000c2e: SHL 00000c2f: SUB 00000c30: NOT 00000c31: AND 00000c32: ISZERO 00000c33: PUSH2 0x0cc9 00000c36: JUMPI 00000c37: TIMESTAMP 00000c38: PUSH2 0x0c42 00000c3b: PUSH1 0x01 00000c3d: NUMBER 00000c3e: PUSH2 0x230d 00000c41: JUMP 00000c42: JUMPDEST 00000c43: BLOCKHASH 00000c44: PUSH1 0x40 00000c46: MLOAD 00000c47: PUSH1 0x20 00000c49: ADD 00000c4a: PUSH2 0x0c5d 00000c4d: SWAP3 00000c4e: SWAP2 00000c4f: SWAP1 00000c50: SWAP2 00000c51: DUP3 00000c52: MSTORE 00000c53: PUSH1 0x20 00000c55: DUP3 00000c56: ADD 00000c57: MSTORE 00000c58: PUSH1 0x40 00000c5a: ADD 00000c5b: SWAP1 00000c5c: JUMP 00000c5d: JUMPDEST 00000c5e: PUSH1 0x40 00000c60: DUP1 00000c61: MLOAD 00000c62: PUSH1 0x1f 00000c64: NOT 00000c65: DUP2 00000c66: DUP5 00000c67: SUB 00000c68: ADD 00000c69: DUP2 00000c6a: MSTORE 00000c6b: SWAP2 00000c6c: SWAP1 00000c6d: MSTORE 00000c6e: DUP1 00000c6f: MLOAD 00000c70: PUSH1 0x20 00000c72: SWAP2 00000c73: DUP3 00000c74: ADD 00000c75: KECCAK256 00000c76: PUSH1 0x01 00000c78: PUSH1 0x01 00000c7a: PUSH1 0xb0 00000c7c: SHL 00000c7d: SUB 00000c7e: NOT 00000c7f: AND 00000c80: SWAP1 00000c81: PUSH2 0x0c8c 00000c84: SWAP1 00000c85: DUP4 00000c86: ADD 00000c87: DUP4 00000c88: PUSH2 0x264e 00000c8b: JUMP 00000c8c: JUMPDEST 00000c8d: PUSH1 0x01 00000c8f: PUSH1 0x01 00000c91: PUSH1 0xb0 00000c93: SHL 00000c94: SUB 00000c95: NOT 00000c96: AND 00000c97: EQ 00000c98: PUSH2 0x0cc9 00000c9b: JUMPI 00000c9c: PUSH1 0x40 00000c9e: MLOAD 00000c9f: PUSH3 0x461bcd 00000ca3: PUSH1 0xe5 00000ca5: SHL 00000ca6: DUP2 00000ca7: MSTORE 00000ca8: PUSH1 0x20 00000caa: PUSH1 0x04 00000cac: DUP3 00000cad: ADD 00000cae: MSTORE 00000caf: PUSH1 0x03 00000cb1: PUSH1 0x24 00000cb3: DUP3 00000cb4: ADD 00000cb5: MSTORE 00000cb6: PUSH3 0x464445 00000cba: PUSH1 0xe8 00000cbc: SHL 00000cbd: PUSH1 0x44 00000cbf: DUP3 00000cc0: ADD 00000cc1: MSTORE 00000cc2: PUSH1 0x64 00000cc4: ADD 00000cc5: PUSH2 0x01d2 00000cc8: JUMP 00000cc9: JUMPDEST 00000cca: PUSH1 0x40 00000ccc: MLOAD 00000ccd: PUSH4 0x3095c057 00000cd2: PUSH1 0xe0 00000cd4: SHL 00000cd5: DUP2 00000cd6: MSTORE 00000cd7: PUSH1 0x01 00000cd9: PUSH1 0x01 00000cdb: PUSH1 0xa0 00000cdd: SHL 00000cde: SUB 00000cdf: DUP6 00000ce0: AND 00000ce1: SWAP1 00000ce2: PUSH4 0x3095c057 00000ce7: SWAP1 00000ce8: PUSH2 0x0cf7 00000ceb: SWAP1 00000cec: DUP7 00000ced: SWAP1 00000cee: DUP7 00000cef: SWAP1 00000cf0: PUSH1 0x04 00000cf2: ADD 00000cf3: PUSH2 0x26a1 00000cf6: JUMP 00000cf7: JUMPDEST 00000cf8: PUSH1 0x00 00000cfa: PUSH1 0x40 00000cfc: MLOAD 00000cfd: DUP1 00000cfe: DUP4 00000cff: SUB 00000d00: DUP2 00000d01: PUSH1 0x00 00000d03: DUP8 00000d04: DUP1 00000d05: EXTCODESIZE 00000d06: ISZERO 00000d07: DUP1 00000d08: ISZERO 00000d09: PUSH2 0x0d11 00000d0c: JUMPI 00000d0d: PUSH1 0x00 00000d0f: DUP1 00000d10: REVERT 00000d11: JUMPDEST 00000d12: POP 00000d13: GAS 00000d14: CALL 00000d15: ISZERO 00000d16: DUP1 00000d17: ISZERO 00000d18: PUSH2 0x0d25 00000d1b: JUMPI 00000d1c: RETURNDATASIZE 00000d1d: PUSH1 0x00 00000d1f: DUP1 00000d20: RETURNDATACOPY 00000d21: RETURNDATASIZE 00000d22: PUSH1 0x00 00000d24: REVERT 00000d25: JUMPDEST 00000d26: POP 00000d27: POP 00000d28: POP 00000d29: POP 00000d2a: PUSH2 0x0d36 00000d2d: DUP2 00000d2e: PUSH1 0x20 00000d30: ADD 00000d31: CALLDATALOAD 00000d32: PUSH2 0x17a4 00000d35: JUMP 00000d36: JUMPDEST 00000d37: POP 00000d38: POP 00000d39: POP 00000d3a: POP 00000d3b: JUMP 00000d3c: JUMPDEST 00000d3d: PUSH2 0x0d36 00000d40: DUP5 00000d41: DUP5 00000d42: DUP5 00000d43: DUP5 00000d44: PUSH1 0x01 00000d46: PUSH2 0x1912 00000d49: JUMP 00000d4a: JUMPDEST 00000d4b: PUSH2 0x0d52 00000d4e: PUSH2 0x1768 00000d51: JUMP 00000d52: JUMPDEST 00000d53: PUSH2 0x0d5f 00000d56: PUSH1 0x20 00000d58: DUP3 00000d59: ADD 00000d5a: DUP3 00000d5b: PUSH2 0x264e 00000d5e: JUMP 00000d5f: JUMPDEST 00000d60: PUSH1 0x01 00000d62: PUSH1 0x01 00000d64: PUSH1 0xb0 00000d66: SHL 00000d67: SUB 00000d68: NOT 00000d69: AND 00000d6a: ISZERO 00000d6b: PUSH2 0x0e01 00000d6e: JUMPI 00000d6f: TIMESTAMP 00000d70: PUSH2 0x0d7a 00000d73: PUSH1 0x01 00000d75: NUMBER 00000d76: PUSH2 0x230d 00000d79: JUMP 00000d7a: JUMPDEST 00000d7b: BLOCKHASH 00000d7c: PUSH1 0x40 00000d7e: MLOAD 00000d7f: PUSH1 0x20 00000d81: ADD 00000d82: PUSH2 0x0d95 00000d85: SWAP3 00000d86: SWAP2 00000d87: SWAP1 00000d88: SWAP2 00000d89: DUP3 00000d8a: MSTORE 00000d8b: PUSH1 0x20 00000d8d: DUP3 00000d8e: ADD 00000d8f: MSTORE 00000d90: PUSH1 0x40 00000d92: ADD 00000d93: SWAP1 00000d94: JUMP 00000d95: JUMPDEST 00000d96: PUSH1 0x40 00000d98: DUP1 00000d99: MLOAD 00000d9a: PUSH1 0x1f 00000d9c: NOT 00000d9d: DUP2 00000d9e: DUP5 00000d9f: SUB 00000da0: ADD 00000da1: DUP2 00000da2: MSTORE 00000da3: SWAP2 00000da4: SWAP1 00000da5: MSTORE 00000da6: DUP1 00000da7: MLOAD 00000da8: PUSH1 0x20 00000daa: SWAP2 00000dab: DUP3 00000dac: ADD 00000dad: KECCAK256 00000dae: PUSH1 0x01 00000db0: PUSH1 0x01 00000db2: PUSH1 0xb0 00000db4: SHL 00000db5: SUB 00000db6: NOT 00000db7: AND 00000db8: SWAP1 00000db9: PUSH2 0x0dc4 00000dbc: SWAP1 00000dbd: DUP4 00000dbe: ADD 00000dbf: DUP4 00000dc0: PUSH2 0x264e 00000dc3: JUMP 00000dc4: JUMPDEST 00000dc5: PUSH1 0x01 00000dc7: PUSH1 0x01 00000dc9: PUSH1 0xb0 00000dcb: SHL 00000dcc: SUB 00000dcd: NOT 00000dce: AND 00000dcf: EQ 00000dd0: PUSH2 0x0e01 00000dd3: JUMPI 00000dd4: PUSH1 0x40 00000dd6: MLOAD 00000dd7: PUSH3 0x461bcd 00000ddb: PUSH1 0xe5 00000ddd: SHL 00000dde: DUP2 00000ddf: MSTORE 00000de0: PUSH1 0x20 00000de2: PUSH1 0x04 00000de4: DUP3 00000de5: ADD 00000de6: MSTORE 00000de7: PUSH1 0x03 00000de9: PUSH1 0x24 00000deb: DUP3 00000dec: ADD 00000ded: MSTORE 00000dee: PUSH3 0x464453 00000df2: PUSH1 0xe8 00000df4: SHL 00000df5: PUSH1 0x44 00000df7: DUP3 00000df8: ADD 00000df9: MSTORE 00000dfa: PUSH1 0x64 00000dfc: ADD 00000dfd: PUSH2 0x01d2 00000e00: JUMP 00000e01: JUMPDEST 00000e02: PUSH1 0x40 00000e04: MLOAD 00000e05: PUSH4 0x70a08231 00000e0a: PUSH1 0xe0 00000e0c: SHL 00000e0d: DUP2 00000e0e: MSTORE 00000e0f: ADDRESS 00000e10: PUSH1 0x04 00000e12: DUP3 00000e13: ADD 00000e14: MSTORE 00000e15: PUSH1 0x00 00000e17: SWAP1 00000e18: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00000e2d: SWAP1 00000e2e: PUSH4 0x70a08231 00000e33: SWAP1 00000e34: PUSH1 0x24 00000e36: ADD 00000e37: PUSH1 0x20 00000e39: PUSH1 0x40 00000e3b: MLOAD 00000e3c: DUP1 00000e3d: DUP4 00000e3e: SUB 00000e3f: DUP2 00000e40: DUP7 00000e41: GAS 00000e42: STATICCALL 00000e43: ISZERO 00000e44: DUP1 00000e45: ISZERO 00000e46: PUSH2 0x0e53 00000e49: JUMPI 00000e4a: RETURNDATASIZE 00000e4b: PUSH1 0x00 00000e4d: DUP1 00000e4e: RETURNDATACOPY 00000e4f: RETURNDATASIZE 00000e50: PUSH1 0x00 00000e52: REVERT 00000e53: JUMPDEST 00000e54: POP 00000e55: POP 00000e56: POP 00000e57: POP 00000e58: PUSH1 0x40 00000e5a: MLOAD 00000e5b: RETURNDATASIZE 00000e5c: PUSH1 0x1f 00000e5e: NOT 00000e5f: PUSH1 0x1f 00000e61: DUP3 00000e62: ADD 00000e63: AND 00000e64: DUP3 00000e65: ADD 00000e66: DUP1 00000e67: PUSH1 0x40 00000e69: MSTORE 00000e6a: POP 00000e6b: DUP2 00000e6c: ADD 00000e6d: SWAP1 00000e6e: PUSH2 0x0e77 00000e71: SWAP2 00000e72: SWAP1 00000e73: PUSH2 0x26bd 00000e76: JUMP 00000e77: JUMPDEST 00000e78: SWAP1 00000e79: POP 00000e7a: PUSH2 0x0e9c 00000e7d: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00000e92: DUP7 00000e93: DUP5 00000e94: PUSH1 0x20 00000e96: ADD 00000e97: CALLDATALOAD 00000e98: PUSH2 0x1d65 00000e9b: JUMP 00000e9c: JUMPDEST 00000e9d: PUSH1 0x40 00000e9f: MLOAD 00000ea0: PUSH4 0x3095c057 00000ea5: PUSH1 0xe0 00000ea7: SHL 00000ea8: DUP2 00000ea9: MSTORE 00000eaa: PUSH1 0x01 00000eac: PUSH1 0x01 00000eae: PUSH1 0xa0 00000eb0: SHL 00000eb1: SUB 00000eb2: DUP7 00000eb3: AND 00000eb4: SWAP1 00000eb5: PUSH4 0x3095c057 00000eba: SWAP1 00000ebb: PUSH2 0x0eca 00000ebe: SWAP1 00000ebf: DUP8 00000ec0: SWAP1 00000ec1: DUP8 00000ec2: SWAP1 00000ec3: PUSH1 0x04 00000ec5: ADD 00000ec6: PUSH2 0x26a1 00000ec9: JUMP 00000eca: JUMPDEST 00000ecb: PUSH1 0x00 00000ecd: PUSH1 0x40 00000ecf: MLOAD 00000ed0: DUP1 00000ed1: DUP4 00000ed2: SUB 00000ed3: DUP2 00000ed4: PUSH1 0x00 00000ed6: DUP8 00000ed7: DUP1 00000ed8: EXTCODESIZE 00000ed9: ISZERO 00000eda: DUP1 00000edb: ISZERO 00000edc: PUSH2 0x0ee4 00000edf: JUMPI 00000ee0: PUSH1 0x00 00000ee2: DUP1 00000ee3: REVERT 00000ee4: JUMPDEST 00000ee5: POP 00000ee6: GAS 00000ee7: CALL 00000ee8: ISZERO 00000ee9: DUP1 00000eea: ISZERO 00000eeb: PUSH2 0x0ef8 00000eee: JUMPI 00000eef: RETURNDATASIZE 00000ef0: PUSH1 0x00 00000ef2: DUP1 00000ef3: RETURNDATACOPY 00000ef4: RETURNDATASIZE 00000ef5: PUSH1 0x00 00000ef7: REVERT 00000ef8: JUMPDEST 00000ef9: POP 00000efa: POP 00000efb: POP 00000efc: PUSH1 0x00 00000efe: SWAP2 00000eff: SWAP1 00000f00: SWAP2 00000f01: SSTORE 00000f02: POP 00000f03: POP 00000f04: POP 00000f05: POP 00000f06: POP 00000f07: JUMP 00000f08: JUMPDEST 00000f09: PUSH2 0x0f10 00000f0c: PUSH2 0x03f2 00000f0f: JUMP 00000f10: JUMPDEST 00000f11: PUSH1 0x40 00000f13: MLOAD 00000f14: PUSH1 0x24 00000f16: CALLDATASIZE 00000f17: SUB 00000f18: DUP1 00000f19: PUSH1 0x24 00000f1b: DUP4 00000f1c: CALLDATACOPY 00000f1d: PUSH1 0x00 00000f1f: DUP1 00000f20: DUP3 00000f21: DUP5 00000f22: DUP7 00000f23: GAS 00000f24: DELEGATECALL 00000f25: RETURNDATASIZE 00000f26: SWAP2 00000f27: POP 00000f28: DUP2 00000f29: PUSH1 0x00 00000f2b: DUP5 00000f2c: RETURNDATACOPY 00000f2d: DUP1 00000f2e: DUP1 00000f2f: ISZERO 00000f30: PUSH2 0x0f37 00000f33: JUMPI 00000f34: DUP3 00000f35: DUP5 00000f36: RETURN 00000f37: JUMPDEST 00000f38: DUP3 00000f39: DUP5 00000f3a: REVERT 00000f3b: JUMPDEST 00000f3c: POP 00000f3d: POP 00000f3e: POP 00000f3f: POP 00000f40: POP 00000f41: JUMP 00000f42: JUMPDEST 00000f43: PUSH2 0x0f4a 00000f46: PUSH2 0x1e8f 00000f49: JUMP 00000f4a: JUMPDEST 00000f4b: PUSH1 0x01 00000f4d: PUSH1 0x00 00000f4f: DUP2 00000f50: SWAP1 00000f51: SSTORE 00000f52: DUP1 00000f53: SSTORE 00000f54: JUMP 00000f55: JUMPDEST 00000f56: PUSH2 0x0f5d 00000f59: PUSH2 0x1e8f 00000f5c: JUMP 00000f5d: JUMPDEST 00000f5e: PUSH2 0x0f6a 00000f61: PUSH1 0x20 00000f63: DUP7 00000f64: ADD 00000f65: DUP7 00000f66: PUSH2 0x264e 00000f69: JUMP 00000f6a: JUMPDEST 00000f6b: PUSH1 0x01 00000f6d: PUSH1 0x01 00000f6f: PUSH1 0xb0 00000f71: SHL 00000f72: SUB 00000f73: NOT 00000f74: AND 00000f75: ISZERO 00000f76: PUSH2 0x100c 00000f79: JUMPI 00000f7a: TIMESTAMP 00000f7b: PUSH2 0x0f85 00000f7e: PUSH1 0x01 00000f80: NUMBER 00000f81: PUSH2 0x230d 00000f84: JUMP 00000f85: JUMPDEST 00000f86: BLOCKHASH 00000f87: PUSH1 0x40 00000f89: MLOAD 00000f8a: PUSH1 0x20 00000f8c: ADD 00000f8d: PUSH2 0x0fa0 00000f90: SWAP3 00000f91: SWAP2 00000f92: SWAP1 00000f93: SWAP2 00000f94: DUP3 00000f95: MSTORE 00000f96: PUSH1 0x20 00000f98: DUP3 00000f99: ADD 00000f9a: MSTORE 00000f9b: PUSH1 0x40 00000f9d: ADD 00000f9e: SWAP1 00000f9f: JUMP 00000fa0: JUMPDEST 00000fa1: PUSH1 0x40 00000fa3: DUP1 00000fa4: MLOAD 00000fa5: PUSH1 0x1f 00000fa7: NOT 00000fa8: DUP2 00000fa9: DUP5 00000faa: SUB 00000fab: ADD 00000fac: DUP2 00000fad: MSTORE 00000fae: SWAP2 00000faf: SWAP1 00000fb0: MSTORE 00000fb1: DUP1 00000fb2: MLOAD 00000fb3: PUSH1 0x20 00000fb5: SWAP2 00000fb6: DUP3 00000fb7: ADD 00000fb8: KECCAK256 00000fb9: PUSH1 0x01 00000fbb: PUSH1 0x01 00000fbd: PUSH1 0xb0 00000fbf: SHL 00000fc0: SUB 00000fc1: NOT 00000fc2: AND 00000fc3: SWAP1 00000fc4: PUSH2 0x0fcf 00000fc7: SWAP1 00000fc8: DUP8 00000fc9: ADD 00000fca: DUP8 00000fcb: PUSH2 0x264e 00000fce: JUMP 00000fcf: JUMPDEST 00000fd0: PUSH1 0x01 00000fd2: PUSH1 0x01 00000fd4: PUSH1 0xb0 00000fd6: SHL 00000fd7: SUB 00000fd8: NOT 00000fd9: AND 00000fda: EQ 00000fdb: PUSH2 0x100c 00000fde: JUMPI 00000fdf: PUSH1 0x40 00000fe1: MLOAD 00000fe2: PUSH3 0x461bcd 00000fe6: PUSH1 0xe5 00000fe8: SHL 00000fe9: DUP2 00000fea: MSTORE 00000feb: PUSH1 0x20 00000fed: PUSH1 0x04 00000fef: DUP3 00000ff0: ADD 00000ff1: MSTORE 00000ff2: PUSH1 0x03 00000ff4: PUSH1 0x24 00000ff6: DUP3 00000ff7: ADD 00000ff8: MSTORE 00000ff9: PUSH3 0x4e4445 00000ffd: PUSH1 0xe8 00000fff: SHL 00001000: PUSH1 0x44 00001002: DUP3 00001003: ADD 00001004: MSTORE 00001005: PUSH1 0x64 00001007: ADD 00001008: PUSH2 0x01d2 0000100b: JUMP 0000100c: JUMPDEST 0000100d: PUSH2 0x101c 00001010: PUSH1 0x40 00001012: DUP7 00001013: ADD 00001014: PUSH1 0x20 00001016: DUP8 00001017: ADD 00001018: PUSH2 0x246f 0000101b: JUMP 0000101c: JUMPDEST 0000101d: PUSH1 0x01 0000101f: PUSH1 0x01 00001021: PUSH1 0xa0 00001023: SHL 00001024: SUB 00001025: AND 00001026: PUSH4 0xdcb698ab 0000102b: CALLVALUE 0000102c: DUP7 0000102d: DUP7 0000102e: DUP7 0000102f: DUP7 00001030: PUSH1 0x40 00001032: MLOAD 00001033: DUP7 00001034: PUSH4 0xffffffff 00001039: AND 0000103a: PUSH1 0xe0 0000103c: SHL 0000103d: DUP2 0000103e: MSTORE 0000103f: PUSH1 0x04 00001041: ADD 00001042: PUSH2 0x104e 00001045: SWAP5 00001046: SWAP4 00001047: SWAP3 00001048: SWAP2 00001049: SWAP1 0000104a: PUSH2 0x26d6 0000104d: JUMP 0000104e: JUMPDEST 0000104f: PUSH1 0x00 00001051: PUSH1 0x40 00001053: MLOAD 00001054: DUP1 00001055: DUP4 00001056: SUB 00001057: DUP2 00001058: DUP6 00001059: DUP9 0000105a: DUP1 0000105b: EXTCODESIZE 0000105c: ISZERO 0000105d: DUP1 0000105e: ISZERO 0000105f: PUSH2 0x1067 00001062: JUMPI 00001063: PUSH1 0x00 00001065: DUP1 00001066: REVERT 00001067: JUMPDEST 00001068: POP 00001069: GAS 0000106a: CALL 0000106b: ISZERO 0000106c: DUP1 0000106d: ISZERO 0000106e: PUSH2 0x107b 00001071: JUMPI 00001072: RETURNDATASIZE 00001073: PUSH1 0x00 00001075: DUP1 00001076: RETURNDATACOPY 00001077: RETURNDATASIZE 00001078: PUSH1 0x00 0000107a: REVERT 0000107b: JUMPDEST 0000107c: POP 0000107d: POP 0000107e: POP 0000107f: POP 00001080: POP 00001081: PUSH2 0x108d 00001084: DUP6 00001085: PUSH1 0x40 00001087: ADD 00001088: CALLDATALOAD 00001089: PUSH2 0x1f60 0000108c: JUMP 0000108d: JUMPDEST 0000108e: POP 0000108f: POP 00001090: PUSH1 0x01 00001092: DUP1 00001093: SSTORE 00001094: POP 00001095: POP 00001096: POP 00001097: JUMP 00001098: JUMPDEST 00001099: PUSH2 0x10a0 0000109c: PUSH2 0x1e8f 0000109f: JUMP 000010a0: JUMPDEST 000010a1: CALLVALUE 000010a2: ISZERO 000010a3: DUP1 000010a4: ISZERO 000010a5: PUSH2 0x10b0 000010a8: JUMPI 000010a9: POP 000010aa: PUSH1 0x01 000010ac: SLOAD 000010ad: PUSH1 0x01 000010af: EQ 000010b0: JUMPDEST 000010b1: PUSH2 0x10e2 000010b4: JUMPI 000010b5: PUSH1 0x40 000010b7: MLOAD 000010b8: PUSH3 0x461bcd 000010bc: PUSH1 0xe5 000010be: SHL 000010bf: DUP2 000010c0: MSTORE 000010c1: PUSH1 0x20 000010c3: PUSH1 0x04 000010c5: DUP3 000010c6: ADD 000010c7: MSTORE 000010c8: PUSH1 0x03 000010ca: PUSH1 0x24 000010cc: DUP3 000010cd: ADD 000010ce: MSTORE 000010cf: PUSH3 0x272b29 000010d3: PUSH1 0xe9 000010d5: SHL 000010d6: PUSH1 0x44 000010d8: DUP3 000010d9: ADD 000010da: MSTORE 000010db: PUSH1 0x64 000010dd: ADD 000010de: PUSH2 0x01d2 000010e1: JUMP 000010e2: JUMPDEST 000010e3: PUSH2 0x10ef 000010e6: PUSH1 0x20 000010e8: DUP5 000010e9: ADD 000010ea: DUP5 000010eb: PUSH2 0x264e 000010ee: JUMP 000010ef: JUMPDEST 000010f0: PUSH1 0x01 000010f2: PUSH1 0x01 000010f4: PUSH1 0xb0 000010f6: SHL 000010f7: SUB 000010f8: NOT 000010f9: AND 000010fa: ISZERO 000010fb: PUSH2 0x1191 000010fe: JUMPI 000010ff: TIMESTAMP 00001100: PUSH2 0x110a 00001103: PUSH1 0x01 00001105: NUMBER 00001106: PUSH2 0x230d 00001109: JUMP 0000110a: JUMPDEST 0000110b: BLOCKHASH 0000110c: PUSH1 0x40 0000110e: MLOAD 0000110f: PUSH1 0x20 00001111: ADD 00001112: PUSH2 0x1125 00001115: SWAP3 00001116: SWAP2 00001117: SWAP1 00001118: SWAP2 00001119: DUP3 0000111a: MSTORE 0000111b: PUSH1 0x20 0000111d: DUP3 0000111e: ADD 0000111f: MSTORE 00001120: PUSH1 0x40 00001122: ADD 00001123: SWAP1 00001124: JUMP 00001125: JUMPDEST 00001126: PUSH1 0x40 00001128: DUP1 00001129: MLOAD 0000112a: PUSH1 0x1f 0000112c: NOT 0000112d: DUP2 0000112e: DUP5 0000112f: SUB 00001130: ADD 00001131: DUP2 00001132: MSTORE 00001133: SWAP2 00001134: SWAP1 00001135: MSTORE 00001136: DUP1 00001137: MLOAD 00001138: PUSH1 0x20 0000113a: SWAP2 0000113b: DUP3 0000113c: ADD 0000113d: KECCAK256 0000113e: PUSH1 0x01 00001140: PUSH1 0x01 00001142: PUSH1 0xb0 00001144: SHL 00001145: SUB 00001146: NOT 00001147: AND 00001148: SWAP1 00001149: PUSH2 0x1154 0000114c: SWAP1 0000114d: DUP6 0000114e: ADD 0000114f: DUP6 00001150: PUSH2 0x264e 00001153: JUMP 00001154: JUMPDEST 00001155: PUSH1 0x01 00001157: PUSH1 0x01 00001159: PUSH1 0xb0 0000115b: SHL 0000115c: SUB 0000115d: NOT 0000115e: AND 0000115f: EQ 00001160: PUSH2 0x1191 00001163: JUMPI 00001164: PUSH1 0x40 00001166: MLOAD 00001167: PUSH3 0x461bcd 0000116b: PUSH1 0xe5 0000116d: SHL 0000116e: DUP2 0000116f: MSTORE 00001170: PUSH1 0x20 00001172: PUSH1 0x04 00001174: DUP3 00001175: ADD 00001176: MSTORE 00001177: PUSH1 0x03 00001179: PUSH1 0x24 0000117b: DUP3 0000117c: ADD 0000117d: MSTORE 0000117e: PUSH3 0x4e4453 00001182: PUSH1 0xe8 00001184: SHL 00001185: PUSH1 0x44 00001187: DUP3 00001188: ADD 00001189: MSTORE 0000118a: PUSH1 0x64 0000118c: ADD 0000118d: PUSH2 0x01d2 00001190: JUMP 00001191: JUMPDEST 00001192: PUSH1 0x40 00001194: MLOAD 00001195: PUSH4 0x70a08231 0000119a: PUSH1 0xe0 0000119c: SHL 0000119d: DUP2 0000119e: MSTORE 0000119f: ADDRESS 000011a0: PUSH1 0x04 000011a2: DUP3 000011a3: ADD 000011a4: MSTORE 000011a5: PUSH1 0x00 000011a7: SWAP1 000011a8: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 000011bd: SWAP1 000011be: PUSH4 0x70a08231 000011c3: SWAP1 000011c4: PUSH1 0x24 000011c6: ADD 000011c7: PUSH1 0x20 000011c9: PUSH1 0x40 000011cb: MLOAD 000011cc: DUP1 000011cd: DUP4 000011ce: SUB 000011cf: DUP2 000011d0: DUP7 000011d1: GAS 000011d2: STATICCALL 000011d3: ISZERO 000011d4: DUP1 000011d5: ISZERO 000011d6: PUSH2 0x11e3 000011d9: JUMPI 000011da: RETURNDATASIZE 000011db: PUSH1 0x00 000011dd: DUP1 000011de: RETURNDATACOPY 000011df: RETURNDATASIZE 000011e0: PUSH1 0x00 000011e2: REVERT 000011e3: JUMPDEST 000011e4: POP 000011e5: POP 000011e6: POP 000011e7: POP 000011e8: PUSH1 0x40 000011ea: MLOAD 000011eb: RETURNDATASIZE 000011ec: PUSH1 0x1f 000011ee: NOT 000011ef: PUSH1 0x1f 000011f1: DUP3 000011f2: ADD 000011f3: AND 000011f4: DUP3 000011f5: ADD 000011f6: DUP1 000011f7: PUSH1 0x40 000011f9: MSTORE 000011fa: POP 000011fb: DUP2 000011fc: ADD 000011fd: SWAP1 000011fe: PUSH2 0x1207 00001201: SWAP2 00001202: SWAP1 00001203: PUSH2 0x26bd 00001206: JUMP 00001207: JUMPDEST 00001208: SWAP1 00001209: POP 0000120a: PUSH1 0x40 0000120c: DUP5 0000120d: ADD 0000120e: CALLDATALOAD 0000120f: ISZERO 00001210: PUSH2 0x1245 00001213: JUMPI 00001214: PUSH2 0x1245 00001217: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 0000122c: PUSH2 0x123b 0000122f: PUSH1 0x40 00001231: DUP8 00001232: ADD 00001233: PUSH1 0x20 00001235: DUP9 00001236: ADD 00001237: PUSH2 0x246f 0000123a: JUMP 0000123b: JUMPDEST 0000123c: DUP7 0000123d: PUSH1 0x40 0000123f: ADD 00001240: CALLDATALOAD 00001241: PUSH2 0x1d65 00001244: JUMP 00001245: JUMPDEST 00001246: PUSH2 0x1255 00001249: PUSH1 0x40 0000124b: DUP6 0000124c: ADD 0000124d: PUSH1 0x20 0000124f: DUP7 00001250: ADD 00001251: PUSH2 0x246f 00001254: JUMP 00001255: JUMPDEST 00001256: PUSH1 0x01 00001258: PUSH1 0x01 0000125a: PUSH1 0xa0 0000125c: SHL 0000125d: SUB 0000125e: AND 0000125f: PUSH4 0x07a1018e 00001264: DUP5 00001265: DUP5 00001266: PUSH1 0x40 00001268: MLOAD 00001269: DUP4 0000126a: PUSH4 0xffffffff 0000126f: AND 00001270: PUSH1 0xe0 00001272: SHL 00001273: DUP2 00001274: MSTORE 00001275: PUSH1 0x04 00001277: ADD 00001278: PUSH2 0x1282 0000127b: SWAP3 0000127c: SWAP2 0000127d: SWAP1 0000127e: PUSH2 0x26a1 00001281: JUMP 00001282: JUMPDEST 00001283: PUSH1 0x00 00001285: PUSH1 0x40 00001287: MLOAD 00001288: DUP1 00001289: DUP4 0000128a: SUB 0000128b: DUP2 0000128c: PUSH1 0x00 0000128e: DUP8 0000128f: DUP1 00001290: EXTCODESIZE 00001291: ISZERO 00001292: DUP1 00001293: ISZERO 00001294: PUSH2 0x129c 00001297: JUMPI 00001298: PUSH1 0x00 0000129a: DUP1 0000129b: REVERT 0000129c: JUMPDEST 0000129d: POP 0000129e: GAS 0000129f: CALL 000012a0: ISZERO 000012a1: DUP1 000012a2: ISZERO 000012a3: PUSH2 0x12b0 000012a6: JUMPI 000012a7: RETURNDATASIZE 000012a8: PUSH1 0x00 000012aa: DUP1 000012ab: RETURNDATACOPY 000012ac: RETURNDATASIZE 000012ad: PUSH1 0x00 000012af: REVERT 000012b0: JUMPDEST 000012b1: POP 000012b2: POP 000012b3: POP 000012b4: PUSH1 0x01 000012b6: SWAP2 000012b7: SWAP1 000012b8: SWAP2 000012b9: SSTORE 000012ba: POP 000012bb: POP 000012bc: POP 000012bd: POP 000012be: JUMP 000012bf: JUMPDEST 000012c0: PUSH1 0x60 000012c2: PUSH2 0x12c9 000012c5: PUSH2 0x1e8f 000012c8: JUMP 000012c9: JUMPDEST 000012ca: DUP4 000012cb: ISZERO 000012cc: PUSH2 0x12ee 000012cf: JUMPI 000012d0: PUSH2 0x12ee 000012d3: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 000012e8: DUP7 000012e9: DUP7 000012ea: PUSH2 0x1d65 000012ed: JUMP 000012ee: JUMPDEST 000012ef: PUSH1 0x00 000012f1: DUP1 000012f2: DUP7 000012f3: PUSH1 0x01 000012f5: PUSH1 0x01 000012f7: PUSH1 0xa0 000012f9: SHL 000012fa: SUB 000012fb: AND 000012fc: CALLVALUE 000012fd: DUP7 000012fe: DUP7 000012ff: PUSH1 0x40 00001301: MLOAD 00001302: PUSH2 0x130c 00001305: SWAP3 00001306: SWAP2 00001307: SWAP1 00001308: PUSH2 0x2708 0000130b: JUMP 0000130c: JUMPDEST 0000130d: PUSH1 0x00 0000130f: PUSH1 0x40 00001311: MLOAD 00001312: DUP1 00001313: DUP4 00001314: SUB 00001315: DUP2 00001316: DUP6 00001317: DUP8 00001318: GAS 00001319: CALL 0000131a: SWAP3 0000131b: POP 0000131c: POP 0000131d: POP 0000131e: RETURNDATASIZE 0000131f: DUP1 00001320: PUSH1 0x00 00001322: DUP2 00001323: EQ 00001324: PUSH2 0x1349 00001327: JUMPI 00001328: PUSH1 0x40 0000132a: MLOAD 0000132b: SWAP2 0000132c: POP 0000132d: PUSH1 0x1f 0000132f: NOT 00001330: PUSH1 0x3f 00001332: RETURNDATASIZE 00001333: ADD 00001334: AND 00001335: DUP3 00001336: ADD 00001337: PUSH1 0x40 00001339: MSTORE 0000133a: RETURNDATASIZE 0000133b: DUP3 0000133c: MSTORE 0000133d: RETURNDATASIZE 0000133e: PUSH1 0x00 00001340: PUSH1 0x20 00001342: DUP5 00001343: ADD 00001344: RETURNDATACOPY 00001345: PUSH2 0x134e 00001348: JUMP 00001349: JUMPDEST 0000134a: PUSH1 0x60 0000134c: SWAP2 0000134d: POP 0000134e: JUMPDEST 0000134f: POP 00001350: SWAP2 00001351: POP 00001352: SWAP2 00001353: POP 00001354: DUP2 00001355: PUSH2 0x13c2 00001358: JUMPI 00001359: PUSH1 0x44 0000135b: DUP2 0000135c: MLOAD 0000135d: LT 0000135e: ISZERO 0000135f: PUSH2 0x138f 00001362: JUMPI 00001363: PUSH1 0x40 00001365: MLOAD 00001366: PUSH3 0x461bcd 0000136a: PUSH1 0xe5 0000136c: SHL 0000136d: DUP2 0000136e: MSTORE 0000136f: PUSH1 0x20 00001371: PUSH1 0x04 00001373: DUP3 00001374: ADD 00001375: MSTORE 00001376: PUSH1 0x02 00001378: PUSH1 0x24 0000137a: DUP3 0000137b: ADD 0000137c: MSTORE 0000137d: PUSH2 0x29a9 00001380: PUSH1 0xf1 00001382: SHL 00001383: PUSH1 0x44 00001385: DUP3 00001386: ADD 00001387: MSTORE 00001388: PUSH1 0x64 0000138a: ADD 0000138b: PUSH2 0x01d2 0000138e: JUMP 0000138f: JUMPDEST 00001390: PUSH1 0x04 00001392: DUP2 00001393: ADD 00001394: SWAP1 00001395: POP 00001396: DUP1 00001397: DUP1 00001398: PUSH1 0x20 0000139a: ADD 0000139b: SWAP1 0000139c: MLOAD 0000139d: DUP2 0000139e: ADD 0000139f: SWAP1 000013a0: PUSH2 0x13a9 000013a3: SWAP2 000013a4: SWAP1 000013a5: PUSH2 0x2718 000013a8: JUMP 000013a9: JUMPDEST 000013aa: PUSH1 0x40 000013ac: MLOAD 000013ad: PUSH3 0x461bcd 000013b1: PUSH1 0xe5 000013b3: SHL 000013b4: DUP2 000013b5: MSTORE 000013b6: PUSH1 0x04 000013b8: ADD 000013b9: PUSH2 0x01d2 000013bc: SWAP2 000013bd: SWAP1 000013be: PUSH2 0x2609 000013c1: JUMP 000013c2: JUMPDEST 000013c3: SWAP7 000013c4: SWAP6 000013c5: POP 000013c6: POP 000013c7: POP 000013c8: POP 000013c9: POP 000013ca: POP 000013cb: JUMP 000013cc: JUMPDEST 000013cd: PUSH2 0x0d36 000013d0: DUP5 000013d1: DUP5 000013d2: DUP5 000013d3: DUP5 000013d4: PUSH1 0x00 000013d6: PUSH2 0x1912 000013d9: JUMP 000013da: JUMPDEST 000013db: DUP1 000013dc: PUSH2 0x1475 000013df: JUMPI 000013e0: PUSH1 0x40 000013e2: DUP1 000013e3: MLOAD 000013e4: PUSH4 0x05709238 000013e9: DUP1 000013ea: DUP3 000013eb: MSTORE 000013ec: PUSH4 0xae124720 000013f1: DUP3 000013f2: ADD 000013f3: SWAP1 000013f4: SWAP3 000013f5: MSTORE 000013f6: PUSH1 0x00 000013f8: SWAP1 000013f9: DUP3 000013fa: PUSH1 0x20 000013fc: DUP3 000013fd: ADD 000013fe: PUSH4 0xae124700 00001403: DUP1 00001404: CALLDATASIZE 00001405: DUP4 00001406: CALLDATACOPY 00001407: ADD 00001408: SWAP1 00001409: POP 0000140a: POP 0000140b: SWAP1 0000140c: POP 0000140d: PUSH1 0x00 0000140f: JUMPDEST 00001410: PUSH2 0x141a 00001413: DUP4 00001414: PUSH1 0x01 00001416: PUSH2 0x27cd 00001419: JUMP 0000141a: JUMPDEST 0000141b: DUP2 0000141c: LT 0000141d: ISZERO 0000141e: PUSH2 0x0d36 00001421: JUMPI 00001422: PUSH2 0x142b 00001425: DUP2 00001426: NUMBER 00001427: PUSH2 0x230d 0000142a: JUMP 0000142b: JUMPDEST 0000142c: PUSH1 0x40 0000142e: DUP1 0000142f: MLOAD 00001430: SWAP2 00001431: BLOCKHASH 00001432: PUSH1 0x20 00001434: DUP4 00001435: ADD 00001436: MSTORE 00001437: ADD 00001438: PUSH1 0x40 0000143a: MLOAD 0000143b: PUSH1 0x20 0000143d: DUP2 0000143e: DUP4 0000143f: SUB 00001440: SUB 00001441: DUP2 00001442: MSTORE 00001443: SWAP1 00001444: PUSH1 0x40 00001446: MSTORE 00001447: DUP1 00001448: MLOAD 00001449: SWAP1 0000144a: PUSH1 0x20 0000144c: ADD 0000144d: KECCAK256 0000144e: PUSH1 0x00 00001450: SHR 00001451: DUP3 00001452: DUP3 00001453: DUP2 00001454: MLOAD 00001455: DUP2 00001456: LT 00001457: PUSH2 0x1462 0000145a: JUMPI 0000145b: PUSH2 0x1462 0000145e: PUSH2 0x27e0 00001461: JUMP 00001462: JUMPDEST 00001463: PUSH1 0x20 00001465: SWAP1 00001466: DUP2 00001467: MUL 00001468: SWAP2 00001469: SWAP1 0000146a: SWAP2 0000146b: ADD 0000146c: ADD 0000146d: MSTORE 0000146e: PUSH1 0x01 00001470: ADD 00001471: PUSH2 0x140f 00001474: JUMP 00001475: JUMPDEST 00001476: POP 00001477: JUMP 00001478: JUMPDEST 00001479: PUSH1 0x00 0000147b: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00001490: JUMPDEST 00001491: SWAP3 00001492: SWAP2 00001493: POP 00001494: POP 00001495: JUMP 00001496: JUMPDEST 00001497: PUSH1 0x00 00001499: PUSH2 0x14a3 0000149c: DUP7 0000149d: DUP9 0000149e: DUP8 0000149f: PUSH2 0x2095 000014a2: JUMP 000014a3: JUMPDEST 000014a4: ISZERO 000014a5: PUSH2 0x14cf 000014a8: JUMPI 000014a9: DUP3 000014aa: ISZERO 000014ab: PUSH2 0x14c2 000014ae: JUMPI 000014af: PUSH2 0x14bb 000014b2: DUP5 000014b3: PUSH1 0x00 000014b5: DUP10 000014b6: DUP6 000014b7: PUSH2 0x20e2 000014ba: JUMP 000014bb: JUMPDEST 000014bc: SWAP1 000014bd: POP 000014be: PUSH2 0x13c2 000014c1: JUMP 000014c2: JUMPDEST 000014c3: PUSH2 0x14bb 000014c6: PUSH1 0x00 000014c8: DUP6 000014c9: DUP10 000014ca: DUP6 000014cb: PUSH2 0x20e2 000014ce: JUMP 000014cf: JUMPDEST 000014d0: POP 000014d1: PUSH1 0x00 000014d3: SWAP7 000014d4: SWAP6 000014d5: POP 000014d6: POP 000014d7: POP 000014d8: POP 000014d9: POP 000014da: POP 000014db: JUMP 000014dc: JUMPDEST 000014dd: PUSH1 0x00 000014df: PUSH1 0x60 000014e1: PUSH1 0x00 000014e3: DUP1 000014e4: PUSH2 0x14ec 000014e7: DUP12 000014e8: PUSH2 0x2140 000014eb: JUMP 000014ec: JUMPDEST 000014ed: SWAP2 000014ee: POP 000014ef: SWAP2 000014f0: POP 000014f1: DUP1 000014f2: ISZERO 000014f3: PUSH2 0x1542 000014f6: JUMPI 000014f7: PUSH1 0x40 000014f9: MLOAD 000014fa: PUSH1 0x01 000014fc: PUSH1 0x01 000014fe: PUSH1 0xf0 00001500: SHL 00001501: SUB 00001502: NOT 00001503: DUP7 00001504: AND 00001505: PUSH1 0x20 00001507: DUP3 00001508: ADD 00001509: MSTORE 0000150a: PUSH1 0x01 0000150c: PUSH1 0x01 0000150e: PUSH1 0x60 00001510: SHL 00001511: SUB 00001512: NOT 00001513: DUP8 00001514: AND 00001515: PUSH1 0x22 00001517: DUP3 00001518: ADD 00001519: MSTORE 0000151a: PUSH1 0x01 0000151c: PUSH1 0x01 0000151e: PUSH1 0xf8 00001520: SHL 00001521: SUB 00001522: NOT 00001523: DUP4 00001524: AND 00001525: PUSH1 0x36 00001527: DUP3 00001528: ADD 00001529: MSTORE 0000152a: PUSH1 0x37 0000152c: ADD 0000152d: PUSH1 0x40 0000152f: MLOAD 00001530: PUSH1 0x20 00001532: DUP2 00001533: DUP4 00001534: SUB 00001535: SUB 00001536: DUP2 00001537: MSTORE 00001538: SWAP1 00001539: PUSH1 0x40 0000153b: MSTORE 0000153c: SWAP3 0000153d: POP 0000153e: PUSH2 0x1586 00001541: JUMP 00001542: JUMPDEST 00001543: PUSH1 0x40 00001545: MLOAD 00001546: PUSH1 0x01 00001548: PUSH1 0x01 0000154a: PUSH1 0xf0 0000154c: SHL 0000154d: SUB 0000154e: NOT 0000154f: DUP7 00001550: AND 00001551: PUSH1 0x20 00001553: DUP3 00001554: ADD 00001555: MSTORE 00001556: PUSH1 0x01 00001558: PUSH1 0x01 0000155a: PUSH1 0x60 0000155c: SHL 0000155d: SUB 0000155e: NOT 0000155f: DUP1 00001560: DUP9 00001561: AND 00001562: PUSH1 0x22 00001564: DUP4 00001565: ADD 00001566: MSTORE 00001567: PUSH1 0x60 00001569: DUP14 0000156a: SWAP1 0000156b: SHL 0000156c: AND 0000156d: PUSH1 0x36 0000156f: DUP3 00001570: ADD 00001571: MSTORE 00001572: PUSH1 0x4a 00001574: ADD 00001575: PUSH1 0x40 00001577: MLOAD 00001578: PUSH1 0x20 0000157a: DUP2 0000157b: DUP4 0000157c: SUB 0000157d: SUB 0000157e: DUP2 0000157f: MSTORE 00001580: SWAP1 00001581: PUSH1 0x40 00001583: MSTORE 00001584: SWAP3 00001585: POP 00001586: JUMPDEST 00001587: PUSH1 0x00 00001589: DUP1 0000158a: PUSH2 0x1596 0000158d: DUP13 0000158e: DUP11 0000158f: DUP13 00001590: DUP15 00001591: DUP10 00001592: PUSH2 0x2155 00001595: JUMP 00001596: JUMPDEST 00001597: SWAP2 00001598: POP 00001599: SWAP2 0000159a: POP 0000159b: DUP10 0000159c: PUSH2 0x15a5 0000159f: JUMPI 000015a0: DUP2 000015a1: PUSH2 0x15a7 000015a4: JUMP 000015a5: JUMPDEST 000015a6: DUP1 000015a7: JUMPDEST 000015a8: PUSH2 0x15b0 000015ab: SWAP1 000015ac: PUSH2 0x27f6 000015af: JUMP 000015b0: JUMPDEST 000015b1: SWAP14 000015b2: SWAP13 000015b3: POP 000015b4: POP 000015b5: POP 000015b6: POP 000015b7: POP 000015b8: POP 000015b9: POP 000015ba: POP 000015bb: POP 000015bc: POP 000015bd: POP 000015be: POP 000015bf: POP 000015c0: JUMP 000015c1: JUMPDEST 000015c2: PUSH1 0x00 000015c4: PUSH1 0x60 000015c6: PUSH1 0x00 000015c8: DUP1 000015c9: PUSH2 0x15d5 000015cc: DUP6 000015cd: PUSH1 0x20 000015cf: ADD 000015d0: MLOAD 000015d1: PUSH2 0x2140 000015d4: JUMP 000015d5: JUMPDEST 000015d6: SWAP2 000015d7: POP 000015d8: SWAP2 000015d9: POP 000015da: DUP1 000015db: ISZERO 000015dc: PUSH2 0x1686 000015df: JUMPI 000015e0: PUSH1 0x20 000015e2: DUP1 000015e3: DUP8 000015e4: ADD 000015e5: MLOAD 000015e6: DUP8 000015e7: MLOAD 000015e8: PUSH1 0x40 000015ea: DUP1 000015eb: DUP11 000015ec: ADD 000015ed: MLOAD 000015ee: PUSH1 0x80 000015f0: DUP1 000015f1: DUP13 000015f2: ADD 000015f3: MLOAD 000015f4: PUSH1 0x60 000015f6: DUP1 000015f7: DUP15 000015f8: ADD 000015f9: MLOAD 000015fa: SWAP3 000015fb: DUP14 000015fc: ADD 000015fd: MLOAD 000015fe: DUP14 000015ff: DUP3 00001600: ADD 00001601: MLOAD 00001602: SWAP6 00001603: MLOAD 00001604: SWAP8 00001605: ISZERO 00001606: ISZERO 00001607: PUSH1 0xf8 00001609: SHL 0000160a: SWAP9 0000160b: DUP9 0000160c: ADD 0000160d: SWAP9 0000160e: SWAP1 0000160f: SWAP9 00001610: MSTORE 00001611: PUSH1 0x01 00001613: PUSH1 0x01 00001615: PUSH1 0x60 00001617: SHL 00001618: SUB 00001619: NOT 0000161a: SWAP6 0000161b: DUP2 0000161c: SHL 0000161d: DUP7 0000161e: AND 0000161f: PUSH1 0x21 00001621: DUP9 00001622: ADD 00001623: MSTORE 00001624: SWAP3 00001625: DUP4 00001626: SHL 00001627: DUP6 00001628: AND 00001629: PUSH1 0x35 0000162b: DUP8 0000162c: ADD 0000162d: MSTORE 0000162e: PUSH1 0x49 00001630: DUP7 00001631: ADD 00001632: MSTORE 00001633: PUSH1 0x01 00001635: PUSH1 0x01 00001637: PUSH1 0xf0 00001639: SHL 0000163a: SUB 0000163b: NOT 0000163c: PUSH1 0xf0 0000163e: SWAP2 0000163f: DUP3 00001640: SHL 00001641: DUP2 00001642: AND 00001643: PUSH1 0x69 00001645: DUP8 00001646: ADD 00001647: MSTORE 00001648: SWAP6 00001649: SWAP1 0000164a: SHL 0000164b: SWAP1 0000164c: SWAP5 0000164d: AND 0000164e: PUSH1 0x6b 00001650: DUP5 00001651: ADD 00001652: MSTORE 00001653: SWAP1 00001654: SWAP3 00001655: SHL 00001656: SWAP1 00001657: SWAP2 00001658: AND 00001659: PUSH1 0x6d 0000165b: DUP3 0000165c: ADD 0000165d: MSTORE 0000165e: PUSH1 0x01 00001660: PUSH1 0x01 00001662: PUSH1 0xf8 00001664: SHL 00001665: SUB 00001666: NOT 00001667: DUP4 00001668: AND 00001669: PUSH1 0x81 0000166b: DUP3 0000166c: ADD 0000166d: MSTORE 0000166e: PUSH1 0x82 00001670: ADD 00001671: PUSH1 0x40 00001673: MLOAD 00001674: PUSH1 0x20 00001676: DUP2 00001677: DUP4 00001678: SUB 00001679: SUB 0000167a: DUP2 0000167b: MSTORE 0000167c: SWAP1 0000167d: PUSH1 0x40 0000167f: MSTORE 00001680: SWAP3 00001681: POP 00001682: PUSH2 0x172b 00001685: JUMP 00001686: JUMPDEST 00001687: PUSH1 0x20 00001689: DUP1 0000168a: DUP8 0000168b: ADD 0000168c: MLOAD 0000168d: DUP8 0000168e: MLOAD 0000168f: PUSH1 0x40 00001691: DUP1 00001692: DUP11 00001693: ADD 00001694: MLOAD 00001695: PUSH1 0x80 00001697: DUP1 00001698: DUP13 00001699: ADD 0000169a: MLOAD 0000169b: PUSH1 0x60 0000169d: DUP1 0000169e: DUP15 0000169f: ADD 000016a0: MLOAD 000016a1: SWAP3 000016a2: DUP14 000016a3: ADD 000016a4: MLOAD 000016a5: DUP14 000016a6: DUP3 000016a7: ADD 000016a8: MLOAD 000016a9: DUP15 000016aa: DUP11 000016ab: ADD 000016ac: MLOAD 000016ad: SWAP7 000016ae: MLOAD 000016af: SWAP9 000016b0: ISZERO 000016b1: ISZERO 000016b2: PUSH1 0xf8 000016b4: SHL 000016b5: SWAP10 000016b6: DUP10 000016b7: ADD 000016b8: SWAP10 000016b9: SWAP1 000016ba: SWAP10 000016bb: MSTORE 000016bc: PUSH1 0x01 000016be: PUSH1 0x01 000016c0: PUSH1 0x60 000016c2: SHL 000016c3: SUB 000016c4: NOT 000016c5: SWAP7 000016c6: DUP3 000016c7: SHL 000016c8: DUP8 000016c9: AND 000016ca: PUSH1 0x21 000016cc: DUP10 000016cd: ADD 000016ce: MSTORE 000016cf: SWAP4 000016d0: DUP2 000016d1: SHL 000016d2: DUP7 000016d3: AND 000016d4: PUSH1 0x35 000016d6: DUP9 000016d7: ADD 000016d8: MSTORE 000016d9: PUSH1 0x49 000016db: DUP8 000016dc: ADD 000016dd: SWAP2 000016de: SWAP1 000016df: SWAP2 000016e0: MSTORE 000016e1: PUSH1 0x01 000016e3: PUSH1 0x01 000016e5: PUSH1 0xf0 000016e7: SHL 000016e8: SUB 000016e9: NOT 000016ea: PUSH1 0xf0 000016ec: SWAP3 000016ed: DUP4 000016ee: SHL 000016ef: DUP2 000016f0: AND 000016f1: PUSH1 0x69 000016f3: DUP9 000016f4: ADD 000016f5: MSTORE 000016f6: SWAP3 000016f7: SWAP1 000016f8: SWAP2 000016f9: SHL 000016fa: SWAP1 000016fb: SWAP2 000016fc: AND 000016fd: PUSH1 0x6b 000016ff: DUP6 00001700: ADD 00001701: MSTORE 00001702: SWAP4 00001703: DUP5 00001704: SHL 00001705: DUP3 00001706: AND 00001707: PUSH1 0x6d 00001709: DUP5 0000170a: ADD 0000170b: MSTORE 0000170c: SWAP1 0000170d: SWAP3 0000170e: SHL 0000170f: SWAP1 00001710: SWAP2 00001711: AND 00001712: PUSH1 0x81 00001714: DUP3 00001715: ADD 00001716: MSTORE 00001717: PUSH1 0x95 00001719: ADD 0000171a: PUSH1 0x40 0000171c: MLOAD 0000171d: PUSH1 0x20 0000171f: DUP2 00001720: DUP4 00001721: SUB 00001722: SUB 00001723: DUP2 00001724: MSTORE 00001725: SWAP1 00001726: PUSH1 0x40 00001728: MSTORE 00001729: SWAP3 0000172a: POP 0000172b: JUMPDEST 0000172c: POP 0000172d: POP 0000172e: PUSH1 0x00 00001730: DUP1 00001731: PUSH2 0x174a 00001734: DUP6 00001735: PUSH1 0x00 00001737: ADD 00001738: MLOAD 00001739: PUSH1 0x00 0000173b: DUP8 0000173c: PUSH1 0xa0 0000173e: ADD 0000173f: MLOAD 00001740: DUP9 00001741: PUSH1 0x40 00001743: ADD 00001744: MLOAD 00001745: DUP8 00001746: PUSH2 0x2155 00001749: JUMP 0000174a: JUMPDEST 0000174b: SWAP2 0000174c: POP 0000174d: SWAP2 0000174e: POP 0000174f: DUP5 00001750: PUSH1 0xa0 00001752: ADD 00001753: MLOAD 00001754: PUSH2 0x175d 00001757: JUMPI 00001758: DUP2 00001759: PUSH2 0x175f 0000175c: JUMP 0000175d: JUMPDEST 0000175e: DUP1 0000175f: JUMPDEST 00001760: PUSH2 0x13c2 00001763: SWAP1 00001764: PUSH2 0x27f6 00001767: JUMP 00001768: JUMPDEST 00001769: PUSH2 0x0489 0000176c: PUSH20 0x6e6759b3ef49bab693127c9ea126eb6e549bc3d3 00001781: CALLER 00001782: EQ 00001783: DUP1 00001784: PUSH2 0x0484 00001787: JUMPI 00001788: POP 00001789: PUSH20 0xea35df26f76aae16bb7175695525d562efae138f 0000179e: CALLER 0000179f: EQ 000017a0: PUSH2 0x13da 000017a3: JUMP 000017a4: JUMPDEST 000017a5: CALLVALUE 000017a6: ISZERO 000017a7: PUSH2 0x17d8 000017aa: JUMPI 000017ab: PUSH1 0x40 000017ad: MLOAD 000017ae: COINBASE 000017af: SWAP1 000017b0: CALLVALUE 000017b1: DUP1 000017b2: ISZERO 000017b3: PUSH2 0x08fc 000017b6: MUL 000017b7: SWAP2 000017b8: PUSH1 0x00 000017ba: DUP2 000017bb: DUP2 000017bc: DUP2 000017bd: DUP6 000017be: DUP9 000017bf: DUP9 000017c0: CALL 000017c1: SWAP4 000017c2: POP 000017c3: POP 000017c4: POP 000017c5: POP 000017c6: ISZERO 000017c7: DUP1 000017c8: ISZERO 000017c9: PUSH2 0x17d6 000017cc: JUMPI 000017cd: RETURNDATASIZE 000017ce: PUSH1 0x00 000017d0: DUP1 000017d1: RETURNDATACOPY 000017d2: RETURNDATASIZE 000017d3: PUSH1 0x00 000017d5: REVERT 000017d6: JUMPDEST 000017d7: POP 000017d8: JUMPDEST 000017d9: PUSH1 0x00 000017db: SLOAD 000017dc: PUSH9 0x056bc75e2d63100000 000017e6: DUP2 000017e7: GT 000017e8: PUSH2 0x1819 000017eb: JUMPI 000017ec: PUSH1 0x40 000017ee: MLOAD 000017ef: PUSH3 0x461bcd 000017f3: PUSH1 0xe5 000017f5: SHL 000017f6: DUP2 000017f7: MSTORE 000017f8: PUSH1 0x20 000017fa: PUSH1 0x04 000017fc: DUP3 000017fd: ADD 000017fe: MSTORE 000017ff: PUSH1 0x03 00001801: PUSH1 0x24 00001803: DUP3 00001804: ADD 00001805: MSTORE 00001806: PUSH3 0x050303 0000180a: PUSH1 0xec 0000180c: SHL 0000180d: PUSH1 0x44 0000180f: DUP3 00001810: ADD 00001811: MSTORE 00001812: PUSH1 0x64 00001814: ADD 00001815: PUSH2 0x01d2 00001818: JUMP 00001819: JUMPDEST 0000181a: PUSH1 0x40 0000181c: MLOAD 0000181d: PUSH4 0x70a08231 00001822: PUSH1 0xe0 00001824: SHL 00001825: DUP2 00001826: MSTORE 00001827: ADDRESS 00001828: PUSH1 0x04 0000182a: DUP3 0000182b: ADD 0000182c: MSTORE 0000182d: PUSH1 0x00 0000182f: SWAP1 00001830: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00001845: SWAP1 00001846: PUSH4 0x70a08231 0000184b: SWAP1 0000184c: PUSH1 0x24 0000184e: ADD 0000184f: PUSH1 0x20 00001851: PUSH1 0x40 00001853: MLOAD 00001854: DUP1 00001855: DUP4 00001856: SUB 00001857: DUP2 00001858: DUP7 00001859: GAS 0000185a: STATICCALL 0000185b: ISZERO 0000185c: DUP1 0000185d: ISZERO 0000185e: PUSH2 0x186b 00001861: JUMPI 00001862: RETURNDATASIZE 00001863: PUSH1 0x00 00001865: DUP1 00001866: RETURNDATACOPY 00001867: RETURNDATASIZE 00001868: PUSH1 0x00 0000186a: REVERT 0000186b: JUMPDEST 0000186c: POP 0000186d: POP 0000186e: POP 0000186f: POP 00001870: PUSH1 0x40 00001872: MLOAD 00001873: RETURNDATASIZE 00001874: PUSH1 0x1f 00001876: NOT 00001877: PUSH1 0x1f 00001879: DUP3 0000187a: ADD 0000187b: AND 0000187c: DUP3 0000187d: ADD 0000187e: DUP1 0000187f: PUSH1 0x40 00001881: MSTORE 00001882: POP 00001883: DUP2 00001884: ADD 00001885: SWAP1 00001886: PUSH2 0x188f 00001889: SWAP2 0000188a: SWAP1 0000188b: PUSH2 0x26bd 0000188e: JUMP 0000188f: JUMPDEST 00001890: SWAP1 00001891: POP 00001892: DUP3 00001893: PUSH2 0x189c 00001896: CALLVALUE 00001897: DUP4 00001898: PUSH2 0x230d 0000189b: JUMP 0000189c: JUMPDEST 0000189d: GT 0000189e: PUSH2 0x18cf 000018a1: JUMPI 000018a2: PUSH1 0x40 000018a4: MLOAD 000018a5: PUSH3 0x461bcd 000018a9: PUSH1 0xe5 000018ab: SHL 000018ac: DUP2 000018ad: MSTORE 000018ae: PUSH1 0x20 000018b0: PUSH1 0x04 000018b2: DUP3 000018b3: ADD 000018b4: MSTORE 000018b5: PUSH1 0x03 000018b7: PUSH1 0x24 000018b9: DUP3 000018ba: ADD 000018bb: MSTORE 000018bc: PUSH3 0x503031 000018c0: PUSH1 0xe8 000018c2: SHL 000018c3: PUSH1 0x44 000018c5: DUP3 000018c6: ADD 000018c7: MSTORE 000018c8: PUSH1 0x64 000018ca: ADD 000018cb: PUSH2 0x01d2 000018ce: JUMP 000018cf: JUMPDEST 000018d0: DUP2 000018d1: PUSH2 0x18da 000018d4: CALLVALUE 000018d5: DUP4 000018d6: PUSH2 0x230d 000018d9: JUMP 000018da: JUMPDEST 000018db: GT 000018dc: PUSH2 0x190d 000018df: JUMPI 000018e0: PUSH1 0x40 000018e2: MLOAD 000018e3: PUSH3 0x461bcd 000018e7: PUSH1 0xe5 000018e9: SHL 000018ea: DUP2 000018eb: MSTORE 000018ec: PUSH1 0x20 000018ee: PUSH1 0x04 000018f0: DUP3 000018f1: ADD 000018f2: MSTORE 000018f3: PUSH1 0x03 000018f5: PUSH1 0x24 000018f7: DUP3 000018f8: ADD 000018f9: MSTORE 000018fa: PUSH3 0x281819 000018fe: PUSH1 0xe9 00001900: SHL 00001901: PUSH1 0x44 00001903: DUP3 00001904: ADD 00001905: MSTORE 00001906: PUSH1 0x64 00001908: ADD 00001909: PUSH2 0x01d2 0000190c: JUMP 0000190d: JUMPDEST 0000190e: POP 0000190f: POP 00001910: POP 00001911: JUMP 00001912: JUMPDEST 00001913: PUSH2 0x191a 00001916: PUSH2 0x2220 00001919: JUMP 0000191a: JUMPDEST 0000191b: PUSH1 0x00 0000191d: DUP6 0000191e: SGT 0000191f: DUP1 00001920: PUSH2 0x1929 00001923: JUMPI 00001924: POP 00001925: PUSH1 0x00 00001927: DUP5 00001928: SGT 00001929: JUMPDEST 0000192a: PUSH2 0x195b 0000192d: JUMPI 0000192e: PUSH1 0x40 00001930: MLOAD 00001931: PUSH3 0x461bcd 00001935: PUSH1 0xe5 00001937: SHL 00001938: DUP2 00001939: MSTORE 0000193a: PUSH1 0x20 0000193c: PUSH1 0x04 0000193e: DUP3 0000193f: ADD 00001940: MSTORE 00001941: PUSH1 0x03 00001943: PUSH1 0x24 00001945: DUP3 00001946: ADD 00001947: MSTORE 00001948: PUSH3 0x056333 0000194c: PUSH1 0xec 0000194e: SHL 0000194f: PUSH1 0x44 00001951: DUP3 00001952: ADD 00001953: MSTORE 00001954: PUSH1 0x64 00001956: ADD 00001957: PUSH2 0x01d2 0000195a: JUMP 0000195b: JUMPDEST 0000195c: DUP2 0000195d: PUSH1 0x16 0000195f: DUP2 00001960: GT 00001961: PUSH2 0x1992 00001964: JUMPI 00001965: PUSH1 0x40 00001967: MLOAD 00001968: PUSH3 0x461bcd 0000196c: PUSH1 0xe5 0000196e: SHL 0000196f: DUP2 00001970: MSTORE 00001971: PUSH1 0x20 00001973: PUSH1 0x04 00001975: DUP3 00001976: ADD 00001977: MSTORE 00001978: PUSH1 0x03 0000197a: PUSH1 0x24 0000197c: DUP3 0000197d: ADD 0000197e: MSTORE 0000197f: PUSH3 0x563331 00001983: PUSH1 0xe8 00001985: SHL 00001986: PUSH1 0x44 00001988: DUP3 00001989: ADD 0000198a: MSTORE 0000198b: PUSH1 0x64 0000198d: ADD 0000198e: PUSH2 0x01d2 00001991: JUMP 00001992: JUMPDEST 00001993: PUSH1 0x40 00001995: DUP1 00001996: MLOAD 00001997: PUSH1 0xa0 00001999: DUP2 0000199a: ADD 0000199b: DUP3 0000199c: MSTORE 0000199d: PUSH1 0x00 0000199f: DUP1 000019a0: DUP3 000019a1: MSTORE 000019a2: PUSH1 0x20 000019a4: DUP3 000019a5: ADD 000019a6: DUP2 000019a7: SWAP1 000019a8: MSTORE 000019a9: SWAP2 000019aa: DUP2 000019ab: ADD 000019ac: DUP3 000019ad: SWAP1 000019ae: MSTORE 000019af: PUSH1 0x60 000019b1: DUP2 000019b2: ADD 000019b3: DUP3 000019b4: SWAP1 000019b5: MSTORE 000019b6: PUSH1 0x80 000019b8: DUP2 000019b9: ADD 000019ba: SWAP2 000019bb: SWAP1 000019bc: SWAP2 000019bd: MSTORE 000019be: PUSH1 0x2a 000019c0: DUP3 000019c1: GT 000019c2: PUSH1 0x00 000019c4: DUP1 000019c5: DUP1 000019c6: DUP1 000019c7: DUP1 000019c8: DUP6 000019c9: PUSH2 0x1a0b 000019cc: JUMPI 000019cd: PUSH1 0x40 000019cf: MLOAD 000019d0: PUSH1 0x2a 000019d2: PUSH1 0x84 000019d4: DUP3 000019d5: CALLDATACOPY 000019d6: PUSH2 0xffff 000019d9: PUSH1 0x1e 000019db: DUP3 000019dc: SUB 000019dd: MLOAD 000019de: AND 000019df: SWAP3 000019e0: POP 000019e1: PUSH1 0x0a 000019e3: DUP2 000019e4: SUB 000019e5: MLOAD 000019e6: SWAP4 000019e7: POP 000019e8: DUP9 000019e9: PUSH1 0x17 000019eb: DUP2 000019ec: EQ 000019ed: PUSH2 0x19fc 000019f0: JUMPI 000019f1: PUSH1 0x0a 000019f3: DUP3 000019f4: ADD 000019f5: MLOAD 000019f6: SWAP6 000019f7: POP 000019f8: PUSH2 0x1a04 000019fb: JUMP 000019fc: JUMPDEST 000019fd: PUSH1 0x16 000019ff: DUP3 00001a00: ADD 00001a01: MLOAD 00001a02: SWAP3 00001a03: POP 00001a04: JUMPDEST 00001a05: POP 00001a06: POP 00001a07: PUSH2 0x1a87 00001a0a: JUMP 00001a0b: JUMPDEST 00001a0c: PUSH1 0x40 00001a0e: MLOAD 00001a0f: PUSH1 0x75 00001a11: PUSH1 0x84 00001a13: DUP3 00001a14: CALLDATACOPY 00001a15: PUSH1 0x1f 00001a17: DUP2 00001a18: SUB 00001a19: MLOAD 00001a1a: DUP9 00001a1b: MSTORE 00001a1c: PUSH1 0x01 00001a1e: PUSH1 0x01 00001a20: PUSH1 0xa0 00001a22: SHL 00001a23: SUB 00001a24: PUSH1 0x0b 00001a26: DUP3 00001a27: SUB 00001a28: MLOAD 00001a29: AND 00001a2a: PUSH1 0x20 00001a2c: DUP10 00001a2d: ADD 00001a2e: MSTORE 00001a2f: PUSH1 0x01 00001a31: PUSH1 0x01 00001a33: PUSH1 0xa0 00001a35: SHL 00001a36: SUB 00001a37: PUSH1 0x09 00001a39: DUP3 00001a3a: ADD 00001a3b: MLOAD 00001a3c: AND 00001a3d: PUSH1 0x40 00001a3f: DUP10 00001a40: ADD 00001a41: MSTORE 00001a42: PUSH1 0x29 00001a44: DUP2 00001a45: ADD 00001a46: MLOAD 00001a47: PUSH1 0x60 00001a49: DUP10 00001a4a: ADD 00001a4b: MSTORE 00001a4c: PUSH1 0x49 00001a4e: DUP2 00001a4f: ADD 00001a50: MLOAD 00001a51: PUSH1 0x80 00001a53: DUP10 00001a54: ADD 00001a55: MSTORE 00001a56: PUSH2 0xffff 00001a59: PUSH1 0x2d 00001a5b: DUP3 00001a5c: ADD 00001a5d: MLOAD 00001a5e: AND 00001a5f: SWAP3 00001a60: POP 00001a61: PUSH1 0x41 00001a63: DUP2 00001a64: ADD 00001a65: MLOAD 00001a66: SWAP4 00001a67: POP 00001a68: DUP9 00001a69: PUSH1 0x62 00001a6b: DUP2 00001a6c: EQ 00001a6d: PUSH2 0x1a7c 00001a70: JUMPI 00001a71: PUSH1 0x55 00001a73: DUP3 00001a74: ADD 00001a75: MLOAD 00001a76: SWAP6 00001a77: POP 00001a78: PUSH2 0x1a84 00001a7b: JUMP 00001a7c: JUMPDEST 00001a7d: PUSH1 0x61 00001a7f: DUP3 00001a80: ADD 00001a81: MLOAD 00001a82: SWAP3 00001a83: POP 00001a84: JUMPDEST 00001a85: POP 00001a86: POP 00001a87: JUMPDEST 00001a88: PUSH1 0x01 00001a8a: PUSH1 0x01 00001a8c: PUSH1 0xa0 00001a8e: SHL 00001a8f: SUB 00001a90: DUP5 00001a91: AND 00001a92: PUSH2 0x1aa1 00001a95: JUMPI 00001a96: PUSH2 0x1a9e 00001a99: DUP2 00001a9a: PUSH2 0x1478 00001a9d: JUMP 00001a9e: JUMPDEST 00001a9f: SWAP4 00001aa0: POP 00001aa1: JUMPDEST 00001aa2: PUSH1 0x00 00001aa4: DUP1 00001aa5: DUP5 00001aa6: PUSH1 0x01 00001aa8: PUSH1 0x01 00001aaa: PUSH1 0xa0 00001aac: SHL 00001aad: SUB 00001aae: AND 00001aaf: DUP7 00001ab0: PUSH1 0x01 00001ab2: PUSH1 0x01 00001ab4: PUSH1 0xa0 00001ab6: SHL 00001ab7: SUB 00001ab8: AND 00001ab9: LT 00001aba: PUSH2 0x1ac4 00001abd: JUMPI 00001abe: DUP5 00001abf: DUP7 00001ac0: PUSH2 0x1ac7 00001ac3: JUMP 00001ac4: JUMPDEST 00001ac5: DUP6 00001ac6: DUP6 00001ac7: JUMPDEST 00001ac8: SWAP2 00001ac9: POP 00001aca: SWAP2 00001acb: POP 00001acc: DUP11 00001acd: PUSH2 0x1aed 00001ad0: JUMPI 00001ad1: PUSH20 0x07e610c722b66148d8c6b92967c99cd1ba8c7e61 00001ae6: PUSH1 0x62 00001ae8: SHL 00001ae9: PUSH2 0x1b06 00001aec: JUMP 00001aed: JUMPDEST 00001aee: PUSH20 0x41ff9aa7e16b8b1a8a8dc4f0efacd93d02d071c9 00001b03: PUSH1 0x60 00001b05: SHL 00001b06: JUMPDEST 00001b07: PUSH1 0x40 00001b09: DUP1 00001b0a: MLOAD 00001b0b: PUSH1 0x01 00001b0d: PUSH1 0x01 00001b0f: PUSH1 0xa0 00001b11: SHL 00001b12: SUB 00001b13: DUP1 00001b14: DUP7 00001b15: AND 00001b16: PUSH1 0x20 00001b18: DUP4 00001b19: ADD 00001b1a: MSTORE 00001b1b: DUP5 00001b1c: AND 00001b1d: SWAP2 00001b1e: DUP2 00001b1f: ADD 00001b20: SWAP2 00001b21: SWAP1 00001b22: SWAP2 00001b23: MSTORE 00001b24: PUSH3 0xffffff 00001b28: DUP7 00001b29: AND 00001b2a: PUSH1 0x60 00001b2c: DUP3 00001b2d: ADD 00001b2e: MSTORE 00001b2f: PUSH1 0x80 00001b31: ADD 00001b32: PUSH1 0x40 00001b34: MLOAD 00001b35: PUSH1 0x20 00001b37: DUP2 00001b38: DUP4 00001b39: SUB 00001b3a: SUB 00001b3b: DUP2 00001b3c: MSTORE 00001b3d: SWAP1 00001b3e: PUSH1 0x40 00001b40: MSTORE 00001b41: DUP1 00001b42: MLOAD 00001b43: SWAP1 00001b44: PUSH1 0x20 00001b46: ADD 00001b47: KECCAK256 00001b48: DUP13 00001b49: PUSH2 0x1b72 00001b4c: JUMPI 00001b4d: PUSH32 0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54 00001b6e: PUSH2 0x1b94 00001b71: JUMP 00001b72: JUMPDEST 00001b73: PUSH32 0x6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e2 00001b94: JUMPDEST 00001b95: PUSH1 0x40 00001b97: MLOAD 00001b98: PUSH1 0x01 00001b9a: PUSH1 0x01 00001b9c: PUSH1 0xf8 00001b9e: SHL 00001b9f: SUB 00001ba0: NOT 00001ba1: PUSH1 0x20 00001ba3: DUP3 00001ba4: ADD 00001ba5: MSTORE 00001ba6: PUSH1 0x01 00001ba8: PUSH1 0x01 00001baa: PUSH1 0x60 00001bac: SHL 00001bad: SUB 00001bae: NOT 00001baf: SWAP1 00001bb0: SWAP4 00001bb1: AND 00001bb2: PUSH1 0x21 00001bb4: DUP5 00001bb5: ADD 00001bb6: MSTORE 00001bb7: PUSH1 0x35 00001bb9: DUP4 00001bba: ADD 00001bbb: SWAP2 00001bbc: SWAP1 00001bbd: SWAP2 00001bbe: MSTORE 00001bbf: PUSH1 0x55 00001bc1: DUP3 00001bc2: ADD 00001bc3: MSTORE 00001bc4: PUSH1 0x75 00001bc6: ADD 00001bc7: PUSH1 0x40 00001bc9: MLOAD 00001bca: PUSH1 0x20 00001bcc: DUP2 00001bcd: DUP4 00001bce: SUB 00001bcf: SUB 00001bd0: DUP2 00001bd1: MSTORE 00001bd2: SWAP1 00001bd3: PUSH1 0x40 00001bd5: MSTORE 00001bd6: DUP1 00001bd7: MLOAD 00001bd8: SWAP1 00001bd9: PUSH1 0x20 00001bdb: ADD 00001bdc: KECCAK256 00001bdd: PUSH1 0x00 00001bdf: SHR 00001be0: SWAP7 00001be1: POP 00001be2: POP 00001be3: POP 00001be4: POP 00001be5: POP 00001be6: POP 00001be7: PUSH1 0x00 00001be9: DUP1 00001bea: DUP12 00001beb: SGT 00001bec: PUSH2 0x1bf5 00001bef: JUMPI 00001bf0: DUP10 00001bf1: PUSH2 0x1bf7 00001bf4: JUMP 00001bf5: JUMPDEST 00001bf6: DUP11 00001bf7: JUMPDEST 00001bf8: SWAP1 00001bf9: POP 00001bfa: CALLER 00001bfb: PUSH1 0x01 00001bfd: PUSH1 0x01 00001bff: PUSH1 0xa0 00001c01: SHL 00001c02: SUB 00001c03: DUP5 00001c04: AND 00001c05: EQ 00001c06: PUSH2 0x1c37 00001c09: JUMPI 00001c0a: PUSH1 0x40 00001c0c: MLOAD 00001c0d: PUSH3 0x461bcd 00001c11: PUSH1 0xe5 00001c13: SHL 00001c14: DUP2 00001c15: MSTORE 00001c16: PUSH1 0x20 00001c18: PUSH1 0x04 00001c1a: DUP3 00001c1b: ADD 00001c1c: MSTORE 00001c1d: PUSH1 0x03 00001c1f: PUSH1 0x24 00001c21: DUP3 00001c22: ADD 00001c23: MSTORE 00001c24: PUSH3 0x2b1999 00001c28: PUSH1 0xe9 00001c2a: SHL 00001c2b: PUSH1 0x44 00001c2d: DUP3 00001c2e: ADD 00001c2f: MSTORE 00001c30: PUSH1 0x64 00001c32: ADD 00001c33: PUSH2 0x01d2 00001c36: JUMP 00001c37: JUMPDEST 00001c38: DUP4 00001c39: ISZERO 00001c3a: PUSH2 0x1d1c 00001c3d: JUMPI 00001c3e: DUP5 00001c3f: MLOAD 00001c40: ISZERO 00001c41: PUSH2 0x1cad 00001c44: JUMPI 00001c45: PUSH2 0x1c76 00001c48: DUP6 00001c49: PUSH1 0x20 00001c4b: ADD 00001c4c: MLOAD 00001c4d: DUP7 00001c4e: PUSH1 0x40 00001c50: ADD 00001c51: MLOAD 00001c52: DUP8 00001c53: PUSH1 0x60 00001c55: ADD 00001c56: MLOAD 00001c57: DUP5 00001c58: DUP7 00001c59: PUSH1 0x01 00001c5b: PUSH1 0x01 00001c5d: PUSH1 0xa0 00001c5f: SHL 00001c60: SUB 00001c61: AND 00001c62: DUP11 00001c63: PUSH1 0x40 00001c65: ADD 00001c66: MLOAD 00001c67: PUSH1 0x01 00001c69: PUSH1 0x01 00001c6b: PUSH1 0xa0 00001c6d: SHL 00001c6e: SUB 00001c6f: AND 00001c70: GT 00001c71: DUP9 00001c72: PUSH2 0x1496 00001c75: JUMP 00001c76: JUMPDEST 00001c77: PUSH2 0x1ca8 00001c7a: JUMPI 00001c7b: PUSH1 0x40 00001c7d: MLOAD 00001c7e: PUSH3 0x461bcd 00001c82: PUSH1 0xe5 00001c84: SHL 00001c85: DUP2 00001c86: MSTORE 00001c87: PUSH1 0x20 00001c89: PUSH1 0x04 00001c8b: DUP3 00001c8c: ADD 00001c8d: MSTORE 00001c8e: PUSH1 0x03 00001c90: PUSH1 0x24 00001c92: DUP3 00001c93: ADD 00001c94: MSTORE 00001c95: PUSH3 0x056323 00001c99: PUSH1 0xec 00001c9b: SHL 00001c9c: PUSH1 0x44 00001c9e: DUP3 00001c9f: ADD 00001ca0: MSTORE 00001ca1: PUSH1 0x64 00001ca3: ADD 00001ca4: PUSH2 0x01d2 00001ca7: JUMP 00001ca8: JUMPDEST 00001ca9: PUSH2 0x1d58 00001cac: JUMP 00001cad: JUMPDEST 00001cae: DUP1 00001caf: PUSH2 0x1ce8 00001cb2: DUP7 00001cb3: PUSH1 0x40 00001cb5: ADD 00001cb6: MLOAD 00001cb7: DUP8 00001cb8: PUSH1 0x20 00001cba: ADD 00001cbb: MLOAD 00001cbc: DUP9 00001cbd: PUSH1 0x60 00001cbf: ADD 00001cc0: MLOAD 00001cc1: DUP7 00001cc2: PUSH1 0x01 00001cc4: PUSH1 0x01 00001cc6: PUSH1 0xa0 00001cc8: SHL 00001cc9: SUB 00001cca: AND 00001ccb: DUP11 00001ccc: PUSH1 0x40 00001cce: ADD 00001ccf: MLOAD 00001cd0: PUSH1 0x01 00001cd2: PUSH1 0x01 00001cd4: PUSH1 0xa0 00001cd6: SHL 00001cd7: SUB 00001cd8: AND 00001cd9: LT 00001cda: DUP9 00001cdb: DUP9 00001cdc: PUSH1 0x60 00001cde: SHL 00001cdf: DUP13 00001ce0: PUSH1 0x80 00001ce2: ADD 00001ce3: MLOAD 00001ce4: PUSH2 0x14dc 00001ce7: JUMP 00001ce8: JUMPDEST 00001ce9: LT 00001cea: ISZERO 00001ceb: PUSH2 0x1ca8 00001cee: JUMPI 00001cef: PUSH1 0x40 00001cf1: MLOAD 00001cf2: PUSH3 0x461bcd 00001cf6: PUSH1 0xe5 00001cf8: SHL 00001cf9: DUP2 00001cfa: MSTORE 00001cfb: PUSH1 0x20 00001cfd: PUSH1 0x04 00001cff: DUP3 00001d00: ADD 00001d01: MSTORE 00001d02: PUSH1 0x03 00001d04: PUSH1 0x24 00001d06: DUP3 00001d07: ADD 00001d08: MSTORE 00001d09: PUSH3 0x563333 00001d0d: PUSH1 0xe8 00001d0f: SHL 00001d10: PUSH1 0x44 00001d12: DUP3 00001d13: ADD 00001d14: MSTORE 00001d15: PUSH1 0x64 00001d17: ADD 00001d18: PUSH2 0x01d2 00001d1b: JUMP 00001d1c: JUMPDEST 00001d1d: PUSH2 0x1d27 00001d20: DUP3 00001d21: DUP5 00001d22: DUP4 00001d23: PUSH2 0x2095 00001d26: JUMP 00001d27: JUMPDEST 00001d28: PUSH2 0x1d58 00001d2b: JUMPI 00001d2c: PUSH1 0x40 00001d2e: MLOAD 00001d2f: PUSH3 0x461bcd 00001d33: PUSH1 0xe5 00001d35: SHL 00001d36: DUP2 00001d37: MSTORE 00001d38: PUSH1 0x20 00001d3a: PUSH1 0x04 00001d3c: DUP3 00001d3d: ADD 00001d3e: MSTORE 00001d3f: PUSH1 0x02 00001d41: PUSH1 0x24 00001d43: DUP3 00001d44: ADD 00001d45: MSTORE 00001d46: PUSH2 0x0563 00001d49: PUSH1 0xf4 00001d4b: SHL 00001d4c: PUSH1 0x44 00001d4e: DUP3 00001d4f: ADD 00001d50: MSTORE 00001d51: PUSH1 0x64 00001d53: ADD 00001d54: PUSH2 0x01d2 00001d57: JUMP 00001d58: JUMPDEST 00001d59: POP 00001d5a: POP 00001d5b: POP 00001d5c: POP 00001d5d: POP 00001d5e: POP 00001d5f: POP 00001d60: POP 00001d61: POP 00001d62: POP 00001d63: POP 00001d64: JUMP 00001d65: JUMPDEST 00001d66: PUSH1 0x40 00001d68: DUP1 00001d69: MLOAD 00001d6a: PUSH1 0x01 00001d6c: PUSH1 0x01 00001d6e: PUSH1 0xa0 00001d70: SHL 00001d71: SUB 00001d72: DUP5 00001d73: DUP2 00001d74: AND 00001d75: PUSH1 0x24 00001d77: DUP4 00001d78: ADD 00001d79: MSTORE 00001d7a: PUSH1 0x44 00001d7c: DUP1 00001d7d: DUP4 00001d7e: ADD 00001d7f: DUP6 00001d80: SWAP1 00001d81: MSTORE 00001d82: DUP4 00001d83: MLOAD 00001d84: DUP1 00001d85: DUP5 00001d86: SUB 00001d87: SWAP1 00001d88: SWAP2 00001d89: ADD 00001d8a: DUP2 00001d8b: MSTORE 00001d8c: PUSH1 0x64 00001d8e: SWAP1 00001d8f: SWAP3 00001d90: ADD 00001d91: DUP4 00001d92: MSTORE 00001d93: PUSH1 0x20 00001d95: DUP3 00001d96: ADD 00001d97: DUP1 00001d98: MLOAD 00001d99: PUSH1 0x01 00001d9b: PUSH1 0x01 00001d9d: PUSH1 0xe0 00001d9f: SHL 00001da0: SUB 00001da1: AND 00001da2: PUSH4 0xa9059cbb 00001da7: PUSH1 0xe0 00001da9: SHL 00001daa: OR 00001dab: SWAP1 00001dac: MSTORE 00001dad: SWAP2 00001dae: MLOAD 00001daf: PUSH1 0x00 00001db1: SWAP3 00001db2: DUP4 00001db3: SWAP3 00001db4: SWAP1 00001db5: DUP8 00001db6: AND 00001db7: SWAP2 00001db8: PUSH2 0x1dc1 00001dbb: SWAP2 00001dbc: SWAP1 00001dbd: PUSH2 0x2632 00001dc0: JUMP 00001dc1: JUMPDEST 00001dc2: PUSH1 0x00 00001dc4: PUSH1 0x40 00001dc6: MLOAD 00001dc7: DUP1 00001dc8: DUP4 00001dc9: SUB 00001dca: DUP2 00001dcb: PUSH1 0x00 00001dcd: DUP7 00001dce: GAS 00001dcf: CALL 00001dd0: SWAP2 00001dd1: POP 00001dd2: POP 00001dd3: RETURNDATASIZE 00001dd4: DUP1 00001dd5: PUSH1 0x00 00001dd7: DUP2 00001dd8: EQ 00001dd9: PUSH2 0x1dfe 00001ddc: JUMPI 00001ddd: PUSH1 0x40 00001ddf: MLOAD 00001de0: SWAP2 00001de1: POP 00001de2: PUSH1 0x1f 00001de4: NOT 00001de5: PUSH1 0x3f 00001de7: RETURNDATASIZE 00001de8: ADD 00001de9: AND 00001dea: DUP3 00001deb: ADD 00001dec: PUSH1 0x40 00001dee: MSTORE 00001def: RETURNDATASIZE 00001df0: DUP3 00001df1: MSTORE 00001df2: RETURNDATASIZE 00001df3: PUSH1 0x00 00001df5: PUSH1 0x20 00001df7: DUP5 00001df8: ADD 00001df9: RETURNDATACOPY 00001dfa: PUSH2 0x1e03 00001dfd: JUMP 00001dfe: JUMPDEST 00001dff: PUSH1 0x60 00001e01: SWAP2 00001e02: POP 00001e03: JUMPDEST 00001e04: POP 00001e05: SWAP2 00001e06: POP 00001e07: SWAP2 00001e08: POP 00001e09: DUP2 00001e0a: DUP1 00001e0b: ISZERO 00001e0c: PUSH2 0x1e2d 00001e0f: JUMPI 00001e10: POP 00001e11: DUP1 00001e12: MLOAD 00001e13: ISZERO 00001e14: DUP1 00001e15: PUSH2 0x1e2d 00001e18: JUMPI 00001e19: POP 00001e1a: DUP1 00001e1b: DUP1 00001e1c: PUSH1 0x20 00001e1e: ADD 00001e1f: SWAP1 00001e20: MLOAD 00001e21: DUP2 00001e22: ADD 00001e23: SWAP1 00001e24: PUSH2 0x1e2d 00001e27: SWAP2 00001e28: SWAP1 00001e29: PUSH2 0x2812 00001e2c: JUMP 00001e2d: JUMPDEST 00001e2e: PUSH2 0x0f3b 00001e31: JUMPI 00001e32: PUSH1 0x40 00001e34: MLOAD 00001e35: PUSH3 0x461bcd 00001e39: PUSH1 0xe5 00001e3b: SHL 00001e3c: DUP2 00001e3d: MSTORE 00001e3e: PUSH1 0x20 00001e40: PUSH1 0x04 00001e42: DUP3 00001e43: ADD 00001e44: MSTORE 00001e45: PUSH1 0x2d 00001e47: PUSH1 0x24 00001e49: DUP3 00001e4a: ADD 00001e4b: MSTORE 00001e4c: PUSH32 0x5472616e7366657248656c7065723a3a736166655472616e736665723a207472 00001e6d: PUSH1 0x44 00001e6f: DUP3 00001e70: ADD 00001e71: MSTORE 00001e72: PUSH13 0x185b9cd9995c8819985a5b1959 00001e80: PUSH1 0x9a 00001e82: SHL 00001e83: PUSH1 0x64 00001e85: DUP3 00001e86: ADD 00001e87: MSTORE 00001e88: PUSH1 0x84 00001e8a: ADD 00001e8b: PUSH2 0x01d2 00001e8e: JUMP 00001e8f: JUMPDEST 00001e90: PUSH2 0x0489 00001e93: PUSH20 0xd8349e874934593c85eafa8e534b495d80848e41 00001ea8: CALLER 00001ea9: EQ 00001eaa: DUP1 00001eab: PUSH2 0x1ec7 00001eae: JUMPI 00001eaf: POP 00001eb0: PUSH20 0x2f5abb45c283a7e6661c205d38215b10ee6fb064 00001ec5: CALLER 00001ec6: EQ 00001ec7: JUMPDEST 00001ec8: DUP1 00001ec9: PUSH2 0x1ee5 00001ecc: JUMPI 00001ecd: POP 00001ece: PUSH20 0xc5798cd00276dbfdcd85bc751f5edace052e5cdd 00001ee3: CALLER 00001ee4: EQ 00001ee5: JUMPDEST 00001ee6: DUP1 00001ee7: PUSH2 0x1f03 00001eea: JUMPI 00001eeb: POP 00001eec: PUSH20 0xe00456d3af6e9b8715a9c29c88c1932983e064c1 00001f01: CALLER 00001f02: EQ 00001f03: JUMPDEST 00001f04: DUP1 00001f05: PUSH2 0x1f21 00001f08: JUMPI 00001f09: POP 00001f0a: PUSH20 0x6e6759b3ef49bab693127c9ea126eb6e549bc3d3 00001f1f: CALLER 00001f20: EQ 00001f21: JUMPDEST 00001f22: DUP1 00001f23: PUSH2 0x0466 00001f26: JUMPI 00001f27: POP 00001f28: PUSH20 0xea35df26f76aae16bb7175695525d562efae138f 00001f3d: CALLER 00001f3e: EQ 00001f3f: DUP1 00001f40: PUSH2 0x0484 00001f43: JUMPI 00001f44: POP 00001f45: PUSH20 0x71889d0c1101dc57045d08962e1a5c2466629112 00001f5a: CALLER 00001f5b: EQ 00001f5c: PUSH2 0x13da 00001f5f: JUMP 00001f60: JUMPDEST 00001f61: PUSH1 0x40 00001f63: MLOAD 00001f64: PUSH4 0x70a08231 00001f69: PUSH1 0xe0 00001f6b: SHL 00001f6c: DUP2 00001f6d: MSTORE 00001f6e: ADDRESS 00001f6f: PUSH1 0x04 00001f71: DUP3 00001f72: ADD 00001f73: MSTORE 00001f74: PUSH1 0x00 00001f76: SWAP1 00001f77: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2 00001f8c: SWAP1 00001f8d: PUSH4 0x70a08231 00001f92: SWAP1 00001f93: PUSH1 0x24 00001f95: ADD 00001f96: PUSH1 0x20 00001f98: PUSH1 0x40 00001f9a: MLOAD 00001f9b: DUP1 00001f9c: DUP4 00001f9d: SUB 00001f9e: DUP2 00001f9f: DUP7 00001fa0: GAS 00001fa1: STATICCALL 00001fa2: ISZERO 00001fa3: DUP1 00001fa4: ISZERO 00001fa5: PUSH2 0x1fb2 00001fa8: JUMPI 00001fa9: RETURNDATASIZE 00001faa: PUSH1 0x00 00001fac: DUP1 00001fad: RETURNDATACOPY 00001fae: RETURNDATASIZE 00001faf: PUSH1 0x00 00001fb1: REVERT 00001fb2: JUMPDEST 00001fb3: POP 00001fb4: POP 00001fb5: POP 00001fb6: POP 00001fb7: PUSH1 0x40 00001fb9: MLOAD 00001fba: RETURNDATASIZE 00001fbb: PUSH1 0x1f 00001fbd: NOT 00001fbe: PUSH1 0x1f 00001fc0: DUP3 00001fc1: ADD 00001fc2: AND 00001fc3: DUP3 00001fc4: ADD 00001fc5: DUP1 00001fc6: PUSH1 0x40 00001fc8: MSTORE 00001fc9: POP 00001fca: DUP2 00001fcb: ADD 00001fcc: SWAP1 00001fcd: PUSH2 0x1fd6 00001fd0: SWAP2 00001fd1: SWAP1 00001fd2: PUSH2 0x26bd 00001fd5: JUMP 00001fd6: JUMPDEST 00001fd7: SWAP1 00001fd8: POP 00001fd9: CALLVALUE 00001fda: DUP2 00001fdb: GT 00001fdc: PUSH2 0x200d 00001fdf: JUMPI 00001fe0: PUSH1 0x40 00001fe2: MLOAD 00001fe3: PUSH3 0x461bcd 00001fe7: PUSH1 0xe5 00001fe9: SHL 00001fea: DUP2 00001feb: MSTORE 00001fec: PUSH1 0x20 00001fee: PUSH1 0x04 00001ff0: DUP3 00001ff1: ADD 00001ff2: MSTORE 00001ff3: PUSH1 0x03 00001ff5: PUSH1 0x24 00001ff7: DUP3 00001ff8: ADD 00001ff9: MSTORE 00001ffa: PUSH3 0x050313 00001ffe: PUSH1 0xec 00002000: SHL 00002001: PUSH1 0x44 00002003: DUP3 00002004: ADD 00002005: MSTORE 00002006: PUSH1 0x64 00002008: ADD 00002009: PUSH2 0x01d2 0000200c: JUMP 0000200d: JUMPDEST 0000200e: PUSH2 0x2017 00002011: CALLVALUE 00002012: DUP3 00002013: PUSH2 0x230d 00002016: JUMP 00002017: JUMPDEST 00002018: PUSH1 0x01 0000201a: SLOAD 0000201b: SWAP1 0000201c: SWAP2 0000201d: POP 0000201e: DUP1 0000201f: DUP3 00002020: GT 00002021: PUSH2 0x2052 00002024: JUMPI 00002025: PUSH1 0x40 00002027: MLOAD 00002028: PUSH3 0x461bcd 0000202c: PUSH1 0xe5 0000202e: SHL 0000202f: DUP2 00002030: MSTORE 00002031: PUSH1 0x20 00002033: PUSH1 0x04 00002035: DUP3 00002036: ADD 00002037: MSTORE 00002038: PUSH1 0x03 0000203a: PUSH1 0x24 0000203c: DUP3 0000203d: ADD 0000203e: MSTORE 0000203f: PUSH3 0x503131 00002043: PUSH1 0xe8 00002045: SHL 00002046: PUSH1 0x44 00002048: DUP3 00002049: ADD 0000204a: MSTORE 0000204b: PUSH1 0x64 0000204d: ADD 0000204e: PUSH2 0x01d2 00002051: JUMP 00002052: JUMPDEST 00002053: PUSH1 0x00 00002055: PUSH2 0x205e 00002058: DUP3 00002059: DUP5 0000205a: PUSH2 0x230d 0000205d: JUMP 0000205e: JUMPDEST 0000205f: SWAP1 00002060: POP 00002061: DUP4 00002062: DUP2 00002063: GT 00002064: PUSH2 0x0d36 00002067: JUMPI 00002068: PUSH1 0x40 0000206a: MLOAD 0000206b: PUSH3 0x461bcd 0000206f: PUSH1 0xe5 00002071: SHL 00002072: DUP2 00002073: MSTORE 00002074: PUSH1 0x20 00002076: PUSH1 0x04 00002078: DUP3 00002079: ADD 0000207a: MSTORE 0000207b: PUSH1 0x03 0000207d: PUSH1 0x24 0000207f: DUP3 00002080: ADD 00002081: MSTORE 00002082: PUSH3 0x281899 00002086: PUSH1 0xe9 00002088: SHL 00002089: PUSH1 0x44 0000208b: DUP3 0000208c: ADD 0000208d: MSTORE 0000208e: PUSH1 0x64 00002090: ADD 00002091: PUSH2 0x01d2 00002094: JUMP 00002095: JUMPDEST 00002096: PUSH1 0x00 00002098: DUP2 00002099: PUSH1 0x00 0000209b: SUB 0000209c: PUSH2 0x20a7 0000209f: JUMPI 000020a0: POP 000020a1: PUSH1 0x01 000020a3: PUSH2 0x20db 000020a6: JUMP 000020a7: JUMPDEST 000020a8: PUSH1 0x40 000020aa: MLOAD 000020ab: PUSH4 0xa9059cbb 000020b0: PUSH1 0xe0 000020b2: SHL 000020b3: DUP2 000020b4: MSTORE 000020b5: PUSH1 0x01 000020b7: PUSH1 0x01 000020b9: PUSH1 0xa0 000020bb: SHL 000020bc: SUB 000020bd: DUP5 000020be: AND 000020bf: PUSH1 0x04 000020c1: DUP3 000020c2: ADD 000020c3: MSTORE 000020c4: DUP3 000020c5: PUSH1 0x24 000020c7: DUP3 000020c8: ADD 000020c9: MSTORE 000020ca: PUSH1 0x20 000020cc: DUP2 000020cd: PUSH1 0x44 000020cf: DUP4 000020d0: PUSH1 0x00 000020d2: DUP10 000020d3: GAS 000020d4: CALL 000020d5: SWAP1 000020d6: MLOAD 000020d7: SWAP4 000020d8: POP 000020d9: SWAP1 000020da: POP 000020db: JUMPDEST 000020dc: SWAP4 000020dd: SWAP3 000020de: POP 000020df: POP 000020e0: POP 000020e1: JUMP 000020e2: JUMPDEST 000020e3: PUSH1 0x40 000020e5: MLOAD 000020e6: PUSH4 0x022c0d9f 000020eb: PUSH1 0xe0 000020ed: SHL 000020ee: DUP2 000020ef: MSTORE 000020f0: PUSH1 0x04 000020f2: DUP2 000020f3: ADD 000020f4: DUP6 000020f5: SWAP1 000020f6: MSTORE 000020f7: PUSH1 0x24 000020f9: DUP2 000020fa: ADD 000020fb: DUP5 000020fc: SWAP1 000020fd: MSTORE 000020fe: PUSH1 0x00 00002100: SWAP1 00002101: ADDRESS 00002102: SWAP1 00002103: DUP4 00002104: DUP1 00002105: ISZERO 00002106: PUSH2 0x2114 00002109: JUMPI 0000210a: DUP5 0000210b: PUSH1 0x44 0000210d: DUP4 0000210e: ADD 0000210f: MSTORE 00002110: PUSH2 0x211b 00002113: JUMP 00002114: JUMPDEST 00002115: DUP3 00002116: PUSH1 0x44 00002118: DUP4 00002119: ADD 0000211a: MSTORE 0000211b: JUMPDEST 0000211c: POP 0000211d: PUSH1 0x80 0000211f: PUSH1 0x64 00002121: DUP3 00002122: ADD 00002123: MSTORE 00002124: PUSH1 0x00 00002126: PUSH1 0x84 00002128: DUP3 00002129: ADD 0000212a: MSTORE 0000212b: PUSH1 0x20 0000212d: DUP2 0000212e: PUSH1 0xa4 00002130: DUP4 00002131: PUSH1 0x00 00002133: DUP10 00002134: GAS 00002135: CALL 00002136: SWAP8 00002137: SWAP7 00002138: POP 00002139: POP 0000213a: POP 0000213b: POP 0000213c: POP 0000213d: POP 0000213e: POP 0000213f: JUMP 00002140: JUMPDEST 00002141: PUSH1 0x00 00002143: DUP1 00002144: PUSH2 0x214c 00002147: DUP4 00002148: PUSH2 0x22b8 0000214b: JUMP 0000214c: JUMPDEST 0000214d: SWAP2 0000214e: POP 0000214f: SWAP2 00002150: POP 00002151: SWAP2 00002152: POP 00002153: SWAP2 00002154: JUMP 00002155: JUMPDEST 00002156: PUSH1 0x00 00002158: DUP1 00002159: PUSH1 0x00 0000215b: DUP6 0000215c: PUSH2 0x2179 0000215f: JUMPI 00002160: PUSH20 0xfffd8963efd1fc6a506488495d951d5263988d25 00002175: PUSH2 0x2180 00002178: JUMP 00002179: JUMPDEST 0000217a: PUSH5 0x01000276a4 00002180: JUMPDEST 00002181: PUSH1 0x40 00002183: MLOAD 00002184: PUSH4 0x02515961 00002189: PUSH1 0xe3 0000218b: SHL 0000218c: DUP2 0000218d: MSTORE 0000218e: SWAP1 0000218f: SWAP2 00002190: POP 00002191: ADDRESS 00002192: SWAP1 00002193: DUP9 00002194: DUP1 00002195: ISZERO 00002196: PUSH2 0x21a4 00002199: JUMPI 0000219a: DUP10 0000219b: PUSH1 0x04 0000219d: DUP4 0000219e: ADD 0000219f: MSTORE 000021a0: PUSH2 0x21ab 000021a3: JUMP 000021a4: JUMPDEST 000021a5: DUP3 000021a6: PUSH1 0x04 000021a8: DUP4 000021a9: ADD 000021aa: MSTORE 000021ab: JUMPDEST 000021ac: POP 000021ad: DUP8 000021ae: PUSH1 0x24 000021b0: DUP3 000021b1: ADD 000021b2: MSTORE 000021b3: DUP7 000021b4: PUSH1 0x44 000021b6: DUP3 000021b7: ADD 000021b8: MSTORE 000021b9: DUP3 000021ba: PUSH1 0x64 000021bc: DUP3 000021bd: ADD 000021be: MSTORE 000021bf: PUSH1 0xa0 000021c1: PUSH1 0x84 000021c3: DUP3 000021c4: ADD 000021c5: MSTORE 000021c6: DUP6 000021c7: MLOAD 000021c8: DUP1 000021c9: PUSH1 0xa4 000021cb: DUP4 000021cc: ADD 000021cd: MSTORE 000021ce: PUSH1 0x00 000021d0: JUMPDEST 000021d1: DUP2 000021d2: DUP2 000021d3: LT 000021d4: ISZERO 000021d5: PUSH2 0x21ed 000021d8: JUMPI 000021d9: PUSH1 0x20 000021db: DUP2 000021dc: DUP10 000021dd: ADD 000021de: DUP2 000021df: ADD 000021e0: MLOAD 000021e1: PUSH1 0xc4 000021e3: DUP6 000021e4: DUP5 000021e5: ADD 000021e6: ADD 000021e7: MSTORE 000021e8: ADD 000021e9: PUSH2 0x21d0 000021ec: JUMP 000021ed: JUMPDEST 000021ee: POP 000021ef: PUSH1 0x40 000021f1: DUP3 000021f2: DUP3 000021f3: PUSH1 0xc4 000021f5: ADD 000021f6: DUP5 000021f7: PUSH1 0x00 000021f9: DUP16 000021fa: GAS 000021fb: CALL 000021fc: SWAP1 000021fd: POP 000021fe: DUP1 000021ff: PUSH2 0x2207 00002202: JUMPI 00002203: PUSH1 0x00 00002205: DUP1 00002206: REVERT 00002207: JUMPDEST 00002208: POP 00002209: DUP1 0000220a: MLOAD 0000220b: SWAP5 0000220c: POP 0000220d: PUSH1 0x20 0000220f: DUP2 00002210: ADD 00002211: MLOAD 00002212: SWAP4 00002213: POP 00002214: POP 00002215: POP 00002216: POP 00002217: SWAP6 00002218: POP 00002219: SWAP6 0000221a: SWAP4 0000221b: POP 0000221c: POP 0000221d: POP 0000221e: POP 0000221f: JUMP 00002220: JUMPDEST 00002221: PUSH20 0xd8349e874934593c85eafa8e534b495d80848e41 00002236: ORIGIN 00002237: EQ 00002238: DUP1 00002239: PUSH2 0x2255 0000223c: JUMPI 0000223d: POP 0000223e: PUSH20 0x2f5abb45c283a7e6661c205d38215b10ee6fb064 00002253: ORIGIN 00002254: EQ 00002255: JUMPDEST 00002256: DUP1 00002257: PUSH2 0x2273 0000225a: JUMPI 0000225b: POP 0000225c: PUSH20 0xc5798cd00276dbfdcd85bc751f5edace052e5cdd 00002271: ORIGIN 00002272: EQ 00002273: JUMPDEST 00002274: DUP1 00002275: PUSH2 0x2291 00002278: JUMPI 00002279: POP 0000227a: PUSH20 0xe00456d3af6e9b8715a9c29c88c1932983e064c1 0000228f: ORIGIN 00002290: EQ 00002291: JUMPDEST 00002292: DUP1 00002293: PUSH2 0x22af 00002296: JUMPI 00002297: POP 00002298: PUSH20 0x71889d0c1101dc57045d08962e1a5c2466629112 000022ad: ORIGIN 000022ae: EQ 000022af: JUMPDEST 000022b0: PUSH2 0x0489 000022b3: JUMPI 000022b4: PUSH1 0x00 000022b6: DUP1 000022b7: REVERT 000022b8: JUMPDEST 000022b9: PUSH1 0x00 000022bb: DUP1 000022bc: PUSH20 0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc1 000022d1: NOT 000022d2: PUSH1 0x01 000022d4: PUSH1 0x01 000022d6: PUSH1 0xa0 000022d8: SHL 000022d9: SUB 000022da: DUP5 000022db: AND 000022dc: ADD 000022dd: PUSH2 0x22ec 000022e0: JUMPI 000022e1: POP 000022e2: PUSH1 0x00 000022e4: SWAP3 000022e5: PUSH1 0x01 000022e7: SWAP3 000022e8: POP 000022e9: SWAP1 000022ea: POP 000022eb: JUMP 000022ec: JUMPDEST 000022ed: POP 000022ee: PUSH1 0x00 000022f0: SWAP3 000022f1: DUP4 000022f2: SWAP3 000022f3: POP 000022f4: SWAP1 000022f5: POP 000022f6: JUMP 000022f7: JUMPDEST 000022f8: PUSH4 0x4e487b71 000022fd: PUSH1 0xe0 000022ff: SHL 00002300: PUSH1 0x00 00002302: MSTORE 00002303: PUSH1 0x11 00002305: PUSH1 0x04 00002307: MSTORE 00002308: PUSH1 0x24 0000230a: PUSH1 0x00 0000230c: REVERT 0000230d: JUMPDEST 0000230e: DUP2 0000230f: DUP2 00002310: SUB 00002311: DUP2 00002312: DUP2 00002313: GT 00002314: ISZERO 00002315: PUSH2 0x1490 00002318: JUMPI 00002319: PUSH2 0x1490 0000231c: PUSH2 0x22f7 0000231f: JUMP 00002320: JUMPDEST 00002321: PUSH1 0x00 00002323: PUSH1 0x20 00002325: DUP3 00002326: DUP5 00002327: SUB 00002328: SLT 00002329: ISZERO 0000232a: PUSH2 0x2332 0000232d: JUMPI 0000232e: PUSH1 0x00 00002330: DUP1 00002331: REVERT 00002332: JUMPDEST 00002333: POP 00002334: CALLDATALOAD 00002335: SWAP2 00002336: SWAP1 00002337: POP 00002338: JUMP 00002339: JUMPDEST 0000233a: DUP1 0000233b: CALLDATALOAD 0000233c: PUSH1 0x01 0000233e: PUSH1 0x01 00002340: PUSH1 0xa0 00002342: SHL 00002343: SUB 00002344: DUP2 00002345: AND 00002346: DUP2 00002347: EQ 00002348: PUSH2 0x2350 0000234b: JUMPI 0000234c: PUSH1 0x00 0000234e: DUP1 0000234f: REVERT 00002350: JUMPDEST 00002351: SWAP2 00002352: SWAP1 00002353: POP 00002354: JUMP 00002355: JUMPDEST 00002356: PUSH1 0x00 00002358: DUP1 00002359: DUP4 0000235a: PUSH1 0x1f 0000235c: DUP5 0000235d: ADD 0000235e: SLT 0000235f: PUSH2 0x2367 00002362: JUMPI 00002363: PUSH1 0x00 00002365: DUP1 00002366: REVERT 00002367: JUMPDEST 00002368: POP 00002369: DUP2 0000236a: CALLDATALOAD 0000236b: PUSH8 0xffffffffffffffff 00002374: DUP2 00002375: GT 00002376: ISZERO 00002377: PUSH2 0x237f 0000237a: JUMPI 0000237b: PUSH1 0x00 0000237d: DUP1 0000237e: REVERT 0000237f: JUMPDEST 00002380: PUSH1 0x20 00002382: DUP4 00002383: ADD 00002384: SWAP2 00002385: POP 00002386: DUP4 00002387: PUSH1 0x20 00002389: DUP3 0000238a: DUP6 0000238b: ADD 0000238c: ADD 0000238d: GT 0000238e: ISZERO 0000238f: PUSH2 0x2397 00002392: JUMPI 00002393: PUSH1 0x00 00002395: DUP1 00002396: REVERT 00002397: JUMPDEST 00002398: SWAP3 00002399: POP 0000239a: SWAP3 0000239b: SWAP1 0000239c: POP 0000239d: JUMP 0000239e: JUMPDEST 0000239f: PUSH1 0x00 000023a1: PUSH1 0x40 000023a3: DUP3 000023a4: DUP5 000023a5: SUB 000023a6: SLT 000023a7: ISZERO 000023a8: PUSH2 0x23b0 000023ab: JUMPI 000023ac: PUSH1 0x00 000023ae: DUP1 000023af: REVERT 000023b0: JUMPDEST 000023b1: POP 000023b2: SWAP2 000023b3: SWAP1 000023b4: POP 000023b5: JUMP 000023b6: JUMPDEST 000023b7: PUSH1 0x00 000023b9: DUP1 000023ba: PUSH1 0x00 000023bc: DUP1 000023bd: PUSH1 0x80 000023bf: DUP6 000023c0: DUP8 000023c1: SUB 000023c2: SLT 000023c3: ISZERO 000023c4: PUSH2 0x23cc 000023c7: JUMPI 000023c8: PUSH1 0x00 000023ca: DUP1 000023cb: REVERT 000023cc: JUMPDEST 000023cd: PUSH2 0x23d5 000023d0: DUP6 000023d1: PUSH2 0x2339 000023d4: JUMP 000023d5: JUMPDEST 000023d6: SWAP4 000023d7: POP 000023d8: PUSH1 0x20 000023da: DUP6 000023db: ADD 000023dc: CALLDATALOAD 000023dd: PUSH8 0xffffffffffffffff 000023e6: DUP2 000023e7: GT 000023e8: ISZERO 000023e9: PUSH2 0x23f1 000023ec: JUMPI 000023ed: PUSH1 0x00 000023ef: DUP1 000023f0: REVERT 000023f1: JUMPDEST 000023f2: PUSH2 0x23fd 000023f5: DUP8 000023f6: DUP3 000023f7: DUP9 000023f8: ADD 000023f9: PUSH2 0x2355 000023fc: JUMP 000023fd: JUMPDEST 000023fe: SWAP1 000023ff: SWAP5 00002400: POP 00002401: SWAP3 00002402: POP 00002403: PUSH2 0x2411 00002406: SWAP1 00002407: POP 00002408: DUP7 00002409: PUSH1 0x40 0000240b: DUP8 0000240c: ADD 0000240d: PUSH2 0x239e 00002410: JUMP 00002411: JUMPDEST 00002412: SWAP1 00002413: POP 00002414: SWAP3 00002415: SWAP6 00002416: SWAP2 00002417: SWAP5 00002418: POP 00002419: SWAP3 0000241a: POP 0000241b: JUMP 0000241c: JUMPDEST 0000241d: PUSH1 0x00 0000241f: DUP1 00002420: PUSH1 0x00 00002422: DUP1 00002423: PUSH1 0x60 00002425: DUP6 00002426: DUP8 00002427: SUB 00002428: SLT 00002429: ISZERO 0000242a: PUSH2 0x2432 0000242d: JUMPI 0000242e: PUSH1 0x00 00002430: DUP1 00002431: REVERT 00002432: JUMPDEST 00002433: DUP5 00002434: CALLDATALOAD 00002435: SWAP4 00002436: POP 00002437: PUSH1 0x20 00002439: DUP6 0000243a: ADD 0000243b: CALLDATALOAD 0000243c: SWAP3 0000243d: POP 0000243e: PUSH1 0x40 00002440: DUP6 00002441: ADD 00002442: CALLDATALOAD 00002443: PUSH8 0xffffffffffffffff 0000244c: DUP2 0000244d: GT 0000244e: ISZERO 0000244f: PUSH2 0x2457 00002452: JUMPI 00002453: PUSH1 0x00 00002455: DUP1 00002456: REVERT 00002457: JUMPDEST 00002458: PUSH2 0x2463 0000245b: DUP8 0000245c: DUP3 0000245d: DUP9 0000245e: ADD 0000245f: PUSH2 0x2355 00002462: JUMP 00002463: JUMPDEST 00002464: SWAP6 00002465: SWAP9 00002466: SWAP5 00002467: SWAP8 00002468: POP 00002469: SWAP6 0000246a: POP 0000246b: POP 0000246c: POP 0000246d: POP 0000246e: JUMP 0000246f: JUMPDEST 00002470: PUSH1 0x00 00002472: PUSH1 0x20 00002474: DUP3 00002475: DUP5 00002476: SUB 00002477: SLT 00002478: ISZERO 00002479: PUSH2 0x2481 0000247c: JUMPI 0000247d: PUSH1 0x00 0000247f: DUP1 00002480: REVERT 00002481: JUMPDEST 00002482: PUSH2 0x20db 00002485: DUP3 00002486: PUSH2 0x2339 00002489: JUMP 0000248a: JUMPDEST 0000248b: PUSH1 0x00 0000248d: PUSH1 0x60 0000248f: DUP3 00002490: DUP5 00002491: SUB 00002492: SLT 00002493: ISZERO 00002494: PUSH2 0x23b0 00002497: JUMPI 00002498: PUSH1 0x00 0000249a: DUP1 0000249b: REVERT 0000249c: JUMPDEST 0000249d: PUSH1 0x00 0000249f: DUP1 000024a0: PUSH1 0x00 000024a2: DUP1 000024a3: PUSH1 0x00 000024a5: PUSH1 0xa0 000024a7: DUP7 000024a8: DUP9 000024a9: SUB 000024aa: SLT 000024ab: ISZERO 000024ac: PUSH2 0x24b4 000024af: JUMPI 000024b0: PUSH1 0x00 000024b2: DUP1 000024b3: REVERT 000024b4: JUMPDEST 000024b5: PUSH2 0x24be 000024b8: DUP8 000024b9: DUP8 000024ba: PUSH2 0x248a 000024bd: JUMP 000024be: JUMPDEST 000024bf: SWAP5 000024c0: POP 000024c1: PUSH1 0x60 000024c3: DUP7 000024c4: ADD 000024c5: CALLDATALOAD 000024c6: PUSH8 0xffffffffffffffff 000024cf: DUP2 000024d0: GT 000024d1: ISZERO 000024d2: PUSH2 0x24da 000024d5: JUMPI 000024d6: PUSH1 0x00 000024d8: DUP1 000024d9: REVERT 000024da: JUMPDEST 000024db: PUSH2 0x24e6 000024de: DUP9 000024df: DUP3 000024e0: DUP10 000024e1: ADD 000024e2: PUSH2 0x2355 000024e5: JUMP 000024e6: JUMPDEST 000024e7: SWAP1 000024e8: SWAP6 000024e9: POP 000024ea: SWAP4 000024eb: POP 000024ec: POP 000024ed: PUSH1 0x80 000024ef: DUP7 000024f0: ADD 000024f1: CALLDATALOAD 000024f2: PUSH8 0xffffffffffffffff 000024fb: DUP2 000024fc: GT 000024fd: ISZERO 000024fe: PUSH2 0x2506 00002501: JUMPI 00002502: PUSH1 0x00 00002504: DUP1 00002505: REVERT 00002506: JUMPDEST 00002507: PUSH2 0x2512 0000250a: DUP9 0000250b: DUP3 0000250c: DUP10 0000250d: ADD 0000250e: PUSH2 0x2355 00002511: JUMP 00002512: JUMPDEST 00002513: SWAP7 00002514: SWAP10 00002515: SWAP6 00002516: SWAP9 00002517: POP 00002518: SWAP4 00002519: SWAP7 0000251a: POP 0000251b: SWAP3 0000251c: SWAP5 0000251d: SWAP4 0000251e: SWAP3 0000251f: POP 00002520: POP 00002521: POP 00002522: JUMP 00002523: JUMPDEST 00002524: PUSH1 0x00 00002526: DUP1 00002527: PUSH1 0x00 00002529: PUSH1 0x80 0000252b: DUP5 0000252c: DUP7 0000252d: SUB 0000252e: SLT 0000252f: ISZERO 00002530: PUSH2 0x2538 00002533: JUMPI 00002534: PUSH1 0x00 00002536: DUP1 00002537: REVERT 00002538: JUMPDEST 00002539: PUSH2 0x2542 0000253c: DUP6 0000253d: DUP6 0000253e: PUSH2 0x248a 00002541: JUMP 00002542: JUMPDEST 00002543: SWAP3 00002544: POP 00002545: PUSH1 0x60 00002547: DUP5 00002548: ADD 00002549: CALLDATALOAD 0000254a: PUSH8 0xffffffffffffffff 00002553: DUP2 00002554: GT 00002555: ISZERO 00002556: PUSH2 0x255e 00002559: JUMPI 0000255a: PUSH1 0x00 0000255c: DUP1 0000255d: REVERT 0000255e: JUMPDEST 0000255f: PUSH2 0x256a 00002562: DUP7 00002563: DUP3 00002564: DUP8 00002565: ADD 00002566: PUSH2 0x2355 00002569: JUMP 0000256a: JUMPDEST 0000256b: SWAP5 0000256c: SWAP8 0000256d: SWAP1 0000256e: SWAP7 0000256f: POP 00002570: SWAP4 00002571: SWAP5 00002572: POP 00002573: POP 00002574: POP 00002575: POP 00002576: JUMP 00002577: JUMPDEST 00002578: PUSH1 0x00 0000257a: DUP1 0000257b: PUSH1 0x00 0000257d: DUP1 0000257e: PUSH1 0x60 00002580: DUP6 00002581: DUP8 00002582: SUB 00002583: SLT 00002584: ISZERO 00002585: PUSH2 0x258d 00002588: JUMPI 00002589: PUSH1 0x00 0000258b: DUP1 0000258c: REVERT 0000258d: JUMPDEST 0000258e: PUSH2 0x2596 00002591: DUP6 00002592: PUSH2 0x2339 00002595: JUMP 00002596: JUMPDEST 00002597: SWAP4 00002598: POP 00002599: PUSH1 0x20 0000259b: DUP6 0000259c: ADD 0000259d: CALLDATALOAD 0000259e: SWAP3 0000259f: POP 000025a0: PUSH1 0x40 000025a2: DUP6 000025a3: ADD 000025a4: CALLDATALOAD 000025a5: PUSH8 0xffffffffffffffff 000025ae: DUP2 000025af: GT 000025b0: ISZERO 000025b1: PUSH2 0x2457 000025b4: JUMPI 000025b5: PUSH1 0x00 000025b7: DUP1 000025b8: REVERT 000025b9: JUMPDEST 000025ba: PUSH1 0x00 000025bc: JUMPDEST 000025bd: DUP4 000025be: DUP2 000025bf: LT 000025c0: ISZERO 000025c1: PUSH2 0x25d4 000025c4: JUMPI 000025c5: DUP2 000025c6: DUP2 000025c7: ADD 000025c8: MLOAD 000025c9: DUP4 000025ca: DUP3 000025cb: ADD 000025cc: MSTORE 000025cd: PUSH1 0x20 000025cf: ADD 000025d0: PUSH2 0x25bc 000025d3: JUMP 000025d4: JUMPDEST 000025d5: POP 000025d6: POP 000025d7: PUSH1 0x00 000025d9: SWAP2 000025da: ADD 000025db: MSTORE 000025dc: JUMP 000025dd: JUMPDEST 000025de: PUSH1 0x00 000025e0: DUP2 000025e1: MLOAD 000025e2: DUP1 000025e3: DUP5 000025e4: MSTORE 000025e5: PUSH2 0x25f5 000025e8: DUP2 000025e9: PUSH1 0x20 000025eb: DUP7 000025ec: ADD 000025ed: PUSH1 0x20 000025ef: DUP7 000025f0: ADD 000025f1: PUSH2 0x25b9 000025f4: JUMP 000025f5: JUMPDEST 000025f6: PUSH1 0x1f 000025f8: ADD 000025f9: PUSH1 0x1f 000025fb: NOT 000025fc: AND 000025fd: SWAP3 000025fe: SWAP1 000025ff: SWAP3 00002600: ADD 00002601: PUSH1 0x20 00002603: ADD 00002604: SWAP3 00002605: SWAP2 00002606: POP 00002607: POP 00002608: JUMP 00002609: JUMPDEST 0000260a: PUSH1 0x20 0000260c: DUP2 0000260d: MSTORE 0000260e: PUSH1 0x00 00002610: PUSH2 0x20db 00002613: PUSH1 0x20 00002615: DUP4 00002616: ADD 00002617: DUP5 00002618: PUSH2 0x25dd 0000261b: JUMP 0000261c: JUMPDEST 0000261d: PUSH4 0x4e487b71 00002622: PUSH1 0xe0 00002624: SHL 00002625: PUSH1 0x00 00002627: MSTORE 00002628: PUSH1 0x41 0000262a: PUSH1 0x04 0000262c: MSTORE 0000262d: PUSH1 0x24 0000262f: PUSH1 0x00 00002631: REVERT 00002632: JUMPDEST 00002633: PUSH1 0x00 00002635: DUP3 00002636: MLOAD 00002637: PUSH2 0x2644 0000263a: DUP2 0000263b: DUP5 0000263c: PUSH1 0x20 0000263e: DUP8 0000263f: ADD 00002640: PUSH2 0x25b9 00002643: JUMP 00002644: JUMPDEST 00002645: SWAP2 00002646: SWAP1 00002647: SWAP2 00002648: ADD 00002649: SWAP3 0000264a: SWAP2 0000264b: POP 0000264c: POP 0000264d: JUMP 0000264e: JUMPDEST 0000264f: PUSH1 0x00 00002651: PUSH1 0x20 00002653: DUP3 00002654: DUP5 00002655: SUB 00002656: SLT 00002657: ISZERO 00002658: PUSH2 0x2660 0000265b: JUMPI 0000265c: PUSH1 0x00 0000265e: DUP1 0000265f: REVERT 00002660: JUMPDEST 00002661: DUP2 00002662: CALLDATALOAD 00002663: PUSH1 0x01 00002665: PUSH1 0x01 00002667: PUSH1 0xb0 00002669: SHL 0000266a: SUB 0000266b: NOT 0000266c: DUP2 0000266d: AND 0000266e: DUP2 0000266f: EQ 00002670: PUSH2 0x20db 00002673: JUMPI 00002674: PUSH1 0x00 00002676: DUP1 00002677: REVERT 00002678: JUMPDEST 00002679: DUP2 0000267a: DUP4 0000267b: MSTORE 0000267c: DUP2 0000267d: DUP2 0000267e: PUSH1 0x20 00002680: DUP6 00002681: ADD 00002682: CALLDATACOPY 00002683: POP 00002684: PUSH1 0x00 00002686: DUP3 00002687: DUP3 00002688: ADD 00002689: PUSH1 0x20 0000268b: SWAP1 0000268c: DUP2 0000268d: ADD 0000268e: SWAP2 0000268f: SWAP1 00002690: SWAP2 00002691: MSTORE 00002692: PUSH1 0x1f 00002694: SWAP1 00002695: SWAP2 00002696: ADD 00002697: PUSH1 0x1f 00002699: NOT 0000269a: AND 0000269b: SWAP1 0000269c: SWAP2 0000269d: ADD 0000269e: ADD 0000269f: SWAP1 000026a0: JUMP 000026a1: JUMPDEST 000026a2: PUSH1 0x20 000026a4: DUP2 000026a5: MSTORE 000026a6: PUSH1 0x00 000026a8: PUSH2 0x26b5 000026ab: PUSH1 0x20 000026ad: DUP4 000026ae: ADD 000026af: DUP5 000026b0: DUP7 000026b1: PUSH2 0x2678 000026b4: JUMP 000026b5: JUMPDEST 000026b6: SWAP5 000026b7: SWAP4 000026b8: POP 000026b9: POP 000026ba: POP 000026bb: POP 000026bc: JUMP 000026bd: JUMPDEST 000026be: PUSH1 0x00 000026c0: PUSH1 0x20 000026c2: DUP3 000026c3: DUP5 000026c4: SUB 000026c5: SLT 000026c6: ISZERO 000026c7: PUSH2 0x26cf 000026ca: JUMPI 000026cb: PUSH1 0x00 000026cd: DUP1 000026ce: REVERT 000026cf: JUMPDEST 000026d0: POP 000026d1: MLOAD 000026d2: SWAP2 000026d3: SWAP1 000026d4: POP 000026d5: JUMP 000026d6: JUMPDEST 000026d7: PUSH1 0x40 000026d9: DUP2 000026da: MSTORE 000026db: PUSH1 0x00 000026dd: PUSH2 0x26ea 000026e0: PUSH1 0x40 000026e2: DUP4 000026e3: ADD 000026e4: DUP7 000026e5: DUP9 000026e6: PUSH2 0x2678 000026e9: JUMP 000026ea: JUMPDEST 000026eb: DUP3 000026ec: DUP2 000026ed: SUB 000026ee: PUSH1 0x20 000026f0: DUP5 000026f1: ADD 000026f2: MSTORE 000026f3: PUSH2 0x26fd 000026f6: DUP2 000026f7: DUP6 000026f8: DUP8 000026f9: PUSH2 0x2678 000026fc: JUMP 000026fd: JUMPDEST 000026fe: SWAP8 000026ff: SWAP7 00002700: POP 00002701: POP 00002702: POP 00002703: POP 00002704: POP 00002705: POP 00002706: POP 00002707: JUMP 00002708: JUMPDEST 00002709: DUP2 0000270a: DUP4 0000270b: DUP3 0000270c: CALLDATACOPY 0000270d: PUSH1 0x00 0000270f: SWAP2 00002710: ADD 00002711: SWAP1 00002712: DUP2 00002713: MSTORE 00002714: SWAP2 00002715: SWAP1 00002716: POP 00002717: JUMP 00002718: JUMPDEST 00002719: PUSH1 0x00 0000271b: PUSH1 0x20 0000271d: DUP3 0000271e: DUP5 0000271f: SUB 00002720: SLT 00002721: ISZERO 00002722: PUSH2 0x272a 00002725: JUMPI 00002726: PUSH1 0x00 00002728: DUP1 00002729: REVERT 0000272a: JUMPDEST 0000272b: DUP2 0000272c: MLOAD 0000272d: PUSH8 0xffffffffffffffff 00002736: DUP2 00002737: GT 00002738: ISZERO 00002739: PUSH2 0x2741 0000273c: JUMPI 0000273d: PUSH1 0x00 0000273f: DUP1 00002740: REVERT 00002741: JUMPDEST 00002742: DUP3 00002743: ADD 00002744: PUSH1 0x1f 00002746: DUP2 00002747: ADD 00002748: DUP5 00002749: SGT 0000274a: PUSH2 0x2752 0000274d: JUMPI 0000274e: PUSH1 0x00 00002750: DUP1 00002751: REVERT 00002752: JUMPDEST 00002753: DUP1 00002754: MLOAD 00002755: PUSH8 0xffffffffffffffff 0000275e: DUP2 0000275f: GT 00002760: ISZERO 00002761: PUSH2 0x276c 00002764: JUMPI 00002765: PUSH2 0x276c 00002768: PUSH2 0x261c 0000276b: JUMP 0000276c: JUMPDEST 0000276d: PUSH1 0x40 0000276f: MLOAD 00002770: PUSH1 0x1f 00002772: DUP3 00002773: ADD 00002774: PUSH1 0x1f 00002776: NOT 00002777: SWAP1 00002778: DUP2 00002779: AND 0000277a: PUSH1 0x3f 0000277c: ADD 0000277d: AND 0000277e: DUP2 0000277f: ADD 00002780: PUSH8 0xffffffffffffffff 00002789: DUP2 0000278a: GT 0000278b: DUP3 0000278c: DUP3 0000278d: LT 0000278e: OR 0000278f: ISZERO 00002790: PUSH2 0x279b 00002793: JUMPI 00002794: PUSH2 0x279b 00002797: PUSH2 0x261c 0000279a: JUMP 0000279b: JUMPDEST 0000279c: PUSH1 0x40 0000279e: MSTORE 0000279f: DUP2 000027a0: DUP2 000027a1: MSTORE 000027a2: DUP3 000027a3: DUP3 000027a4: ADD 000027a5: PUSH1 0x20 000027a7: ADD 000027a8: DUP7 000027a9: LT 000027aa: ISZERO 000027ab: PUSH2 0x27b3 000027ae: JUMPI 000027af: PUSH1 0x00 000027b1: DUP1 000027b2: REVERT 000027b3: JUMPDEST 000027b4: PUSH2 0x27c4 000027b7: DUP3 000027b8: PUSH1 0x20 000027ba: DUP4 000027bb: ADD 000027bc: PUSH1 0x20 000027be: DUP7 000027bf: ADD 000027c0: PUSH2 0x25b9 000027c3: JUMP 000027c4: JUMPDEST 000027c5: SWAP6 000027c6: SWAP5 000027c7: POP 000027c8: POP 000027c9: POP 000027ca: POP 000027cb: POP 000027cc: JUMP 000027cd: JUMPDEST 000027ce: DUP1 000027cf: DUP3 000027d0: ADD 000027d1: DUP1 000027d2: DUP3 000027d3: GT 000027d4: ISZERO 000027d5: PUSH2 0x1490 000027d8: JUMPI 000027d9: PUSH2 0x1490 000027dc: PUSH2 0x22f7 000027df: JUMP 000027e0: JUMPDEST 000027e1: PUSH4 0x4e487b71 000027e6: PUSH1 0xe0 000027e8: SHL 000027e9: PUSH1 0x00 000027eb: MSTORE 000027ec: PUSH1 0x32 000027ee: PUSH1 0x04 000027f0: MSTORE 000027f1: PUSH1 0x24 000027f3: PUSH1 0x00 000027f5: REVERT 000027f6: JUMPDEST 000027f7: PUSH1 0x00 000027f9: PUSH1 0x01 000027fb: PUSH1 0xff 000027fd: SHL 000027fe: DUP3 000027ff: ADD 00002800: PUSH2 0x280b 00002803: JUMPI 00002804: PUSH2 0x280b 00002807: PUSH2 0x22f7 0000280a: JUMP 0000280b: JUMPDEST 0000280c: POP 0000280d: PUSH1 0x00 0000280f: SUB 00002810: SWAP1 00002811: JUMP 00002812: JUMPDEST 00002813: PUSH1 0x00 00002815: PUSH1 0x20 00002817: DUP3 00002818: DUP5 00002819: SUB 0000281a: SLT 0000281b: ISZERO 0000281c: PUSH2 0x2824 0000281f: JUMPI 00002820: PUSH1 0x00 00002822: DUP1 00002823: REVERT 00002824: JUMPDEST 00002825: DUP2 00002826: MLOAD 00002827: DUP1 00002828: ISZERO 00002829: ISZERO 0000282a: DUP2 0000282b: EQ 0000282c: PUSH2 0x20db 0000282f: JUMPI 00002830: PUSH1 0x00 00002832: DUP1 00002833: REVERT 00002834: INVALID 00002835: LOG2 00002836: PUSH5 0x6970667358 0000283c: UNKNOWN(0x22) 0000283d: SLT 0000283e: KECCAK256 0000283f: MLOAD 00002840: UNKNOWN(0xF9) 00002841: UNKNOWN(0xE0) 00002842: UNKNOWN(0xB3) 00002843: UNKNOWN(0xB2) 00002844: TIMESTAMP 00002845: UNKNOWN(0xCE) 00002846: UNKNOWN(0xFB) 00002847: CODECOPY 00002848: CALL 00002849: UNKNOWN(0xB2) 0000284a: UNKNOWN(0xAA) 0000284b: UNKNOWN(0xE1) 0000284c: DUP16 0000284d: UNKNOWN(0xB6) 0000284e: SLT 0000284f: DUP8 00002850: SHL 00002851: UNKNOWN(0xDA) 00002852: UNKNOWN(0xE3) 00002853: UNKNOWN(0xEC) 00002854: SWAP10 00002855: LOG1 00002856: UNKNOWN(0xD5) 00002857: SELFBALANCE 00002858: UNKNOWN(0x26) 00002859: DUP9 0000285a: PUSH11 0x2c7a414364736f6c634300 00002866: ADDMOD 00002867: SHR 00002868: STOP 00002869: CALLER
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | access_control | codex | Privileged selfdestruct sends balance to caller | 85 | no | — |
viewevidence_json{
"evidence": "Bytecode at offset 0x0c10 executes CALLER then SELFDESTRUCT. This path is reachable from the function at 0x0b01 which first runs the caller whitelist at 0x03f2 (CALLER compared against hard-coded addresses) before branching to 0x0c0f.",
"locations": [
"BYTECODE_BUNDLE.txt:5"
],
"recommendation": "Remove SELFDESTRUCT or restrict it to a timelocked governance process; at minimum, require multi-step approvals and send funds to a safe treasury instead of msg.sender.",
"exploit_scenario": "If any whitelisted address invokes the function path that reaches the zero-flag branch, the contract executes SELFDESTRUCT and transfers its ETH balance to the caller, permanently bricking the contract."
}
|
| high | upgradeability | codex | Whitelisted delegatecall enables arbitrary code execution | 85 | no | — |
viewevidence_json{
"evidence": "The function at 0x035b decodes calldata (0x246f) and jumps to 0x0f08, which runs the whitelist at 0x03f2 and then executes DELEGATECALL at 0x0f24 after copying calldata. No constant target address is pushed in this stub, so the target is supplied via decoded arguments.",
"locations": [
"BYTECODE_BUNDLE.txt:5"
],
"recommendation": "If not intended, remove the delegatecall entry point. If intended, restrict targets to audited implementations and add governance/timelocks for upgrades.",
"exploit_scenario": "A whitelisted address can invoke the delegatecall entry point with a chosen target and calldata, executing external code in this contract\u2019s context to modify storage or drain funds."
}
|
| high | upgradeability | detector | Untrusted DELEGATECALL target reachable | 55 | no | no |
viewtrace_id: 0x6f089df7944d8427310e51c3deff12e9202f0e4007c4ec863297d2919759c637
validation_json{
"sink": "DELEGATECALL",
"errors": 0,
"status": "unknown",
"attempts": 120,
"trace_id": "0x6f089df7944d8427310e51c3deff12e9202f0e4007c4ec863297d2919759c637",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": null,
"matched_probe": null,
"target_varies": null,
"classification": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x7c04575b",
"selector": "0x7c04575b",
"calldata_variants": [
"0x7c04575b",
"0x7c04575b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa7b8e688",
"selector": "0xa7b8e688",
"calldata_variants": [
"0xa7b8e688",
"0xa7b8e6880000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd2925723",
"selector": "0xd2925723",
"calldata_variants": [
"0xd2925723",
"0xd29257230000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd69ea74d",
"selector": "0xd69ea74d",
"calldata_variants": [
"0xd69ea74d",
"0xd69ea74d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfa461e33",
"selector": "0xfa461e33",
"calldata_variants": [
"0xfa461e33",
"0xfa461e330000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x0cb7f13c",
"selector": "0x0cb7f13c",
"calldata_variants": [
"0x0cb7f13c",
"0x0cb7f13c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x10c117ab",
"selector": "0x10c117ab",
"calldata_variants": [
"0x10c117ab",
"0x10c117ab0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x23a69e75",
"selector": "0x23a69e75",
"calldata_variants": [
"0x23a69e75",
"0x23a69e750000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 3876,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
}
],
"guards_detected": [
{
"pc": 177,
"type": "msg_sender_eq_const",
"value": 1.0970776880180083e+48
},
{
"pc": 1036,
"type": "msg_sender_eq_const",
"value": 1.2343154550248751e+48
},
{
"pc": 1065,
"type": "msg_sender_eq_const",
"value": 2.703459470320946e+47
},
{
"pc": 1095,
"type": "msg_sender_eq_const",
"value": 1.1273818385233569e+48
},
{
"pc": 1125,
"type": "msg_sender_eq_const",
"value": 1.2789106993346929e+48
},
{
"pc": 1155,
"type": "msg_sender_eq_const",
"value": 6.4816253918498025e+47
},
{
"pc": 6018,
"type": "msg_sender_eq_const",
"value": 6.3029377576813095e+47
},
{
"pc": 6047,
"type": "msg_sender_eq_const",
"value": 1.3371052191676666e+48
},
{
"pc": 7849,
"type": "msg_sender_eq_const",
"value": 1.2343154550248751e+48
},
{
"pc": 7878,
"type": "msg_sender_eq_const",
"value": 2.703459470320946e+47
},
{
"pc": 7908,
"type": "msg_sender_eq_const",
"value": 1.1273818385233569e+48
},
{
"pc": 7938,
"type": "msg_sender_eq_const",
"value": 1.2789106993346929e+48
},
{
"pc": 7968,
"type": "msg_sender_eq_const",
"value": 6.3029377576813095e+47
},
{
"pc": 7998,
"type": "msg_sender_eq_const",
"value": 1.3371052191676666e+48
},
{
"pc": 8027,
"type": "msg_sender_eq_const",
"value": 6.4816253918498025e+47
},
{
"pc": 8759,
"type": "tx_origin_used"
},
{
"pc": 8788,
"type": "tx_origin_used"
},
{
"pc": 8818,
"type": "tx_origin_used"
},
{
"pc": 8848,
"type": "tx_origin_used"
},
{
"pc": 8878,
"type": "tx_origin_used"
},
{
"pc": 155,
"type": "msg_sender_eq_const",
"value": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
},
{
"pc": 8758,
"type": "tx_origin_used"
},
{
"pc": 8787,
"type": "tx_origin_used"
},
{
"pc": 8817,
"type": "tx_origin_used"
},
{
"pc": 8847,
"type": "tx_origin_used"
},
{
"pc": 8877,
"type": "tx_origin_used"
}
],
"delegatecall_count": 1,
"untrusted_delegatecall_count": 1
}
|
| high | auth | detector | Authorization based on tx.origin | 70 | no | — |
viewvalidation_json{
"reason": "missing sink mapping",
"status": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x7c04575b",
"selector": "0x7c04575b",
"calldata_variants": [
"0x7c04575b",
"0x7c04575b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa7b8e688",
"selector": "0xa7b8e688",
"calldata_variants": [
"0xa7b8e688",
"0xa7b8e6880000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd2925723",
"selector": "0xd2925723",
"calldata_variants": [
"0xd2925723",
"0xd29257230000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd69ea74d",
"selector": "0xd69ea74d",
"calldata_variants": [
"0xd69ea74d",
"0xd69ea74d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfa461e33",
"selector": "0xfa461e33",
"calldata_variants": [
"0xfa461e33",
"0xfa461e330000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x0cb7f13c",
"selector": "0x0cb7f13c",
"calldata_variants": [
"0x0cb7f13c",
"0x0cb7f13c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x10c117ab",
"selector": "0x10c117ab",
"calldata_variants": [
"0x10c117ab",
"0x10c117ab0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x23a69e75",
"selector": "0x23a69e75",
"calldata_variants": [
"0x23a69e75",
"0x23a69e750000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 177,
"type": "msg_sender_eq_const",
"value": 1.0970776880180083e+48
},
{
"pc": 1036,
"type": "msg_sender_eq_const",
"value": 1.2343154550248751e+48
},
{
"pc": 1065,
"type": "msg_sender_eq_const",
"value": 2.703459470320946e+47
},
{
"pc": 1095,
"type": "msg_sender_eq_const",
"value": 1.1273818385233569e+48
},
{
"pc": 1125,
"type": "msg_sender_eq_const",
"value": 1.2789106993346929e+48
},
{
"pc": 1155,
"type": "msg_sender_eq_const",
"value": 6.4816253918498025e+47
},
{
"pc": 6018,
"type": "msg_sender_eq_const",
"value": 6.3029377576813095e+47
},
{
"pc": 6047,
"type": "msg_sender_eq_const",
"value": 1.3371052191676666e+48
},
{
"pc": 7849,
"type": "msg_sender_eq_const",
"value": 1.2343154550248751e+48
},
{
"pc": 7878,
"type": "msg_sender_eq_const",
"value": 2.703459470320946e+47
},
{
"pc": 7908,
"type": "msg_sender_eq_const",
"value": 1.1273818385233569e+48
},
{
"pc": 7938,
"type": "msg_sender_eq_const",
"value": 1.2789106993346929e+48
},
{
"pc": 7968,
"type": "msg_sender_eq_const",
"value": 6.3029377576813095e+47
},
{
"pc": 7998,
"type": "msg_sender_eq_const",
"value": 1.3371052191676666e+48
},
{
"pc": 8027,
"type": "msg_sender_eq_const",
"value": 6.4816253918498025e+47
},
{
"pc": 8759,
"type": "tx_origin_used"
},
{
"pc": 8788,
"type": "tx_origin_used"
},
{
"pc": 8818,
"type": "tx_origin_used"
},
{
"pc": 8848,
"type": "tx_origin_used"
},
{
"pc": 8878,
"type": "tx_origin_used"
},
{
"pc": 155,
"type": "msg_sender_eq_const",
"value": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
},
{
"pc": 8758,
"type": "tx_origin_used"
},
{
"pc": 8787,
"type": "tx_origin_used"
},
{
"pc": 8817,
"type": "tx_origin_used"
},
{
"pc": 8847,
"type": "tx_origin_used"
},
{
"pc": 8877,
"type": "tx_origin_used"
}
]
}
|
| high | other | cast | SELFDESTRUCT present | 85 | no | — |
viewevidence_json{
"notes": "selfdestruct can remove contract code and send funds; review reachability",
"selfdestruct_count": 1
}
|
| medium | upgradeability | cast | DELEGATECALL present | 80 | no | — |
viewevidence_json{
"notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
"delegatecall_count": 1
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0xefe453be8915674072384d366038980cc215cb94e9ef4e8afc2836909484736b
call_targets:
0x01fdc48ba0903bb1ae7c517c9287d88ea236f8e1
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xefe453be8915674072384d366038980cc215cb94e9ef4e8afc2836909484736b",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x01fdc48ba0903bb1ae7c517c9287d88ea236f8e1"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x7c04575b",
"selector": "0x7c04575b",
"calldata_variants": [
"0x7c04575b",
"0x7c04575b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa7b8e688",
"selector": "0xa7b8e688",
"calldata_variants": [
"0xa7b8e688",
"0xa7b8e6880000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd2925723",
"selector": "0xd2925723",
"calldata_variants": [
"0xd2925723",
"0xd29257230000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd69ea74d",
"selector": "0xd69ea74d",
"calldata_variants": [
"0xd69ea74d",
"0xd69ea74d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfa461e33",
"selector": "0xfa461e33",
"calldata_variants": [
"0xfa461e33",
"0xfa461e330000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x0cb7f13c",
"selector": "0x0cb7f13c",
"calldata_variants": [
"0x0cb7f13c",
"0x0cb7f13c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x10c117ab",
"selector": "0x10c117ab",
"calldata_variants": [
"0x10c117ab",
"0x10c117ab0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x23a69e75",
"selector": "0x23a69e75",
"calldata_variants": [
"0x23a69e75",
"0x23a69e750000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 263,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 633,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 735,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 16,
"guards_detected": [
{
"pc": 177,
"type": "msg_sender_eq_const",
"value": 1.0970776880180083e+48
},
{
"pc": 1036,
"type": "msg_sender_eq_const",
"value": 1.2343154550248751e+48
},
{
"pc": 1065,
"type": "msg_sender_eq_const",
"value": 2.703459470320946e+47
},
{
"pc": 1095,
"type": "msg_sender_eq_const",
"value": 1.1273818385233569e+48
},
{
"pc": 1125,
"type": "msg_sender_eq_const",
"value": 1.2789106993346929e+48
},
{
"pc": 1155,
"type": "msg_sender_eq_const",
"value": 6.4816253918498025e+47
},
{
"pc": 6018,
"type": "msg_sender_eq_const",
"value": 6.3029377576813095e+47
},
{
"pc": 6047,
"type": "msg_sender_eq_const",
"value": 1.3371052191676666e+48
},
{
"pc": 7849,
"type": "msg_sender_eq_const",
"value": 1.2343154550248751e+48
},
{
"pc": 7878,
"type": "msg_sender_eq_const",
"value": 2.703459470320946e+47
},
{
"pc": 7908,
"type": "msg_sender_eq_const",
"value": 1.1273818385233569e+48
},
{
"pc": 7938,
"type": "msg_sender_eq_const",
"value": 1.2789106993346929e+48
},
{
"pc": 7968,
"type": "msg_sender_eq_const",
"value": 6.3029377576813095e+47
},
{
"pc": 7998,
"type": "msg_sender_eq_const",
"value": 1.3371052191676666e+48
},
{
"pc": 8027,
"type": "msg_sender_eq_const",
"value": 6.4816253918498025e+47
},
{
"pc": 8759,
"type": "tx_origin_used"
},
{
"pc": 8788,
"type": "tx_origin_used"
},
{
"pc": 8818,
"type": "tx_origin_used"
},
{
"pc": 8848,
"type": "tx_origin_used"
},
{
"pc": 8878,
"type": "tx_origin_used"
},
{
"pc": 155,
"type": "msg_sender_eq_const",
"value": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
},
{
"pc": 8758,
"type": "tx_origin_used"
},
{
"pc": 8787,
"type": "tx_origin_used"
},
{
"pc": 8817,
"type": "tx_origin_used"
},
{
"pc": 8847,
"type": "tx_origin_used"
},
{
"pc": 8877,
"type": "tx_origin_used"
}
],
"untrusted_call_count": 16
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0xefe453be8915674072384d366038980cc215cb94e9ef4e8afc2836909484736b
call_targets:
0x01fdc48ba0903bb1ae7c517c9287d88ea236f8e1
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xefe453be8915674072384d366038980cc215cb94e9ef4e8afc2836909484736b",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x01fdc48ba0903bb1ae7c517c9287d88ea236f8e1"
],
"matched_probe": null,
"target_varies": false,
"classification": "constant_target"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x7c04575b",
"selector": "0x7c04575b",
"calldata_variants": [
"0x7c04575b",
"0x7c04575b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa7b8e688",
"selector": "0xa7b8e688",
"calldata_variants": [
"0xa7b8e688",
"0xa7b8e6880000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd2925723",
"selector": "0xd2925723",
"calldata_variants": [
"0xd2925723",
"0xd29257230000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd69ea74d",
"selector": "0xd69ea74d",
"calldata_variants": [
"0xd69ea74d",
"0xd69ea74d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfa461e33",
"selector": "0xfa461e33",
"calldata_variants": [
"0xfa461e33",
"0xfa461e330000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x0cb7f13c",
"selector": "0x0cb7f13c",
"calldata_variants": [
"0x0cb7f13c",
"0x0cb7f13c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x10c117ab",
"selector": "0x10c117ab",
"calldata_variants": [
"0x10c117ab",
"0x10c117ab0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x23a69e75",
"selector": "0x23a69e75",
"calldata_variants": [
"0x23a69e75",
"0x23a69e750000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 263,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 633,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 735,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 16,
"guards_detected": [
{
"pc": 177,
"type": "msg_sender_eq_const",
"value": 1.0970776880180083e+48
},
{
"pc": 1036,
"type": "msg_sender_eq_const",
"value": 1.2343154550248751e+48
},
{
"pc": 1065,
"type": "msg_sender_eq_const",
"value": 2.703459470320946e+47
},
{
"pc": 1095,
"type": "msg_sender_eq_const",
"value": 1.1273818385233569e+48
},
{
"pc": 1125,
"type": "msg_sender_eq_const",
"value": 1.2789106993346929e+48
},
{
"pc": 1155,
"type": "msg_sender_eq_const",
"value": 6.4816253918498025e+47
},
{
"pc": 6018,
"type": "msg_sender_eq_const",
"value": 6.3029377576813095e+47
},
{
"pc": 6047,
"type": "msg_sender_eq_const",
"value": 1.3371052191676666e+48
},
{
"pc": 7849,
"type": "msg_sender_eq_const",
"value": 1.2343154550248751e+48
},
{
"pc": 7878,
"type": "msg_sender_eq_const",
"value": 2.703459470320946e+47
},
{
"pc": 7908,
"type": "msg_sender_eq_const",
"value": 1.1273818385233569e+48
},
{
"pc": 7938,
"type": "msg_sender_eq_const",
"value": 1.2789106993346929e+48
},
{
"pc": 7968,
"type": "msg_sender_eq_const",
"value": 6.3029377576813095e+47
},
{
"pc": 7998,
"type": "msg_sender_eq_const",
"value": 1.3371052191676666e+48
},
{
"pc": 8027,
"type": "msg_sender_eq_const",
"value": 6.4816253918498025e+47
},
{
"pc": 8759,
"type": "tx_origin_used"
},
{
"pc": 8788,
"type": "tx_origin_used"
},
{
"pc": 8818,
"type": "tx_origin_used"
},
{
"pc": 8848,
"type": "tx_origin_used"
},
{
"pc": 8878,
"type": "tx_origin_used"
},
{
"pc": 155,
"type": "msg_sender_eq_const",
"value": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
},
{
"pc": 8758,
"type": "tx_origin_used"
},
{
"pc": 8787,
"type": "tx_origin_used"
},
{
"pc": 8817,
"type": "tx_origin_used"
},
{
"pc": 8847,
"type": "tx_origin_used"
},
{
"pc": 8877,
"type": "tx_origin_used"
}
]
}
|
| medium | auth | codex | Authorization uses tx.origin | 75 | no | — |
viewevidence_json{
"evidence": "At offsets 0x2221\u20130x22af the code uses ORIGIN and compares it to hard-coded addresses, then jumps to privileged logic or reverts (JUMPI to 0x0489).",
"locations": [
"BYTECODE_BUNDLE.txt:5"
],
"recommendation": "Replace tx.origin with msg.sender and enforce explicit role-based access control.",
"exploit_scenario": "An attacker can deploy an intermediary contract and trick a whitelisted EOA into calling it; tx.origin remains the whitelisted address, bypassing the check and allowing privileged actions through the attacker-controlled contract."
}
|
| medium | other | detector | SELFDESTRUCT reachable | 45 | no | no |
viewtrace_id: 0x9fc0d8400461c423bbf524b7dbaa62d5340e49bb696e84b8e3441ce6fbf9419f
validation_json{
"sink": "SELFDESTRUCT",
"errors": 0,
"status": "unknown",
"attempts": 20,
"trace_id": "0x9fc0d8400461c423bbf524b7dbaa62d5340e49bb696e84b8e3441ce6fbf9419f",
"confirmed": false,
"trace_mode": "structLogs",
"call_targets": null,
"matched_probe": null,
"target_varies": null,
"classification": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x7c04575b",
"selector": "0x7c04575b",
"calldata_variants": [
"0x7c04575b",
"0x7c04575b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa7b8e688",
"selector": "0xa7b8e688",
"calldata_variants": [
"0xa7b8e688",
"0xa7b8e6880000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd2925723",
"selector": "0xd2925723",
"calldata_variants": [
"0xd2925723",
"0xd29257230000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd69ea74d",
"selector": "0xd69ea74d",
"calldata_variants": [
"0xd69ea74d",
"0xd69ea74d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfa461e33",
"selector": "0xfa461e33",
"calldata_variants": [
"0xfa461e33",
"0xfa461e330000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x0cb7f13c",
"selector": "0x0cb7f13c",
"calldata_variants": [
"0x0cb7f13c",
"0x0cb7f13c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x10c117ab",
"selector": "0x10c117ab",
"calldata_variants": [
"0x10c117ab",
"0x10c117ab0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x23a69e75",
"selector": "0x23a69e75",
"calldata_variants": [
"0x23a69e75",
"0x23a69e750000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 177,
"type": "msg_sender_eq_const",
"value": 1.0970776880180083e+48
},
{
"pc": 1036,
"type": "msg_sender_eq_const",
"value": 1.2343154550248751e+48
},
{
"pc": 1065,
"type": "msg_sender_eq_const",
"value": 2.703459470320946e+47
},
{
"pc": 1095,
"type": "msg_sender_eq_const",
"value": 1.1273818385233569e+48
},
{
"pc": 1125,
"type": "msg_sender_eq_const",
"value": 1.2789106993346929e+48
},
{
"pc": 1155,
"type": "msg_sender_eq_const",
"value": 6.4816253918498025e+47
},
{
"pc": 6018,
"type": "msg_sender_eq_const",
"value": 6.3029377576813095e+47
},
{
"pc": 6047,
"type": "msg_sender_eq_const",
"value": 1.3371052191676666e+48
},
{
"pc": 7849,
"type": "msg_sender_eq_const",
"value": 1.2343154550248751e+48
},
{
"pc": 7878,
"type": "msg_sender_eq_const",
"value": 2.703459470320946e+47
},
{
"pc": 7908,
"type": "msg_sender_eq_const",
"value": 1.1273818385233569e+48
},
{
"pc": 7938,
"type": "msg_sender_eq_const",
"value": 1.2789106993346929e+48
},
{
"pc": 7968,
"type": "msg_sender_eq_const",
"value": 6.3029377576813095e+47
},
{
"pc": 7998,
"type": "msg_sender_eq_const",
"value": 1.3371052191676666e+48
},
{
"pc": 8027,
"type": "msg_sender_eq_const",
"value": 6.4816253918498025e+47
},
{
"pc": 8759,
"type": "tx_origin_used"
},
{
"pc": 8788,
"type": "tx_origin_used"
},
{
"pc": 8818,
"type": "tx_origin_used"
},
{
"pc": 8848,
"type": "tx_origin_used"
},
{
"pc": 8878,
"type": "tx_origin_used"
},
{
"pc": 155,
"type": "msg_sender_eq_const",
"value": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
},
{
"pc": 8758,
"type": "tx_origin_used"
},
{
"pc": 8787,
"type": "tx_origin_used"
},
{
"pc": 8817,
"type": "tx_origin_used"
},
{
"pc": 8847,
"type": "tx_origin_used"
},
{
"pc": 8877,
"type": "tx_origin_used"
}
],
"selfdestruct_count": 1
}
|
| info | other | cast | Heavy CALL-family usage | 55 | no | — |
viewevidence_json{
"notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
"call_family_count": 20
}
|
| info | other | cast | Heavy EXTCODE*/BALANCE usage | 55 | no | — |
viewevidence_json{
"notes": "frequent external code or balance checks; may indicate introspection or validation logic",
"ext_balance_count": 6
}
|