f9510eb6-1b48-47e8-b07f-db6f72c8035f
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 |
|---|---|---|---|---|
| 31491 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 77572 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 77573 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 77574 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 77575 | capability.graph | complete | 1 / 3 | 1 week ago |
| 77576 | detector.run | complete | 1 / 3 | 1 week ago |
| 77577 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:1189574] OpenAI Codex v0.77.0 (research preview)
[codex:1189574] --------
[codex:1189574] workdir: /tmp/codex-multi-afh6is7w
[codex:1189574] model: gpt-5.2-codex
[codex:1189574] provider: openai
[codex:1189574] approval: never
[codex:1189574] sandbox: read-only
[codex:1189574] reasoning effort: xhigh
[codex:1189574] reasoning summaries: auto
[codex:1189574] session id: 019b865a-8e4a-7cb2-b378-a567f0d4c336
[codex:1189574] --------
[codex:1189574] user
[codex:1189574] You are a profit-focused exploit hunter analyzing EVM bytecode. Your ONLY goal is finding ways to extract value (ETH, tokens, NFTs) from this contract.
[codex:1189574]
[codex:1189574] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:1189574]
[codex:1189574] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:1189574] - Gas inefficiency, code quality, or best practices
[codex:1189574] - Theoretical vulnerabilities without a clear extraction path
[codex:1189574] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:1189574] - Issues requiring social engineering or off-chain coordination
[codex:1189574]
[codex:1189574] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:1189574] - CALL/DELEGATECALL with controllable destination or calldata
[codex:1189574] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:1189574] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:1189574] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:1189574] - External calls before state updates (reentrancy)
[codex:1189574] - SELFDESTRUCT with controllable beneficiary
[codex:1189574] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:1189574]
[codex:1189574] For each finding, you MUST explain:
[codex:1189574] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:1189574] 2. The concrete sequence of transactions to extract value
[codex:1189574] 3. Why you believe this is exploitable (not just suspicious)
[codex:1189574]
[codex:1189574] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:1189574] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:1189574]
[codex:1189574] Output MUST be valid JSON matching the provided schema.
[codex:1189574] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:1189574] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:1189574] mcp startup: no servers
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Reading BYTECODE_BUNDLE.txt**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc ls in /tmp/codex-multi-afh6is7w succeeded in 5ms:
[codex:1189574] BYTECODE_BUNDLE.txt
[codex:1189574] codex-output-schema.json
[codex:1189574] exec
[codex:1189574] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-afh6is7w succeeded in 5ms:
[codex:1189574] Runtime bytecode bundle for best-effort auditing.
[codex:1189574] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:1189574]
[codex:1189574] FILE: runtime_bytecode.hex
[codex:1189574] 0x6080604052600436106102605760003560e01c806376420e1d11610144578063cc855ccc116100b6578063e1f21c671161007a578063e1f21c671461071b578063e48603391461073b578063e7e31e7a1461075b578063f0225a3c1461077b578063f1880b241461079b578063f60d7e9c146107bb57600080fd5b8063cc855ccc1461067b578063d48bfca71461069b578063d547741f146106bb578063de590125146106db578063deb9a3a2146106fb57600080fd5b80639169d833116101085780639169d833146105e457806391d148541461060457806396a59af414610624578063a217fddf14610429578063c41d5a0614610646578063ca15c8731461065b57600080fd5b806376420e1d146105355780637ffbe24114610557578063884fedba146105775780638ce5877c1461058c5780639010d07c146105ac57600080fd5b8063223e5479116101dd57806339ebf823116101a157806339ebf8231461047e5780635d7e641e1461049e5780635fa7b584146104c057806363a31bd4146104e057806369efe471146105005780636ff97f1d1461052057600080fd5b8063223e5479146103d9578063248a9ca3146103f95780632a0acc6a146104295780632f2ff15d1461043e57806336568abe1461045e57600080fd5b8063175c4ef811610224578063175c4ef814610335578063193458ce146103575780631af1e2fb146103775780631b2df850146103975780631cff79cd146103b957600080fd5b8063018fbe571461026c57806301ffc9a7146102a15780630c2997ca146102d157806312eeff7e146102f3578063175188e81461031557600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5061028e6000805160206127d383398151915281565b6040519081526020015b60405180910390f35b3480156102ad57600080fd5b506102c16102bc366004612336565b6107db565b6040519015158152602001610298565b3480156102dd57600080fd5b506102e6610806565b6040516102989190612360565b3480156102ff57600080fd5b5061031361030e3660046123eb565b6108e2565b005b34801561032157600080fd5b5061031361033036600461243a565b610bb1565b34801561034157600080fd5b5061028e6000805160206127b383398151915281565b34801561036357600080fd5b50610313610372366004612455565b610c43565b34801561038357600080fd5b5061031361039236600461243a565b610cfe565b3480156103a357600080fd5b5061028e60008051602061279383398151915281565b3480156103c557600080fd5b506103136103d436600461247f565b610d88565b3480156103e557600080fd5b506103136103f436600461243a565b610e35565b34801561040557600080fd5b5061028e610414366004612504565b60009081526020819052604090206001015490565b34801561043557600080fd5b5061028e600081565b34801561044a57600080fd5b5061031361045936600461251d565b610ebe565b34801561046a57600080fd5b5061031361047936600461251d565b610f55565b34801561048a57600080fd5b506102c161049936600461243a565b610f88565b3480156104aa57600080fd5b506104b3610f95565b6040516102989190612549565b3480156104cc57600080fd5b506103136104db36600461243a565b610fa6565b3480156104ec57600080fd5b506102c16104fb36600461243a565b611030565b34801561050c57600080fd5b5061028e61051b36600461243a565b61103d565b34801561052c57600080fd5b506104b3611051565b34801561054157600080fd5b5061028e6000805160206127f383398151915281565b34801561056357600080fd5b506102c161057236600461243a565b61105d565b34801561058357600080fd5b506104b361106a565b34801561059857600080fd5b506103136105a736600461243a565b611076565b3480156105b857600080fd5b506105cc6105c736600461258a565b611100565b6040516001600160a01b039091168152602001610298565b3480156105f057600080fd5b506103136105ff366004612504565b611118565b34801561061057600080fd5b506102c161061f36600461251d565b611225565b34801561063057600080fd5b5061063961124e565b60405161029891906125ac565b34801561065257600080fd5b506104b3611323565b34801561066757600080fd5b5061028e610676366004612504565b61132f565b34801561068757600080fd5b50610313610696366004612455565b611346565b3480156106a757600080fd5b506103136106b636600461243a565b61140e565b3480156106c757600080fd5b506103136106d636600461251d565b611497565b3480156106e757600080fd5b506103136106f63660046123eb565b6114c2565b34801561070757600080fd5b50610313610716366004612602565b61179c565b34801561072757600080fd5b50610313610736366004612672565b61188a565b34801561074757600080fd5b506102c161075636600461243a565b6118fc565b34801561076757600080fd5b5061031361077636600461243a565b611909565b34801561078757600080fd5b5061028e61079636600461243a565b611992565b3480156107a757600080fd5b506103136107b636600461243a565b61199f565b3480156107c757600080fd5b506103136107d636600461243a565b6119a8565b60006001600160e01b03198216635a05180f60e01b1480610800575061080082611a31565b92915050565b60606000610814600e611a66565b905060008167ffffffffffffffff811115610831576108316126af565b60405190808252806020026020018201604052801561087657816020015b604080518082019091526000808252602082015281526020019060019003908161084f5790505b50905060005b828110156108db57600080610892600e84611a71565b915091506040518060400160405280836001600160a01b03168152602001828152508484815181106108c6576108c66126c5565b6020908102919091010152505060010161087c565b5092915050565b6108fa6000805160206127d383398151915233611225565b610917576040516303a81c9760e61b815260040160405180910390fd5b61092084611a8f565b61092b600783611ac2565b6109585760405163a787604b60e01b81526001600160a01b03831660048201526024015b60405180910390fd5b604080513060248083019190915282518083039091018152604490910182526020810180516001600160e01b03166370a0823160e01b1790529051600091829182916001600160a01b038916916109af91906126db565b600060405180830381855afa9150503d80600081146109ea576040519150601f19603f3d011682016040523d82523d6000602084013e6109ef565b606091505b5091509150818015610a02575080516020145b15610a1e5780806020019051810190610a1b919061270a565b92505b838015610a3857506002546001600160a01b038881169116145b15610a4a57610a474784612739565b92505b85831015610a7557604051634787a10360e11b8152600481018490526024810187905260440161094f565b838015610a8f57506002546001600160a01b038881169116145b15610b425785471015610b06576001600160a01b038716632e1a7d4d610ab5478961274c565b6040518263ffffffff1660e01b8152600401610ad391815260200190565b600060405180830381600087803b158015610aed57600080fd5b505af1158015610b01573d6000803e3d6000fd5b505050505b6040516001600160a01b0386169087156108fc029088906000818181858888f19350505050158015610b3c573d6000803e3d6000fd5b50610b56565b610b566001600160a01b0388168688611ae4565b604080516001600160a01b03898116825260208201899052871681830152851515606082015290517ff5a218c3f2e48fb71969f47c462c49a00473152fa2170938abd781982c93fca69181900360800190a150505050505050565b610bc960008051602061279383398151915233611225565b610be65760405163605919ad60e11b815260040160405180910390fd5b610bf1600382611ac2565b15610c4057610c01600382611b43565b506040516001600160a01b03821681527f09a1db4b80c32706328728508c941a6b954f31eb5affd32f236c1fd405f8fea4906020015b60405180910390a15b50565b610c5b60008051602061279383398151915233611225565b610c785760405163605919ad60e11b815260040160405180910390fd5b610c8182611a8f565b6000610c8e600e84611b58565b915050808203610c9d57505050565b81600003610cb657610cb0600e84611b70565b50610cc4565b610cc2600e8484611b85565b505b6040518281527f46d7618326b02f1816d1bc53039cbd2b3a77a2cd560dafcc20471097fd9e85e4906020015b60405180910390a1505b5050565b610d1660008051602061279383398151915233611225565b610d335760405163605919ad60e11b815260040160405180910390fd5b610d3e600782611ac2565b15610c4057610d4e600782611b43565b506040516001600160a01b03821681527f3eecdc5b7fe6b9eeb35a1f4d3f16910d39a0dd7587ffe9e76cf56b29b6e4e1f190602001610c37565b610da06000805160206127b383398151915233611225565b610dbd5760405163897e65bd60e01b815260040160405180910390fd5b610dc8600384611ac2565b610df057604051636c33797360e11b81526001600160a01b038416600482015260240161094f565b610e308383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ba392505050565b505050565b610e4d60008051602061279383398151915233611225565b610e6a5760405163605919ad60e11b815260040160405180910390fd5b610e75600382611ac2565b610c4057610e84600382611bc6565b506040516001600160a01b03821681527f3f008fd510eae7a9e7bee13513d7b83bef8003d488b5a3d0b0da4de71d6846f190602001610c37565b818015801590610edc57506000805160206127938339815191528114155b8015610ef657506000805160206127d38339815191528114155b8015610f1057506000805160206127b38339815191528114155b8015610f2a57506000805160206127f38339815191528114155b15610f4b5760405163125a2bb760e01b81526004810182905260240161094f565b610e308383611bdb565b6001600160a01b0381163314610f7e5760405163334bd91960e11b815260040160405180910390fd5b610e308282611c00565b6000610800600383611ac2565b6060610fa16003611c35565b905090565b610fbe60008051602061279383398151915233611225565b610fdb5760405163605919ad60e11b815260040160405180910390fd5b610fe6600582611ac2565b15610c4057610ff6600582611b43565b506040516001600160a01b03821681527f4c910b69fe65a61f7531b9c5042b2329ca7179c77290aa7e2eb3afa3c8511fd390602001610c37565b6000610800600c83611ac2565b600061104a600983611b58565b9392505050565b6060610fa16005611c35565b6000610800600783611ac2565b6060610fa16007611c35565b61108e60008051602061279383398151915233611225565b6110ab5760405163605919ad60e11b815260040160405180910390fd5b6110b6600c82611ac2565b15610c40576110c6600c82611b43565b506040516001600160a01b03821681527fab8cff50266d80b9c9d9703af934ca455b9218286bf4fcaa05653a564c499e4b90602001610c37565b600082815260016020526040812061104a9083611c42565b6111306000805160206127b383398151915233611225565b61114d5760405163897e65bd60e01b815260040160405180910390fd5b8047101561117757604051634787a10360e11b81524760048201526024810182905260440161094f565b600260009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156111c757600080fd5b505af11580156111db573d6000803e3d6000fd5b5050600254604080516001600160a01b039092168252602082018690527f2c58f4d3d48c3b93bf8f7fd23f32658ccb97894f02022d2189ffa9903d37bfb89450019150610c379050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600061125c6009611a66565b905060008167ffffffffffffffff811115611279576112796126af565b6040519080825280602002602001820160405280156112be57816020015b60408051808201909152600080825260208201528152602001906001900390816112975790505b50905060005b828110156108db576000806112da600984611a71565b915091506040518060400160405280836001600160a01b031681526020018281525084848151811061130e5761130e6126c5565b602090810291909101015250506001016112c4565b6060610fa1600c611c35565b600081815260016020526040812061080090611c4e565b61135e60008051602061279383398151915233611225565b61137b5760405163605919ad60e11b815260040160405180910390fd5b61138482611a8f565b6000611391600984611b58565b9150508082036113a057505050565b816000036113b9576113b3600984611b70565b506113c7565b6113c560098484611b85565b505b604080516001600160a01b0385168152602081018390529081018390527f5a257baf8d7726a03c0e1fb5ddaa5b77d339332901e52d15169d56442a381c1290606001610cf0565b61142660008051602061279383398151915233611225565b6114435760405163605919ad60e11b815260040160405180910390fd5b61144e600582611ac2565b610c405761145d600582611bc6565b506040516001600160a01b03821681527f784c8f4dbf0ffedd6e72c76501c545a70f8b203b30a26ce542bf92ba87c248a490602001610c37565b6000828152602081905260409020600101546114b281611c58565b6114bc8383611c00565b50505050565b6114da6000805160206127f383398151915233611225565b6114f757604051631966c8a560e01b815260040160405180910390fd5b61150084611a8f565b61150b600783611ac2565b6115335760405163a787604b60e01b81526001600160a01b038316600482015260240161094f565b6000611540600986611b58565b9150508381101561156e5760405163086e219760e11b8152600481018290526024810185905260440161094f565b600061157b601187611b58565b9150600090508061158d600e89611b58565b909250905061159c8184612739565b421180156115a75750815b6115ce57604051630722e4a160e51b8152600481018490526024810182905260440161094f565b6040516370a0823160e01b815230600482015288906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163b919061270a565b90508881101561166857604051634787a10360e11b815260048101829052602481018a905260440161094f565b86801561168257506002546001600160a01b038b81169116145b1561171d57604051632e1a7d4d60e01b8152600481018a90526001600160a01b038b1690632e1a7d4d90602401600060405180830381600087803b1580156116c957600080fd5b505af11580156116dd573d6000803e3d6000fd5b50506040516001600160a01b038b1692508b156108fc0291508b906000818181858888f19350505050158015611717573d6000803e3d6000fd5b50611731565b6117316001600160a01b038b16898b611ae4565b61173d60118b42611b85565b50604080516001600160a01b038c81168252602082018c90528a1681830152881515606082015290517ff5a218c3f2e48fb71969f47c462c49a00473152fa2170938abd781982c93fca69181900360800190a150505050505050505050565b6000838152602081905260409020600101546117b781611c58565b8380158015906117d557506000805160206127938339815191528114155b80156117ef57506000805160206127d38339815191528114155b801561180957506000805160206127b38339815191528114155b801561182357506000805160206127f38339815191528114155b156118445760405163125a2bb760e01b81526004810182905260240161094f565b60005b838110156118825761187a86868684818110611865576118656126c5565b9050602002016020810190610459919061243a565b600101611847565b505050505050565b3330146118ac5760405163472511eb60e11b815233600482015260240161094f565b6118b583611a8f565b6118c0600c83611ac2565b6118e8576040516327bca0f560e21b81526001600160a01b038316600482015260240161094f565b610e306001600160a01b0384168383611c62565b6000610800600583611ac2565b61192160008051602061279383398151915233611225565b61193e5760405163605919ad60e11b815260040160405180910390fd5b611949600c82611ac2565b610c4057611958600c82611bc6565b506040516001600160a01b03821681527f3139419c41cdd7abca84fa19dd21118cd285d3e2ce1a9444e8161ce9fa62fdcd90602001610c37565b600061104a600e83611b58565b610c4081611a8f565b6119c060008051602061279383398151915233611225565b6119dd5760405163605919ad60e11b815260040160405180910390fd5b6119e8600782611ac2565b610c40576119f7600782611bc6565b506040516001600160a01b03821681527fb161bb911e584e40711ead7275aaf23b4dfeb38befa1e269b835db83e0d112a790602001610c37565b60006001600160e01b03198216637965db0b60e01b148061080057506301ffc9a760e01b6001600160e01b0319831614610800565b600061080082611cf2565b6000808080611a808686611cfd565b909450925050505b9250929050565b611a9a600582611ac2565b610c4057604051635f8b555b60e11b81526001600160a01b038216600482015260240161094f565b6001600160a01b0381166000908152600183016020526040812054151561104a565b6040516001600160a01b03838116602483015260448201839052610e3091859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611d28565b600061104a836001600160a01b038416611d8b565b6000808080611a80866001600160a01b038716611e7e565b600061104a836001600160a01b038416611eb8565b6000611b9b846001600160a01b03851684611ed5565b949350505050565b80516000808260208501865af43d6000803e808015611bc1573d6000f35b3d6000fd5b600061104a836001600160a01b038416611ef2565b600082815260208190526040902060010154611bf681611c58565b6114bc8383611f41565b600080611c0d8484611f6e565b9050801561104a576000848152600160205260409020611c2d9084611b43565b509392505050565b6060600061104a83611fd9565b600061104a8383612035565b6000610800825490565b610c40813361205f565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052611cb38482612098565b6114bc576040516001600160a01b03848116602483015260006044830152611ce891869182169063095ea7b390606401611b11565b6114bc8482611d28565b600061080082611c4e565b60008080611d0b8585611c42565b600081815260029690960160205260409095205494959350505050565b6000611d3d6001600160a01b03841683612140565b90508051600014158015611d62575080806020019051810190611d60919061275f565b155b15610e3057604051635274afe760e01b81526001600160a01b038416600482015260240161094f565b60008181526001830160205260408120548015611e74576000611daf60018361274c565b8554909150600090611dc39060019061274c565b9050808214611e28576000866000018281548110611de357611de36126c5565b9060005260206000200154905080876000018481548110611e0657611e066126c5565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611e3957611e3961277c565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610800565b6000915050610800565b6000818152600283016020526040812054819080611ead57611ea0858561214e565b925060009150611a889050565b600192509050611a88565b6000818152600283016020526040812081905561104a838361215a565b60008281526002840160205260408120829055611b9b8484612166565b6000818152600183016020526040812054611f3957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610800565b506000610800565b600080611f4e8484612172565b9050801561104a576000848152600160205260409020611c2d9084611bc6565b6000611f7a8383611225565b15611f39576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610800565b60608160000180548060200260200160405190810160405280929190818152602001828054801561202957602002820191906000526020600020905b815481526020019060010190808311612015575b50505050509050919050565b600082600001828154811061204c5761204c6126c5565b9060005260206000200154905092915050565b6120698282611225565b610cfa5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161094f565b6000806000846001600160a01b0316846040516120b591906126db565b6000604051808303816000865af19150503d80600081146120f2576040519150601f19603f3d011682016040523d82523d6000602084013e6120f7565b606091505b5091509150818015612121575080511580612121575080806020019051810190612121919061275f565b801561213757506000856001600160a01b03163b115b95945050505050565b606061104a838360006121fc565b600061104a8383612299565b600061104a8383611d8b565b600061104a8383611ef2565b600061217e8383611225565b611f39576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556121b43390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610800565b6060814710156122215760405163cd78605960e01b815230600482015260240161094f565b600080856001600160a01b0316848660405161223d91906126db565b60006040518083038185875af1925050503d806000811461227a576040519150601f19603f3d011682016040523d82523d6000602084013e61227f565b606091505b509150915061228f8683836122b1565b9695505050505050565b6000818152600183016020526040812054151561104a565b6060826122c6576122c18261230d565b61104a565b81511580156122dd57506001600160a01b0384163b155b1561230657604051639996b31560e01b81526001600160a01b038516600482015260240161094f565b508061104a565b80511561231d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60006020828403121561234857600080fd5b81356001600160e01b03198116811461104a57600080fd5b602080825282518282018190526000918401906040840190835b818110156123b6576123a083855180516001600160a01b03168252602090810151910152565b602093909301926040929092019160010161237a565b509095945050505050565b80356001600160a01b03811681146123d857600080fd5b919050565b8015158114610c4057600080fd5b6000806000806080858703121561240157600080fd5b61240a856123c1565b93506020850135925061241f604086016123c1565b9150606085013561242f816123dd565b939692955090935050565b60006020828403121561244c57600080fd5b61104a826123c1565b6000806040838503121561246857600080fd5b612471836123c1565b946020939093013593505050565b60008060006040848603121561249457600080fd5b61249d846123c1565b9250602084013567ffffffffffffffff8111156124b957600080fd5b8401601f810186136124ca57600080fd5b803567ffffffffffffffff8111156124e157600080fd5b8660208284010111156124f357600080fd5b939660209190910195509293505050565b60006020828403121561251657600080fd5b5035919050565b6000806040838503121561253057600080fd5b82359150612540602084016123c1565b90509250929050565b602080825282518282018190526000918401906040840190835b818110156123b65783516001600160a01b0316835260209384019390920191600101612563565b6000806040838503121561259d57600080fd5b50508035926020909101359150565b602080825282518282018190526000918401906040840190835b818110156123b6576125ec83855180516001600160a01b03168252602090810151910152565b60209390930192604092909201916001016125c6565b60008060006040848603121561261757600080fd5b83359250602084013567ffffffffffffffff81111561263557600080fd5b8401601f8101861361264657600080fd5b803567ffffffffffffffff81111561265d57600080fd5b8660208260051b84010111156124f357600080fd5b60008060006060848603121561268757600080fd5b612690846123c1565b925061269e602085016123c1565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000825160005b818110156126fc57602081860181015185830152016126e2565b506000920191825250919050565b60006020828403121561271c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561080057610800612723565b8181038181111561080057610800612723565b60006020828403121561277157600080fd5b815161104a816123dd565b634e487b7160e01b600052603160045260246000fdfeaf290d8680820aad922855f39b306097b20e28774d6c1ad35a20325630c3a02c872340a532bdd7bb02bea115c1b0f1ba87eac982f5b79b51ac189ffaac1b6fce4c6ad1028fbb14d0f715be3e35174bec324cf5f999ea391ca4c4ca4c447f2d159143236d81225394f3bd65b44e6e29fdf4d7ba0773d9bb3f5cc15eb80ba37777a2646970667358221220cf155cc2499566f150a0b714545d5587a7dd1ce052ffa03ea1115dffc2665a0e64736f6c634300081a0033
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Analyzing bytecode for exploit paths**
[codex:1189574]
[codex:1189574] I'm focusing on parsing the bytecode to identify function selectors and patterns that could reveal exploitable paths like unprotected transfers, selfdestruct, or delegatecalls. I plan to write or use a Python script to disassemble the hex code and locate opcodes such as CALL, DELEGATECALL, and SELFDESTRUCT along with their offsets to check for vulnerabilities and confirm if there's a concrete profit path.
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] import re
[codex:1189574] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x')[1].split('\\n')[0].strip()
[codex:1189574] # Wait: file contains header lines; need to parse runtime_bytecode.hex line? We'll parse after 'FILE: runtime_bytecode.hex' maybe next line.
[codex:1189574] import sys
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines()
[codex:1189574] hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip()
[codex:1189574] break
[codex:1189574] if not hexline:
[codex:1189574] print('no hex line');sys.exit()
[codex:1189574] hexdata=hexline[2:]
[codex:1189574] code=unhexlify(hexdata)
[codex:1189574] # disassemble simple
[codex:1189574] opcodes=[
[codex:1189574] 'STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND',
[codex:1189574] ]+['INVALID']*(0x10-0x0c)
[codex:1189574] # build map
[codex:1189574] opmap={i:opcodes[i] if i<len(opcodes) else None for i in range(0x10)}
[codex:1189574] # fill rest
[codex:1189574] names={
[codex:1189574] 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',0x20:'SHA3',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 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:1189574] 0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80):
[codex:1189574] names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90):
[codex:1189574] names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0):
[codex:1189574] names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5):
[codex:1189574] names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100):
[codex:1189574] names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574] # iterate
[codex:1189574] ops=[]
[codex:1189574] i=0
[codex:1189574] while i<len(code):
[codex:1189574] op=code[i]
[codex:1189574] name=names.get(op,f'0x{op:02x}')
[codex:1189574] if 0x60<=op<=0x7f:
[codex:1189574] n=op-0x5f
[codex:1189574] data=code[i+1:i+1+n]
[codex:1189574] ops.append((i,name,data))
[codex:1189574] i+=1+n
[codex:1189574] else:
[codex:1189574] ops.append((i,name,None))
[codex:1189574] i+=1
[codex:1189574] # find calls
[codex:1189574] for off,name,data in ops:
[codex:1189574] if name in ('CALL','DELEGATECALL','CALLCODE','SELFDESTRUCT','CREATE','CREATE2','STATICCALL'):
[codex:1189574] print(hex(off),name)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 34ms:
[codex:1189574] 0x9bb STATICCALL
[codex:1189574] 0xaf0 CALL
[codex:1189574] 0xb26 CALL
[codex:1189574] 0x11ca CALL
[codex:1189574] 0x1606 STATICCALL
[codex:1189574] 0x16cc CALL
[codex:1189574] 0x1701 CALL
[codex:1189574] 0x1bb0 DELEGATECALL
[codex:1189574] 0x20c3 CALL
[codex:1189574] 0x224a CALL
[codex:1189574] 0x27c1 CALL
[codex:1189574] 0x27c7 CREATE2
[codex:1189574] 0x27ce STATICCALL
[codex:1189574] 0x27e5 CREATE2
[codex:1189574] 0x2832 SELFDESTRUCT
[codex:1189574] 0x2838 SELFDESTRUCT
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Investigating delegatecall and selfdestruct risks**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines()
[codex:1189574] hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # simple disasm to list
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',0x20:'SHA3',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 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:1189574] 0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80):
[codex:1189574] names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90):
[codex:1189574] names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0):
[codex:1189574] names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5):
[codex:1189574] names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100):
[codex:1189574] names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574]
[codex:1189574] def disasm(start,end):
[codex:1189574] i=start
[codex:1189574] while i<end:
[codex:1189574] op=code[i]
[codex:1189574] name=names.get(op,f'0x{op:02x}')
[codex:1189574] if 0x60<=op<=0x7f:
[codex:1189574] n=op-0x5f
[codex:1189574] data=code[i+1:i+1+n]
[codex:1189574] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574] i+=1+n
[codex:1189574] else:
[codex:1189574] print(f'{i:04x}: {name}')
[codex:1189574] i+=1
[codex:1189574]
[codex:1189574] # offsets of interest
[codex:1189574] for off in [0x9bb,0xaf0,0xb26,0x11ca,0x1606,0x16cc,0x1701,0x1bb0,0x20c3,0x224a,0x27c1,0x27c7,0x27ce,0x27e5,0x2832,0x2838]:
[codex:1189574] print('\\n-- around',hex(off))
[codex:1189574] disasm(off-20, off+40)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w exited 1 in 31ms:
[codex:1189574]
[codex:1189574] -- around 0x9bb
[codex:1189574] 09a7: MULMOD
[codex:1189574] 09a8: 0xaf
[codex:1189574] 09a9: SWAP2
[codex:1189574] 09aa: SWAP1
[codex:1189574] 09ab: PUSH2 0x26db
[codex:1189574] 09ae: JUMP
[codex:1189574] 09af: JUMPDEST
[codex:1189574] 09b0: PUSH1 0x00
[codex:1189574] 09b2: PUSH1 0x40
[codex:1189574] 09b4: MLOAD
[codex:1189574] 09b5: DUP1
[codex:1189574] 09b6: DUP4
[codex:1189574] 09b7: SUB
[codex:1189574] 09b8: DUP2
[codex:1189574] 09b9: DUP6
[codex:1189574] 09ba: GAS
[codex:1189574] 09bb: STATICCALL
[codex:1189574] 09bc: SWAP2
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Identifying code versus metadata boundaries**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines()
[codex:1189574] hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # find metadata prefix a2646970667358 or a265627a7a...
[codex:1189574] pattern=b\"a264697066735822\"
[codex:1189574] idx=code.find(pattern)
[codex:1189574] print('metadata idx',idx)
[codex:1189574] # find preceding 0xfe
[codex:1189574] if idx"'!=-1:
[codex:1189574] # find last 0xfe before idx
[codex:1189574] fe=code.rfind(b"'"\\xfe\",0,idx)
[codex:1189574] print('fe idx',fe)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 17ms:
[codex:1189574] metadata idx -1
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Reevaluating pattern search in bytecode**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines()
[codex:1189574] hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] pattern=bytes.fromhex('a264697066735822')
[codex:1189574] idx=code.find(pattern)
[codex:1189574] print('metadata idx',idx)
[codex:1189574] if idx"'!=-1:
[codex:1189574] fe=code.rfind(b"'"\\xfe\",0,idx)
[codex:1189574] print('fe idx',fe)
[codex:1189574] print('code length',fe)
[codex:1189574] # show bytes around fe
[codex:1189574] print('around fe',code[fe-5:fe+5].hex())
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 17ms:
[codex:1189574] metadata idx 10259
[codex:1189574] fe idx 10130
[codex:1189574] code length 10130
[codex:1189574] around fe 60246000fdfeaf290d86
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Analyzing code boundaries and delegatecall context**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines()
[codex:1189574] hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm function
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',0x20:'SHA3',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80):
[codex:1189574] names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90):
[codex:1189574] names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0):
[codex:1189574] names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5):
[codex:1189574] names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100):
[codex:1189574] names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574]
[codex:1189574] def disasm(start,end):
[codex:1189574] i=start
[codex:1189574] while i<end:
[codex:1189574] op=code[i]
[codex:1189574] name=names.get(op,f'0x{op:02x}')
[codex:1189574] if 0x60<=op<=0x7f:
[codex:1189574] n=op-0x5f
[codex:1189574] data=code[i+1:i+1+n]
[codex:1189574] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574] i+=1+n
[codex:1189574] else:
[codex:1189574] print(f'{i:04x}: {name}')
[codex:1189574] i+=1
[codex:1189574]
[codex:1189574] # disasm around delegatecall
[codex:1189574] start=0x1b60
[codex:1189574] end=0x1c30
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 21ms:
[codex:1189574] disasm 0x1b60 0x1c30
[codex:1189574] 1b60: DUP1
[codex:1189574] 1b61: DUP7
[codex:1189574] 1b62: PUSH1 0x01
[codex:1189574] 1b64: PUSH1 0x01
[codex:1189574] 1b66: PUSH1 0xa0
[codex:1189574] 1b68: SHL
[codex:1189574] 1b69: SUB
[codex:1189574] 1b6a: DUP8
[codex:1189574] 1b6b: AND
[codex:1189574] 1b6c: PUSH2 0x1e7e
[codex:1189574] 1b6f: JUMP
[codex:1189574] 1b70: JUMPDEST
[codex:1189574] 1b71: PUSH1 0x00
[codex:1189574] 1b73: PUSH2 0x104a
[codex:1189574] 1b76: DUP4
[codex:1189574] 1b77: PUSH1 0x01
[codex:1189574] 1b79: PUSH1 0x01
[codex:1189574] 1b7b: PUSH1 0xa0
[codex:1189574] 1b7d: SHL
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Analyzing delegatecall usage**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] pattern=bytes.fromhex('611ba3')
[codex:1189574] idxs=[i for i in range(len(code)) if code.startswith(pattern,i)]
[codex:1189574] print('PUSH2 0x1ba3 occurrences',idxs)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 20ms:
[codex:1189574] PUSH2 0x1ba3 occurrences [3624]
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Analyzing disassembly around offset 0xE28**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0xE00-0xE80
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',0x20:'SHA3',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80):
[codex:1189574] names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90):
[codex:1189574] names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0):
[codex:1189574] names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5):
[codex:1189574] names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100):
[codex:1189574] names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574]
[codex:1189574] def disasm(start,end):
[codex:1189574] i=start
[codex:1189574] while i<end:
[codex:1189574] op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574] if 0x60<=op<=0x7f:
[codex:1189574] n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574] i+=1+n
[codex:1189574] else:
[codex:1189574] print(f'{i:04x}: {name}')
[codex:1189574] i+=1
[codex:1189574]
[codex:1189574] start=0xDD0; end=0xE80
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 19ms:
[codex:1189574] disasm 0xdd0 0xe80
[codex:1189574] 0dd0: PUSH4 0x6c337973
[codex:1189574] 0dd5: PUSH1 0xe1
[codex:1189574] 0dd7: SHL
[codex:1189574] 0dd8: DUP2
[codex:1189574] 0dd9: MSTORE
[codex:1189574] 0dda: PUSH1 0x01
[codex:1189574] 0ddc: PUSH1 0x01
[codex:1189574] 0dde: PUSH1 0xa0
[codex:1189574] 0de0: SHL
[codex:1189574] 0de1: SUB
[codex:1189574] 0de2: DUP5
[codex:1189574] 0de3: AND
[codex:1189574] 0de4: PUSH1 0x04
[codex:1189574] 0de6: DUP3
[codex:1189574] 0de7: ADD
[codex:1189574] 0de8: MSTORE
[codex:1189574] 0de9: PUSH1 0x24
[codex:1189574] 0deb: ADD
[codex:1189574] 0dec: PUSH2 0x094f
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Analyzing delegatecall usage in bytecode**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] pattern=bytes.fromhex('610df0')
[codex:1189574] idxs=[i for i in range(len(code)) if code.startswith(pattern,i)]
[codex:1189574] print(idxs)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 23ms:
[codex:1189574] [3529]
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Inspecting function entry points around offset 0xd90**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0xd80
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',0x20:'SHA3',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80):
[codex:1189574] names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90):
[codex:1189574] names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0):
[codex:1189574] names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5):
[codex:1189574] names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100):
[codex:1189574] names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574]
[codex:1189574] def disasm(start,end):
[codex:1189574] i=start
[codex:1189574] while i<end:
[codex:1189574] op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574] if 0x60<=op<=0x7f:
[codex:1189574] n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574] i+=1+n
[codex:1189574] else:
[codex:1189574] print(f'{i:04x}: {name}')
[codex:1189574] i+=1
[codex:1189574]
[codex:1189574] start=0xd80; end=0xde0
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 18ms:
[codex:1189574] disasm 0xd80 0xde0
[codex:1189574] 0d80: SWAP1
[codex:1189574] 0d81: PUSH1 0x20
[codex:1189574] 0d83: ADD
[codex:1189574] 0d84: PUSH2 0x0c37
[codex:1189574] 0d87: JUMP
[codex:1189574] 0d88: JUMPDEST
[codex:1189574] 0d89: PUSH2 0x0da0
[codex:1189574] 0d8c: PUSH1 0x00
[codex:1189574] 0d8e: DUP1
[codex:1189574] 0d8f: MLOAD
[codex:1189574] 0d90: PUSH1 0x20
[codex:1189574] 0d92: PUSH2 0x27b3
[codex:1189574] 0d95: DUP4
[codex:1189574] 0d96: CODECOPY
[codex:1189574] 0d97: DUP2
[codex:1189574] 0d98: MLOAD
[codex:1189574] 0d99: SWAP2
[codex:1189574] 0d9a: MSTORE
[codex:1189574] 0d9b: CALLER
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Analyzing low-level contract dispatch and delegatecall setup**
[codex:1189574]
[codex:1189574] I'm examining EVM bytecode to understand a function that uses CODECOPY to load a constant role identifier from metadata, likely for an AccessControl role check, followed by a delegatecall where calldata parameters are dynamically copied into memory. I want to parse the function selector dispatch table by scanning the bytecode for PUSH4 selector patterns paired with conditional jumps to map selectors to entry points, probably automating this with a Python script.
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disassemble into list of (offset, op, data)
[codex:1189574] ops=[]
[codex:1189574] # name mapping for convenience
[codex:1189574] def opname(op):
[codex:1189574] if 0x60<=op<=0x7f: return f'PUSH{op-0x5f}'
[codex:1189574] if 0x80<=op<=0x8f: return f'DUP{op-0x7f}'
[codex:1189574] if 0x90<=op<=0x9f: return f'SWAP{op-0x8f}'
[codex:1189574] if op==0x14: return 'EQ'
[codex:1189574] if op==0x57: return 'JUMPI'
[codex:1189574] if op==0x5b: return 'JUMPDEST'
[codex:1189574] return None
[codex:1189574]
[codex:1189574] i=0
[codex:1189574] while i<len(code):
[codex:1189574] op=code[i]
[codex:1189574] if 0x60<=op<=0x7f:
[codex:1189574] n=op-0x5f
[codex:1189574] data=code[i+1:i+1+n]
[codex:1189574] ops.append((i,op,data))
[codex:1189574] i+=1+n
[codex:1189574] else:
[codex:1189574] ops.append((i,op,None))
[codex:1189574] i+=1
[codex:1189574]
[codex:1189574] # find pattern: DUP1 PUSH4 sel EQ PUSH2 dest JUMPI (or PUSH4 sel EQ PUSH2 dest JUMPI)
[codex:1189574] # We'll scan for PUSH4 then EQ then PUSH2 then JUMPI within next 5 ops
[codex:1189574] sel_map=[]
[codex:1189574] for idx,(off,op,data) in enumerate(ops):
[codex:1189574] if op==0x63: # PUSH4
[codex:1189574] sel=int.from_bytes(data,'big')
[codex:1189574] # look ahead 1..6 for EQ then PUSH2 then JUMPI
[codex:1189574] # find EQ index
[codex:1189574] for j in range(1,7):
[codex:1189574] if idx+j>=len(ops): break
[codex:1189574] if ops[idx+j][1]==0x14: # EQ
[codex:1189574] # find PUSH2 after that
[codex:1189574] for k in range(1,5):
[codex:1189574] if idx+j+k>=len(ops): break
[codex:1189574] if ops[idx+j+k][1]==0x61: # PUSH2
[codex:1189574] dest=int.from_bytes(ops[idx+j+k][2],'big')
[codex:1189574] # next non-push? ensure a JUMPI soon
[codex:1189574] for m in range(1,5):
[codex:1189574] if idx+j+k+m>=len(ops): break
[codex:1189574] if ops[idx+j+k+m][1]==0x57:
[codex:1189574] sel_map.append((sel, dest, off))
[codex:1189574] break
[codex:1189574] break
[codex:1189574] break
[codex:1189574]
[codex:1189574] # deduplicate by selector
[codex:1189574] seen={}
[codex:1189574] for sel,dest,off in sel_map:
[codex:1189574] if sel not in seen:
[codex:1189574] seen[sel]=dest
[codex:1189574]
[codex:1189574] print('selectors',len(seen))
[codex:1189574] for sel,dest in sorted(seen.items(), key=lambda x:x[0]):
[codex:1189574] print(f'0x{sel:08x} -> 0x{dest:04x}')
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 22ms:
[codex:1189574] selectors 45
[codex:1189574] 0x018fbe57 -> 0x026c
[codex:1189574] 0x01ffc9a7 -> 0x02a1
[codex:1189574] 0x0c2997ca -> 0x02d1
[codex:1189574] 0x12eeff7e -> 0x02f3
[codex:1189574] 0x175188e8 -> 0x0315
[codex:1189574] 0x175c4ef8 -> 0x0335
[codex:1189574] 0x193458ce -> 0x0357
[codex:1189574] 0x1af1e2fb -> 0x0377
[codex:1189574] 0x1b2df850 -> 0x0397
[codex:1189574] 0x1cff79cd -> 0x03b9
[codex:1189574] 0x223e5479 -> 0x03d9
[codex:1189574] 0x248a9ca3 -> 0x03f9
[codex:1189574] 0x2a0acc6a -> 0x0429
[codex:1189574] 0x2f2ff15d -> 0x043e
[codex:1189574] 0x36568abe -> 0x045e
[codex:1189574] 0x39ebf823 -> 0x047e
[codex:1189574] 0x5a05180f -> 0x0800
[codex:1189574] 0x5d7e641e -> 0x049e
[codex:1189574] 0x5fa7b584 -> 0x04c0
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Analyzing entry points for delegatecall linkage**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm function to show 100 bytes from entry
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',0x20:'SHA3',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80):
[codex:1189574] names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90):
[codex:1189574] names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0):
[codex:1189574] names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5):
[codex:1189574] names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100):
[codex:1189574] names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574]
[codex:1189574] def disasm(start,end):
[codex:1189574] i=start
[codex:1189574] while i<end:
[codex:1189574] op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574] if 0x60<=op<=0x7f:
[codex:1189574] n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574] i+=1+n
[codex:1189574] else:
[codex:1189574] print(f'{i:04x}: {name}')
[codex:1189574] i+=1
[codex:1189574]
[codex:1189574] # examine entries around 0x03b9,0x043e,0x045e etc
[codex:1189574] for entry in [0x03b9,0x043e,0x045e,0x047e,0x049e,0x04c0,0x04e0,0x0500,0x0520,0x0535,0x0577,0x05ac,0x05e4,0x0604,0x0624,0x0646,0x065b,0x067b,0x069b,0x06bb,0x06db,0x06fb,0x071b,0x073b,0x075b,0x077b,0x079b,0x07bb]:
[codex:1189574] print('\\nentry',hex(entry))
[codex:1189574] disasm(entry, entry+60)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 23ms:
[codex:1189574]
[codex:1189574] entry 0x3b9
[codex:1189574] 03b9: JUMPDEST
[codex:1189574] 03ba: CALLVALUE
[codex:1189574] 03bb: DUP1
[codex:1189574] 03bc: ISZERO
[codex:1189574] 03bd: PUSH2 0x03c5
[codex:1189574] 03c0: JUMPI
[codex:1189574] 03c1: PUSH1 0x00
[codex:1189574] 03c3: DUP1
[codex:1189574] 03c4: REVERT
[codex:1189574] 03c5: JUMPDEST
[codex:1189574] 03c6: POP
[codex:1189574] 03c7: PUSH2 0x0313
[codex:1189574] 03ca: PUSH2 0x03d4
[codex:1189574] 03cd: CALLDATASIZE
[codex:1189574] 03ce: PUSH1 0x04
[codex:1189574] 03d0: PUSH2 0x247f
[codex:1189574] 03d3: JUMP
[codex:1189574] 03d4: JUMPDEST
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Analyzing function selector and delegatecall path**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0x247f
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',0x20:'SHA3',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80):
[codex:1189574] names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90):
[codex:1189574] names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0):
[codex:1189574] names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5):
[codex:1189574] names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100):
[codex:1189574] names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574]
[codex:1189574] def disasm(start,end):
[codex:1189574] i=start
[codex:1189574] while i<end:
[codex:1189574] op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574] if 0x60<=op<=0x7f:
[codex:1189574] n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574] i+=1+n
[codex:1189574] else:
[codex:1189574] print(f'{i:04x}: {name}')
[codex:1189574] i+=1
[codex:1189574]
[codex:1189574] start=0x2460; end=0x24c0
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 19ms:
[codex:1189574] disasm 0x2460 0x24c0
[codex:1189574] 2460: PUSH2 0x2468
[codex:1189574] 2463: JUMPI
[codex:1189574] 2464: PUSH1 0x00
[codex:1189574] 2466: DUP1
[codex:1189574] 2467: REVERT
[codex:1189574] 2468: JUMPDEST
[codex:1189574] 2469: PUSH2 0x2471
[codex:1189574] 246c: DUP4
[codex:1189574] 246d: PUSH2 0x23c1
[codex:1189574] 2470: JUMP
[codex:1189574] 2471: JUMPDEST
[codex:1189574] 2472: SWAP5
[codex:1189574] 2473: PUSH1 0x20
[codex:1189574] 2475: SWAP4
[codex:1189574] 2476: SWAP1
[codex:1189574] 2477: SWAP4
[codex:1189574] 2478: ADD
[codex:1189574] 2479: CALLDATALOAD
[codex:1189574] 247a: SWAP4
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0x24b9-0x2520
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',0x20:'SHA3',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80): names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90): names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0): names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5): names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100): names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574]
[codex:1189574] def disasm(start,end):
[codex:1189574] i=start
[codex:1189574] while i<end:
[codex:1189574] op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574] if 0x60<=op<=0x7f:
[codex:1189574] n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574] i+=1+n
[codex:1189574] else:
[codex:1189574] print(f'{i:04x}: {name}')
[codex:1189574] i+=1
[codex:1189574]
[codex:1189574] start=0x24b0; end=0x2520
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 17ms:
[codex:1189574] disasm 0x24b0 0x2520
[codex:1189574] 24b0: ISZERO
[codex:1189574] 24b1: PUSH2 0x24b9
[codex:1189574] 24b4: JUMPI
[codex:1189574] 24b5: PUSH1 0x00
[codex:1189574] 24b7: DUP1
[codex:1189574] 24b8: REVERT
[codex:1189574] 24b9: JUMPDEST
[codex:1189574] 24ba: DUP5
[codex:1189574] 24bb: ADD
[codex:1189574] 24bc: PUSH1 0x1f
[codex:1189574] 24be: DUP2
[codex:1189574] 24bf: ADD
[codex:1189574] 24c0: DUP7
[codex:1189574] 24c1: SGT
[codex:1189574] 24c2: PUSH2 0x24ca
[codex:1189574] 24c5: JUMPI
[codex:1189574] 24c6: PUSH1 0x00
[codex:1189574] 24c8: DUP1
[codex:1189574] 24c9: REVERT
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Analyzing potential delegatecall security**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0x1a80-0x1b00
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',0x20:'SHA3',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80): names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90): names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0): names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5): names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100): names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574]
[codex:1189574] def disasm(start,end):
[codex:1189574] i=start
[codex:1189574] while i<end:
[codex:1189574] op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574] if 0x60<=op<=0x7f:
[codex:1189574] n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574] i+=1+n
[codex:1189574] else:
[codex:1189574] print(f'{i:04x}: {name}')
[codex:1189574] i+=1
[codex:1189574]
[codex:1189574] start=0x1a60; end=0x1ae8
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 17ms:
[codex:1189574] disasm 0x1a60 0x1ae8
[codex:1189574] 1a60: AND
[codex:1189574] 1a61: EQ
[codex:1189574] 1a62: PUSH2 0x0800
[codex:1189574] 1a65: JUMP
[codex:1189574] 1a66: JUMPDEST
[codex:1189574] 1a67: PUSH1 0x00
[codex:1189574] 1a69: PUSH2 0x0800
[codex:1189574] 1a6c: DUP3
[codex:1189574] 1a6d: PUSH2 0x1cf2
[codex:1189574] 1a70: JUMP
[codex:1189574] 1a71: JUMPDEST
[codex:1189574] 1a72: PUSH1 0x00
[codex:1189574] 1a74: DUP1
[codex:1189574] 1a75: DUP1
[codex:1189574] 1a76: DUP1
[codex:1189574] 1a77: PUSH2 0x1a80
[codex:1189574] 1a7a: DUP7
[codex:1189574] 1a7b: DUP7
[codex:1189574] 1a7c: PUSH2 0x1cfd
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Analyzing storage slot computation**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0x1030-0x1050
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',0x20:'SHA3',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80): names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90): names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0): names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5): names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100): names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574]
[codex:1189574] def disasm(start,end):
[codex:1189574] i=start
[codex:1189574] while i<end:
[codex:1189574] op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574] if 0x60<=op<=0x7f:
[codex:1189574] n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574] i+=1+n
[codex:1189574] else:
[codex:1189574] print(f'{i:04x}: {name}')
[codex:1189574] i+=1
[codex:1189574]
[codex:1189574] start=0x1020; end=0x1060
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 17ms:
[codex:1189574] disasm 0x1020 0x1060
[codex:1189574] 1020: 0x2e
[codex:1189574] 1021: 0xb3
[codex:1189574] 1022: 0xaf
[codex:1189574] 1023: LOG4
[codex:1189574] 1024: 0xc8
[codex:1189574] 1025: MLOAD
[codex:1189574] 1026: 0x1f
[codex:1189574] 1027: 0xd3
[codex:1189574] 1028: SWAP1
[codex:1189574] 1029: PUSH1 0x20
[codex:1189574] 102b: ADD
[codex:1189574] 102c: PUSH2 0x0c37
[codex:1189574] 102f: JUMP
[codex:1189574] 1030: JUMPDEST
[codex:1189574] 1031: PUSH1 0x00
[codex:1189574] 1033: PUSH2 0x0800
[codex:1189574] 1036: PUSH1 0x0c
[codex:1189574] 1038: DUP4
[codex:1189574] 1039: PUSH2 0x1ac2
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Analyzing internal function returns**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0x1200-0x1235
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',0x20:'SHA3',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80): names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90): names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0): names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5): names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100): names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574]
[codex:1189574] def disasm(start,end):
[codex:1189574] i=start
[codex:1189574] while i<end:
[codex:1189574] op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574] if 0x60<=op<=0x7f:
[codex:1189574] n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574] i+=1+n
[codex:1189574] else:
[codex:1189574] print(f'{i:04x}: {name}')
[codex:1189574] i+=1
[codex:1189574]
[codex:1189574] start=0x1210; end=0x1235
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 18ms:
[codex:1189574] disasm 0x1210 0x1235
[codex:1189574] 1210: 0x2d
[codex:1189574] 1211: 0x21
[codex:1189574] 1212: DUP10
[codex:1189574] 1213: SELFDESTRUCT
[codex:1189574] 1214: 0xa9
[codex:1189574] 1215: SWAP1
[codex:1189574] 1216: RETURNDATASIZE
[codex:1189574] 1217: CALLDATACOPY
[codex:1189574] 1218: 0xbf
[codex:1189574] 1219: 0xb8
[codex:1189574] 121a: SWAP5
[codex:1189574] 121b: POP
[codex:1189574] 121c: ADD
[codex:1189574] 121d: SWAP2
[codex:1189574] 121e: POP
[codex:1189574] 121f: PUSH2 0x0c37
[codex:1189574] 1222: SWAP1
[codex:1189574] 1223: POP
[codex:1189574] 1224: JUMP
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Noticing corrupted disassembly and adjusting**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0x1225-0x1260
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',0x20:'SHA3',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80): names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90): names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0): names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5): names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100): names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574]
[codex:1189574] def disasm(start,end):
[codex:1189574] i=start
[codex:1189574] while i<end:
[codex:1189574] op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574] if 0x60<=op<=0x7f:
[codex:1189574] n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574] i+=1+n
[codex:1189574] else:
[codex:1189574] print(f'{i:04x}: {name}')
[codex:1189574] i+=1
[codex:1189574]
[codex:1189574] start=0x1225; end=0x1280
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 21ms:
[codex:1189574] disasm 0x1225 0x1280
[codex:1189574] 1225: JUMPDEST
[codex:1189574] 1226: PUSH1 0x00
[codex:1189574] 1228: SWAP2
[codex:1189574] 1229: DUP3
[codex:1189574] 122a: MSTORE
[codex:1189574] 122b: PUSH1 0x20
[codex:1189574] 122d: DUP3
[codex:1189574] 122e: DUP2
[codex:1189574] 122f: MSTORE
[codex:1189574] 1230: PUSH1 0x40
[codex:1189574] 1232: DUP1
[codex:1189574] 1233: DUP5
[codex:1189574] 1234: SHA3
[codex:1189574] 1235: PUSH1 0x01
[codex:1189574] 1237: PUSH1 0x01
[codex:1189574] 1239: PUSH1 0xa0
[codex:1189574] 123b: SHL
[codex:1189574] 123c: SUB
[codex:1189574] 123d: SWAP4
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Examining role-based access and call usage**
[codex:1189574]
[codex:1189574] I'm analyzing the contract's role check logic, confirming it uses `hasRole(role, account)` before delegate calls, which suggests proper gating. I’m also investigating various CALL instructions to see if any send ETH or tokens without proper authorization, focusing on stack patterns and opcodes near these calls to identify potential vulnerabilities or misuses.
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0x10f0-0x1200
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',0x20:'SHA3',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80): names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90): names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0): names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5): names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100): names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574]
[codex:1189574] def disasm(start,end):
[codex:1189574] i=start
[codex:1189574] while i<end:
[codex:1189574] op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574] if 0x60<=op<=0x7f:
[codex:1189574] n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574] i+=1+n
[codex:1189574] else:
[codex:1189574] print(f'{i:04x}: {name}')
[codex:1189574] i+=1
[codex:1189574]
[codex:1189574] start=0x10e0; end=0x1210
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 23ms:
[codex:1189574] disasm 0x10e0 0x1210
[codex:1189574] 10e0: 0xc9
[codex:1189574] 10e1: 0xd9
[codex:1189574] 10e2: PUSH17 0x3af934ca455b9218286bf4fcaa05653a56
[codex:1189574] 10f4: 0x4c
[codex:1189574] 10f5: 0x49
[codex:1189574] 10f6: SWAP15
[codex:1189574] 10f7: 0x4b
[codex:1189574] 10f8: SWAP1
[codex:1189574] 10f9: PUSH1 0x20
[codex:1189574] 10fb: ADD
[codex:1189574] 10fc: PUSH2 0x0c37
[codex:1189574] 10ff: JUMP
[codex:1189574] 1100: JUMPDEST
[codex:1189574] 1101: PUSH1 0x00
[codex:1189574] 1103: DUP3
[codex:1189574] 1104: DUP2
[codex:1189574] 1105: MSTORE
[codex:1189574] 1106: PUSH1 0x01
[codex:1189574] 1108: PUSH1 0x20
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Analyzing EVM stack and call sequence**
[codex:1189574]
[codex:1189574] I'm unpacking the EVM bytecode around a function that checks roles, validates an amount against the contract balance, and then calls a deposit function (likely WETH.deposit) with some ETH value. I'll simulate the stack behavior symbolically from the role check through the CALL to figure out which stack values are used as calldata and call value, planning to build a simple Python-based EVM stack tracer to clarify this complex flow.
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # simple symbolic execution for region 0x114d-0x11ca
[codex:1189574] start=0x114d; end=0x11cb
[codex:1189574] # define op names
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',0x20:'SHA3',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0',
[codex:1189574] 0xf1:'CALL',0xf4:'DELEGATECALL',0xfa:'STATICCALL',0xfd:'REVERT',0xf3:'RETURN'
[codex:1189574] }
[codex:1189574]
[codex:1189574] # precompute instruction list for region
[codex:1189574] ops=[]
[codex:1189574] i=start
[codex:1189574] while i<end:
[codex:1189574] op=code[i]
[codex:1189574] if 0x60<=op<=0x7f:
[codex:1189574] n=op-0x5f
[codex:1189574] data=code[i+1:i+1+n]
[codex:1189574] ops.append((i,op,data))
[codex:1189574] i+=1+n
[codex:1189574] else:
[codex:1189574] ops.append((i,op,None))
[codex:1189574] i+=1
[codex:1189574]
[codex:1189574] # symbolic stack
[codex:1189574] stack=['RET','AMOUNT'] # assume top is AMOUNT? Actually stack end is top. We'll use list with last as top.
[codex:1189574]
[codex:1189574] def pop():
[codex:1189574] return stack.pop() if stack else 'POP_EMPTY'
[codex:1189574]
[codex:1189574] def push(x):
[codex:1189574] stack.append(x)
[codex:1189574]
[codex:1189574] def binop(op,a,b):
[codex:1189574] return f'({a} {op} {b})'
[codex:1189574]
[codex:1189574] for off,op,data in ops:
[codex:1189574] name=names.get(op,f'OP{op:02x}')
[codex:1189574] if 0x60<=op<=0x7f:
[codex:1189574] val=int.from_bytes(data,'big')
[codex:1189574] push(hex(val))
[codex:1189574] elif op==0x80: # DUP1 etc handled below
[codex:1189574] pass
[codex:1189574] if 0x80<=op<=0x8f:
[codex:1189574] n=op-0x7f
[codex:1189574] if len(stack)>=n:
[codex:1189574] push(stack[-n])
[codex:1189574] else:
[codex:1189574] push('DUP?')
[codex:1189574] elif 0x90<=op<=0x9f:
[codex:1189574] n=op-0x8f
[codex:1189574] if len(stack)>n:
[codex:1189574] stack[-1],stack[-1-n]=stack[-1-n],stack[-1]
[codex:1189574] elif op==0x50: # POP
[codex:1189574] pop()
[codex:1189574] elif op==0x47: # SELFBALANCE
[codex:1189574] push('SELFBALANCE')
[codex:1189574] elif op==0x54: # SLOAD
[codex:1189574] slot=pop(); push(f'SLOAD[{slot}]')
[codex:1189574] elif op==0x5a: # GAS
[codex:1189574] push('GAS')
[codex:1189574] elif op==0x14: # EQ
[codex:1189574] b=pop(); a=pop(); push(binop('==',a,b))
[codex:1189574] elif op==0x10: # LT
[codex:1189574] b=pop(); a=pop(); push(binop('<',a,b))
[codex:1189574] elif op==0x11: # GT
[codex:1189574] b=pop(); a=pop(); push(binop('>',a,b))
[codex:1189574] elif op==0x15: # ISZERO
[codex:1189574] a=pop(); push(f'ISZERO({a})')
[codex:1189574] elif op==0x16: # AND
[codex:1189574] b=pop(); a=pop(); push(binop('&',a,b))
[codex:1189574] elif op==0x01: # ADD
[codex:1189574] b=pop(); a=pop(); push(binop('+',a,b))
[codex:1189574] elif op==0x02: # MUL
[codex:1189574] b=pop(); a=pop(); push(binop('*',a,b))
[codex:1189574] elif op==0x04: # DIV
[codex:1189574] b=pop(); a=pop(); push(binop('/',a,b))
[codex:1189574] elif op==0x1b: # SHL
[codex:1189574] b=pop(); a=pop(); push(binop('<<',a,b))
[codex:1189574] elif op==0x1c: # SHR
[codex:1189574] b=pop(); a=pop(); push(binop('>>',a,b))
[codex:1189574] elif op==0x1a: # BYTE
[codex:1189574] b=pop(); a=pop(); push(f'BYTE({a},{b})')
[codex:1189574] elif op==0x57: # JUMPI
[codex:1189574] dest=pop(); cond=pop();
[codex:1189574] # ignore control flow
[codex:1189574] elif op==0x56: # JUMP
[codex:1189574] dest=pop();
[codex:1189574] elif op==0x35: # CALLDATALOAD
[codex:1189574] offset=pop(); push(f'CALLDATALOAD[{offset}]')
[codex:1189574] elif op==0x52: # MSTORE
[codex:1189574] val=pop(); off=pop();
[codex:1189574] elif op==0x51: # MLOAD
[codex:1189574] off=pop(); push(f'MLOAD[{off}]')
[codex:1189574] elif op==0xf1: # CALL
[codex:1189574] # stack: gas, to, value, in, insize, out, outsize
[codex:1189574] outsize=pop(); out=pop(); insize=pop(); _in=pop(); value=pop(); to=pop(); gas=pop();
[codex:1189574] print('CALL at',hex(off),'gas',gas,'to',to,'value',value,'in',_in,'insize',insize)
[codex:1189574] push('CALL_RESULT')
[codex:1189574] elif op in (0xfd,0xf3):
[codex:1189574] break
[codex:1189574] # ignore others
[codex:1189574]
[codex:1189574] # print stack end
[codex:1189574] print('stack end',stack)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 20ms:
[codex:1189574] stack end ['RET', 'AMOUNT', '(MLOAD[0x40] + 0x44)', 'SLOAD[0x2]', '(0x100 / 0x0)', '(0x1 & (0x1 << 0xa0))', '(0x1 & (0x1 << 0xa0))', '0xd0e30db0', '(0x1 & (0x1 << 0xa0))', '(MLOAD[0x40] + 0x4)', '0x0', 'MLOAD[0x40]', 'MLOAD[0x40]', '(MLOAD[0x40] + 0x4)', 'MLOAD[0x40]', '(MLOAD[0x40] + 0x4)', '0xd0e30db0', 'ISZERO(0xd0e30db0)', '0x0', '0x0']
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Analyzing missing CALL in simulation**
[codex:1189574]
[codex:1189574] I'm seeing that the symbolic simulation missed the CALL opcode at 0x11ca due to incomplete stack modeling and skipped opcodes like EXTCODESIZE that cause misalignment. Since we don't branch on conditions but just pop stack inputs, the simulation flows sequentially but misses important control flow. To fix this, I'll try a simpler approach by manually inspecting disassembly near CALL instructions, focusing especially on whether ETH value is transferred and if calls are restricted, starting around 0xa60-0xb40.
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0xa50-0xb40
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',0x20:'SHA3',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80): names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90): names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0): names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5): names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100): names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574]
[codex:1189574] def disasm(start,end):
[codex:1189574] i=start
[codex:1189574] while i<end:
[codex:1189574] op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574] if 0x60<=op<=0x7f:
[codex:1189574] n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574] i+=1+n
[codex:1189574] else:
[codex:1189574] print(f'{i:04x}: {name}')
[codex:1189574] i+=1
[codex:1189574]
[codex:1189574] start=0xa40; end=0xb60
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 20ms:
[codex:1189574] disasm 0xa40 0xb60
[codex:1189574] 0a40: SELFBALANCE
[codex:1189574] 0a41: SELFBALANCE
[codex:1189574] 0a42: DUP5
[codex:1189574] 0a43: PUSH2 0x2739
[codex:1189574] 0a46: JUMP
[codex:1189574] 0a47: JUMPDEST
[codex:1189574] 0a48: SWAP3
[codex:1189574] 0a49: POP
[codex:1189574] 0a4a: JUMPDEST
[codex:1189574] 0a4b: DUP6
[codex:1189574] 0a4c: DUP4
[codex:1189574] 0a4d: LT
[codex:1189574] 0a4e: ISZERO
[codex:1189574] 0a4f: PUSH2 0x0a75
[codex:1189574] 0a52: JUMPI
[codex:1189574] 0a53: PUSH1 0x40
[codex:1189574] 0a55: MLOAD
[codex:1189574] 0a56: PUSH4 0x4787a103
[codex:1189574] 0a5b: PUSH1 0xe1
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Analyzing WETH withdrawal logic**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0x08e2
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',0x20:'SHA3',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80): names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90): names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0): names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5): names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100): names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574]
[codex:1189574] def disasm(start,end):
[codex:1189574] i=start
[codex:1189574] while i<end:
[codex:1189574] op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574] if 0x60<=op<=0x7f:
[codex:1189574] n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574] i+=1+n
[codex:1189574] else:
[codex:1189574] print(f'{i:04x}: {name}')
[codex:1189574] i+=1
[codex:1189574]
[codex:1189574] start=0x08c0; end=0x0905
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 17ms:
[codex:1189574] disasm 0x8c0 0x905
[codex:1189574] 08c0: ADDMOD
[codex:1189574] 08c1: 0xc6
[codex:1189574] 08c2: PUSH2 0x26c5
[codex:1189574] 08c5: JUMP
[codex:1189574] 08c6: JUMPDEST
[codex:1189574] 08c7: PUSH1 0x20
[codex:1189574] 08c9: SWAP1
[codex:1189574] 08ca: DUP2
[codex:1189574] 08cb: MUL
[codex:1189574] 08cc: SWAP2
[codex:1189574] 08cd: SWAP1
[codex:1189574] 08ce: SWAP2
[codex:1189574] 08cf: ADD
[codex:1189574] 08d0: ADD
[codex:1189574] 08d1: MSTORE
[codex:1189574] 08d2: POP
[codex:1189574] 08d3: POP
[codex:1189574] 08d4: PUSH1 0x01
[codex:1189574] 08d6: ADD
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Analyzing role-restricted and delegatecall functions**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0x1ff0-0x2110 and 0x2210-0x2290
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',0x20:'SHA3',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80): names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90): names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0): names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5): names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100): names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574]
[codex:1189574] def disasm(start,end):
[codex:1189574] i=start
[codex:1189574] while i<end:
[codex:1189574] op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574] if 0x60<=op<=0x7f:
[codex:1189574] n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574] i+=1+n
[codex:1189574] else:
[codex:1189574] print(f'{i:04x}: {name}')
[codex:1189574] i+=1
[codex:1189574]
[codex:1189574] print('--- around 0x1ff0')
[codex:1189574] disasm(0x1ff0,0x2120)
[codex:1189574] print('\\n--- around 0x2210')
[codex:1189574] disasm(0x2210,0x2290)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 20ms:
[codex:1189574] --- around 0x1ff0
[codex:1189574] 1ff0: BLOCKHASH
[codex:1189574] 1ff1: MSTORE
[codex:1189574] 1ff2: DUP1
[codex:1189574] 1ff3: SWAP3
[codex:1189574] 1ff4: SWAP2
[codex:1189574] 1ff5: SWAP1
[codex:1189574] 1ff6: DUP2
[codex:1189574] 1ff7: DUP2
[codex:1189574] 1ff8: MSTORE
[codex:1189574] 1ff9: PUSH1 0x20
[codex:1189574] 1ffb: ADD
[codex:1189574] 1ffc: DUP3
[codex:1189574] 1ffd: DUP1
[codex:1189574] 1ffe: SLOAD
[codex:1189574] 1fff: DUP1
[codex:1189574] 2000: ISZERO
[codex:1189574] 2001: PUSH2 0x2029
[codex:1189574] 2004: JUMPI
[codex:1189574] 2005: PUSH1 0x20
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Analyzing internal calls and access control**
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read()
[codex:1189574] if '360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc' in text:
[codex:1189574] print('found EIP1967')
[codex:1189574] else:
[codex:1189574] print('no EIP1967')
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 17ms:
[codex:1189574] no EIP1967
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Analyzing potential unprotected withdrawals**
[codex:1189574]
[codex:1189574] I'm examining the contract’s bytecode to find any functions that might allow unprotected ETH or token withdrawals, focusing on role checks near CALL instructions and trying to map calls to their corresponding function entries. I’m considering symbolic stack analysis to confirm if any CALL transfers value without permission, aiming to ensure there is no clear exploit path before concluding no findings.
[codex:1189574] exec
[codex:1189574] /bin/bash -lc "python - <<'PY'
[codex:1189574] from binascii import unhexlify
[codex:1189574] text=open('BYTECODE_BUNDLE.txt').read().splitlines();hexline=None
[codex:1189574] for line in text:
[codex:1189574] if line.startswith('0x'):
[codex:1189574] hexline=line.strip();break
[codex:1189574] code=unhexlify(hexline[2:])
[codex:1189574] # disasm around 0x14c0-0x1760 (to include calls at 0x16cc and 0x1701)
[codex:1189574] names={
[codex:1189574] 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:1189574] 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',0x20:'SHA3',
[codex:1189574] 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:1189574] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1189574] 0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0x5f:'PUSH0'
[codex:1189574] }
[codex:1189574] for i in range(0x60,0x80): names[i]=f'PUSH{i-0x5f}'
[codex:1189574] for i in range(0x80,0x90): names[i]=f'DUP{i-0x7f}'
[codex:1189574] for i in range(0x90,0xa0): names[i]=f'SWAP{i-0x8f}'
[codex:1189574] for i in range(0xa0,0xa5): names[i]=f'LOG{i-0x9f}'
[codex:1189574] for i in range(0xf0,0x100): names[i]={0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}.get(i,f'0x{i:02x}')
[codex:1189574]
[codex:1189574] def disasm(start,end):
[codex:1189574] i=start
[codex:1189574] while i<end:
[codex:1189574] op=code[i]; name=names.get(op,f'0x{op:02x}')
[codex:1189574] if 0x60<=op<=0x7f:
[codex:1189574] n=op-0x5f; data=code[i+1:i+1+n]
[codex:1189574] print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1189574] i+=1+n
[codex:1189574] else:
[codex:1189574] print(f'{i:04x}: {name}')
[codex:1189574] i+=1
[codex:1189574]
[codex:1189574] start=0x14b0; end=0x1740
[codex:1189574] print('disasm',hex(start),hex(end))
[codex:1189574] disasm(start,end)
[codex:1189574] PY" in /tmp/codex-multi-afh6is7w succeeded in 19ms:
[codex:1189574] disasm 0x14b0 0x1740
[codex:1189574] 14b0: PC
[codex:1189574] 14b1: JUMP
[codex:1189574] 14b2: JUMPDEST
[codex:1189574] 14b3: PUSH2 0x14bc
[codex:1189574] 14b6: DUP4
[codex:1189574] 14b7: DUP4
[codex:1189574] 14b8: PUSH2 0x1c00
[codex:1189574] 14bb: JUMP
[codex:1189574] 14bc: JUMPDEST
[codex:1189574] 14bd: POP
[codex:1189574] 14be: POP
[codex:1189574] 14bf: POP
[codex:1189574] 14c0: POP
[codex:1189574] 14c1: JUMP
[codex:1189574] 14c2: JUMPDEST
[codex:1189574] 14c3: PUSH2 0x14da
[codex:1189574] 14c6: PUSH1 0x00
[codex:1189574] 14c8: DUP1
[codex:1189574] 14c9: MLOAD
[codex:1189574]
[codex:1189574] thinking
[codex:1189574] **Concluding no exploitable findings**
[codex:1189574]
[codex:1189574] I’m finalizing a JSON response stating no concrete exploit paths are found since all ETH transfers and delegatecalls are protected by role checks; I’m summarizing that the bytecode review shows no unguarded profit extraction possibilities.
[codex:1189574] codex
[codex:1189574] {"no_findings":true,"summary":"Reviewed runtime bytecode; external call and delegatecall sites appear gated by role checks and I cannot derive a concrete, unprotected profit extraction path from bytecode alone.","findings":[]}
[codex:1189574] tokens used
[codex:1189574] 114,836
[codex:1189574] {"no_findings":true,"summary":"Reviewed runtime bytecode; external call and delegatecall sites appear gated by role checks and I cannot derive a concrete, unprotected profit extraction path from bytecode alone.","findings":[]}
{
"codex": {
"ran_at": "2026-01-04T00:24:12.809582+00:00",
"returncode": 0
},
"summary": "Reviewed runtime bytecode; external call and delegatecall sites appear gated by role checks and I cannot derive a concrete, unprotected profit extraction path from bytecode alone.",
"raw_final": {
"summary": "Reviewed runtime bytecode; external call and delegatecall sites appear gated by role checks and I cannot derive a concrete, unprotected profit extraction path from bytecode alone.",
"findings": [],
"no_findings": true
},
"no_findings": true,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x0260 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x76420e1d 00000019: GT 0000001a: PUSH2 0x0144 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0xcc855ccc 00000024: GT 00000025: PUSH2 0x00b6 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0xe1f21c67 0000002f: GT 00000030: PUSH2 0x007a 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xe1f21c67 0000003a: EQ 0000003b: PUSH2 0x071b 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xe4860339 00000045: EQ 00000046: PUSH2 0x073b 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xe7e31e7a 00000050: EQ 00000051: PUSH2 0x075b 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0xf0225a3c 0000005b: EQ 0000005c: PUSH2 0x077b 0000005f: JUMPI 00000060: DUP1 00000061: PUSH4 0xf1880b24 00000066: EQ 00000067: PUSH2 0x079b 0000006a: JUMPI 0000006b: DUP1 0000006c: PUSH4 0xf60d7e9c 00000071: EQ 00000072: PUSH2 0x07bb 00000075: JUMPI 00000076: PUSH1 0x00 00000078: DUP1 00000079: REVERT 0000007a: JUMPDEST 0000007b: DUP1 0000007c: PUSH4 0xcc855ccc 00000081: EQ 00000082: PUSH2 0x067b 00000085: JUMPI 00000086: DUP1 00000087: PUSH4 0xd48bfca7 0000008c: EQ 0000008d: PUSH2 0x069b 00000090: JUMPI 00000091: DUP1 00000092: PUSH4 0xd547741f 00000097: EQ 00000098: PUSH2 0x06bb 0000009b: JUMPI 0000009c: DUP1 0000009d: PUSH4 0xde590125 000000a2: EQ 000000a3: PUSH2 0x06db 000000a6: JUMPI 000000a7: DUP1 000000a8: PUSH4 0xdeb9a3a2 000000ad: EQ 000000ae: PUSH2 0x06fb 000000b1: JUMPI 000000b2: PUSH1 0x00 000000b4: DUP1 000000b5: REVERT 000000b6: JUMPDEST 000000b7: DUP1 000000b8: PUSH4 0x9169d833 000000bd: GT 000000be: PUSH2 0x0108 000000c1: JUMPI 000000c2: DUP1 000000c3: PUSH4 0x9169d833 000000c8: EQ 000000c9: PUSH2 0x05e4 000000cc: JUMPI 000000cd: DUP1 000000ce: PUSH4 0x91d14854 000000d3: EQ 000000d4: PUSH2 0x0604 000000d7: JUMPI 000000d8: DUP1 000000d9: PUSH4 0x96a59af4 000000de: EQ 000000df: PUSH2 0x0624 000000e2: JUMPI 000000e3: DUP1 000000e4: PUSH4 0xa217fddf 000000e9: EQ 000000ea: PUSH2 0x0429 000000ed: JUMPI 000000ee: DUP1 000000ef: PUSH4 0xc41d5a06 000000f4: EQ 000000f5: PUSH2 0x0646 000000f8: JUMPI 000000f9: DUP1 000000fa: PUSH4 0xca15c873 000000ff: EQ 00000100: PUSH2 0x065b 00000103: JUMPI 00000104: PUSH1 0x00 00000106: DUP1 00000107: REVERT 00000108: JUMPDEST 00000109: DUP1 0000010a: PUSH4 0x76420e1d 0000010f: EQ 00000110: PUSH2 0x0535 00000113: JUMPI 00000114: DUP1 00000115: PUSH4 0x7ffbe241 0000011a: EQ 0000011b: PUSH2 0x0557 0000011e: JUMPI 0000011f: DUP1 00000120: PUSH4 0x884fedba 00000125: EQ 00000126: PUSH2 0x0577 00000129: JUMPI 0000012a: DUP1 0000012b: PUSH4 0x8ce5877c 00000130: EQ 00000131: PUSH2 0x058c 00000134: JUMPI 00000135: DUP1 00000136: PUSH4 0x9010d07c 0000013b: EQ 0000013c: PUSH2 0x05ac 0000013f: JUMPI 00000140: PUSH1 0x00 00000142: DUP1 00000143: REVERT 00000144: JUMPDEST 00000145: DUP1 00000146: PUSH4 0x223e5479 0000014b: GT 0000014c: PUSH2 0x01dd 0000014f: JUMPI 00000150: DUP1 00000151: PUSH4 0x39ebf823 00000156: GT 00000157: PUSH2 0x01a1 0000015a: JUMPI 0000015b: DUP1 0000015c: PUSH4 0x39ebf823 00000161: EQ 00000162: PUSH2 0x047e 00000165: JUMPI 00000166: DUP1 00000167: PUSH4 0x5d7e641e 0000016c: EQ 0000016d: PUSH2 0x049e 00000170: JUMPI 00000171: DUP1 00000172: PUSH4 0x5fa7b584 00000177: EQ 00000178: PUSH2 0x04c0 0000017b: JUMPI 0000017c: DUP1 0000017d: PUSH4 0x63a31bd4 00000182: EQ 00000183: PUSH2 0x04e0 00000186: JUMPI 00000187: DUP1 00000188: PUSH4 0x69efe471 0000018d: EQ 0000018e: PUSH2 0x0500 00000191: JUMPI 00000192: DUP1 00000193: PUSH4 0x6ff97f1d 00000198: EQ 00000199: PUSH2 0x0520 0000019c: JUMPI 0000019d: PUSH1 0x00 0000019f: DUP1 000001a0: REVERT 000001a1: JUMPDEST 000001a2: DUP1 000001a3: PUSH4 0x223e5479 000001a8: EQ 000001a9: PUSH2 0x03d9 000001ac: JUMPI 000001ad: DUP1 000001ae: PUSH4 0x248a9ca3 000001b3: EQ 000001b4: PUSH2 0x03f9 000001b7: JUMPI 000001b8: DUP1 000001b9: PUSH4 0x2a0acc6a 000001be: EQ 000001bf: PUSH2 0x0429 000001c2: JUMPI 000001c3: DUP1 000001c4: PUSH4 0x2f2ff15d 000001c9: EQ 000001ca: PUSH2 0x043e 000001cd: JUMPI 000001ce: DUP1 000001cf: PUSH4 0x36568abe 000001d4: EQ 000001d5: PUSH2 0x045e 000001d8: JUMPI 000001d9: PUSH1 0x00 000001db: DUP1 000001dc: REVERT 000001dd: JUMPDEST 000001de: DUP1 000001df: PUSH4 0x175c4ef8 000001e4: GT 000001e5: PUSH2 0x0224 000001e8: JUMPI 000001e9: DUP1 000001ea: PUSH4 0x175c4ef8 000001ef: EQ 000001f0: PUSH2 0x0335 000001f3: JUMPI 000001f4: DUP1 000001f5: PUSH4 0x193458ce 000001fa: EQ 000001fb: PUSH2 0x0357 000001fe: JUMPI 000001ff: DUP1 00000200: PUSH4 0x1af1e2fb 00000205: EQ 00000206: PUSH2 0x0377 00000209: JUMPI 0000020a: DUP1 0000020b: PUSH4 0x1b2df850 00000210: EQ 00000211: PUSH2 0x0397 00000214: JUMPI 00000215: DUP1 00000216: PUSH4 0x1cff79cd 0000021b: EQ 0000021c: PUSH2 0x03b9 0000021f: JUMPI 00000220: PUSH1 0x00 00000222: DUP1 00000223: REVERT 00000224: JUMPDEST 00000225: DUP1 00000226: PUSH4 0x018fbe57 0000022b: EQ 0000022c: PUSH2 0x026c 0000022f: JUMPI 00000230: DUP1 00000231: PUSH4 0x01ffc9a7 00000236: EQ 00000237: PUSH2 0x02a1 0000023a: JUMPI 0000023b: DUP1 0000023c: PUSH4 0x0c2997ca 00000241: EQ 00000242: PUSH2 0x02d1 00000245: JUMPI 00000246: DUP1 00000247: PUSH4 0x12eeff7e 0000024c: EQ 0000024d: PUSH2 0x02f3 00000250: JUMPI 00000251: DUP1 00000252: PUSH4 0x175188e8 00000257: EQ 00000258: PUSH2 0x0315 0000025b: JUMPI 0000025c: PUSH1 0x00 0000025e: DUP1 0000025f: REVERT 00000260: JUMPDEST 00000261: CALLDATASIZE 00000262: PUSH2 0x0267 00000265: JUMPI 00000266: STOP 00000267: JUMPDEST 00000268: PUSH1 0x00 0000026a: DUP1 0000026b: REVERT 0000026c: JUMPDEST 0000026d: CALLVALUE 0000026e: DUP1 0000026f: ISZERO 00000270: PUSH2 0x0278 00000273: JUMPI 00000274: PUSH1 0x00 00000276: DUP1 00000277: REVERT 00000278: JUMPDEST 00000279: POP 0000027a: PUSH2 0x028e 0000027d: PUSH1 0x00 0000027f: DUP1 00000280: MLOAD 00000281: PUSH1 0x20 00000283: PUSH2 0x27d3 00000286: DUP4 00000287: CODECOPY 00000288: DUP2 00000289: MLOAD 0000028a: SWAP2 0000028b: MSTORE 0000028c: DUP2 0000028d: JUMP 0000028e: JUMPDEST 0000028f: PUSH1 0x40 00000291: MLOAD 00000292: SWAP1 00000293: DUP2 00000294: MSTORE 00000295: PUSH1 0x20 00000297: ADD 00000298: JUMPDEST 00000299: PUSH1 0x40 0000029b: MLOAD 0000029c: DUP1 0000029d: SWAP2 0000029e: SUB 0000029f: SWAP1 000002a0: RETURN 000002a1: JUMPDEST 000002a2: CALLVALUE 000002a3: DUP1 000002a4: ISZERO 000002a5: PUSH2 0x02ad 000002a8: JUMPI 000002a9: PUSH1 0x00 000002ab: DUP1 000002ac: REVERT 000002ad: JUMPDEST 000002ae: POP 000002af: PUSH2 0x02c1 000002b2: PUSH2 0x02bc 000002b5: CALLDATASIZE 000002b6: PUSH1 0x04 000002b8: PUSH2 0x2336 000002bb: JUMP 000002bc: JUMPDEST 000002bd: PUSH2 0x07db 000002c0: JUMP 000002c1: JUMPDEST 000002c2: PUSH1 0x40 000002c4: MLOAD 000002c5: SWAP1 000002c6: ISZERO 000002c7: ISZERO 000002c8: DUP2 000002c9: MSTORE 000002ca: PUSH1 0x20 000002cc: ADD 000002cd: PUSH2 0x0298 000002d0: JUMP 000002d1: JUMPDEST 000002d2: CALLVALUE 000002d3: DUP1 000002d4: ISZERO 000002d5: PUSH2 0x02dd 000002d8: JUMPI 000002d9: PUSH1 0x00 000002db: DUP1 000002dc: REVERT 000002dd: JUMPDEST 000002de: POP 000002df: PUSH2 0x02e6 000002e2: PUSH2 0x0806 000002e5: JUMP 000002e6: JUMPDEST 000002e7: PUSH1 0x40 000002e9: MLOAD 000002ea: PUSH2 0x0298 000002ed: SWAP2 000002ee: SWAP1 000002ef: PUSH2 0x2360 000002f2: JUMP 000002f3: JUMPDEST 000002f4: CALLVALUE 000002f5: DUP1 000002f6: ISZERO 000002f7: PUSH2 0x02ff 000002fa: JUMPI 000002fb: PUSH1 0x00 000002fd: DUP1 000002fe: REVERT 000002ff: JUMPDEST 00000300: POP 00000301: PUSH2 0x0313 00000304: PUSH2 0x030e 00000307: CALLDATASIZE 00000308: PUSH1 0x04 0000030a: PUSH2 0x23eb 0000030d: JUMP 0000030e: JUMPDEST 0000030f: PUSH2 0x08e2 00000312: JUMP 00000313: JUMPDEST 00000314: STOP 00000315: JUMPDEST 00000316: CALLVALUE 00000317: DUP1 00000318: ISZERO 00000319: PUSH2 0x0321 0000031c: JUMPI 0000031d: PUSH1 0x00 0000031f: DUP1 00000320: REVERT 00000321: JUMPDEST 00000322: POP 00000323: PUSH2 0x0313 00000326: PUSH2 0x0330 00000329: CALLDATASIZE 0000032a: PUSH1 0x04 0000032c: PUSH2 0x243a 0000032f: JUMP 00000330: JUMPDEST 00000331: PUSH2 0x0bb1 00000334: JUMP 00000335: JUMPDEST 00000336: CALLVALUE 00000337: DUP1 00000338: ISZERO 00000339: PUSH2 0x0341 0000033c: JUMPI 0000033d: PUSH1 0x00 0000033f: DUP1 00000340: REVERT 00000341: JUMPDEST 00000342: POP 00000343: PUSH2 0x028e 00000346: PUSH1 0x00 00000348: DUP1 00000349: MLOAD 0000034a: PUSH1 0x20 0000034c: PUSH2 0x27b3 0000034f: DUP4 00000350: CODECOPY 00000351: DUP2 00000352: MLOAD 00000353: SWAP2 00000354: MSTORE 00000355: DUP2 00000356: JUMP 00000357: JUMPDEST 00000358: CALLVALUE 00000359: DUP1 0000035a: ISZERO 0000035b: PUSH2 0x0363 0000035e: JUMPI 0000035f: PUSH1 0x00 00000361: DUP1 00000362: REVERT 00000363: JUMPDEST 00000364: POP 00000365: PUSH2 0x0313 00000368: PUSH2 0x0372 0000036b: CALLDATASIZE 0000036c: PUSH1 0x04 0000036e: PUSH2 0x2455 00000371: JUMP 00000372: JUMPDEST 00000373: PUSH2 0x0c43 00000376: JUMP 00000377: JUMPDEST 00000378: CALLVALUE 00000379: DUP1 0000037a: ISZERO 0000037b: PUSH2 0x0383 0000037e: JUMPI 0000037f: PUSH1 0x00 00000381: DUP1 00000382: REVERT 00000383: JUMPDEST 00000384: POP 00000385: PUSH2 0x0313 00000388: PUSH2 0x0392 0000038b: CALLDATASIZE 0000038c: PUSH1 0x04 0000038e: PUSH2 0x243a 00000391: JUMP 00000392: JUMPDEST 00000393: PUSH2 0x0cfe 00000396: JUMP 00000397: JUMPDEST 00000398: CALLVALUE 00000399: DUP1 0000039a: ISZERO 0000039b: PUSH2 0x03a3 0000039e: JUMPI 0000039f: PUSH1 0x00 000003a1: DUP1 000003a2: REVERT 000003a3: JUMPDEST 000003a4: POP 000003a5: PUSH2 0x028e 000003a8: PUSH1 0x00 000003aa: DUP1 000003ab: MLOAD 000003ac: PUSH1 0x20 000003ae: PUSH2 0x2793 000003b1: DUP4 000003b2: CODECOPY 000003b3: DUP2 000003b4: MLOAD 000003b5: SWAP2 000003b6: MSTORE 000003b7: DUP2 000003b8: JUMP 000003b9: JUMPDEST 000003ba: CALLVALUE 000003bb: DUP1 000003bc: ISZERO 000003bd: PUSH2 0x03c5 000003c0: JUMPI 000003c1: PUSH1 0x00 000003c3: DUP1 000003c4: REVERT 000003c5: JUMPDEST 000003c6: POP 000003c7: PUSH2 0x0313 000003ca: PUSH2 0x03d4 000003cd: CALLDATASIZE 000003ce: PUSH1 0x04 000003d0: PUSH2 0x247f 000003d3: JUMP 000003d4: JUMPDEST 000003d5: PUSH2 0x0d88 000003d8: JUMP 000003d9: JUMPDEST 000003da: CALLVALUE 000003db: DUP1 000003dc: ISZERO 000003dd: PUSH2 0x03e5 000003e0: JUMPI 000003e1: PUSH1 0x00 000003e3: DUP1 000003e4: REVERT 000003e5: JUMPDEST 000003e6: POP 000003e7: PUSH2 0x0313 000003ea: PUSH2 0x03f4 000003ed: CALLDATASIZE 000003ee: PUSH1 0x04 000003f0: PUSH2 0x243a 000003f3: JUMP 000003f4: JUMPDEST 000003f5: PUSH2 0x0e35 000003f8: JUMP 000003f9: JUMPDEST 000003fa: CALLVALUE 000003fb: DUP1 000003fc: ISZERO 000003fd: PUSH2 0x0405 00000400: JUMPI 00000401: PUSH1 0x00 00000403: DUP1 00000404: REVERT 00000405: JUMPDEST 00000406: POP 00000407: PUSH2 0x028e 0000040a: PUSH2 0x0414 0000040d: CALLDATASIZE 0000040e: PUSH1 0x04 00000410: PUSH2 0x2504 00000413: JUMP 00000414: JUMPDEST 00000415: PUSH1 0x00 00000417: SWAP1 00000418: DUP2 00000419: MSTORE 0000041a: PUSH1 0x20 0000041c: DUP2 0000041d: SWAP1 0000041e: MSTORE 0000041f: PUSH1 0x40 00000421: SWAP1 00000422: KECCAK256 00000423: PUSH1 0x01 00000425: ADD 00000426: SLOAD 00000427: SWAP1 00000428: JUMP 00000429: JUMPDEST 0000042a: CALLVALUE 0000042b: DUP1 0000042c: ISZERO 0000042d: PUSH2 0x0435 00000430: JUMPI 00000431: PUSH1 0x00 00000433: DUP1 00000434: REVERT 00000435: JUMPDEST 00000436: POP 00000437: PUSH2 0x028e 0000043a: PUSH1 0x00 0000043c: DUP2 0000043d: JUMP 0000043e: JUMPDEST 0000043f: CALLVALUE 00000440: DUP1 00000441: ISZERO 00000442: PUSH2 0x044a 00000445: JUMPI 00000446: PUSH1 0x00 00000448: DUP1 00000449: REVERT 0000044a: JUMPDEST 0000044b: POP 0000044c: PUSH2 0x0313 0000044f: PUSH2 0x0459 00000452: CALLDATASIZE 00000453: PUSH1 0x04 00000455: PUSH2 0x251d 00000458: JUMP 00000459: JUMPDEST 0000045a: PUSH2 0x0ebe 0000045d: JUMP 0000045e: JUMPDEST 0000045f: CALLVALUE 00000460: DUP1 00000461: ISZERO 00000462: PUSH2 0x046a 00000465: JUMPI 00000466: PUSH1 0x00 00000468: DUP1 00000469: REVERT 0000046a: JUMPDEST 0000046b: POP 0000046c: PUSH2 0x0313 0000046f: PUSH2 0x0479 00000472: CALLDATASIZE 00000473: PUSH1 0x04 00000475: PUSH2 0x251d 00000478: JUMP 00000479: JUMPDEST 0000047a: PUSH2 0x0f55 0000047d: JUMP 0000047e: JUMPDEST 0000047f: CALLVALUE 00000480: DUP1 00000481: ISZERO 00000482: PUSH2 0x048a 00000485: JUMPI 00000486: PUSH1 0x00 00000488: DUP1 00000489: REVERT 0000048a: JUMPDEST 0000048b: POP 0000048c: PUSH2 0x02c1 0000048f: PUSH2 0x0499 00000492: CALLDATASIZE 00000493: PUSH1 0x04 00000495: PUSH2 0x243a 00000498: JUMP 00000499: JUMPDEST 0000049a: PUSH2 0x0f88 0000049d: JUMP 0000049e: JUMPDEST 0000049f: CALLVALUE 000004a0: DUP1 000004a1: ISZERO 000004a2: PUSH2 0x04aa 000004a5: JUMPI 000004a6: PUSH1 0x00 000004a8: DUP1 000004a9: REVERT 000004aa: JUMPDEST 000004ab: POP 000004ac: PUSH2 0x04b3 000004af: PUSH2 0x0f95 000004b2: JUMP 000004b3: JUMPDEST 000004b4: PUSH1 0x40 000004b6: MLOAD 000004b7: PUSH2 0x0298 000004ba: SWAP2 000004bb: SWAP1 000004bc: PUSH2 0x2549 000004bf: JUMP 000004c0: JUMPDEST 000004c1: CALLVALUE 000004c2: DUP1 000004c3: ISZERO 000004c4: PUSH2 0x04cc 000004c7: JUMPI 000004c8: PUSH1 0x00 000004ca: DUP1 000004cb: REVERT 000004cc: JUMPDEST 000004cd: POP 000004ce: PUSH2 0x0313 000004d1: PUSH2 0x04db 000004d4: CALLDATASIZE 000004d5: PUSH1 0x04 000004d7: PUSH2 0x243a 000004da: JUMP 000004db: JUMPDEST 000004dc: PUSH2 0x0fa6 000004df: JUMP 000004e0: JUMPDEST 000004e1: CALLVALUE 000004e2: DUP1 000004e3: ISZERO 000004e4: PUSH2 0x04ec 000004e7: JUMPI 000004e8: PUSH1 0x00 000004ea: DUP1 000004eb: REVERT 000004ec: JUMPDEST 000004ed: POP 000004ee: PUSH2 0x02c1 000004f1: PUSH2 0x04fb 000004f4: CALLDATASIZE 000004f5: PUSH1 0x04 000004f7: PUSH2 0x243a 000004fa: JUMP 000004fb: JUMPDEST 000004fc: PUSH2 0x1030 000004ff: JUMP 00000500: JUMPDEST 00000501: CALLVALUE 00000502: DUP1 00000503: ISZERO 00000504: PUSH2 0x050c 00000507: JUMPI 00000508: PUSH1 0x00 0000050a: DUP1 0000050b: REVERT 0000050c: JUMPDEST 0000050d: POP 0000050e: PUSH2 0x028e 00000511: PUSH2 0x051b 00000514: CALLDATASIZE 00000515: PUSH1 0x04 00000517: PUSH2 0x243a 0000051a: JUMP 0000051b: JUMPDEST 0000051c: PUSH2 0x103d 0000051f: JUMP 00000520: JUMPDEST 00000521: CALLVALUE 00000522: DUP1 00000523: ISZERO 00000524: PUSH2 0x052c 00000527: JUMPI 00000528: PUSH1 0x00 0000052a: DUP1 0000052b: REVERT 0000052c: JUMPDEST 0000052d: POP 0000052e: PUSH2 0x04b3 00000531: PUSH2 0x1051 00000534: JUMP 00000535: JUMPDEST 00000536: CALLVALUE 00000537: DUP1 00000538: ISZERO 00000539: PUSH2 0x0541 0000053c: JUMPI 0000053d: PUSH1 0x00 0000053f: DUP1 00000540: REVERT 00000541: JUMPDEST 00000542: POP 00000543: PUSH2 0x028e 00000546: PUSH1 0x00 00000548: DUP1 00000549: MLOAD 0000054a: PUSH1 0x20 0000054c: PUSH2 0x27f3 0000054f: DUP4 00000550: CODECOPY 00000551: DUP2 00000552: MLOAD 00000553: SWAP2 00000554: MSTORE 00000555: DUP2 00000556: JUMP 00000557: JUMPDEST 00000558: CALLVALUE 00000559: DUP1 0000055a: ISZERO 0000055b: PUSH2 0x0563 0000055e: JUMPI 0000055f: PUSH1 0x00 00000561: DUP1 00000562: REVERT 00000563: JUMPDEST 00000564: POP 00000565: PUSH2 0x02c1 00000568: PUSH2 0x0572 0000056b: CALLDATASIZE 0000056c: PUSH1 0x04 0000056e: PUSH2 0x243a 00000571: JUMP 00000572: JUMPDEST 00000573: PUSH2 0x105d 00000576: JUMP 00000577: JUMPDEST 00000578: CALLVALUE 00000579: DUP1 0000057a: ISZERO 0000057b: PUSH2 0x0583 0000057e: JUMPI 0000057f: PUSH1 0x00 00000581: DUP1 00000582: REVERT 00000583: JUMPDEST 00000584: POP 00000585: PUSH2 0x04b3 00000588: PUSH2 0x106a 0000058b: JUMP 0000058c: JUMPDEST 0000058d: CALLVALUE 0000058e: DUP1 0000058f: ISZERO 00000590: PUSH2 0x0598 00000593: JUMPI 00000594: PUSH1 0x00 00000596: DUP1 00000597: REVERT 00000598: JUMPDEST 00000599: POP 0000059a: PUSH2 0x0313 0000059d: PUSH2 0x05a7 000005a0: CALLDATASIZE 000005a1: PUSH1 0x04 000005a3: PUSH2 0x243a 000005a6: JUMP 000005a7: JUMPDEST 000005a8: PUSH2 0x1076 000005ab: JUMP 000005ac: JUMPDEST 000005ad: CALLVALUE 000005ae: DUP1 000005af: ISZERO 000005b0: PUSH2 0x05b8 000005b3: JUMPI 000005b4: PUSH1 0x00 000005b6: DUP1 000005b7: REVERT 000005b8: JUMPDEST 000005b9: POP 000005ba: PUSH2 0x05cc 000005bd: PUSH2 0x05c7 000005c0: CALLDATASIZE 000005c1: PUSH1 0x04 000005c3: PUSH2 0x258a 000005c6: JUMP 000005c7: JUMPDEST 000005c8: PUSH2 0x1100 000005cb: JUMP 000005cc: JUMPDEST 000005cd: PUSH1 0x40 000005cf: MLOAD 000005d0: PUSH1 0x01 000005d2: PUSH1 0x01 000005d4: PUSH1 0xa0 000005d6: SHL 000005d7: SUB 000005d8: SWAP1 000005d9: SWAP2 000005da: AND 000005db: DUP2 000005dc: MSTORE 000005dd: PUSH1 0x20 000005df: ADD 000005e0: PUSH2 0x0298 000005e3: JUMP 000005e4: JUMPDEST 000005e5: CALLVALUE 000005e6: DUP1 000005e7: ISZERO 000005e8: PUSH2 0x05f0 000005eb: JUMPI 000005ec: PUSH1 0x00 000005ee: DUP1 000005ef: REVERT 000005f0: JUMPDEST 000005f1: POP 000005f2: PUSH2 0x0313 000005f5: PUSH2 0x05ff 000005f8: CALLDATASIZE 000005f9: PUSH1 0x04 000005fb: PUSH2 0x2504 000005fe: JUMP 000005ff: JUMPDEST 00000600: PUSH2 0x1118 00000603: JUMP 00000604: JUMPDEST 00000605: CALLVALUE 00000606: DUP1 00000607: ISZERO 00000608: PUSH2 0x0610 0000060b: JUMPI 0000060c: PUSH1 0x00 0000060e: DUP1 0000060f: REVERT 00000610: JUMPDEST 00000611: POP 00000612: PUSH2 0x02c1 00000615: PUSH2 0x061f 00000618: CALLDATASIZE 00000619: PUSH1 0x04 0000061b: PUSH2 0x251d 0000061e: JUMP 0000061f: JUMPDEST 00000620: PUSH2 0x1225 00000623: JUMP 00000624: JUMPDEST 00000625: CALLVALUE 00000626: DUP1 00000627: ISZERO 00000628: PUSH2 0x0630 0000062b: JUMPI 0000062c: PUSH1 0x00 0000062e: DUP1 0000062f: REVERT 00000630: JUMPDEST 00000631: POP 00000632: PUSH2 0x0639 00000635: PUSH2 0x124e 00000638: JUMP 00000639: JUMPDEST 0000063a: PUSH1 0x40 0000063c: MLOAD 0000063d: PUSH2 0x0298 00000640: SWAP2 00000641: SWAP1 00000642: PUSH2 0x25ac 00000645: JUMP 00000646: JUMPDEST 00000647: CALLVALUE 00000648: DUP1 00000649: ISZERO 0000064a: PUSH2 0x0652 0000064d: JUMPI 0000064e: PUSH1 0x00 00000650: DUP1 00000651: REVERT 00000652: JUMPDEST 00000653: POP 00000654: PUSH2 0x04b3 00000657: PUSH2 0x1323 0000065a: JUMP 0000065b: JUMPDEST 0000065c: CALLVALUE 0000065d: DUP1 0000065e: ISZERO 0000065f: PUSH2 0x0667 00000662: JUMPI 00000663: PUSH1 0x00 00000665: DUP1 00000666: REVERT 00000667: JUMPDEST 00000668: POP 00000669: PUSH2 0x028e 0000066c: PUSH2 0x0676 0000066f: CALLDATASIZE 00000670: PUSH1 0x04 00000672: PUSH2 0x2504 00000675: JUMP 00000676: JUMPDEST 00000677: PUSH2 0x132f 0000067a: JUMP 0000067b: JUMPDEST 0000067c: CALLVALUE 0000067d: DUP1 0000067e: ISZERO 0000067f: PUSH2 0x0687 00000682: JUMPI 00000683: PUSH1 0x00 00000685: DUP1 00000686: REVERT 00000687: JUMPDEST 00000688: POP 00000689: PUSH2 0x0313 0000068c: PUSH2 0x0696 0000068f: CALLDATASIZE 00000690: PUSH1 0x04 00000692: PUSH2 0x2455 00000695: JUMP 00000696: JUMPDEST 00000697: PUSH2 0x1346 0000069a: JUMP 0000069b: JUMPDEST 0000069c: CALLVALUE 0000069d: DUP1 0000069e: ISZERO 0000069f: PUSH2 0x06a7 000006a2: JUMPI 000006a3: PUSH1 0x00 000006a5: DUP1 000006a6: REVERT 000006a7: JUMPDEST 000006a8: POP 000006a9: PUSH2 0x0313 000006ac: PUSH2 0x06b6 000006af: CALLDATASIZE 000006b0: PUSH1 0x04 000006b2: PUSH2 0x243a 000006b5: JUMP 000006b6: JUMPDEST 000006b7: PUSH2 0x140e 000006ba: JUMP 000006bb: JUMPDEST 000006bc: CALLVALUE 000006bd: DUP1 000006be: ISZERO 000006bf: PUSH2 0x06c7 000006c2: JUMPI 000006c3: PUSH1 0x00 000006c5: DUP1 000006c6: REVERT 000006c7: JUMPDEST 000006c8: POP 000006c9: PUSH2 0x0313 000006cc: PUSH2 0x06d6 000006cf: CALLDATASIZE 000006d0: PUSH1 0x04 000006d2: PUSH2 0x251d 000006d5: JUMP 000006d6: JUMPDEST 000006d7: PUSH2 0x1497 000006da: JUMP 000006db: JUMPDEST 000006dc: CALLVALUE 000006dd: DUP1 000006de: ISZERO 000006df: PUSH2 0x06e7 000006e2: JUMPI 000006e3: PUSH1 0x00 000006e5: DUP1 000006e6: REVERT 000006e7: JUMPDEST 000006e8: POP 000006e9: PUSH2 0x0313 000006ec: PUSH2 0x06f6 000006ef: CALLDATASIZE 000006f0: PUSH1 0x04 000006f2: PUSH2 0x23eb 000006f5: JUMP 000006f6: JUMPDEST 000006f7: PUSH2 0x14c2 000006fa: JUMP 000006fb: JUMPDEST 000006fc: CALLVALUE 000006fd: DUP1 000006fe: ISZERO 000006ff: PUSH2 0x0707 00000702: JUMPI 00000703: PUSH1 0x00 00000705: DUP1 00000706: REVERT 00000707: JUMPDEST 00000708: POP 00000709: PUSH2 0x0313 0000070c: PUSH2 0x0716 0000070f: CALLDATASIZE 00000710: PUSH1 0x04 00000712: PUSH2 0x2602 00000715: JUMP 00000716: JUMPDEST 00000717: PUSH2 0x179c 0000071a: JUMP 0000071b: JUMPDEST 0000071c: CALLVALUE 0000071d: DUP1 0000071e: ISZERO 0000071f: PUSH2 0x0727 00000722: JUMPI 00000723: PUSH1 0x00 00000725: DUP1 00000726: REVERT 00000727: JUMPDEST 00000728: POP 00000729: PUSH2 0x0313 0000072c: PUSH2 0x0736 0000072f: CALLDATASIZE 00000730: PUSH1 0x04 00000732: PUSH2 0x2672 00000735: JUMP 00000736: JUMPDEST 00000737: PUSH2 0x188a 0000073a: JUMP 0000073b: JUMPDEST 0000073c: CALLVALUE 0000073d: DUP1 0000073e: ISZERO 0000073f: PUSH2 0x0747 00000742: JUMPI 00000743: PUSH1 0x00 00000745: DUP1 00000746: REVERT 00000747: JUMPDEST 00000748: POP 00000749: PUSH2 0x02c1 0000074c: PUSH2 0x0756 0000074f: CALLDATASIZE 00000750: PUSH1 0x04 00000752: PUSH2 0x243a 00000755: JUMP 00000756: JUMPDEST 00000757: PUSH2 0x18fc 0000075a: JUMP 0000075b: JUMPDEST 0000075c: CALLVALUE 0000075d: DUP1 0000075e: ISZERO 0000075f: PUSH2 0x0767 00000762: JUMPI 00000763: PUSH1 0x00 00000765: DUP1 00000766: REVERT 00000767: JUMPDEST 00000768: POP 00000769: PUSH2 0x0313 0000076c: PUSH2 0x0776 0000076f: CALLDATASIZE 00000770: PUSH1 0x04 00000772: PUSH2 0x243a 00000775: JUMP 00000776: JUMPDEST 00000777: PUSH2 0x1909 0000077a: JUMP 0000077b: JUMPDEST 0000077c: CALLVALUE 0000077d: DUP1 0000077e: ISZERO 0000077f: PUSH2 0x0787 00000782: JUMPI 00000783: PUSH1 0x00 00000785: DUP1 00000786: REVERT 00000787: JUMPDEST 00000788: POP 00000789: PUSH2 0x028e 0000078c: PUSH2 0x0796 0000078f: CALLDATASIZE 00000790: PUSH1 0x04 00000792: PUSH2 0x243a 00000795: JUMP 00000796: JUMPDEST 00000797: PUSH2 0x1992 0000079a: JUMP 0000079b: JUMPDEST 0000079c: CALLVALUE 0000079d: DUP1 0000079e: ISZERO 0000079f: PUSH2 0x07a7 000007a2: JUMPI 000007a3: PUSH1 0x00 000007a5: DUP1 000007a6: REVERT 000007a7: JUMPDEST 000007a8: POP 000007a9: PUSH2 0x0313 000007ac: PUSH2 0x07b6 000007af: CALLDATASIZE 000007b0: PUSH1 0x04 000007b2: PUSH2 0x243a 000007b5: JUMP 000007b6: JUMPDEST 000007b7: PUSH2 0x199f 000007ba: JUMP 000007bb: JUMPDEST 000007bc: CALLVALUE 000007bd: DUP1 000007be: ISZERO 000007bf: PUSH2 0x07c7 000007c2: JUMPI 000007c3: PUSH1 0x00 000007c5: DUP1 000007c6: REVERT 000007c7: JUMPDEST 000007c8: POP 000007c9: PUSH2 0x0313 000007cc: PUSH2 0x07d6 000007cf: CALLDATASIZE 000007d0: PUSH1 0x04 000007d2: PUSH2 0x243a 000007d5: JUMP 000007d6: JUMPDEST 000007d7: PUSH2 0x19a8 000007da: JUMP 000007db: JUMPDEST 000007dc: PUSH1 0x00 000007de: PUSH1 0x01 000007e0: PUSH1 0x01 000007e2: PUSH1 0xe0 000007e4: SHL 000007e5: SUB 000007e6: NOT 000007e7: DUP3 000007e8: AND 000007e9: PUSH4 0x5a05180f 000007ee: PUSH1 0xe0 000007f0: SHL 000007f1: EQ 000007f2: DUP1 000007f3: PUSH2 0x0800 000007f6: JUMPI 000007f7: POP 000007f8: PUSH2 0x0800 000007fb: DUP3 000007fc: PUSH2 0x1a31 000007ff: JUMP 00000800: JUMPDEST 00000801: SWAP3 00000802: SWAP2 00000803: POP 00000804: POP 00000805: JUMP 00000806: JUMPDEST 00000807: PUSH1 0x60 00000809: PUSH1 0x00 0000080b: PUSH2 0x0814 0000080e: PUSH1 0x0e 00000810: PUSH2 0x1a66 00000813: JUMP 00000814: JUMPDEST 00000815: SWAP1 00000816: POP 00000817: PUSH1 0x00 00000819: DUP2 0000081a: PUSH8 0xffffffffffffffff 00000823: DUP2 00000824: GT 00000825: ISZERO 00000826: PUSH2 0x0831 00000829: JUMPI 0000082a: PUSH2 0x0831 0000082d: PUSH2 0x26af 00000830: JUMP 00000831: JUMPDEST 00000832: PUSH1 0x40 00000834: MLOAD 00000835: SWAP1 00000836: DUP1 00000837: DUP3 00000838: MSTORE 00000839: DUP1 0000083a: PUSH1 0x20 0000083c: MUL 0000083d: PUSH1 0x20 0000083f: ADD 00000840: DUP3 00000841: ADD 00000842: PUSH1 0x40 00000844: MSTORE 00000845: DUP1 00000846: ISZERO 00000847: PUSH2 0x0876 0000084a: JUMPI 0000084b: DUP2 0000084c: PUSH1 0x20 0000084e: ADD 0000084f: JUMPDEST 00000850: PUSH1 0x40 00000852: DUP1 00000853: MLOAD 00000854: DUP1 00000855: DUP3 00000856: ADD 00000857: SWAP1 00000858: SWAP2 00000859: MSTORE 0000085a: PUSH1 0x00 0000085c: DUP1 0000085d: DUP3 0000085e: MSTORE 0000085f: PUSH1 0x20 00000861: DUP3 00000862: ADD 00000863: MSTORE 00000864: DUP2 00000865: MSTORE 00000866: PUSH1 0x20 00000868: ADD 00000869: SWAP1 0000086a: PUSH1 0x01 0000086c: SWAP1 0000086d: SUB 0000086e: SWAP1 0000086f: DUP2 00000870: PUSH2 0x084f 00000873: JUMPI 00000874: SWAP1 00000875: POP 00000876: JUMPDEST 00000877: POP 00000878: SWAP1 00000879: POP 0000087a: PUSH1 0x00 0000087c: JUMPDEST 0000087d: DUP3 0000087e: DUP2 0000087f: LT 00000880: ISZERO 00000881: PUSH2 0x08db 00000884: JUMPI 00000885: PUSH1 0x00 00000887: DUP1 00000888: PUSH2 0x0892 0000088b: PUSH1 0x0e 0000088d: DUP5 0000088e: PUSH2 0x1a71 00000891: JUMP 00000892: JUMPDEST 00000893: SWAP2 00000894: POP 00000895: SWAP2 00000896: POP 00000897: PUSH1 0x40 00000899: MLOAD 0000089a: DUP1 0000089b: PUSH1 0x40 0000089d: ADD 0000089e: PUSH1 0x40 000008a0: MSTORE 000008a1: DUP1 000008a2: DUP4 000008a3: PUSH1 0x01 000008a5: PUSH1 0x01 000008a7: PUSH1 0xa0 000008a9: SHL 000008aa: SUB 000008ab: AND 000008ac: DUP2 000008ad: MSTORE 000008ae: PUSH1 0x20 000008b0: ADD 000008b1: DUP3 000008b2: DUP2 000008b3: MSTORE 000008b4: POP 000008b5: DUP5 000008b6: DUP5 000008b7: DUP2 000008b8: MLOAD 000008b9: DUP2 000008ba: LT 000008bb: PUSH2 0x08c6 000008be: JUMPI 000008bf: PUSH2 0x08c6 000008c2: PUSH2 0x26c5 000008c5: JUMP 000008c6: JUMPDEST 000008c7: PUSH1 0x20 000008c9: SWAP1 000008ca: DUP2 000008cb: MUL 000008cc: SWAP2 000008cd: SWAP1 000008ce: SWAP2 000008cf: ADD 000008d0: ADD 000008d1: MSTORE 000008d2: POP 000008d3: POP 000008d4: PUSH1 0x01 000008d6: ADD 000008d7: PUSH2 0x087c 000008da: JUMP 000008db: JUMPDEST 000008dc: POP 000008dd: SWAP3 000008de: SWAP2 000008df: POP 000008e0: POP 000008e1: JUMP 000008e2: JUMPDEST 000008e3: PUSH2 0x08fa 000008e6: PUSH1 0x00 000008e8: DUP1 000008e9: MLOAD 000008ea: PUSH1 0x20 000008ec: PUSH2 0x27d3 000008ef: DUP4 000008f0: CODECOPY 000008f1: DUP2 000008f2: MLOAD 000008f3: SWAP2 000008f4: MSTORE 000008f5: CALLER 000008f6: PUSH2 0x1225 000008f9: JUMP 000008fa: JUMPDEST 000008fb: PUSH2 0x0917 000008fe: JUMPI 000008ff: PUSH1 0x40 00000901: MLOAD 00000902: PUSH4 0x03a81c97 00000907: PUSH1 0xe6 00000909: SHL 0000090a: DUP2 0000090b: MSTORE 0000090c: PUSH1 0x04 0000090e: ADD 0000090f: PUSH1 0x40 00000911: MLOAD 00000912: DUP1 00000913: SWAP2 00000914: SUB 00000915: SWAP1 00000916: REVERT 00000917: JUMPDEST 00000918: PUSH2 0x0920 0000091b: DUP5 0000091c: PUSH2 0x1a8f 0000091f: JUMP 00000920: JUMPDEST 00000921: PUSH2 0x092b 00000924: PUSH1 0x07 00000926: DUP4 00000927: PUSH2 0x1ac2 0000092a: JUMP 0000092b: JUMPDEST 0000092c: PUSH2 0x0958 0000092f: JUMPI 00000930: PUSH1 0x40 00000932: MLOAD 00000933: PUSH4 0xa787604b 00000938: PUSH1 0xe0 0000093a: SHL 0000093b: DUP2 0000093c: MSTORE 0000093d: PUSH1 0x01 0000093f: PUSH1 0x01 00000941: PUSH1 0xa0 00000943: SHL 00000944: SUB 00000945: DUP4 00000946: AND 00000947: PUSH1 0x04 00000949: DUP3 0000094a: ADD 0000094b: MSTORE 0000094c: PUSH1 0x24 0000094e: ADD 0000094f: JUMPDEST 00000950: PUSH1 0x40 00000952: MLOAD 00000953: DUP1 00000954: SWAP2 00000955: SUB 00000956: SWAP1 00000957: REVERT 00000958: JUMPDEST 00000959: PUSH1 0x40 0000095b: DUP1 0000095c: MLOAD 0000095d: ADDRESS 0000095e: PUSH1 0x24 00000960: DUP1 00000961: DUP4 00000962: ADD 00000963: SWAP2 00000964: SWAP1 00000965: SWAP2 00000966: MSTORE 00000967: DUP3 00000968: MLOAD 00000969: DUP1 0000096a: DUP4 0000096b: SUB 0000096c: SWAP1 0000096d: SWAP2 0000096e: ADD 0000096f: DUP2 00000970: MSTORE 00000971: PUSH1 0x44 00000973: SWAP1 00000974: SWAP2 00000975: ADD 00000976: DUP3 00000977: MSTORE 00000978: PUSH1 0x20 0000097a: DUP2 0000097b: ADD 0000097c: DUP1 0000097d: MLOAD 0000097e: PUSH1 0x01 00000980: PUSH1 0x01 00000982: PUSH1 0xe0 00000984: SHL 00000985: SUB 00000986: AND 00000987: PUSH4 0x70a08231 0000098c: PUSH1 0xe0 0000098e: SHL 0000098f: OR 00000990: SWAP1 00000991: MSTORE 00000992: SWAP1 00000993: MLOAD 00000994: PUSH1 0x00 00000996: SWAP2 00000997: DUP3 00000998: SWAP2 00000999: DUP3 0000099a: SWAP2 0000099b: PUSH1 0x01 0000099d: PUSH1 0x01 0000099f: PUSH1 0xa0 000009a1: SHL 000009a2: SUB 000009a3: DUP10 000009a4: AND 000009a5: SWAP2 000009a6: PUSH2 0x09af 000009a9: SWAP2 000009aa: SWAP1 000009ab: PUSH2 0x26db 000009ae: JUMP 000009af: JUMPDEST 000009b0: PUSH1 0x00 000009b2: PUSH1 0x40 000009b4: MLOAD 000009b5: DUP1 000009b6: DUP4 000009b7: SUB 000009b8: DUP2 000009b9: DUP6 000009ba: GAS 000009bb: STATICCALL 000009bc: SWAP2 000009bd: POP 000009be: POP 000009bf: RETURNDATASIZE 000009c0: DUP1 000009c1: PUSH1 0x00 000009c3: DUP2 000009c4: EQ 000009c5: PUSH2 0x09ea 000009c8: JUMPI 000009c9: PUSH1 0x40 000009cb: MLOAD 000009cc: SWAP2 000009cd: POP 000009ce: PUSH1 0x1f 000009d0: NOT 000009d1: PUSH1 0x3f 000009d3: RETURNDATASIZE 000009d4: ADD 000009d5: AND 000009d6: DUP3 000009d7: ADD 000009d8: PUSH1 0x40 000009da: MSTORE 000009db: RETURNDATASIZE 000009dc: DUP3 000009dd: MSTORE 000009de: RETURNDATASIZE 000009df: PUSH1 0x00 000009e1: PUSH1 0x20 000009e3: DUP5 000009e4: ADD 000009e5: RETURNDATACOPY 000009e6: PUSH2 0x09ef 000009e9: JUMP 000009ea: JUMPDEST 000009eb: PUSH1 0x60 000009ed: SWAP2 000009ee: POP 000009ef: JUMPDEST 000009f0: POP 000009f1: SWAP2 000009f2: POP 000009f3: SWAP2 000009f4: POP 000009f5: DUP2 000009f6: DUP1 000009f7: ISZERO 000009f8: PUSH2 0x0a02 000009fb: JUMPI 000009fc: POP 000009fd: DUP1 000009fe: MLOAD 000009ff: PUSH1 0x20 00000a01: EQ 00000a02: JUMPDEST 00000a03: ISZERO 00000a04: PUSH2 0x0a1e 00000a07: JUMPI 00000a08: DUP1 00000a09: DUP1 00000a0a: PUSH1 0x20 00000a0c: ADD 00000a0d: SWAP1 00000a0e: MLOAD 00000a0f: DUP2 00000a10: ADD 00000a11: SWAP1 00000a12: PUSH2 0x0a1b 00000a15: SWAP2 00000a16: SWAP1 00000a17: PUSH2 0x270a 00000a1a: JUMP 00000a1b: JUMPDEST 00000a1c: SWAP3 00000a1d: POP 00000a1e: JUMPDEST 00000a1f: DUP4 00000a20: DUP1 00000a21: ISZERO 00000a22: PUSH2 0x0a38 00000a25: JUMPI 00000a26: POP 00000a27: PUSH1 0x02 00000a29: SLOAD 00000a2a: PUSH1 0x01 00000a2c: PUSH1 0x01 00000a2e: PUSH1 0xa0 00000a30: SHL 00000a31: SUB 00000a32: DUP9 00000a33: DUP2 00000a34: AND 00000a35: SWAP2 00000a36: AND 00000a37: EQ 00000a38: JUMPDEST 00000a39: ISZERO 00000a3a: PUSH2 0x0a4a 00000a3d: JUMPI 00000a3e: PUSH2 0x0a47 00000a41: SELFBALANCE 00000a42: DUP5 00000a43: PUSH2 0x2739 00000a46: JUMP 00000a47: JUMPDEST 00000a48: SWAP3 00000a49: POP 00000a4a: JUMPDEST 00000a4b: DUP6 00000a4c: DUP4 00000a4d: LT 00000a4e: ISZERO 00000a4f: PUSH2 0x0a75 00000a52: JUMPI 00000a53: PUSH1 0x40 00000a55: MLOAD 00000a56: PUSH4 0x4787a103 00000a5b: PUSH1 0xe1 00000a5d: SHL 00000a5e: DUP2 00000a5f: MSTORE 00000a60: PUSH1 0x04 00000a62: DUP2 00000a63: ADD 00000a64: DUP5 00000a65: SWAP1 00000a66: MSTORE 00000a67: PUSH1 0x24 00000a69: DUP2 00000a6a: ADD 00000a6b: DUP8 00000a6c: SWAP1 00000a6d: MSTORE 00000a6e: PUSH1 0x44 00000a70: ADD 00000a71: PUSH2 0x094f 00000a74: JUMP 00000a75: JUMPDEST 00000a76: DUP4 00000a77: DUP1 00000a78: ISZERO 00000a79: PUSH2 0x0a8f 00000a7c: JUMPI 00000a7d: POP 00000a7e: PUSH1 0x02 00000a80: SLOAD 00000a81: PUSH1 0x01 00000a83: PUSH1 0x01 00000a85: PUSH1 0xa0 00000a87: SHL 00000a88: SUB 00000a89: DUP9 00000a8a: DUP2 00000a8b: AND 00000a8c: SWAP2 00000a8d: AND 00000a8e: EQ 00000a8f: JUMPDEST 00000a90: ISZERO 00000a91: PUSH2 0x0b42 00000a94: JUMPI 00000a95: DUP6 00000a96: SELFBALANCE 00000a97: LT 00000a98: ISZERO 00000a99: PUSH2 0x0b06 00000a9c: JUMPI 00000a9d: PUSH1 0x01 00000a9f: PUSH1 0x01 00000aa1: PUSH1 0xa0 00000aa3: SHL 00000aa4: SUB 00000aa5: DUP8 00000aa6: AND 00000aa7: PUSH4 0x2e1a7d4d 00000aac: PUSH2 0x0ab5 00000aaf: SELFBALANCE 00000ab0: DUP10 00000ab1: PUSH2 0x274c 00000ab4: JUMP 00000ab5: JUMPDEST 00000ab6: PUSH1 0x40 00000ab8: MLOAD 00000ab9: DUP3 00000aba: PUSH4 0xffffffff 00000abf: AND 00000ac0: PUSH1 0xe0 00000ac2: SHL 00000ac3: DUP2 00000ac4: MSTORE 00000ac5: PUSH1 0x04 00000ac7: ADD 00000ac8: PUSH2 0x0ad3 00000acb: SWAP2 00000acc: DUP2 00000acd: MSTORE 00000ace: PUSH1 0x20 00000ad0: ADD 00000ad1: SWAP1 00000ad2: JUMP 00000ad3: JUMPDEST 00000ad4: PUSH1 0x00 00000ad6: PUSH1 0x40 00000ad8: MLOAD 00000ad9: DUP1 00000ada: DUP4 00000adb: SUB 00000adc: DUP2 00000add: PUSH1 0x00 00000adf: DUP8 00000ae0: DUP1 00000ae1: EXTCODESIZE 00000ae2: ISZERO 00000ae3: DUP1 00000ae4: ISZERO 00000ae5: PUSH2 0x0aed 00000ae8: JUMPI 00000ae9: PUSH1 0x00 00000aeb: DUP1 00000aec: REVERT 00000aed: JUMPDEST 00000aee: POP 00000aef: GAS 00000af0: CALL 00000af1: ISZERO 00000af2: DUP1 00000af3: ISZERO 00000af4: PUSH2 0x0b01 00000af7: JUMPI 00000af8: RETURNDATASIZE 00000af9: PUSH1 0x00 00000afb: DUP1 00000afc: RETURNDATACOPY 00000afd: RETURNDATASIZE 00000afe: PUSH1 0x00 00000b00: REVERT 00000b01: JUMPDEST 00000b02: POP 00000b03: POP 00000b04: POP 00000b05: POP 00000b06: JUMPDEST 00000b07: PUSH1 0x40 00000b09: MLOAD 00000b0a: PUSH1 0x01 00000b0c: PUSH1 0x01 00000b0e: PUSH1 0xa0 00000b10: SHL 00000b11: SUB 00000b12: DUP7 00000b13: AND 00000b14: SWAP1 00000b15: DUP8 00000b16: ISZERO 00000b17: PUSH2 0x08fc 00000b1a: MUL 00000b1b: SWAP1 00000b1c: DUP9 00000b1d: SWAP1 00000b1e: PUSH1 0x00 00000b20: DUP2 00000b21: DUP2 00000b22: DUP2 00000b23: DUP6 00000b24: DUP9 00000b25: DUP9 00000b26: CALL 00000b27: SWAP4 00000b28: POP 00000b29: POP 00000b2a: POP 00000b2b: POP 00000b2c: ISZERO 00000b2d: DUP1 00000b2e: ISZERO 00000b2f: PUSH2 0x0b3c 00000b32: JUMPI 00000b33: RETURNDATASIZE 00000b34: PUSH1 0x00 00000b36: DUP1 00000b37: RETURNDATACOPY 00000b38: RETURNDATASIZE 00000b39: PUSH1 0x00 00000b3b: REVERT 00000b3c: JUMPDEST 00000b3d: POP 00000b3e: PUSH2 0x0b56 00000b41: JUMP 00000b42: JUMPDEST 00000b43: PUSH2 0x0b56 00000b46: PUSH1 0x01 00000b48: PUSH1 0x01 00000b4a: PUSH1 0xa0 00000b4c: SHL 00000b4d: SUB 00000b4e: DUP9 00000b4f: AND 00000b50: DUP7 00000b51: DUP9 00000b52: PUSH2 0x1ae4 00000b55: JUMP 00000b56: JUMPDEST 00000b57: PUSH1 0x40 00000b59: DUP1 00000b5a: MLOAD 00000b5b: PUSH1 0x01 00000b5d: PUSH1 0x01 00000b5f: PUSH1 0xa0 00000b61: SHL 00000b62: SUB 00000b63: DUP10 00000b64: DUP2 00000b65: AND 00000b66: DUP3 00000b67: MSTORE 00000b68: PUSH1 0x20 00000b6a: DUP3 00000b6b: ADD 00000b6c: DUP10 00000b6d: SWAP1 00000b6e: MSTORE 00000b6f: DUP8 00000b70: AND 00000b71: DUP2 00000b72: DUP4 00000b73: ADD 00000b74: MSTORE 00000b75: DUP6 00000b76: ISZERO 00000b77: ISZERO 00000b78: PUSH1 0x60 00000b7a: DUP3 00000b7b: ADD 00000b7c: MSTORE 00000b7d: SWAP1 00000b7e: MLOAD 00000b7f: PUSH32 0xf5a218c3f2e48fb71969f47c462c49a00473152fa2170938abd781982c93fca6 00000ba0: SWAP2 00000ba1: DUP2 00000ba2: SWAP1 00000ba3: SUB 00000ba4: PUSH1 0x80 00000ba6: ADD 00000ba7: SWAP1 00000ba8: LOG1 00000ba9: POP 00000baa: POP 00000bab: POP 00000bac: POP 00000bad: POP 00000bae: POP 00000baf: POP 00000bb0: JUMP 00000bb1: JUMPDEST 00000bb2: PUSH2 0x0bc9 00000bb5: PUSH1 0x00 00000bb7: DUP1 00000bb8: MLOAD 00000bb9: PUSH1 0x20 00000bbb: PUSH2 0x2793 00000bbe: DUP4 00000bbf: CODECOPY 00000bc0: DUP2 00000bc1: MLOAD 00000bc2: SWAP2 00000bc3: MSTORE 00000bc4: CALLER 00000bc5: PUSH2 0x1225 00000bc8: JUMP 00000bc9: JUMPDEST 00000bca: PUSH2 0x0be6 00000bcd: JUMPI 00000bce: PUSH1 0x40 00000bd0: MLOAD 00000bd1: PUSH4 0x605919ad 00000bd6: PUSH1 0xe1 00000bd8: SHL 00000bd9: DUP2 00000bda: MSTORE 00000bdb: PUSH1 0x04 00000bdd: ADD 00000bde: PUSH1 0x40 00000be0: MLOAD 00000be1: DUP1 00000be2: SWAP2 00000be3: SUB 00000be4: SWAP1 00000be5: REVERT 00000be6: JUMPDEST 00000be7: PUSH2 0x0bf1 00000bea: PUSH1 0x03 00000bec: DUP3 00000bed: PUSH2 0x1ac2 00000bf0: JUMP 00000bf1: JUMPDEST 00000bf2: ISZERO 00000bf3: PUSH2 0x0c40 00000bf6: JUMPI 00000bf7: PUSH2 0x0c01 00000bfa: PUSH1 0x03 00000bfc: DUP3 00000bfd: PUSH2 0x1b43 00000c00: JUMP 00000c01: JUMPDEST 00000c02: POP 00000c03: PUSH1 0x40 00000c05: MLOAD 00000c06: PUSH1 0x01 00000c08: PUSH1 0x01 00000c0a: PUSH1 0xa0 00000c0c: SHL 00000c0d: SUB 00000c0e: DUP3 00000c0f: AND 00000c10: DUP2 00000c11: MSTORE 00000c12: PUSH32 0x09a1db4b80c32706328728508c941a6b954f31eb5affd32f236c1fd405f8fea4 00000c33: SWAP1 00000c34: PUSH1 0x20 00000c36: ADD 00000c37: JUMPDEST 00000c38: PUSH1 0x40 00000c3a: MLOAD 00000c3b: DUP1 00000c3c: SWAP2 00000c3d: SUB 00000c3e: SWAP1 00000c3f: LOG1 00000c40: JUMPDEST 00000c41: POP 00000c42: JUMP 00000c43: JUMPDEST 00000c44: PUSH2 0x0c5b 00000c47: PUSH1 0x00 00000c49: DUP1 00000c4a: MLOAD 00000c4b: PUSH1 0x20 00000c4d: PUSH2 0x2793 00000c50: DUP4 00000c51: CODECOPY 00000c52: DUP2 00000c53: MLOAD 00000c54: SWAP2 00000c55: MSTORE 00000c56: CALLER 00000c57: PUSH2 0x1225 00000c5a: JUMP 00000c5b: JUMPDEST 00000c5c: PUSH2 0x0c78 00000c5f: JUMPI 00000c60: PUSH1 0x40 00000c62: MLOAD 00000c63: PUSH4 0x605919ad 00000c68: PUSH1 0xe1 00000c6a: SHL 00000c6b: DUP2 00000c6c: MSTORE 00000c6d: PUSH1 0x04 00000c6f: ADD 00000c70: PUSH1 0x40 00000c72: MLOAD 00000c73: DUP1 00000c74: SWAP2 00000c75: SUB 00000c76: SWAP1 00000c77: REVERT 00000c78: JUMPDEST 00000c79: PUSH2 0x0c81 00000c7c: DUP3 00000c7d: PUSH2 0x1a8f 00000c80: JUMP 00000c81: JUMPDEST 00000c82: PUSH1 0x00 00000c84: PUSH2 0x0c8e 00000c87: PUSH1 0x0e 00000c89: DUP5 00000c8a: PUSH2 0x1b58 00000c8d: JUMP 00000c8e: JUMPDEST 00000c8f: SWAP2 00000c90: POP 00000c91: POP 00000c92: DUP1 00000c93: DUP3 00000c94: SUB 00000c95: PUSH2 0x0c9d 00000c98: JUMPI 00000c99: POP 00000c9a: POP 00000c9b: POP 00000c9c: JUMP 00000c9d: JUMPDEST 00000c9e: DUP2 00000c9f: PUSH1 0x00 00000ca1: SUB 00000ca2: PUSH2 0x0cb6 00000ca5: JUMPI 00000ca6: PUSH2 0x0cb0 00000ca9: PUSH1 0x0e 00000cab: DUP5 00000cac: PUSH2 0x1b70 00000caf: JUMP 00000cb0: JUMPDEST 00000cb1: POP 00000cb2: PUSH2 0x0cc4 00000cb5: JUMP 00000cb6: JUMPDEST 00000cb7: PUSH2 0x0cc2 00000cba: PUSH1 0x0e 00000cbc: DUP5 00000cbd: DUP5 00000cbe: PUSH2 0x1b85 00000cc1: JUMP 00000cc2: JUMPDEST 00000cc3: POP 00000cc4: JUMPDEST 00000cc5: PUSH1 0x40 00000cc7: MLOAD 00000cc8: DUP3 00000cc9: DUP2 00000cca: MSTORE 00000ccb: PUSH32 0x46d7618326b02f1816d1bc53039cbd2b3a77a2cd560dafcc20471097fd9e85e4 00000cec: SWAP1 00000ced: PUSH1 0x20 00000cef: ADD 00000cf0: JUMPDEST 00000cf1: PUSH1 0x40 00000cf3: MLOAD 00000cf4: DUP1 00000cf5: SWAP2 00000cf6: SUB 00000cf7: SWAP1 00000cf8: LOG1 00000cf9: POP 00000cfa: JUMPDEST 00000cfb: POP 00000cfc: POP 00000cfd: JUMP 00000cfe: JUMPDEST 00000cff: PUSH2 0x0d16 00000d02: PUSH1 0x00 00000d04: DUP1 00000d05: MLOAD 00000d06: PUSH1 0x20 00000d08: PUSH2 0x2793 00000d0b: DUP4 00000d0c: CODECOPY 00000d0d: DUP2 00000d0e: MLOAD 00000d0f: SWAP2 00000d10: MSTORE 00000d11: CALLER 00000d12: PUSH2 0x1225 00000d15: JUMP 00000d16: JUMPDEST 00000d17: PUSH2 0x0d33 00000d1a: JUMPI 00000d1b: PUSH1 0x40 00000d1d: MLOAD 00000d1e: PUSH4 0x605919ad 00000d23: PUSH1 0xe1 00000d25: SHL 00000d26: DUP2 00000d27: MSTORE 00000d28: PUSH1 0x04 00000d2a: ADD 00000d2b: PUSH1 0x40 00000d2d: MLOAD 00000d2e: DUP1 00000d2f: SWAP2 00000d30: SUB 00000d31: SWAP1 00000d32: REVERT 00000d33: JUMPDEST 00000d34: PUSH2 0x0d3e 00000d37: PUSH1 0x07 00000d39: DUP3 00000d3a: PUSH2 0x1ac2 00000d3d: JUMP 00000d3e: JUMPDEST 00000d3f: ISZERO 00000d40: PUSH2 0x0c40 00000d43: JUMPI 00000d44: PUSH2 0x0d4e 00000d47: PUSH1 0x07 00000d49: DUP3 00000d4a: PUSH2 0x1b43 00000d4d: JUMP 00000d4e: JUMPDEST 00000d4f: POP 00000d50: PUSH1 0x40 00000d52: MLOAD 00000d53: PUSH1 0x01 00000d55: PUSH1 0x01 00000d57: PUSH1 0xa0 00000d59: SHL 00000d5a: SUB 00000d5b: DUP3 00000d5c: AND 00000d5d: DUP2 00000d5e: MSTORE 00000d5f: PUSH32 0x3eecdc5b7fe6b9eeb35a1f4d3f16910d39a0dd7587ffe9e76cf56b29b6e4e1f1 00000d80: SWAP1 00000d81: PUSH1 0x20 00000d83: ADD 00000d84: PUSH2 0x0c37 00000d87: JUMP 00000d88: JUMPDEST 00000d89: PUSH2 0x0da0 00000d8c: PUSH1 0x00 00000d8e: DUP1 00000d8f: MLOAD 00000d90: PUSH1 0x20 00000d92: PUSH2 0x27b3 00000d95: DUP4 00000d96: CODECOPY 00000d97: DUP2 00000d98: MLOAD 00000d99: SWAP2 00000d9a: MSTORE 00000d9b: CALLER 00000d9c: PUSH2 0x1225 00000d9f: JUMP 00000da0: JUMPDEST 00000da1: PUSH2 0x0dbd 00000da4: JUMPI 00000da5: PUSH1 0x40 00000da7: MLOAD 00000da8: PUSH4 0x897e65bd 00000dad: PUSH1 0xe0 00000daf: SHL 00000db0: DUP2 00000db1: MSTORE 00000db2: PUSH1 0x04 00000db4: ADD 00000db5: PUSH1 0x40 00000db7: MLOAD 00000db8: DUP1 00000db9: SWAP2 00000dba: SUB 00000dbb: SWAP1 00000dbc: REVERT 00000dbd: JUMPDEST 00000dbe: PUSH2 0x0dc8 00000dc1: PUSH1 0x03 00000dc3: DUP5 00000dc4: PUSH2 0x1ac2 00000dc7: JUMP 00000dc8: JUMPDEST 00000dc9: PUSH2 0x0df0 00000dcc: JUMPI 00000dcd: PUSH1 0x40 00000dcf: MLOAD 00000dd0: PUSH4 0x6c337973 00000dd5: PUSH1 0xe1 00000dd7: SHL 00000dd8: DUP2 00000dd9: MSTORE 00000dda: PUSH1 0x01 00000ddc: PUSH1 0x01 00000dde: PUSH1 0xa0 00000de0: SHL 00000de1: SUB 00000de2: DUP5 00000de3: AND 00000de4: PUSH1 0x04 00000de6: DUP3 00000de7: ADD 00000de8: MSTORE 00000de9: PUSH1 0x24 00000deb: ADD 00000dec: PUSH2 0x094f 00000def: JUMP 00000df0: JUMPDEST 00000df1: PUSH2 0x0e30 00000df4: DUP4 00000df5: DUP4 00000df6: DUP4 00000df7: DUP1 00000df8: DUP1 00000df9: PUSH1 0x1f 00000dfb: ADD 00000dfc: PUSH1 0x20 00000dfe: DUP1 00000dff: SWAP2 00000e00: DIV 00000e01: MUL 00000e02: PUSH1 0x20 00000e04: ADD 00000e05: PUSH1 0x40 00000e07: MLOAD 00000e08: SWAP1 00000e09: DUP2 00000e0a: ADD 00000e0b: PUSH1 0x40 00000e0d: MSTORE 00000e0e: DUP1 00000e0f: SWAP4 00000e10: SWAP3 00000e11: SWAP2 00000e12: SWAP1 00000e13: DUP2 00000e14: DUP2 00000e15: MSTORE 00000e16: PUSH1 0x20 00000e18: ADD 00000e19: DUP4 00000e1a: DUP4 00000e1b: DUP1 00000e1c: DUP3 00000e1d: DUP5 00000e1e: CALLDATACOPY 00000e1f: PUSH1 0x00 00000e21: SWAP3 00000e22: ADD 00000e23: SWAP2 00000e24: SWAP1 00000e25: SWAP2 00000e26: MSTORE 00000e27: POP 00000e28: PUSH2 0x1ba3 00000e2b: SWAP3 00000e2c: POP 00000e2d: POP 00000e2e: POP 00000e2f: JUMP 00000e30: JUMPDEST 00000e31: POP 00000e32: POP 00000e33: POP 00000e34: JUMP 00000e35: JUMPDEST 00000e36: PUSH2 0x0e4d 00000e39: PUSH1 0x00 00000e3b: DUP1 00000e3c: MLOAD 00000e3d: PUSH1 0x20 00000e3f: PUSH2 0x2793 00000e42: DUP4 00000e43: CODECOPY 00000e44: DUP2 00000e45: MLOAD 00000e46: SWAP2 00000e47: MSTORE 00000e48: CALLER 00000e49: PUSH2 0x1225 00000e4c: JUMP 00000e4d: JUMPDEST 00000e4e: PUSH2 0x0e6a 00000e51: JUMPI 00000e52: PUSH1 0x40 00000e54: MLOAD 00000e55: PUSH4 0x605919ad 00000e5a: PUSH1 0xe1 00000e5c: SHL 00000e5d: DUP2 00000e5e: MSTORE 00000e5f: PUSH1 0x04 00000e61: ADD 00000e62: PUSH1 0x40 00000e64: MLOAD 00000e65: DUP1 00000e66: SWAP2 00000e67: SUB 00000e68: SWAP1 00000e69: REVERT 00000e6a: JUMPDEST 00000e6b: PUSH2 0x0e75 00000e6e: PUSH1 0x03 00000e70: DUP3 00000e71: PUSH2 0x1ac2 00000e74: JUMP 00000e75: JUMPDEST 00000e76: PUSH2 0x0c40 00000e79: JUMPI 00000e7a: PUSH2 0x0e84 00000e7d: PUSH1 0x03 00000e7f: DUP3 00000e80: PUSH2 0x1bc6 00000e83: JUMP 00000e84: JUMPDEST 00000e85: POP 00000e86: PUSH1 0x40 00000e88: MLOAD 00000e89: PUSH1 0x01 00000e8b: PUSH1 0x01 00000e8d: PUSH1 0xa0 00000e8f: SHL 00000e90: SUB 00000e91: DUP3 00000e92: AND 00000e93: DUP2 00000e94: MSTORE 00000e95: PUSH32 0x3f008fd510eae7a9e7bee13513d7b83bef8003d488b5a3d0b0da4de71d6846f1 00000eb6: SWAP1 00000eb7: PUSH1 0x20 00000eb9: ADD 00000eba: PUSH2 0x0c37 00000ebd: JUMP 00000ebe: JUMPDEST 00000ebf: DUP2 00000ec0: DUP1 00000ec1: ISZERO 00000ec2: DUP1 00000ec3: ISZERO 00000ec4: SWAP1 00000ec5: PUSH2 0x0edc 00000ec8: JUMPI 00000ec9: POP 00000eca: PUSH1 0x00 00000ecc: DUP1 00000ecd: MLOAD 00000ece: PUSH1 0x20 00000ed0: PUSH2 0x2793 00000ed3: DUP4 00000ed4: CODECOPY 00000ed5: DUP2 00000ed6: MLOAD 00000ed7: SWAP2 00000ed8: MSTORE 00000ed9: DUP2 00000eda: EQ 00000edb: ISZERO 00000edc: JUMPDEST 00000edd: DUP1 00000ede: ISZERO 00000edf: PUSH2 0x0ef6 00000ee2: JUMPI 00000ee3: POP 00000ee4: PUSH1 0x00 00000ee6: DUP1 00000ee7: MLOAD 00000ee8: PUSH1 0x20 00000eea: PUSH2 0x27d3 00000eed: DUP4 00000eee: CODECOPY 00000eef: DUP2 00000ef0: MLOAD 00000ef1: SWAP2 00000ef2: MSTORE 00000ef3: DUP2 00000ef4: EQ 00000ef5: ISZERO 00000ef6: JUMPDEST 00000ef7: DUP1 00000ef8: ISZERO 00000ef9: PUSH2 0x0f10 00000efc: JUMPI 00000efd: POP 00000efe: PUSH1 0x00 00000f00: DUP1 00000f01: MLOAD 00000f02: PUSH1 0x20 00000f04: PUSH2 0x27b3 00000f07: DUP4 00000f08: CODECOPY 00000f09: DUP2 00000f0a: MLOAD 00000f0b: SWAP2 00000f0c: MSTORE 00000f0d: DUP2 00000f0e: EQ 00000f0f: ISZERO 00000f10: JUMPDEST 00000f11: DUP1 00000f12: ISZERO 00000f13: PUSH2 0x0f2a 00000f16: JUMPI 00000f17: POP 00000f18: PUSH1 0x00 00000f1a: DUP1 00000f1b: MLOAD 00000f1c: PUSH1 0x20 00000f1e: PUSH2 0x27f3 00000f21: DUP4 00000f22: CODECOPY 00000f23: DUP2 00000f24: MLOAD 00000f25: SWAP2 00000f26: MSTORE 00000f27: DUP2 00000f28: EQ 00000f29: ISZERO 00000f2a: JUMPDEST 00000f2b: ISZERO 00000f2c: PUSH2 0x0f4b 00000f2f: JUMPI 00000f30: PUSH1 0x40 00000f32: MLOAD 00000f33: PUSH4 0x125a2bb7 00000f38: PUSH1 0xe0 00000f3a: SHL 00000f3b: DUP2 00000f3c: MSTORE 00000f3d: PUSH1 0x04 00000f3f: DUP2 00000f40: ADD 00000f41: DUP3 00000f42: SWAP1 00000f43: MSTORE 00000f44: PUSH1 0x24 00000f46: ADD 00000f47: PUSH2 0x094f 00000f4a: JUMP 00000f4b: JUMPDEST 00000f4c: PUSH2 0x0e30 00000f4f: DUP4 00000f50: DUP4 00000f51: PUSH2 0x1bdb 00000f54: JUMP 00000f55: JUMPDEST 00000f56: PUSH1 0x01 00000f58: PUSH1 0x01 00000f5a: PUSH1 0xa0 00000f5c: SHL 00000f5d: SUB 00000f5e: DUP2 00000f5f: AND 00000f60: CALLER 00000f61: EQ 00000f62: PUSH2 0x0f7e 00000f65: JUMPI 00000f66: PUSH1 0x40 00000f68: MLOAD 00000f69: PUSH4 0x334bd919 00000f6e: PUSH1 0xe1 00000f70: SHL 00000f71: DUP2 00000f72: MSTORE 00000f73: PUSH1 0x04 00000f75: ADD 00000f76: PUSH1 0x40 00000f78: MLOAD 00000f79: DUP1 00000f7a: SWAP2 00000f7b: SUB 00000f7c: SWAP1 00000f7d: REVERT 00000f7e: JUMPDEST 00000f7f: PUSH2 0x0e30 00000f82: DUP3 00000f83: DUP3 00000f84: PUSH2 0x1c00 00000f87: JUMP 00000f88: JUMPDEST 00000f89: PUSH1 0x00 00000f8b: PUSH2 0x0800 00000f8e: PUSH1 0x03 00000f90: DUP4 00000f91: PUSH2 0x1ac2 00000f94: JUMP 00000f95: JUMPDEST 00000f96: PUSH1 0x60 00000f98: PUSH2 0x0fa1 00000f9b: PUSH1 0x03 00000f9d: PUSH2 0x1c35 00000fa0: JUMP 00000fa1: JUMPDEST 00000fa2: SWAP1 00000fa3: POP 00000fa4: SWAP1 00000fa5: JUMP 00000fa6: JUMPDEST 00000fa7: PUSH2 0x0fbe 00000faa: PUSH1 0x00 00000fac: DUP1 00000fad: MLOAD 00000fae: PUSH1 0x20 00000fb0: PUSH2 0x2793 00000fb3: DUP4 00000fb4: CODECOPY 00000fb5: DUP2 00000fb6: MLOAD 00000fb7: SWAP2 00000fb8: MSTORE 00000fb9: CALLER 00000fba: PUSH2 0x1225 00000fbd: JUMP 00000fbe: JUMPDEST 00000fbf: PUSH2 0x0fdb 00000fc2: JUMPI 00000fc3: PUSH1 0x40 00000fc5: MLOAD 00000fc6: PUSH4 0x605919ad 00000fcb: PUSH1 0xe1 00000fcd: SHL 00000fce: DUP2 00000fcf: MSTORE 00000fd0: PUSH1 0x04 00000fd2: ADD 00000fd3: PUSH1 0x40 00000fd5: MLOAD 00000fd6: DUP1 00000fd7: SWAP2 00000fd8: SUB 00000fd9: SWAP1 00000fda: REVERT 00000fdb: JUMPDEST 00000fdc: PUSH2 0x0fe6 00000fdf: PUSH1 0x05 00000fe1: DUP3 00000fe2: PUSH2 0x1ac2 00000fe5: JUMP 00000fe6: JUMPDEST 00000fe7: ISZERO 00000fe8: PUSH2 0x0c40 00000feb: JUMPI 00000fec: PUSH2 0x0ff6 00000fef: PUSH1 0x05 00000ff1: DUP3 00000ff2: PUSH2 0x1b43 00000ff5: JUMP 00000ff6: JUMPDEST 00000ff7: POP 00000ff8: PUSH1 0x40 00000ffa: MLOAD 00000ffb: PUSH1 0x01 00000ffd: PUSH1 0x01 00000fff: PUSH1 0xa0 00001001: SHL 00001002: SUB 00001003: DUP3 00001004: AND 00001005: DUP2 00001006: MSTORE 00001007: PUSH32 0x4c910b69fe65a61f7531b9c5042b2329ca7179c77290aa7e2eb3afa3c8511fd3 00001028: SWAP1 00001029: PUSH1 0x20 0000102b: ADD 0000102c: PUSH2 0x0c37 0000102f: JUMP 00001030: JUMPDEST 00001031: PUSH1 0x00 00001033: PUSH2 0x0800 00001036: PUSH1 0x0c 00001038: DUP4 00001039: PUSH2 0x1ac2 0000103c: JUMP 0000103d: JUMPDEST 0000103e: PUSH1 0x00 00001040: PUSH2 0x104a 00001043: PUSH1 0x09 00001045: DUP4 00001046: PUSH2 0x1b58 00001049: JUMP 0000104a: JUMPDEST 0000104b: SWAP4 0000104c: SWAP3 0000104d: POP 0000104e: POP 0000104f: POP 00001050: JUMP 00001051: JUMPDEST 00001052: PUSH1 0x60 00001054: PUSH2 0x0fa1 00001057: PUSH1 0x05 00001059: PUSH2 0x1c35 0000105c: JUMP 0000105d: JUMPDEST 0000105e: PUSH1 0x00 00001060: PUSH2 0x0800 00001063: PUSH1 0x07 00001065: DUP4 00001066: PUSH2 0x1ac2 00001069: JUMP 0000106a: JUMPDEST 0000106b: PUSH1 0x60 0000106d: PUSH2 0x0fa1 00001070: PUSH1 0x07 00001072: PUSH2 0x1c35 00001075: JUMP 00001076: JUMPDEST 00001077: PUSH2 0x108e 0000107a: PUSH1 0x00 0000107c: DUP1 0000107d: MLOAD 0000107e: PUSH1 0x20 00001080: PUSH2 0x2793 00001083: DUP4 00001084: CODECOPY 00001085: DUP2 00001086: MLOAD 00001087: SWAP2 00001088: MSTORE 00001089: CALLER 0000108a: PUSH2 0x1225 0000108d: JUMP 0000108e: JUMPDEST 0000108f: PUSH2 0x10ab 00001092: JUMPI 00001093: PUSH1 0x40 00001095: MLOAD 00001096: PUSH4 0x605919ad 0000109b: PUSH1 0xe1 0000109d: SHL 0000109e: DUP2 0000109f: MSTORE 000010a0: PUSH1 0x04 000010a2: ADD 000010a3: PUSH1 0x40 000010a5: MLOAD 000010a6: DUP1 000010a7: SWAP2 000010a8: SUB 000010a9: SWAP1 000010aa: REVERT 000010ab: JUMPDEST 000010ac: PUSH2 0x10b6 000010af: PUSH1 0x0c 000010b1: DUP3 000010b2: PUSH2 0x1ac2 000010b5: JUMP 000010b6: JUMPDEST 000010b7: ISZERO 000010b8: PUSH2 0x0c40 000010bb: JUMPI 000010bc: PUSH2 0x10c6 000010bf: PUSH1 0x0c 000010c1: DUP3 000010c2: PUSH2 0x1b43 000010c5: JUMP 000010c6: JUMPDEST 000010c7: POP 000010c8: PUSH1 0x40 000010ca: MLOAD 000010cb: PUSH1 0x01 000010cd: PUSH1 0x01 000010cf: PUSH1 0xa0 000010d1: SHL 000010d2: SUB 000010d3: DUP3 000010d4: AND 000010d5: DUP2 000010d6: MSTORE 000010d7: PUSH32 0xab8cff50266d80b9c9d9703af934ca455b9218286bf4fcaa05653a564c499e4b 000010f8: SWAP1 000010f9: PUSH1 0x20 000010fb: ADD 000010fc: PUSH2 0x0c37 000010ff: JUMP 00001100: JUMPDEST 00001101: PUSH1 0x00 00001103: DUP3 00001104: DUP2 00001105: MSTORE 00001106: PUSH1 0x01 00001108: PUSH1 0x20 0000110a: MSTORE 0000110b: PUSH1 0x40 0000110d: DUP2 0000110e: KECCAK256 0000110f: PUSH2 0x104a 00001112: SWAP1 00001113: DUP4 00001114: PUSH2 0x1c42 00001117: JUMP 00001118: JUMPDEST 00001119: PUSH2 0x1130 0000111c: PUSH1 0x00 0000111e: DUP1 0000111f: MLOAD 00001120: PUSH1 0x20 00001122: PUSH2 0x27b3 00001125: DUP4 00001126: CODECOPY 00001127: DUP2 00001128: MLOAD 00001129: SWAP2 0000112a: MSTORE 0000112b: CALLER 0000112c: PUSH2 0x1225 0000112f: JUMP 00001130: JUMPDEST 00001131: PUSH2 0x114d 00001134: JUMPI 00001135: PUSH1 0x40 00001137: MLOAD 00001138: PUSH4 0x897e65bd 0000113d: PUSH1 0xe0 0000113f: SHL 00001140: DUP2 00001141: MSTORE 00001142: PUSH1 0x04 00001144: ADD 00001145: PUSH1 0x40 00001147: MLOAD 00001148: DUP1 00001149: SWAP2 0000114a: SUB 0000114b: SWAP1 0000114c: REVERT 0000114d: JUMPDEST 0000114e: DUP1 0000114f: SELFBALANCE 00001150: LT 00001151: ISZERO 00001152: PUSH2 0x1177 00001155: JUMPI 00001156: PUSH1 0x40 00001158: MLOAD 00001159: PUSH4 0x4787a103 0000115e: PUSH1 0xe1 00001160: SHL 00001161: DUP2 00001162: MSTORE 00001163: SELFBALANCE 00001164: PUSH1 0x04 00001166: DUP3 00001167: ADD 00001168: MSTORE 00001169: PUSH1 0x24 0000116b: DUP2 0000116c: ADD 0000116d: DUP3 0000116e: SWAP1 0000116f: MSTORE 00001170: PUSH1 0x44 00001172: ADD 00001173: PUSH2 0x094f 00001176: JUMP 00001177: JUMPDEST 00001178: PUSH1 0x02 0000117a: PUSH1 0x00 0000117c: SWAP1 0000117d: SLOAD 0000117e: SWAP1 0000117f: PUSH2 0x0100 00001182: EXP 00001183: SWAP1 00001184: DIV 00001185: PUSH1 0x01 00001187: PUSH1 0x01 00001189: PUSH1 0xa0 0000118b: SHL 0000118c: SUB 0000118d: AND 0000118e: PUSH1 0x01 00001190: PUSH1 0x01 00001192: PUSH1 0xa0 00001194: SHL 00001195: SUB 00001196: AND 00001197: PUSH4 0xd0e30db0 0000119c: DUP3 0000119d: PUSH1 0x40 0000119f: MLOAD 000011a0: DUP3 000011a1: PUSH4 0xffffffff 000011a6: AND 000011a7: PUSH1 0xe0 000011a9: SHL 000011aa: DUP2 000011ab: MSTORE 000011ac: PUSH1 0x04 000011ae: ADD 000011af: PUSH1 0x00 000011b1: PUSH1 0x40 000011b3: MLOAD 000011b4: DUP1 000011b5: DUP4 000011b6: SUB 000011b7: DUP2 000011b8: DUP6 000011b9: DUP9 000011ba: DUP1 000011bb: EXTCODESIZE 000011bc: ISZERO 000011bd: DUP1 000011be: ISZERO 000011bf: PUSH2 0x11c7 000011c2: JUMPI 000011c3: PUSH1 0x00 000011c5: DUP1 000011c6: REVERT 000011c7: JUMPDEST 000011c8: POP 000011c9: GAS 000011ca: CALL 000011cb: ISZERO 000011cc: DUP1 000011cd: ISZERO 000011ce: PUSH2 0x11db 000011d1: JUMPI 000011d2: RETURNDATASIZE 000011d3: PUSH1 0x00 000011d5: DUP1 000011d6: RETURNDATACOPY 000011d7: RETURNDATASIZE 000011d8: PUSH1 0x00 000011da: REVERT 000011db: JUMPDEST 000011dc: POP 000011dd: POP 000011de: PUSH1 0x02 000011e0: SLOAD 000011e1: PUSH1 0x40 000011e3: DUP1 000011e4: MLOAD 000011e5: PUSH1 0x01 000011e7: PUSH1 0x01 000011e9: PUSH1 0xa0 000011eb: SHL 000011ec: SUB 000011ed: SWAP1 000011ee: SWAP3 000011ef: AND 000011f0: DUP3 000011f1: MSTORE 000011f2: PUSH1 0x20 000011f4: DUP3 000011f5: ADD 000011f6: DUP7 000011f7: SWAP1 000011f8: MSTORE 000011f9: PUSH32 0x2c58f4d3d48c3b93bf8f7fd23f32658ccb97894f02022d2189ffa9903d37bfb8 0000121a: SWAP5 0000121b: POP 0000121c: ADD 0000121d: SWAP2 0000121e: POP 0000121f: PUSH2 0x0c37 00001222: SWAP1 00001223: POP 00001224: JUMP 00001225: JUMPDEST 00001226: PUSH1 0x00 00001228: SWAP2 00001229: DUP3 0000122a: MSTORE 0000122b: PUSH1 0x20 0000122d: DUP3 0000122e: DUP2 0000122f: MSTORE 00001230: PUSH1 0x40 00001232: DUP1 00001233: DUP5 00001234: KECCAK256 00001235: PUSH1 0x01 00001237: PUSH1 0x01 00001239: PUSH1 0xa0 0000123b: SHL 0000123c: SUB 0000123d: SWAP4 0000123e: SWAP1 0000123f: SWAP4 00001240: AND 00001241: DUP5 00001242: MSTORE 00001243: SWAP2 00001244: SWAP1 00001245: MSTORE 00001246: SWAP1 00001247: KECCAK256 00001248: SLOAD 00001249: PUSH1 0xff 0000124b: AND 0000124c: SWAP1 0000124d: JUMP 0000124e: JUMPDEST 0000124f: PUSH1 0x60 00001251: PUSH1 0x00 00001253: PUSH2 0x125c 00001256: PUSH1 0x09 00001258: PUSH2 0x1a66 0000125b: JUMP 0000125c: JUMPDEST 0000125d: SWAP1 0000125e: POP 0000125f: PUSH1 0x00 00001261: DUP2 00001262: PUSH8 0xffffffffffffffff 0000126b: DUP2 0000126c: GT 0000126d: ISZERO 0000126e: PUSH2 0x1279 00001271: JUMPI 00001272: PUSH2 0x1279 00001275: PUSH2 0x26af 00001278: JUMP 00001279: JUMPDEST 0000127a: PUSH1 0x40 0000127c: MLOAD 0000127d: SWAP1 0000127e: DUP1 0000127f: DUP3 00001280: MSTORE 00001281: DUP1 00001282: PUSH1 0x20 00001284: MUL 00001285: PUSH1 0x20 00001287: ADD 00001288: DUP3 00001289: ADD 0000128a: PUSH1 0x40 0000128c: MSTORE 0000128d: DUP1 0000128e: ISZERO 0000128f: PUSH2 0x12be 00001292: JUMPI 00001293: DUP2 00001294: PUSH1 0x20 00001296: ADD 00001297: JUMPDEST 00001298: PUSH1 0x40 0000129a: DUP1 0000129b: MLOAD 0000129c: DUP1 0000129d: DUP3 0000129e: ADD 0000129f: SWAP1 000012a0: SWAP2 000012a1: MSTORE 000012a2: PUSH1 0x00 000012a4: DUP1 000012a5: DUP3 000012a6: MSTORE 000012a7: PUSH1 0x20 000012a9: DUP3 000012aa: ADD 000012ab: MSTORE 000012ac: DUP2 000012ad: MSTORE 000012ae: PUSH1 0x20 000012b0: ADD 000012b1: SWAP1 000012b2: PUSH1 0x01 000012b4: SWAP1 000012b5: SUB 000012b6: SWAP1 000012b7: DUP2 000012b8: PUSH2 0x1297 000012bb: JUMPI 000012bc: SWAP1 000012bd: POP 000012be: JUMPDEST 000012bf: POP 000012c0: SWAP1 000012c1: POP 000012c2: PUSH1 0x00 000012c4: JUMPDEST 000012c5: DUP3 000012c6: DUP2 000012c7: LT 000012c8: ISZERO 000012c9: PUSH2 0x08db 000012cc: JUMPI 000012cd: PUSH1 0x00 000012cf: DUP1 000012d0: PUSH2 0x12da 000012d3: PUSH1 0x09 000012d5: DUP5 000012d6: PUSH2 0x1a71 000012d9: JUMP 000012da: JUMPDEST 000012db: SWAP2 000012dc: POP 000012dd: SWAP2 000012de: POP 000012df: PUSH1 0x40 000012e1: MLOAD 000012e2: DUP1 000012e3: PUSH1 0x40 000012e5: ADD 000012e6: PUSH1 0x40 000012e8: MSTORE 000012e9: DUP1 000012ea: DUP4 000012eb: PUSH1 0x01 000012ed: PUSH1 0x01 000012ef: PUSH1 0xa0 000012f1: SHL 000012f2: SUB 000012f3: AND 000012f4: DUP2 000012f5: MSTORE 000012f6: PUSH1 0x20 000012f8: ADD 000012f9: DUP3 000012fa: DUP2 000012fb: MSTORE 000012fc: POP 000012fd: DUP5 000012fe: DUP5 000012ff: DUP2 00001300: MLOAD 00001301: DUP2 00001302: LT 00001303: PUSH2 0x130e 00001306: JUMPI 00001307: PUSH2 0x130e 0000130a: PUSH2 0x26c5 0000130d: JUMP 0000130e: JUMPDEST 0000130f: PUSH1 0x20 00001311: SWAP1 00001312: DUP2 00001313: MUL 00001314: SWAP2 00001315: SWAP1 00001316: SWAP2 00001317: ADD 00001318: ADD 00001319: MSTORE 0000131a: POP 0000131b: POP 0000131c: PUSH1 0x01 0000131e: ADD 0000131f: PUSH2 0x12c4 00001322: JUMP 00001323: JUMPDEST 00001324: PUSH1 0x60 00001326: PUSH2 0x0fa1 00001329: PUSH1 0x0c 0000132b: PUSH2 0x1c35 0000132e: JUMP 0000132f: JUMPDEST 00001330: PUSH1 0x00 00001332: DUP2 00001333: DUP2 00001334: MSTORE 00001335: PUSH1 0x01 00001337: PUSH1 0x20 00001339: MSTORE 0000133a: PUSH1 0x40 0000133c: DUP2 0000133d: KECCAK256 0000133e: PUSH2 0x0800 00001341: SWAP1 00001342: PUSH2 0x1c4e 00001345: JUMP 00001346: JUMPDEST 00001347: PUSH2 0x135e 0000134a: PUSH1 0x00 0000134c: DUP1 0000134d: MLOAD 0000134e: PUSH1 0x20 00001350: PUSH2 0x2793 00001353: DUP4 00001354: CODECOPY 00001355: DUP2 00001356: MLOAD 00001357: SWAP2 00001358: MSTORE 00001359: CALLER 0000135a: PUSH2 0x1225 0000135d: JUMP 0000135e: JUMPDEST 0000135f: PUSH2 0x137b 00001362: JUMPI 00001363: PUSH1 0x40 00001365: MLOAD 00001366: PUSH4 0x605919ad 0000136b: PUSH1 0xe1 0000136d: SHL 0000136e: DUP2 0000136f: MSTORE 00001370: PUSH1 0x04 00001372: ADD 00001373: PUSH1 0x40 00001375: MLOAD 00001376: DUP1 00001377: SWAP2 00001378: SUB 00001379: SWAP1 0000137a: REVERT 0000137b: JUMPDEST 0000137c: PUSH2 0x1384 0000137f: DUP3 00001380: PUSH2 0x1a8f 00001383: JUMP 00001384: JUMPDEST 00001385: PUSH1 0x00 00001387: PUSH2 0x1391 0000138a: PUSH1 0x09 0000138c: DUP5 0000138d: PUSH2 0x1b58 00001390: JUMP 00001391: JUMPDEST 00001392: SWAP2 00001393: POP 00001394: POP 00001395: DUP1 00001396: DUP3 00001397: SUB 00001398: PUSH2 0x13a0 0000139b: JUMPI 0000139c: POP 0000139d: POP 0000139e: POP 0000139f: JUMP 000013a0: JUMPDEST 000013a1: DUP2 000013a2: PUSH1 0x00 000013a4: SUB 000013a5: PUSH2 0x13b9 000013a8: JUMPI 000013a9: PUSH2 0x13b3 000013ac: PUSH1 0x09 000013ae: DUP5 000013af: PUSH2 0x1b70 000013b2: JUMP 000013b3: JUMPDEST 000013b4: POP 000013b5: PUSH2 0x13c7 000013b8: JUMP 000013b9: JUMPDEST 000013ba: PUSH2 0x13c5 000013bd: PUSH1 0x09 000013bf: DUP5 000013c0: DUP5 000013c1: PUSH2 0x1b85 000013c4: JUMP 000013c5: JUMPDEST 000013c6: POP 000013c7: JUMPDEST 000013c8: PUSH1 0x40 000013ca: DUP1 000013cb: MLOAD 000013cc: PUSH1 0x01 000013ce: PUSH1 0x01 000013d0: PUSH1 0xa0 000013d2: SHL 000013d3: SUB 000013d4: DUP6 000013d5: AND 000013d6: DUP2 000013d7: MSTORE 000013d8: PUSH1 0x20 000013da: DUP2 000013db: ADD 000013dc: DUP4 000013dd: SWAP1 000013de: MSTORE 000013df: SWAP1 000013e0: DUP2 000013e1: ADD 000013e2: DUP4 000013e3: SWAP1 000013e4: MSTORE 000013e5: PUSH32 0x5a257baf8d7726a03c0e1fb5ddaa5b77d339332901e52d15169d56442a381c12 00001406: SWAP1 00001407: PUSH1 0x60 00001409: ADD 0000140a: PUSH2 0x0cf0 0000140d: JUMP 0000140e: JUMPDEST 0000140f: PUSH2 0x1426 00001412: PUSH1 0x00 00001414: DUP1 00001415: MLOAD 00001416: PUSH1 0x20 00001418: PUSH2 0x2793 0000141b: DUP4 0000141c: CODECOPY 0000141d: DUP2 0000141e: MLOAD 0000141f: SWAP2 00001420: MSTORE 00001421: CALLER 00001422: PUSH2 0x1225 00001425: JUMP 00001426: JUMPDEST 00001427: PUSH2 0x1443 0000142a: JUMPI 0000142b: PUSH1 0x40 0000142d: MLOAD 0000142e: PUSH4 0x605919ad 00001433: PUSH1 0xe1 00001435: SHL 00001436: DUP2 00001437: MSTORE 00001438: PUSH1 0x04 0000143a: ADD 0000143b: PUSH1 0x40 0000143d: MLOAD 0000143e: DUP1 0000143f: SWAP2 00001440: SUB 00001441: SWAP1 00001442: REVERT 00001443: JUMPDEST 00001444: PUSH2 0x144e 00001447: PUSH1 0x05 00001449: DUP3 0000144a: PUSH2 0x1ac2 0000144d: JUMP 0000144e: JUMPDEST 0000144f: PUSH2 0x0c40 00001452: JUMPI 00001453: PUSH2 0x145d 00001456: PUSH1 0x05 00001458: DUP3 00001459: PUSH2 0x1bc6 0000145c: JUMP 0000145d: JUMPDEST 0000145e: POP 0000145f: PUSH1 0x40 00001461: MLOAD 00001462: PUSH1 0x01 00001464: PUSH1 0x01 00001466: PUSH1 0xa0 00001468: SHL 00001469: SUB 0000146a: DUP3 0000146b: AND 0000146c: DUP2 0000146d: MSTORE 0000146e: PUSH32 0x784c8f4dbf0ffedd6e72c76501c545a70f8b203b30a26ce542bf92ba87c248a4 0000148f: SWAP1 00001490: PUSH1 0x20 00001492: ADD 00001493: PUSH2 0x0c37 00001496: JUMP 00001497: JUMPDEST 00001498: PUSH1 0x00 0000149a: DUP3 0000149b: DUP2 0000149c: MSTORE 0000149d: PUSH1 0x20 0000149f: DUP2 000014a0: SWAP1 000014a1: MSTORE 000014a2: PUSH1 0x40 000014a4: SWAP1 000014a5: KECCAK256 000014a6: PUSH1 0x01 000014a8: ADD 000014a9: SLOAD 000014aa: PUSH2 0x14b2 000014ad: DUP2 000014ae: PUSH2 0x1c58 000014b1: JUMP 000014b2: JUMPDEST 000014b3: PUSH2 0x14bc 000014b6: DUP4 000014b7: DUP4 000014b8: PUSH2 0x1c00 000014bb: JUMP 000014bc: JUMPDEST 000014bd: POP 000014be: POP 000014bf: POP 000014c0: POP 000014c1: JUMP 000014c2: JUMPDEST 000014c3: PUSH2 0x14da 000014c6: PUSH1 0x00 000014c8: DUP1 000014c9: MLOAD 000014ca: PUSH1 0x20 000014cc: PUSH2 0x27f3 000014cf: DUP4 000014d0: CODECOPY 000014d1: DUP2 000014d2: MLOAD 000014d3: SWAP2 000014d4: MSTORE 000014d5: CALLER 000014d6: PUSH2 0x1225 000014d9: JUMP 000014da: JUMPDEST 000014db: PUSH2 0x14f7 000014de: JUMPI 000014df: PUSH1 0x40 000014e1: MLOAD 000014e2: PUSH4 0x1966c8a5 000014e7: PUSH1 0xe0 000014e9: SHL 000014ea: DUP2 000014eb: MSTORE 000014ec: PUSH1 0x04 000014ee: ADD 000014ef: PUSH1 0x40 000014f1: MLOAD 000014f2: DUP1 000014f3: SWAP2 000014f4: SUB 000014f5: SWAP1 000014f6: REVERT 000014f7: JUMPDEST 000014f8: PUSH2 0x1500 000014fb: DUP5 000014fc: PUSH2 0x1a8f 000014ff: JUMP 00001500: JUMPDEST 00001501: PUSH2 0x150b 00001504: PUSH1 0x07 00001506: DUP4 00001507: PUSH2 0x1ac2 0000150a: JUMP 0000150b: JUMPDEST 0000150c: PUSH2 0x1533 0000150f: JUMPI 00001510: PUSH1 0x40 00001512: MLOAD 00001513: PUSH4 0xa787604b 00001518: PUSH1 0xe0 0000151a: SHL 0000151b: DUP2 0000151c: MSTORE 0000151d: PUSH1 0x01 0000151f: PUSH1 0x01 00001521: PUSH1 0xa0 00001523: SHL 00001524: SUB 00001525: DUP4 00001526: AND 00001527: PUSH1 0x04 00001529: DUP3 0000152a: ADD 0000152b: MSTORE 0000152c: PUSH1 0x24 0000152e: ADD 0000152f: PUSH2 0x094f 00001532: JUMP 00001533: JUMPDEST 00001534: PUSH1 0x00 00001536: PUSH2 0x1540 00001539: PUSH1 0x09 0000153b: DUP7 0000153c: PUSH2 0x1b58 0000153f: JUMP 00001540: JUMPDEST 00001541: SWAP2 00001542: POP 00001543: POP 00001544: DUP4 00001545: DUP2 00001546: LT 00001547: ISZERO 00001548: PUSH2 0x156e 0000154b: JUMPI 0000154c: PUSH1 0x40 0000154e: MLOAD 0000154f: PUSH4 0x086e2197 00001554: PUSH1 0xe1 00001556: SHL 00001557: DUP2 00001558: MSTORE 00001559: PUSH1 0x04 0000155b: DUP2 0000155c: ADD 0000155d: DUP3 0000155e: SWAP1 0000155f: MSTORE 00001560: PUSH1 0x24 00001562: DUP2 00001563: ADD 00001564: DUP6 00001565: SWAP1 00001566: MSTORE 00001567: PUSH1 0x44 00001569: ADD 0000156a: PUSH2 0x094f 0000156d: JUMP 0000156e: JUMPDEST 0000156f: PUSH1 0x00 00001571: PUSH2 0x157b 00001574: PUSH1 0x11 00001576: DUP8 00001577: PUSH2 0x1b58 0000157a: JUMP 0000157b: JUMPDEST 0000157c: SWAP2 0000157d: POP 0000157e: PUSH1 0x00 00001580: SWAP1 00001581: POP 00001582: DUP1 00001583: PUSH2 0x158d 00001586: PUSH1 0x0e 00001588: DUP10 00001589: PUSH2 0x1b58 0000158c: JUMP 0000158d: JUMPDEST 0000158e: SWAP1 0000158f: SWAP3 00001590: POP 00001591: SWAP1 00001592: POP 00001593: PUSH2 0x159c 00001596: DUP2 00001597: DUP5 00001598: PUSH2 0x2739 0000159b: JUMP 0000159c: JUMPDEST 0000159d: TIMESTAMP 0000159e: GT 0000159f: DUP1 000015a0: ISZERO 000015a1: PUSH2 0x15a7 000015a4: JUMPI 000015a5: POP 000015a6: DUP2 000015a7: JUMPDEST 000015a8: PUSH2 0x15ce 000015ab: JUMPI 000015ac: PUSH1 0x40 000015ae: MLOAD 000015af: PUSH4 0x0722e4a1 000015b4: PUSH1 0xe5 000015b6: SHL 000015b7: DUP2 000015b8: MSTORE 000015b9: PUSH1 0x04 000015bb: DUP2 000015bc: ADD 000015bd: DUP5 000015be: SWAP1 000015bf: MSTORE 000015c0: PUSH1 0x24 000015c2: DUP2 000015c3: ADD 000015c4: DUP3 000015c5: SWAP1 000015c6: MSTORE 000015c7: PUSH1 0x44 000015c9: ADD 000015ca: PUSH2 0x094f 000015cd: JUMP 000015ce: JUMPDEST 000015cf: PUSH1 0x40 000015d1: MLOAD 000015d2: PUSH4 0x70a08231 000015d7: PUSH1 0xe0 000015d9: SHL 000015da: DUP2 000015db: MSTORE 000015dc: ADDRESS 000015dd: PUSH1 0x04 000015df: DUP3 000015e0: ADD 000015e1: MSTORE 000015e2: DUP9 000015e3: SWAP1 000015e4: PUSH1 0x00 000015e6: SWAP1 000015e7: PUSH1 0x01 000015e9: PUSH1 0x01 000015eb: PUSH1 0xa0 000015ed: SHL 000015ee: SUB 000015ef: DUP4 000015f0: AND 000015f1: SWAP1 000015f2: PUSH4 0x70a08231 000015f7: SWAP1 000015f8: PUSH1 0x24 000015fa: ADD 000015fb: PUSH1 0x20 000015fd: PUSH1 0x40 000015ff: MLOAD 00001600: DUP1 00001601: DUP4 00001602: SUB 00001603: DUP2 00001604: DUP7 00001605: GAS 00001606: STATICCALL 00001607: ISZERO 00001608: DUP1 00001609: ISZERO 0000160a: PUSH2 0x1617 0000160d: JUMPI 0000160e: RETURNDATASIZE 0000160f: PUSH1 0x00 00001611: DUP1 00001612: RETURNDATACOPY 00001613: RETURNDATASIZE 00001614: PUSH1 0x00 00001616: REVERT 00001617: JUMPDEST 00001618: POP 00001619: POP 0000161a: POP 0000161b: POP 0000161c: PUSH1 0x40 0000161e: MLOAD 0000161f: RETURNDATASIZE 00001620: PUSH1 0x1f 00001622: NOT 00001623: PUSH1 0x1f 00001625: DUP3 00001626: ADD 00001627: AND 00001628: DUP3 00001629: ADD 0000162a: DUP1 0000162b: PUSH1 0x40 0000162d: MSTORE 0000162e: POP 0000162f: DUP2 00001630: ADD 00001631: SWAP1 00001632: PUSH2 0x163b 00001635: SWAP2 00001636: SWAP1 00001637: PUSH2 0x270a 0000163a: JUMP 0000163b: JUMPDEST 0000163c: SWAP1 0000163d: POP 0000163e: DUP9 0000163f: DUP2 00001640: LT 00001641: ISZERO 00001642: PUSH2 0x1668 00001645: JUMPI 00001646: PUSH1 0x40 00001648: MLOAD 00001649: PUSH4 0x4787a103 0000164e: PUSH1 0xe1 00001650: SHL 00001651: DUP2 00001652: MSTORE 00001653: PUSH1 0x04 00001655: DUP2 00001656: ADD 00001657: DUP3 00001658: SWAP1 00001659: MSTORE 0000165a: PUSH1 0x24 0000165c: DUP2 0000165d: ADD 0000165e: DUP11 0000165f: SWAP1 00001660: MSTORE 00001661: PUSH1 0x44 00001663: ADD 00001664: PUSH2 0x094f 00001667: JUMP 00001668: JUMPDEST 00001669: DUP7 0000166a: DUP1 0000166b: ISZERO 0000166c: PUSH2 0x1682 0000166f: JUMPI 00001670: POP 00001671: PUSH1 0x02 00001673: SLOAD 00001674: PUSH1 0x01 00001676: PUSH1 0x01 00001678: PUSH1 0xa0 0000167a: SHL 0000167b: SUB 0000167c: DUP12 0000167d: DUP2 0000167e: AND 0000167f: SWAP2 00001680: AND 00001681: EQ 00001682: JUMPDEST 00001683: ISZERO 00001684: PUSH2 0x171d 00001687: JUMPI 00001688: PUSH1 0x40 0000168a: MLOAD 0000168b: PUSH4 0x2e1a7d4d 00001690: PUSH1 0xe0 00001692: SHL 00001693: DUP2 00001694: MSTORE 00001695: PUSH1 0x04 00001697: DUP2 00001698: ADD 00001699: DUP11 0000169a: SWAP1 0000169b: MSTORE 0000169c: PUSH1 0x01 0000169e: PUSH1 0x01 000016a0: PUSH1 0xa0 000016a2: SHL 000016a3: SUB 000016a4: DUP12 000016a5: AND 000016a6: SWAP1 000016a7: PUSH4 0x2e1a7d4d 000016ac: SWAP1 000016ad: PUSH1 0x24 000016af: ADD 000016b0: PUSH1 0x00 000016b2: PUSH1 0x40 000016b4: MLOAD 000016b5: DUP1 000016b6: DUP4 000016b7: SUB 000016b8: DUP2 000016b9: PUSH1 0x00 000016bb: DUP8 000016bc: DUP1 000016bd: EXTCODESIZE 000016be: ISZERO 000016bf: DUP1 000016c0: ISZERO 000016c1: PUSH2 0x16c9 000016c4: JUMPI 000016c5: PUSH1 0x00 000016c7: DUP1 000016c8: REVERT 000016c9: JUMPDEST 000016ca: POP 000016cb: GAS 000016cc: CALL 000016cd: ISZERO 000016ce: DUP1 000016cf: ISZERO 000016d0: PUSH2 0x16dd 000016d3: JUMPI 000016d4: RETURNDATASIZE 000016d5: PUSH1 0x00 000016d7: DUP1 000016d8: RETURNDATACOPY 000016d9: RETURNDATASIZE 000016da: PUSH1 0x00 000016dc: REVERT 000016dd: JUMPDEST 000016de: POP 000016df: POP 000016e0: PUSH1 0x40 000016e2: MLOAD 000016e3: PUSH1 0x01 000016e5: PUSH1 0x01 000016e7: PUSH1 0xa0 000016e9: SHL 000016ea: SUB 000016eb: DUP12 000016ec: AND 000016ed: SWAP3 000016ee: POP 000016ef: DUP12 000016f0: ISZERO 000016f1: PUSH2 0x08fc 000016f4: MUL 000016f5: SWAP2 000016f6: POP 000016f7: DUP12 000016f8: SWAP1 000016f9: PUSH1 0x00 000016fb: DUP2 000016fc: DUP2 000016fd: DUP2 000016fe: DUP6 000016ff: DUP9 00001700: DUP9 00001701: CALL 00001702: SWAP4 00001703: POP 00001704: POP 00001705: POP 00001706: POP 00001707: ISZERO 00001708: DUP1 00001709: ISZERO 0000170a: PUSH2 0x1717 0000170d: JUMPI 0000170e: RETURNDATASIZE 0000170f: PUSH1 0x00 00001711: DUP1 00001712: RETURNDATACOPY 00001713: RETURNDATASIZE 00001714: PUSH1 0x00 00001716: REVERT 00001717: JUMPDEST 00001718: POP 00001719: PUSH2 0x1731 0000171c: JUMP 0000171d: JUMPDEST 0000171e: PUSH2 0x1731 00001721: PUSH1 0x01 00001723: PUSH1 0x01 00001725: PUSH1 0xa0 00001727: SHL 00001728: SUB 00001729: DUP12 0000172a: AND 0000172b: DUP10 0000172c: DUP12 0000172d: PUSH2 0x1ae4 00001730: JUMP 00001731: JUMPDEST 00001732: PUSH2 0x173d 00001735: PUSH1 0x11 00001737: DUP12 00001738: TIMESTAMP 00001739: PUSH2 0x1b85 0000173c: JUMP 0000173d: JUMPDEST 0000173e: POP 0000173f: PUSH1 0x40 00001741: DUP1 00001742: MLOAD 00001743: PUSH1 0x01 00001745: PUSH1 0x01 00001747: PUSH1 0xa0 00001749: SHL 0000174a: SUB 0000174b: DUP13 0000174c: DUP2 0000174d: AND 0000174e: DUP3 0000174f: MSTORE 00001750: PUSH1 0x20 00001752: DUP3 00001753: ADD 00001754: DUP13 00001755: SWAP1 00001756: MSTORE 00001757: DUP11 00001758: AND 00001759: DUP2 0000175a: DUP4 0000175b: ADD 0000175c: MSTORE 0000175d: DUP9 0000175e: ISZERO 0000175f: ISZERO 00001760: PUSH1 0x60 00001762: DUP3 00001763: ADD 00001764: MSTORE 00001765: SWAP1 00001766: MLOAD 00001767: PUSH32 0xf5a218c3f2e48fb71969f47c462c49a00473152fa2170938abd781982c93fca6 00001788: SWAP2 00001789: DUP2 0000178a: SWAP1 0000178b: SUB 0000178c: PUSH1 0x80 0000178e: ADD 0000178f: SWAP1 00001790: LOG1 00001791: POP 00001792: POP 00001793: POP 00001794: POP 00001795: POP 00001796: POP 00001797: POP 00001798: POP 00001799: POP 0000179a: POP 0000179b: JUMP 0000179c: JUMPDEST 0000179d: PUSH1 0x00 0000179f: DUP4 000017a0: DUP2 000017a1: MSTORE 000017a2: PUSH1 0x20 000017a4: DUP2 000017a5: SWAP1 000017a6: MSTORE 000017a7: PUSH1 0x40 000017a9: SWAP1 000017aa: KECCAK256 000017ab: PUSH1 0x01 000017ad: ADD 000017ae: SLOAD 000017af: PUSH2 0x17b7 000017b2: DUP2 000017b3: PUSH2 0x1c58 000017b6: JUMP 000017b7: JUMPDEST 000017b8: DUP4 000017b9: DUP1 000017ba: ISZERO 000017bb: DUP1 000017bc: ISZERO 000017bd: SWAP1 000017be: PUSH2 0x17d5 000017c1: JUMPI 000017c2: POP 000017c3: PUSH1 0x00 000017c5: DUP1 000017c6: MLOAD 000017c7: PUSH1 0x20 000017c9: PUSH2 0x2793 000017cc: DUP4 000017cd: CODECOPY 000017ce: DUP2 000017cf: MLOAD 000017d0: SWAP2 000017d1: MSTORE 000017d2: DUP2 000017d3: EQ 000017d4: ISZERO 000017d5: JUMPDEST 000017d6: DUP1 000017d7: ISZERO 000017d8: PUSH2 0x17ef 000017db: JUMPI 000017dc: POP 000017dd: PUSH1 0x00 000017df: DUP1 000017e0: MLOAD 000017e1: PUSH1 0x20 000017e3: PUSH2 0x27d3 000017e6: DUP4 000017e7: CODECOPY 000017e8: DUP2 000017e9: MLOAD 000017ea: SWAP2 000017eb: MSTORE 000017ec: DUP2 000017ed: EQ 000017ee: ISZERO 000017ef: JUMPDEST 000017f0: DUP1 000017f1: ISZERO 000017f2: PUSH2 0x1809 000017f5: JUMPI 000017f6: POP 000017f7: PUSH1 0x00 000017f9: DUP1 000017fa: MLOAD 000017fb: PUSH1 0x20 000017fd: PUSH2 0x27b3 00001800: DUP4 00001801: CODECOPY 00001802: DUP2 00001803: MLOAD 00001804: SWAP2 00001805: MSTORE 00001806: DUP2 00001807: EQ 00001808: ISZERO 00001809: JUMPDEST 0000180a: DUP1 0000180b: ISZERO 0000180c: PUSH2 0x1823 0000180f: JUMPI 00001810: POP 00001811: PUSH1 0x00 00001813: DUP1 00001814: MLOAD 00001815: PUSH1 0x20 00001817: PUSH2 0x27f3 0000181a: DUP4 0000181b: CODECOPY 0000181c: DUP2 0000181d: MLOAD 0000181e: SWAP2 0000181f: MSTORE 00001820: DUP2 00001821: EQ 00001822: ISZERO 00001823: JUMPDEST 00001824: ISZERO 00001825: PUSH2 0x1844 00001828: JUMPI 00001829: PUSH1 0x40 0000182b: MLOAD 0000182c: PUSH4 0x125a2bb7 00001831: PUSH1 0xe0 00001833: SHL 00001834: DUP2 00001835: MSTORE 00001836: PUSH1 0x04 00001838: DUP2 00001839: ADD 0000183a: DUP3 0000183b: SWAP1 0000183c: MSTORE 0000183d: PUSH1 0x24 0000183f: ADD 00001840: PUSH2 0x094f 00001843: JUMP 00001844: JUMPDEST 00001845: PUSH1 0x00 00001847: JUMPDEST 00001848: DUP4 00001849: DUP2 0000184a: LT 0000184b: ISZERO 0000184c: PUSH2 0x1882 0000184f: JUMPI 00001850: PUSH2 0x187a 00001853: DUP7 00001854: DUP7 00001855: DUP7 00001856: DUP5 00001857: DUP2 00001858: DUP2 00001859: LT 0000185a: PUSH2 0x1865 0000185d: JUMPI 0000185e: PUSH2 0x1865 00001861: PUSH2 0x26c5 00001864: JUMP 00001865: JUMPDEST 00001866: SWAP1 00001867: POP 00001868: PUSH1 0x20 0000186a: MUL 0000186b: ADD 0000186c: PUSH1 0x20 0000186e: DUP2 0000186f: ADD 00001870: SWAP1 00001871: PUSH2 0x0459 00001874: SWAP2 00001875: SWAP1 00001876: PUSH2 0x243a 00001879: JUMP 0000187a: JUMPDEST 0000187b: PUSH1 0x01 0000187d: ADD 0000187e: PUSH2 0x1847 00001881: JUMP 00001882: JUMPDEST 00001883: POP 00001884: POP 00001885: POP 00001886: POP 00001887: POP 00001888: POP 00001889: JUMP 0000188a: JUMPDEST 0000188b: CALLER 0000188c: ADDRESS 0000188d: EQ 0000188e: PUSH2 0x18ac 00001891: JUMPI 00001892: PUSH1 0x40 00001894: MLOAD 00001895: PUSH4 0x472511eb 0000189a: PUSH1 0xe1 0000189c: SHL 0000189d: DUP2 0000189e: MSTORE 0000189f: CALLER 000018a0: PUSH1 0x04 000018a2: DUP3 000018a3: ADD 000018a4: MSTORE 000018a5: PUSH1 0x24 000018a7: ADD 000018a8: PUSH2 0x094f 000018ab: JUMP 000018ac: JUMPDEST 000018ad: PUSH2 0x18b5 000018b0: DUP4 000018b1: PUSH2 0x1a8f 000018b4: JUMP 000018b5: JUMPDEST 000018b6: PUSH2 0x18c0 000018b9: PUSH1 0x0c 000018bb: DUP4 000018bc: PUSH2 0x1ac2 000018bf: JUMP 000018c0: JUMPDEST 000018c1: PUSH2 0x18e8 000018c4: JUMPI 000018c5: PUSH1 0x40 000018c7: MLOAD 000018c8: PUSH4 0x27bca0f5 000018cd: PUSH1 0xe2 000018cf: SHL 000018d0: DUP2 000018d1: MSTORE 000018d2: PUSH1 0x01 000018d4: PUSH1 0x01 000018d6: PUSH1 0xa0 000018d8: SHL 000018d9: SUB 000018da: DUP4 000018db: AND 000018dc: PUSH1 0x04 000018de: DUP3 000018df: ADD 000018e0: MSTORE 000018e1: PUSH1 0x24 000018e3: ADD 000018e4: PUSH2 0x094f 000018e7: JUMP 000018e8: JUMPDEST 000018e9: PUSH2 0x0e30 000018ec: PUSH1 0x01 000018ee: PUSH1 0x01 000018f0: PUSH1 0xa0 000018f2: SHL 000018f3: SUB 000018f4: DUP5 000018f5: AND 000018f6: DUP4 000018f7: DUP4 000018f8: PUSH2 0x1c62 000018fb: JUMP 000018fc: JUMPDEST 000018fd: PUSH1 0x00 000018ff: PUSH2 0x0800 00001902: PUSH1 0x05 00001904: DUP4 00001905: PUSH2 0x1ac2 00001908: JUMP 00001909: JUMPDEST 0000190a: PUSH2 0x1921 0000190d: PUSH1 0x00 0000190f: DUP1 00001910: MLOAD 00001911: PUSH1 0x20 00001913: PUSH2 0x2793 00001916: DUP4 00001917: CODECOPY 00001918: DUP2 00001919: MLOAD 0000191a: SWAP2 0000191b: MSTORE 0000191c: CALLER 0000191d: PUSH2 0x1225 00001920: JUMP 00001921: JUMPDEST 00001922: PUSH2 0x193e 00001925: JUMPI 00001926: PUSH1 0x40 00001928: MLOAD 00001929: PUSH4 0x605919ad 0000192e: PUSH1 0xe1 00001930: SHL 00001931: DUP2 00001932: MSTORE 00001933: PUSH1 0x04 00001935: ADD 00001936: PUSH1 0x40 00001938: MLOAD 00001939: DUP1 0000193a: SWAP2 0000193b: SUB 0000193c: SWAP1 0000193d: REVERT 0000193e: JUMPDEST 0000193f: PUSH2 0x1949 00001942: PUSH1 0x0c 00001944: DUP3 00001945: PUSH2 0x1ac2 00001948: JUMP 00001949: JUMPDEST 0000194a: PUSH2 0x0c40 0000194d: JUMPI 0000194e: PUSH2 0x1958 00001951: PUSH1 0x0c 00001953: DUP3 00001954: PUSH2 0x1bc6 00001957: JUMP 00001958: JUMPDEST 00001959: POP 0000195a: PUSH1 0x40 0000195c: MLOAD 0000195d: PUSH1 0x01 0000195f: PUSH1 0x01 00001961: PUSH1 0xa0 00001963: SHL 00001964: SUB 00001965: DUP3 00001966: AND 00001967: DUP2 00001968: MSTORE 00001969: PUSH32 0x3139419c41cdd7abca84fa19dd21118cd285d3e2ce1a9444e8161ce9fa62fdcd 0000198a: SWAP1 0000198b: PUSH1 0x20 0000198d: ADD 0000198e: PUSH2 0x0c37 00001991: JUMP 00001992: JUMPDEST 00001993: PUSH1 0x00 00001995: PUSH2 0x104a 00001998: PUSH1 0x0e 0000199a: DUP4 0000199b: PUSH2 0x1b58 0000199e: JUMP 0000199f: JUMPDEST 000019a0: PUSH2 0x0c40 000019a3: DUP2 000019a4: PUSH2 0x1a8f 000019a7: JUMP 000019a8: JUMPDEST 000019a9: PUSH2 0x19c0 000019ac: PUSH1 0x00 000019ae: DUP1 000019af: MLOAD 000019b0: PUSH1 0x20 000019b2: PUSH2 0x2793 000019b5: DUP4 000019b6: CODECOPY 000019b7: DUP2 000019b8: MLOAD 000019b9: SWAP2 000019ba: MSTORE 000019bb: CALLER 000019bc: PUSH2 0x1225 000019bf: JUMP 000019c0: JUMPDEST 000019c1: PUSH2 0x19dd 000019c4: JUMPI 000019c5: PUSH1 0x40 000019c7: MLOAD 000019c8: PUSH4 0x605919ad 000019cd: PUSH1 0xe1 000019cf: SHL 000019d0: DUP2 000019d1: MSTORE 000019d2: PUSH1 0x04 000019d4: ADD 000019d5: PUSH1 0x40 000019d7: MLOAD 000019d8: DUP1 000019d9: SWAP2 000019da: SUB 000019db: SWAP1 000019dc: REVERT 000019dd: JUMPDEST 000019de: PUSH2 0x19e8 000019e1: PUSH1 0x07 000019e3: DUP3 000019e4: PUSH2 0x1ac2 000019e7: JUMP 000019e8: JUMPDEST 000019e9: PUSH2 0x0c40 000019ec: JUMPI 000019ed: PUSH2 0x19f7 000019f0: PUSH1 0x07 000019f2: DUP3 000019f3: PUSH2 0x1bc6 000019f6: JUMP 000019f7: JUMPDEST 000019f8: POP 000019f9: PUSH1 0x40 000019fb: MLOAD 000019fc: PUSH1 0x01 000019fe: PUSH1 0x01 00001a00: PUSH1 0xa0 00001a02: SHL 00001a03: SUB 00001a04: DUP3 00001a05: AND 00001a06: DUP2 00001a07: MSTORE 00001a08: PUSH32 0xb161bb911e584e40711ead7275aaf23b4dfeb38befa1e269b835db83e0d112a7 00001a29: SWAP1 00001a2a: PUSH1 0x20 00001a2c: ADD 00001a2d: PUSH2 0x0c37 00001a30: JUMP 00001a31: JUMPDEST 00001a32: PUSH1 0x00 00001a34: PUSH1 0x01 00001a36: PUSH1 0x01 00001a38: PUSH1 0xe0 00001a3a: SHL 00001a3b: SUB 00001a3c: NOT 00001a3d: DUP3 00001a3e: AND 00001a3f: PUSH4 0x7965db0b 00001a44: PUSH1 0xe0 00001a46: SHL 00001a47: EQ 00001a48: DUP1 00001a49: PUSH2 0x0800 00001a4c: JUMPI 00001a4d: POP 00001a4e: PUSH4 0x01ffc9a7 00001a53: PUSH1 0xe0 00001a55: SHL 00001a56: PUSH1 0x01 00001a58: PUSH1 0x01 00001a5a: PUSH1 0xe0 00001a5c: SHL 00001a5d: SUB 00001a5e: NOT 00001a5f: DUP4 00001a60: AND 00001a61: EQ 00001a62: PUSH2 0x0800 00001a65: JUMP 00001a66: JUMPDEST 00001a67: PUSH1 0x00 00001a69: PUSH2 0x0800 00001a6c: DUP3 00001a6d: PUSH2 0x1cf2 00001a70: JUMP 00001a71: JUMPDEST 00001a72: PUSH1 0x00 00001a74: DUP1 00001a75: DUP1 00001a76: DUP1 00001a77: PUSH2 0x1a80 00001a7a: DUP7 00001a7b: DUP7 00001a7c: PUSH2 0x1cfd 00001a7f: JUMP 00001a80: JUMPDEST 00001a81: SWAP1 00001a82: SWAP5 00001a83: POP 00001a84: SWAP3 00001a85: POP 00001a86: POP 00001a87: POP 00001a88: JUMPDEST 00001a89: SWAP3 00001a8a: POP 00001a8b: SWAP3 00001a8c: SWAP1 00001a8d: POP 00001a8e: JUMP 00001a8f: JUMPDEST 00001a90: PUSH2 0x1a9a 00001a93: PUSH1 0x05 00001a95: DUP3 00001a96: PUSH2 0x1ac2 00001a99: JUMP 00001a9a: JUMPDEST 00001a9b: PUSH2 0x0c40 00001a9e: JUMPI 00001a9f: PUSH1 0x40 00001aa1: MLOAD 00001aa2: PUSH4 0x5f8b555b 00001aa7: PUSH1 0xe1 00001aa9: SHL 00001aaa: DUP2 00001aab: MSTORE 00001aac: PUSH1 0x01 00001aae: PUSH1 0x01 00001ab0: PUSH1 0xa0 00001ab2: SHL 00001ab3: SUB 00001ab4: DUP3 00001ab5: AND 00001ab6: PUSH1 0x04 00001ab8: DUP3 00001ab9: ADD 00001aba: MSTORE 00001abb: PUSH1 0x24 00001abd: ADD 00001abe: PUSH2 0x094f 00001ac1: JUMP 00001ac2: JUMPDEST 00001ac3: PUSH1 0x01 00001ac5: PUSH1 0x01 00001ac7: PUSH1 0xa0 00001ac9: SHL 00001aca: SUB 00001acb: DUP2 00001acc: AND 00001acd: PUSH1 0x00 00001acf: SWAP1 00001ad0: DUP2 00001ad1: MSTORE 00001ad2: PUSH1 0x01 00001ad4: DUP4 00001ad5: ADD 00001ad6: PUSH1 0x20 00001ad8: MSTORE 00001ad9: PUSH1 0x40 00001adb: DUP2 00001adc: KECCAK256 00001add: SLOAD 00001ade: ISZERO 00001adf: ISZERO 00001ae0: PUSH2 0x104a 00001ae3: JUMP 00001ae4: JUMPDEST 00001ae5: PUSH1 0x40 00001ae7: MLOAD 00001ae8: PUSH1 0x01 00001aea: PUSH1 0x01 00001aec: PUSH1 0xa0 00001aee: SHL 00001aef: SUB 00001af0: DUP4 00001af1: DUP2 00001af2: AND 00001af3: PUSH1 0x24 00001af5: DUP4 00001af6: ADD 00001af7: MSTORE 00001af8: PUSH1 0x44 00001afa: DUP3 00001afb: ADD 00001afc: DUP4 00001afd: SWAP1 00001afe: MSTORE 00001aff: PUSH2 0x0e30 00001b02: SWAP2 00001b03: DUP6 00001b04: SWAP2 00001b05: DUP3 00001b06: AND 00001b07: SWAP1 00001b08: PUSH4 0xa9059cbb 00001b0d: SWAP1 00001b0e: PUSH1 0x64 00001b10: ADD 00001b11: JUMPDEST 00001b12: PUSH1 0x40 00001b14: MLOAD 00001b15: PUSH1 0x20 00001b17: DUP2 00001b18: DUP4 00001b19: SUB 00001b1a: SUB 00001b1b: DUP2 00001b1c: MSTORE 00001b1d: SWAP1 00001b1e: PUSH1 0x40 00001b20: MSTORE 00001b21: SWAP2 00001b22: POP 00001b23: PUSH1 0xe0 00001b25: SHL 00001b26: PUSH1 0x20 00001b28: DUP3 00001b29: ADD 00001b2a: DUP1 00001b2b: MLOAD 00001b2c: PUSH1 0x01 00001b2e: PUSH1 0x01 00001b30: PUSH1 0xe0 00001b32: SHL 00001b33: SUB 00001b34: DUP4 00001b35: DUP2 00001b36: DUP4 00001b37: AND 00001b38: OR 00001b39: DUP4 00001b3a: MSTORE 00001b3b: POP 00001b3c: POP 00001b3d: POP 00001b3e: POP 00001b3f: PUSH2 0x1d28 00001b42: JUMP 00001b43: JUMPDEST 00001b44: PUSH1 0x00 00001b46: PUSH2 0x104a 00001b49: DUP4 00001b4a: PUSH1 0x01 00001b4c: PUSH1 0x01 00001b4e: PUSH1 0xa0 00001b50: SHL 00001b51: SUB 00001b52: DUP5 00001b53: AND 00001b54: PUSH2 0x1d8b 00001b57: JUMP 00001b58: JUMPDEST 00001b59: PUSH1 0x00 00001b5b: DUP1 00001b5c: DUP1 00001b5d: DUP1 00001b5e: PUSH2 0x1a80 00001b61: DUP7 00001b62: PUSH1 0x01 00001b64: PUSH1 0x01 00001b66: PUSH1 0xa0 00001b68: SHL 00001b69: SUB 00001b6a: DUP8 00001b6b: AND 00001b6c: PUSH2 0x1e7e 00001b6f: JUMP 00001b70: JUMPDEST 00001b71: PUSH1 0x00 00001b73: PUSH2 0x104a 00001b76: DUP4 00001b77: PUSH1 0x01 00001b79: PUSH1 0x01 00001b7b: PUSH1 0xa0 00001b7d: SHL 00001b7e: SUB 00001b7f: DUP5 00001b80: AND 00001b81: PUSH2 0x1eb8 00001b84: JUMP 00001b85: JUMPDEST 00001b86: PUSH1 0x00 00001b88: PUSH2 0x1b9b 00001b8b: DUP5 00001b8c: PUSH1 0x01 00001b8e: PUSH1 0x01 00001b90: PUSH1 0xa0 00001b92: SHL 00001b93: SUB 00001b94: DUP6 00001b95: AND 00001b96: DUP5 00001b97: PUSH2 0x1ed5 00001b9a: JUMP 00001b9b: JUMPDEST 00001b9c: SWAP5 00001b9d: SWAP4 00001b9e: POP 00001b9f: POP 00001ba0: POP 00001ba1: POP 00001ba2: JUMP 00001ba3: JUMPDEST 00001ba4: DUP1 00001ba5: MLOAD 00001ba6: PUSH1 0x00 00001ba8: DUP1 00001ba9: DUP3 00001baa: PUSH1 0x20 00001bac: DUP6 00001bad: ADD 00001bae: DUP7 00001baf: GAS 00001bb0: DELEGATECALL 00001bb1: RETURNDATASIZE 00001bb2: PUSH1 0x00 00001bb4: DUP1 00001bb5: RETURNDATACOPY 00001bb6: DUP1 00001bb7: DUP1 00001bb8: ISZERO 00001bb9: PUSH2 0x1bc1 00001bbc: JUMPI 00001bbd: RETURNDATASIZE 00001bbe: PUSH1 0x00 00001bc0: RETURN 00001bc1: JUMPDEST 00001bc2: RETURNDATASIZE 00001bc3: PUSH1 0x00 00001bc5: REVERT 00001bc6: JUMPDEST 00001bc7: PUSH1 0x00 00001bc9: PUSH2 0x104a 00001bcc: DUP4 00001bcd: PUSH1 0x01 00001bcf: PUSH1 0x01 00001bd1: PUSH1 0xa0 00001bd3: SHL 00001bd4: SUB 00001bd5: DUP5 00001bd6: AND 00001bd7: PUSH2 0x1ef2 00001bda: JUMP 00001bdb: JUMPDEST 00001bdc: PUSH1 0x00 00001bde: DUP3 00001bdf: DUP2 00001be0: MSTORE 00001be1: PUSH1 0x20 00001be3: DUP2 00001be4: SWAP1 00001be5: MSTORE 00001be6: PUSH1 0x40 00001be8: SWAP1 00001be9: KECCAK256 00001bea: PUSH1 0x01 00001bec: ADD 00001bed: SLOAD 00001bee: PUSH2 0x1bf6 00001bf1: DUP2 00001bf2: PUSH2 0x1c58 00001bf5: JUMP 00001bf6: JUMPDEST 00001bf7: PUSH2 0x14bc 00001bfa: DUP4 00001bfb: DUP4 00001bfc: PUSH2 0x1f41 00001bff: JUMP 00001c00: JUMPDEST 00001c01: PUSH1 0x00 00001c03: DUP1 00001c04: PUSH2 0x1c0d 00001c07: DUP5 00001c08: DUP5 00001c09: PUSH2 0x1f6e 00001c0c: JUMP 00001c0d: JUMPDEST 00001c0e: SWAP1 00001c0f: POP 00001c10: DUP1 00001c11: ISZERO 00001c12: PUSH2 0x104a 00001c15: JUMPI 00001c16: PUSH1 0x00 00001c18: DUP5 00001c19: DUP2 00001c1a: MSTORE 00001c1b: PUSH1 0x01 00001c1d: PUSH1 0x20 00001c1f: MSTORE 00001c20: PUSH1 0x40 00001c22: SWAP1 00001c23: KECCAK256 00001c24: PUSH2 0x1c2d 00001c27: SWAP1 00001c28: DUP5 00001c29: PUSH2 0x1b43 00001c2c: JUMP 00001c2d: JUMPDEST 00001c2e: POP 00001c2f: SWAP4 00001c30: SWAP3 00001c31: POP 00001c32: POP 00001c33: POP 00001c34: JUMP 00001c35: JUMPDEST 00001c36: PUSH1 0x60 00001c38: PUSH1 0x00 00001c3a: PUSH2 0x104a 00001c3d: DUP4 00001c3e: PUSH2 0x1fd9 00001c41: JUMP 00001c42: JUMPDEST 00001c43: PUSH1 0x00 00001c45: PUSH2 0x104a 00001c48: DUP4 00001c49: DUP4 00001c4a: PUSH2 0x2035 00001c4d: JUMP 00001c4e: JUMPDEST 00001c4f: PUSH1 0x00 00001c51: PUSH2 0x0800 00001c54: DUP3 00001c55: SLOAD 00001c56: SWAP1 00001c57: JUMP 00001c58: JUMPDEST 00001c59: PUSH2 0x0c40 00001c5c: DUP2 00001c5d: CALLER 00001c5e: PUSH2 0x205f 00001c61: JUMP 00001c62: JUMPDEST 00001c63: PUSH1 0x40 00001c65: DUP1 00001c66: MLOAD 00001c67: PUSH1 0x01 00001c69: PUSH1 0x01 00001c6b: PUSH1 0xa0 00001c6d: SHL 00001c6e: SUB 00001c6f: DUP5 00001c70: AND 00001c71: PUSH1 0x24 00001c73: DUP3 00001c74: ADD 00001c75: MSTORE 00001c76: PUSH1 0x44 00001c78: DUP1 00001c79: DUP3 00001c7a: ADD 00001c7b: DUP5 00001c7c: SWAP1 00001c7d: MSTORE 00001c7e: DUP3 00001c7f: MLOAD 00001c80: DUP1 00001c81: DUP4 00001c82: SUB 00001c83: SWAP1 00001c84: SWAP2 00001c85: ADD 00001c86: DUP2 00001c87: MSTORE 00001c88: PUSH1 0x64 00001c8a: SWAP1 00001c8b: SWAP2 00001c8c: ADD 00001c8d: SWAP1 00001c8e: SWAP2 00001c8f: MSTORE 00001c90: PUSH1 0x20 00001c92: DUP2 00001c93: ADD 00001c94: DUP1 00001c95: MLOAD 00001c96: PUSH1 0x01 00001c98: PUSH1 0x01 00001c9a: PUSH1 0xe0 00001c9c: SHL 00001c9d: SUB 00001c9e: AND 00001c9f: PUSH4 0x095ea7b3 00001ca4: PUSH1 0xe0 00001ca6: SHL 00001ca7: OR 00001ca8: SWAP1 00001ca9: MSTORE 00001caa: PUSH2 0x1cb3 00001cad: DUP5 00001cae: DUP3 00001caf: PUSH2 0x2098 00001cb2: JUMP 00001cb3: JUMPDEST 00001cb4: PUSH2 0x14bc 00001cb7: JUMPI 00001cb8: PUSH1 0x40 00001cba: MLOAD 00001cbb: PUSH1 0x01 00001cbd: PUSH1 0x01 00001cbf: PUSH1 0xa0 00001cc1: SHL 00001cc2: SUB 00001cc3: DUP5 00001cc4: DUP2 00001cc5: AND 00001cc6: PUSH1 0x24 00001cc8: DUP4 00001cc9: ADD 00001cca: MSTORE 00001ccb: PUSH1 0x00 00001ccd: PUSH1 0x44 00001ccf: DUP4 00001cd0: ADD 00001cd1: MSTORE 00001cd2: PUSH2 0x1ce8 00001cd5: SWAP2 00001cd6: DUP7 00001cd7: SWAP2 00001cd8: DUP3 00001cd9: AND 00001cda: SWAP1 00001cdb: PUSH4 0x095ea7b3 00001ce0: SWAP1 00001ce1: PUSH1 0x64 00001ce3: ADD 00001ce4: PUSH2 0x1b11 00001ce7: JUMP 00001ce8: JUMPDEST 00001ce9: PUSH2 0x14bc 00001cec: DUP5 00001ced: DUP3 00001cee: PUSH2 0x1d28 00001cf1: JUMP 00001cf2: JUMPDEST 00001cf3: PUSH1 0x00 00001cf5: PUSH2 0x0800 00001cf8: DUP3 00001cf9: PUSH2 0x1c4e 00001cfc: JUMP 00001cfd: JUMPDEST 00001cfe: PUSH1 0x00 00001d00: DUP1 00001d01: DUP1 00001d02: PUSH2 0x1d0b 00001d05: DUP6 00001d06: DUP6 00001d07: PUSH2 0x1c42 00001d0a: JUMP 00001d0b: JUMPDEST 00001d0c: PUSH1 0x00 00001d0e: DUP2 00001d0f: DUP2 00001d10: MSTORE 00001d11: PUSH1 0x02 00001d13: SWAP7 00001d14: SWAP1 00001d15: SWAP7 00001d16: ADD 00001d17: PUSH1 0x20 00001d19: MSTORE 00001d1a: PUSH1 0x40 00001d1c: SWAP1 00001d1d: SWAP6 00001d1e: KECCAK256 00001d1f: SLOAD 00001d20: SWAP5 00001d21: SWAP6 00001d22: SWAP4 00001d23: POP 00001d24: POP 00001d25: POP 00001d26: POP 00001d27: JUMP 00001d28: JUMPDEST 00001d29: PUSH1 0x00 00001d2b: PUSH2 0x1d3d 00001d2e: PUSH1 0x01 00001d30: PUSH1 0x01 00001d32: PUSH1 0xa0 00001d34: SHL 00001d35: SUB 00001d36: DUP5 00001d37: AND 00001d38: DUP4 00001d39: PUSH2 0x2140 00001d3c: JUMP 00001d3d: JUMPDEST 00001d3e: SWAP1 00001d3f: POP 00001d40: DUP1 00001d41: MLOAD 00001d42: PUSH1 0x00 00001d44: EQ 00001d45: ISZERO 00001d46: DUP1 00001d47: ISZERO 00001d48: PUSH2 0x1d62 00001d4b: JUMPI 00001d4c: POP 00001d4d: DUP1 00001d4e: DUP1 00001d4f: PUSH1 0x20 00001d51: ADD 00001d52: SWAP1 00001d53: MLOAD 00001d54: DUP2 00001d55: ADD 00001d56: SWAP1 00001d57: PUSH2 0x1d60 00001d5a: SWAP2 00001d5b: SWAP1 00001d5c: PUSH2 0x275f 00001d5f: JUMP 00001d60: JUMPDEST 00001d61: ISZERO 00001d62: JUMPDEST 00001d63: ISZERO 00001d64: PUSH2 0x0e30 00001d67: JUMPI 00001d68: PUSH1 0x40 00001d6a: MLOAD 00001d6b: PUSH4 0x5274afe7 00001d70: PUSH1 0xe0 00001d72: SHL 00001d73: DUP2 00001d74: MSTORE 00001d75: PUSH1 0x01 00001d77: PUSH1 0x01 00001d79: PUSH1 0xa0 00001d7b: SHL 00001d7c: SUB 00001d7d: DUP5 00001d7e: AND 00001d7f: PUSH1 0x04 00001d81: DUP3 00001d82: ADD 00001d83: MSTORE 00001d84: PUSH1 0x24 00001d86: ADD 00001d87: PUSH2 0x094f 00001d8a: JUMP 00001d8b: JUMPDEST 00001d8c: PUSH1 0x00 00001d8e: DUP2 00001d8f: DUP2 00001d90: MSTORE 00001d91: PUSH1 0x01 00001d93: DUP4 00001d94: ADD 00001d95: PUSH1 0x20 00001d97: MSTORE 00001d98: PUSH1 0x40 00001d9a: DUP2 00001d9b: KECCAK256 00001d9c: SLOAD 00001d9d: DUP1 00001d9e: ISZERO 00001d9f: PUSH2 0x1e74 00001da2: JUMPI 00001da3: PUSH1 0x00 00001da5: PUSH2 0x1daf 00001da8: PUSH1 0x01 00001daa: DUP4 00001dab: PUSH2 0x274c 00001dae: JUMP 00001daf: JUMPDEST 00001db0: DUP6 00001db1: SLOAD 00001db2: SWAP1 00001db3: SWAP2 00001db4: POP 00001db5: PUSH1 0x00 00001db7: SWAP1 00001db8: PUSH2 0x1dc3 00001dbb: SWAP1 00001dbc: PUSH1 0x01 00001dbe: SWAP1 00001dbf: PUSH2 0x274c 00001dc2: JUMP 00001dc3: JUMPDEST 00001dc4: SWAP1 00001dc5: POP 00001dc6: DUP1 00001dc7: DUP3 00001dc8: EQ 00001dc9: PUSH2 0x1e28 00001dcc: JUMPI 00001dcd: PUSH1 0x00 00001dcf: DUP7 00001dd0: PUSH1 0x00 00001dd2: ADD 00001dd3: DUP3 00001dd4: DUP2 00001dd5: SLOAD 00001dd6: DUP2 00001dd7: LT 00001dd8: PUSH2 0x1de3 00001ddb: JUMPI 00001ddc: PUSH2 0x1de3 00001ddf: PUSH2 0x26c5 00001de2: JUMP 00001de3: JUMPDEST 00001de4: SWAP1 00001de5: PUSH1 0x00 00001de7: MSTORE 00001de8: PUSH1 0x20 00001dea: PUSH1 0x00 00001dec: KECCAK256 00001ded: ADD 00001dee: SLOAD 00001def: SWAP1 00001df0: POP 00001df1: DUP1 00001df2: DUP8 00001df3: PUSH1 0x00 00001df5: ADD 00001df6: DUP5 00001df7: DUP2 00001df8: SLOAD 00001df9: DUP2 00001dfa: LT 00001dfb: PUSH2 0x1e06 00001dfe: JUMPI 00001dff: PUSH2 0x1e06 00001e02: PUSH2 0x26c5 00001e05: JUMP 00001e06: JUMPDEST 00001e07: PUSH1 0x00 00001e09: SWAP2 00001e0a: DUP3 00001e0b: MSTORE 00001e0c: PUSH1 0x20 00001e0e: DUP1 00001e0f: DUP4 00001e10: KECCAK256 00001e11: SWAP1 00001e12: SWAP2 00001e13: ADD 00001e14: SWAP3 00001e15: SWAP1 00001e16: SWAP3 00001e17: SSTORE 00001e18: SWAP2 00001e19: DUP3 00001e1a: MSTORE 00001e1b: PUSH1 0x01 00001e1d: DUP9 00001e1e: ADD 00001e1f: SWAP1 00001e20: MSTORE 00001e21: PUSH1 0x40 00001e23: SWAP1 00001e24: KECCAK256 00001e25: DUP4 00001e26: SWAP1 00001e27: SSTORE 00001e28: JUMPDEST 00001e29: DUP6 00001e2a: SLOAD 00001e2b: DUP7 00001e2c: SWAP1 00001e2d: DUP1 00001e2e: PUSH2 0x1e39 00001e31: JUMPI 00001e32: PUSH2 0x1e39 00001e35: PUSH2 0x277c 00001e38: JUMP 00001e39: JUMPDEST 00001e3a: PUSH1 0x01 00001e3c: SWAP1 00001e3d: SUB 00001e3e: DUP2 00001e3f: DUP2 00001e40: SWAP1 00001e41: PUSH1 0x00 00001e43: MSTORE 00001e44: PUSH1 0x20 00001e46: PUSH1 0x00 00001e48: KECCAK256 00001e49: ADD 00001e4a: PUSH1 0x00 00001e4c: SWAP1 00001e4d: SSTORE 00001e4e: SWAP1 00001e4f: SSTORE 00001e50: DUP6 00001e51: PUSH1 0x01 00001e53: ADD 00001e54: PUSH1 0x00 00001e56: DUP7 00001e57: DUP2 00001e58: MSTORE 00001e59: PUSH1 0x20 00001e5b: ADD 00001e5c: SWAP1 00001e5d: DUP2 00001e5e: MSTORE 00001e5f: PUSH1 0x20 00001e61: ADD 00001e62: PUSH1 0x00 00001e64: KECCAK256 00001e65: PUSH1 0x00 00001e67: SWAP1 00001e68: SSTORE 00001e69: PUSH1 0x01 00001e6b: SWAP4 00001e6c: POP 00001e6d: POP 00001e6e: POP 00001e6f: POP 00001e70: PUSH2 0x0800 00001e73: JUMP 00001e74: JUMPDEST 00001e75: PUSH1 0x00 00001e77: SWAP2 00001e78: POP 00001e79: POP 00001e7a: PUSH2 0x0800 00001e7d: JUMP 00001e7e: JUMPDEST 00001e7f: PUSH1 0x00 00001e81: DUP2 00001e82: DUP2 00001e83: MSTORE 00001e84: PUSH1 0x02 00001e86: DUP4 00001e87: ADD 00001e88: PUSH1 0x20 00001e8a: MSTORE 00001e8b: PUSH1 0x40 00001e8d: DUP2 00001e8e: KECCAK256 00001e8f: SLOAD 00001e90: DUP2 00001e91: SWAP1 00001e92: DUP1 00001e93: PUSH2 0x1ead 00001e96: JUMPI 00001e97: PUSH2 0x1ea0 00001e9a: DUP6 00001e9b: DUP6 00001e9c: PUSH2 0x214e 00001e9f: JUMP 00001ea0: JUMPDEST 00001ea1: SWAP3 00001ea2: POP 00001ea3: PUSH1 0x00 00001ea5: SWAP2 00001ea6: POP 00001ea7: PUSH2 0x1a88 00001eaa: SWAP1 00001eab: POP 00001eac: JUMP 00001ead: JUMPDEST 00001eae: PUSH1 0x01 00001eb0: SWAP3 00001eb1: POP 00001eb2: SWAP1 00001eb3: POP 00001eb4: PUSH2 0x1a88 00001eb7: JUMP 00001eb8: JUMPDEST 00001eb9: PUSH1 0x00 00001ebb: DUP2 00001ebc: DUP2 00001ebd: MSTORE 00001ebe: PUSH1 0x02 00001ec0: DUP4 00001ec1: ADD 00001ec2: PUSH1 0x20 00001ec4: MSTORE 00001ec5: PUSH1 0x40 00001ec7: DUP2 00001ec8: KECCAK256 00001ec9: DUP2 00001eca: SWAP1 00001ecb: SSTORE 00001ecc: PUSH2 0x104a 00001ecf: DUP4 00001ed0: DUP4 00001ed1: PUSH2 0x215a 00001ed4: JUMP 00001ed5: JUMPDEST 00001ed6: PUSH1 0x00 00001ed8: DUP3 00001ed9: DUP2 00001eda: MSTORE 00001edb: PUSH1 0x02 00001edd: DUP5 00001ede: ADD 00001edf: PUSH1 0x20 00001ee1: MSTORE 00001ee2: PUSH1 0x40 00001ee4: DUP2 00001ee5: KECCAK256 00001ee6: DUP3 00001ee7: SWAP1 00001ee8: SSTORE 00001ee9: PUSH2 0x1b9b 00001eec: DUP5 00001eed: DUP5 00001eee: PUSH2 0x2166 00001ef1: JUMP 00001ef2: JUMPDEST 00001ef3: PUSH1 0x00 00001ef5: DUP2 00001ef6: DUP2 00001ef7: MSTORE 00001ef8: PUSH1 0x01 00001efa: DUP4 00001efb: ADD 00001efc: PUSH1 0x20 00001efe: MSTORE 00001eff: PUSH1 0x40 00001f01: DUP2 00001f02: KECCAK256 00001f03: SLOAD 00001f04: PUSH2 0x1f39 00001f07: JUMPI 00001f08: POP 00001f09: DUP2 00001f0a: SLOAD 00001f0b: PUSH1 0x01 00001f0d: DUP2 00001f0e: DUP2 00001f0f: ADD 00001f10: DUP5 00001f11: SSTORE 00001f12: PUSH1 0x00 00001f14: DUP5 00001f15: DUP2 00001f16: MSTORE 00001f17: PUSH1 0x20 00001f19: DUP1 00001f1a: DUP3 00001f1b: KECCAK256 00001f1c: SWAP1 00001f1d: SWAP4 00001f1e: ADD 00001f1f: DUP5 00001f20: SWAP1 00001f21: SSTORE 00001f22: DUP5 00001f23: SLOAD 00001f24: DUP5 00001f25: DUP3 00001f26: MSTORE 00001f27: DUP3 00001f28: DUP7 00001f29: ADD 00001f2a: SWAP1 00001f2b: SWAP4 00001f2c: MSTORE 00001f2d: PUSH1 0x40 00001f2f: SWAP1 00001f30: KECCAK256 00001f31: SWAP2 00001f32: SWAP1 00001f33: SWAP2 00001f34: SSTORE 00001f35: PUSH2 0x0800 00001f38: JUMP 00001f39: JUMPDEST 00001f3a: POP 00001f3b: PUSH1 0x00 00001f3d: PUSH2 0x0800 00001f40: JUMP 00001f41: JUMPDEST 00001f42: PUSH1 0x00 00001f44: DUP1 00001f45: PUSH2 0x1f4e 00001f48: DUP5 00001f49: DUP5 00001f4a: PUSH2 0x2172 00001f4d: JUMP 00001f4e: JUMPDEST 00001f4f: SWAP1 00001f50: POP 00001f51: DUP1 00001f52: ISZERO 00001f53: PUSH2 0x104a 00001f56: JUMPI 00001f57: PUSH1 0x00 00001f59: DUP5 00001f5a: DUP2 00001f5b: MSTORE 00001f5c: PUSH1 0x01 00001f5e: PUSH1 0x20 00001f60: MSTORE 00001f61: PUSH1 0x40 00001f63: SWAP1 00001f64: KECCAK256 00001f65: PUSH2 0x1c2d 00001f68: SWAP1 00001f69: DUP5 00001f6a: PUSH2 0x1bc6 00001f6d: JUMP 00001f6e: JUMPDEST 00001f6f: PUSH1 0x00 00001f71: PUSH2 0x1f7a 00001f74: DUP4 00001f75: DUP4 00001f76: PUSH2 0x1225 00001f79: JUMP 00001f7a: JUMPDEST 00001f7b: ISZERO 00001f7c: PUSH2 0x1f39 00001f7f: JUMPI 00001f80: PUSH1 0x00 00001f82: DUP4 00001f83: DUP2 00001f84: MSTORE 00001f85: PUSH1 0x20 00001f87: DUP2 00001f88: DUP2 00001f89: MSTORE 00001f8a: PUSH1 0x40 00001f8c: DUP1 00001f8d: DUP4 00001f8e: KECCAK256 00001f8f: PUSH1 0x01 00001f91: PUSH1 0x01 00001f93: PUSH1 0xa0 00001f95: SHL 00001f96: SUB 00001f97: DUP7 00001f98: AND 00001f99: DUP1 00001f9a: DUP6 00001f9b: MSTORE 00001f9c: SWAP3 00001f9d: MSTORE 00001f9e: DUP1 00001f9f: DUP4 00001fa0: KECCAK256 00001fa1: DUP1 00001fa2: SLOAD 00001fa3: PUSH1 0xff 00001fa5: NOT 00001fa6: AND 00001fa7: SWAP1 00001fa8: SSTORE 00001fa9: MLOAD 00001faa: CALLER 00001fab: SWAP3 00001fac: DUP7 00001fad: SWAP2 00001fae: PUSH32 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b 00001fcf: SWAP2 00001fd0: SWAP1 00001fd1: LOG4 00001fd2: POP 00001fd3: PUSH1 0x01 00001fd5: PUSH2 0x0800 00001fd8: JUMP 00001fd9: JUMPDEST 00001fda: PUSH1 0x60 00001fdc: DUP2 00001fdd: PUSH1 0x00 00001fdf: ADD 00001fe0: DUP1 00001fe1: SLOAD 00001fe2: DUP1 00001fe3: PUSH1 0x20 00001fe5: MUL 00001fe6: PUSH1 0x20 00001fe8: ADD 00001fe9: PUSH1 0x40 00001feb: MLOAD 00001fec: SWAP1 00001fed: DUP2 00001fee: ADD 00001fef: PUSH1 0x40 00001ff1: MSTORE 00001ff2: DUP1 00001ff3: SWAP3 00001ff4: SWAP2 00001ff5: SWAP1 00001ff6: DUP2 00001ff7: DUP2 00001ff8: MSTORE 00001ff9: PUSH1 0x20 00001ffb: ADD 00001ffc: DUP3 00001ffd: DUP1 00001ffe: SLOAD 00001fff: DUP1 00002000: ISZERO 00002001: PUSH2 0x2029 00002004: JUMPI 00002005: PUSH1 0x20 00002007: MUL 00002008: DUP3 00002009: ADD 0000200a: SWAP2 0000200b: SWAP1 0000200c: PUSH1 0x00 0000200e: MSTORE 0000200f: PUSH1 0x20 00002011: PUSH1 0x00 00002013: KECCAK256 00002014: SWAP1 00002015: JUMPDEST 00002016: DUP2 00002017: SLOAD 00002018: DUP2 00002019: MSTORE 0000201a: PUSH1 0x20 0000201c: ADD 0000201d: SWAP1 0000201e: PUSH1 0x01 00002020: ADD 00002021: SWAP1 00002022: DUP1 00002023: DUP4 00002024: GT 00002025: PUSH2 0x2015 00002028: JUMPI 00002029: JUMPDEST 0000202a: POP 0000202b: POP 0000202c: POP 0000202d: POP 0000202e: POP 0000202f: SWAP1 00002030: POP 00002031: SWAP2 00002032: SWAP1 00002033: POP 00002034: JUMP 00002035: JUMPDEST 00002036: PUSH1 0x00 00002038: DUP3 00002039: PUSH1 0x00 0000203b: ADD 0000203c: DUP3 0000203d: DUP2 0000203e: SLOAD 0000203f: DUP2 00002040: LT 00002041: PUSH2 0x204c 00002044: JUMPI 00002045: PUSH2 0x204c 00002048: PUSH2 0x26c5 0000204b: JUMP 0000204c: JUMPDEST 0000204d: SWAP1 0000204e: PUSH1 0x00 00002050: MSTORE 00002051: PUSH1 0x20 00002053: PUSH1 0x00 00002055: KECCAK256 00002056: ADD 00002057: SLOAD 00002058: SWAP1 00002059: POP 0000205a: SWAP3 0000205b: SWAP2 0000205c: POP 0000205d: POP 0000205e: JUMP 0000205f: JUMPDEST 00002060: PUSH2 0x2069 00002063: DUP3 00002064: DUP3 00002065: PUSH2 0x1225 00002068: JUMP 00002069: JUMPDEST 0000206a: PUSH2 0x0cfa 0000206d: JUMPI 0000206e: PUSH1 0x40 00002070: MLOAD 00002071: PUSH4 0xe2517d3f 00002076: PUSH1 0xe0 00002078: SHL 00002079: DUP2 0000207a: MSTORE 0000207b: PUSH1 0x01 0000207d: PUSH1 0x01 0000207f: PUSH1 0xa0 00002081: SHL 00002082: SUB 00002083: DUP3 00002084: AND 00002085: PUSH1 0x04 00002087: DUP3 00002088: ADD 00002089: MSTORE 0000208a: PUSH1 0x24 0000208c: DUP2 0000208d: ADD 0000208e: DUP4 0000208f: SWAP1 00002090: MSTORE 00002091: PUSH1 0x44 00002093: ADD 00002094: PUSH2 0x094f 00002097: JUMP 00002098: JUMPDEST 00002099: PUSH1 0x00 0000209b: DUP1 0000209c: PUSH1 0x00 0000209e: DUP5 0000209f: PUSH1 0x01 000020a1: PUSH1 0x01 000020a3: PUSH1 0xa0 000020a5: SHL 000020a6: SUB 000020a7: AND 000020a8: DUP5 000020a9: PUSH1 0x40 000020ab: MLOAD 000020ac: PUSH2 0x20b5 000020af: SWAP2 000020b0: SWAP1 000020b1: PUSH2 0x26db 000020b4: JUMP 000020b5: JUMPDEST 000020b6: PUSH1 0x00 000020b8: PUSH1 0x40 000020ba: MLOAD 000020bb: DUP1 000020bc: DUP4 000020bd: SUB 000020be: DUP2 000020bf: PUSH1 0x00 000020c1: DUP7 000020c2: GAS 000020c3: CALL 000020c4: SWAP2 000020c5: POP 000020c6: POP 000020c7: RETURNDATASIZE 000020c8: DUP1 000020c9: PUSH1 0x00 000020cb: DUP2 000020cc: EQ 000020cd: PUSH2 0x20f2 000020d0: JUMPI 000020d1: PUSH1 0x40 000020d3: MLOAD 000020d4: SWAP2 000020d5: POP 000020d6: PUSH1 0x1f 000020d8: NOT 000020d9: PUSH1 0x3f 000020db: RETURNDATASIZE 000020dc: ADD 000020dd: AND 000020de: DUP3 000020df: ADD 000020e0: PUSH1 0x40 000020e2: MSTORE 000020e3: RETURNDATASIZE 000020e4: DUP3 000020e5: MSTORE 000020e6: RETURNDATASIZE 000020e7: PUSH1 0x00 000020e9: PUSH1 0x20 000020eb: DUP5 000020ec: ADD 000020ed: RETURNDATACOPY 000020ee: PUSH2 0x20f7 000020f1: JUMP 000020f2: JUMPDEST 000020f3: PUSH1 0x60 000020f5: SWAP2 000020f6: POP 000020f7: JUMPDEST 000020f8: POP 000020f9: SWAP2 000020fa: POP 000020fb: SWAP2 000020fc: POP 000020fd: DUP2 000020fe: DUP1 000020ff: ISZERO 00002100: PUSH2 0x2121 00002103: JUMPI 00002104: POP 00002105: DUP1 00002106: MLOAD 00002107: ISZERO 00002108: DUP1 00002109: PUSH2 0x2121 0000210c: JUMPI 0000210d: POP 0000210e: DUP1 0000210f: DUP1 00002110: PUSH1 0x20 00002112: ADD 00002113: SWAP1 00002114: MLOAD 00002115: DUP2 00002116: ADD 00002117: SWAP1 00002118: PUSH2 0x2121 0000211b: SWAP2 0000211c: SWAP1 0000211d: PUSH2 0x275f 00002120: JUMP 00002121: JUMPDEST 00002122: DUP1 00002123: ISZERO 00002124: PUSH2 0x2137 00002127: JUMPI 00002128: POP 00002129: PUSH1 0x00 0000212b: DUP6 0000212c: PUSH1 0x01 0000212e: PUSH1 0x01 00002130: PUSH1 0xa0 00002132: SHL 00002133: SUB 00002134: AND 00002135: EXTCODESIZE 00002136: GT 00002137: JUMPDEST 00002138: SWAP6 00002139: SWAP5 0000213a: POP 0000213b: POP 0000213c: POP 0000213d: POP 0000213e: POP 0000213f: JUMP 00002140: JUMPDEST 00002141: PUSH1 0x60 00002143: PUSH2 0x104a 00002146: DUP4 00002147: DUP4 00002148: PUSH1 0x00 0000214a: PUSH2 0x21fc 0000214d: JUMP 0000214e: JUMPDEST 0000214f: PUSH1 0x00 00002151: PUSH2 0x104a 00002154: DUP4 00002155: DUP4 00002156: PUSH2 0x2299 00002159: JUMP 0000215a: JUMPDEST 0000215b: PUSH1 0x00 0000215d: PUSH2 0x104a 00002160: DUP4 00002161: DUP4 00002162: PUSH2 0x1d8b 00002165: JUMP 00002166: JUMPDEST 00002167: PUSH1 0x00 00002169: PUSH2 0x104a 0000216c: DUP4 0000216d: DUP4 0000216e: PUSH2 0x1ef2 00002171: JUMP 00002172: JUMPDEST 00002173: PUSH1 0x00 00002175: PUSH2 0x217e 00002178: DUP4 00002179: DUP4 0000217a: PUSH2 0x1225 0000217d: JUMP 0000217e: JUMPDEST 0000217f: PUSH2 0x1f39 00002182: JUMPI 00002183: PUSH1 0x00 00002185: DUP4 00002186: DUP2 00002187: MSTORE 00002188: PUSH1 0x20 0000218a: DUP2 0000218b: DUP2 0000218c: MSTORE 0000218d: PUSH1 0x40 0000218f: DUP1 00002190: DUP4 00002191: KECCAK256 00002192: PUSH1 0x01 00002194: PUSH1 0x01 00002196: PUSH1 0xa0 00002198: SHL 00002199: SUB 0000219a: DUP7 0000219b: AND 0000219c: DUP5 0000219d: MSTORE 0000219e: SWAP1 0000219f: SWAP2 000021a0: MSTORE 000021a1: SWAP1 000021a2: KECCAK256 000021a3: DUP1 000021a4: SLOAD 000021a5: PUSH1 0xff 000021a7: NOT 000021a8: AND 000021a9: PUSH1 0x01 000021ab: OR 000021ac: SWAP1 000021ad: SSTORE 000021ae: PUSH2 0x21b4 000021b1: CALLER 000021b2: SWAP1 000021b3: JUMP 000021b4: JUMPDEST 000021b5: PUSH1 0x01 000021b7: PUSH1 0x01 000021b9: PUSH1 0xa0 000021bb: SHL 000021bc: SUB 000021bd: AND 000021be: DUP3 000021bf: PUSH1 0x01 000021c1: PUSH1 0x01 000021c3: PUSH1 0xa0 000021c5: SHL 000021c6: SUB 000021c7: AND 000021c8: DUP5 000021c9: PUSH32 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d 000021ea: PUSH1 0x40 000021ec: MLOAD 000021ed: PUSH1 0x40 000021ef: MLOAD 000021f0: DUP1 000021f1: SWAP2 000021f2: SUB 000021f3: SWAP1 000021f4: LOG4 000021f5: POP 000021f6: PUSH1 0x01 000021f8: PUSH2 0x0800 000021fb: JUMP 000021fc: JUMPDEST 000021fd: PUSH1 0x60 000021ff: DUP2 00002200: SELFBALANCE 00002201: LT 00002202: ISZERO 00002203: PUSH2 0x2221 00002206: JUMPI 00002207: PUSH1 0x40 00002209: MLOAD 0000220a: PUSH4 0xcd786059 0000220f: PUSH1 0xe0 00002211: SHL 00002212: DUP2 00002213: MSTORE 00002214: ADDRESS 00002215: PUSH1 0x04 00002217: DUP3 00002218: ADD 00002219: MSTORE 0000221a: PUSH1 0x24 0000221c: ADD 0000221d: PUSH2 0x094f 00002220: JUMP 00002221: JUMPDEST 00002222: PUSH1 0x00 00002224: DUP1 00002225: DUP6 00002226: PUSH1 0x01 00002228: PUSH1 0x01 0000222a: PUSH1 0xa0 0000222c: SHL 0000222d: SUB 0000222e: AND 0000222f: DUP5 00002230: DUP7 00002231: PUSH1 0x40 00002233: MLOAD 00002234: PUSH2 0x223d 00002237: SWAP2 00002238: SWAP1 00002239: PUSH2 0x26db 0000223c: JUMP 0000223d: JUMPDEST 0000223e: PUSH1 0x00 00002240: PUSH1 0x40 00002242: MLOAD 00002243: DUP1 00002244: DUP4 00002245: SUB 00002246: DUP2 00002247: DUP6 00002248: DUP8 00002249: GAS 0000224a: CALL 0000224b: SWAP3 0000224c: POP 0000224d: POP 0000224e: POP 0000224f: RETURNDATASIZE 00002250: DUP1 00002251: PUSH1 0x00 00002253: DUP2 00002254: EQ 00002255: PUSH2 0x227a 00002258: JUMPI 00002259: PUSH1 0x40 0000225b: MLOAD 0000225c: SWAP2 0000225d: POP 0000225e: PUSH1 0x1f 00002260: NOT 00002261: PUSH1 0x3f 00002263: RETURNDATASIZE 00002264: ADD 00002265: AND 00002266: DUP3 00002267: ADD 00002268: PUSH1 0x40 0000226a: MSTORE 0000226b: RETURNDATASIZE 0000226c: DUP3 0000226d: MSTORE 0000226e: RETURNDATASIZE 0000226f: PUSH1 0x00 00002271: PUSH1 0x20 00002273: DUP5 00002274: ADD 00002275: RETURNDATACOPY 00002276: PUSH2 0x227f 00002279: JUMP 0000227a: JUMPDEST 0000227b: PUSH1 0x60 0000227d: SWAP2 0000227e: POP 0000227f: JUMPDEST 00002280: POP 00002281: SWAP2 00002282: POP 00002283: SWAP2 00002284: POP 00002285: PUSH2 0x228f 00002288: DUP7 00002289: DUP4 0000228a: DUP4 0000228b: PUSH2 0x22b1 0000228e: JUMP 0000228f: JUMPDEST 00002290: SWAP7 00002291: SWAP6 00002292: POP 00002293: POP 00002294: POP 00002295: POP 00002296: POP 00002297: POP 00002298: JUMP 00002299: JUMPDEST 0000229a: PUSH1 0x00 0000229c: DUP2 0000229d: DUP2 0000229e: MSTORE 0000229f: PUSH1 0x01 000022a1: DUP4 000022a2: ADD 000022a3: PUSH1 0x20 000022a5: MSTORE 000022a6: PUSH1 0x40 000022a8: DUP2 000022a9: KECCAK256 000022aa: SLOAD 000022ab: ISZERO 000022ac: ISZERO 000022ad: PUSH2 0x104a 000022b0: JUMP 000022b1: JUMPDEST 000022b2: PUSH1 0x60 000022b4: DUP3 000022b5: PUSH2 0x22c6 000022b8: JUMPI 000022b9: PUSH2 0x22c1 000022bc: DUP3 000022bd: PUSH2 0x230d 000022c0: JUMP 000022c1: JUMPDEST 000022c2: PUSH2 0x104a 000022c5: JUMP 000022c6: JUMPDEST 000022c7: DUP2 000022c8: MLOAD 000022c9: ISZERO 000022ca: DUP1 000022cb: ISZERO 000022cc: PUSH2 0x22dd 000022cf: JUMPI 000022d0: POP 000022d1: PUSH1 0x01 000022d3: PUSH1 0x01 000022d5: PUSH1 0xa0 000022d7: SHL 000022d8: SUB 000022d9: DUP5 000022da: AND 000022db: EXTCODESIZE 000022dc: ISZERO 000022dd: JUMPDEST 000022de: ISZERO 000022df: PUSH2 0x2306 000022e2: JUMPI 000022e3: PUSH1 0x40 000022e5: MLOAD 000022e6: PUSH4 0x9996b315 000022eb: PUSH1 0xe0 000022ed: SHL 000022ee: DUP2 000022ef: MSTORE 000022f0: PUSH1 0x01 000022f2: PUSH1 0x01 000022f4: PUSH1 0xa0 000022f6: SHL 000022f7: SUB 000022f8: DUP6 000022f9: AND 000022fa: PUSH1 0x04 000022fc: DUP3 000022fd: ADD 000022fe: MSTORE 000022ff: PUSH1 0x24 00002301: ADD 00002302: PUSH2 0x094f 00002305: JUMP 00002306: JUMPDEST 00002307: POP 00002308: DUP1 00002309: PUSH2 0x104a 0000230c: JUMP 0000230d: JUMPDEST 0000230e: DUP1 0000230f: MLOAD 00002310: ISZERO 00002311: PUSH2 0x231d 00002314: JUMPI 00002315: DUP1 00002316: MLOAD 00002317: DUP1 00002318: DUP3 00002319: PUSH1 0x20 0000231b: ADD 0000231c: REVERT 0000231d: JUMPDEST 0000231e: PUSH1 0x40 00002320: MLOAD 00002321: PUSH4 0x0a12f521 00002326: PUSH1 0xe1 00002328: SHL 00002329: DUP2 0000232a: MSTORE 0000232b: PUSH1 0x04 0000232d: ADD 0000232e: PUSH1 0x40 00002330: MLOAD 00002331: DUP1 00002332: SWAP2 00002333: SUB 00002334: SWAP1 00002335: REVERT 00002336: JUMPDEST 00002337: PUSH1 0x00 00002339: PUSH1 0x20 0000233b: DUP3 0000233c: DUP5 0000233d: SUB 0000233e: SLT 0000233f: ISZERO 00002340: PUSH2 0x2348 00002343: JUMPI 00002344: PUSH1 0x00 00002346: DUP1 00002347: REVERT 00002348: JUMPDEST 00002349: DUP2 0000234a: CALLDATALOAD 0000234b: PUSH1 0x01 0000234d: PUSH1 0x01 0000234f: PUSH1 0xe0 00002351: SHL 00002352: SUB 00002353: NOT 00002354: DUP2 00002355: AND 00002356: DUP2 00002357: EQ 00002358: PUSH2 0x104a 0000235b: JUMPI 0000235c: PUSH1 0x00 0000235e: DUP1 0000235f: REVERT 00002360: JUMPDEST 00002361: PUSH1 0x20 00002363: DUP1 00002364: DUP3 00002365: MSTORE 00002366: DUP3 00002367: MLOAD 00002368: DUP3 00002369: DUP3 0000236a: ADD 0000236b: DUP2 0000236c: SWAP1 0000236d: MSTORE 0000236e: PUSH1 0x00 00002370: SWAP2 00002371: DUP5 00002372: ADD 00002373: SWAP1 00002374: PUSH1 0x40 00002376: DUP5 00002377: ADD 00002378: SWAP1 00002379: DUP4 0000237a: JUMPDEST 0000237b: DUP2 0000237c: DUP2 0000237d: LT 0000237e: ISZERO 0000237f: PUSH2 0x23b6 00002382: JUMPI 00002383: PUSH2 0x23a0 00002386: DUP4 00002387: DUP6 00002388: MLOAD 00002389: DUP1 0000238a: MLOAD 0000238b: PUSH1 0x01 0000238d: PUSH1 0x01 0000238f: PUSH1 0xa0 00002391: SHL 00002392: SUB 00002393: AND 00002394: DUP3 00002395: MSTORE 00002396: PUSH1 0x20 00002398: SWAP1 00002399: DUP2 0000239a: ADD 0000239b: MLOAD 0000239c: SWAP2 0000239d: ADD 0000239e: MSTORE 0000239f: JUMP 000023a0: JUMPDEST 000023a1: PUSH1 0x20 000023a3: SWAP4 000023a4: SWAP1 000023a5: SWAP4 000023a6: ADD 000023a7: SWAP3 000023a8: PUSH1 0x40 000023aa: SWAP3 000023ab: SWAP1 000023ac: SWAP3 000023ad: ADD 000023ae: SWAP2 000023af: PUSH1 0x01 000023b1: ADD 000023b2: PUSH2 0x237a 000023b5: JUMP 000023b6: JUMPDEST 000023b7: POP 000023b8: SWAP1 000023b9: SWAP6 000023ba: SWAP5 000023bb: POP 000023bc: POP 000023bd: POP 000023be: POP 000023bf: POP 000023c0: JUMP 000023c1: JUMPDEST 000023c2: DUP1 000023c3: CALLDATALOAD 000023c4: PUSH1 0x01 000023c6: PUSH1 0x01 000023c8: PUSH1 0xa0 000023ca: SHL 000023cb: SUB 000023cc: DUP2 000023cd: AND 000023ce: DUP2 000023cf: EQ 000023d0: PUSH2 0x23d8 000023d3: JUMPI 000023d4: PUSH1 0x00 000023d6: DUP1 000023d7: REVERT 000023d8: JUMPDEST 000023d9: SWAP2 000023da: SWAP1 000023db: POP 000023dc: JUMP 000023dd: JUMPDEST 000023de: DUP1 000023df: ISZERO 000023e0: ISZERO 000023e1: DUP2 000023e2: EQ 000023e3: PUSH2 0x0c40 000023e6: JUMPI 000023e7: PUSH1 0x00 000023e9: DUP1 000023ea: REVERT 000023eb: JUMPDEST 000023ec: PUSH1 0x00 000023ee: DUP1 000023ef: PUSH1 0x00 000023f1: DUP1 000023f2: PUSH1 0x80 000023f4: DUP6 000023f5: DUP8 000023f6: SUB 000023f7: SLT 000023f8: ISZERO 000023f9: PUSH2 0x2401 000023fc: JUMPI 000023fd: PUSH1 0x00 000023ff: DUP1 00002400: REVERT 00002401: JUMPDEST 00002402: PUSH2 0x240a 00002405: DUP6 00002406: PUSH2 0x23c1 00002409: JUMP 0000240a: JUMPDEST 0000240b: SWAP4 0000240c: POP 0000240d: PUSH1 0x20 0000240f: DUP6 00002410: ADD 00002411: CALLDATALOAD 00002412: SWAP3 00002413: POP 00002414: PUSH2 0x241f 00002417: PUSH1 0x40 00002419: DUP7 0000241a: ADD 0000241b: PUSH2 0x23c1 0000241e: JUMP 0000241f: JUMPDEST 00002420: SWAP2 00002421: POP 00002422: PUSH1 0x60 00002424: DUP6 00002425: ADD 00002426: CALLDATALOAD 00002427: PUSH2 0x242f 0000242a: DUP2 0000242b: PUSH2 0x23dd 0000242e: JUMP 0000242f: JUMPDEST 00002430: SWAP4 00002431: SWAP7 00002432: SWAP3 00002433: SWAP6 00002434: POP 00002435: SWAP1 00002436: SWAP4 00002437: POP 00002438: POP 00002439: JUMP 0000243a: JUMPDEST 0000243b: PUSH1 0x00 0000243d: PUSH1 0x20 0000243f: DUP3 00002440: DUP5 00002441: SUB 00002442: SLT 00002443: ISZERO 00002444: PUSH2 0x244c 00002447: JUMPI 00002448: PUSH1 0x00 0000244a: DUP1 0000244b: REVERT 0000244c: JUMPDEST 0000244d: PUSH2 0x104a 00002450: DUP3 00002451: PUSH2 0x23c1 00002454: JUMP 00002455: JUMPDEST 00002456: PUSH1 0x00 00002458: DUP1 00002459: PUSH1 0x40 0000245b: DUP4 0000245c: DUP6 0000245d: SUB 0000245e: SLT 0000245f: ISZERO 00002460: PUSH2 0x2468 00002463: JUMPI 00002464: PUSH1 0x00 00002466: DUP1 00002467: REVERT 00002468: JUMPDEST 00002469: PUSH2 0x2471 0000246c: DUP4 0000246d: PUSH2 0x23c1 00002470: JUMP 00002471: JUMPDEST 00002472: SWAP5 00002473: PUSH1 0x20 00002475: SWAP4 00002476: SWAP1 00002477: SWAP4 00002478: ADD 00002479: CALLDATALOAD 0000247a: SWAP4 0000247b: POP 0000247c: POP 0000247d: POP 0000247e: JUMP 0000247f: JUMPDEST 00002480: PUSH1 0x00 00002482: DUP1 00002483: PUSH1 0x00 00002485: PUSH1 0x40 00002487: DUP5 00002488: DUP7 00002489: SUB 0000248a: SLT 0000248b: ISZERO 0000248c: PUSH2 0x2494 0000248f: JUMPI 00002490: PUSH1 0x00 00002492: DUP1 00002493: REVERT 00002494: JUMPDEST 00002495: PUSH2 0x249d 00002498: DUP5 00002499: PUSH2 0x23c1 0000249c: JUMP 0000249d: JUMPDEST 0000249e: SWAP3 0000249f: POP 000024a0: PUSH1 0x20 000024a2: DUP5 000024a3: ADD 000024a4: CALLDATALOAD 000024a5: PUSH8 0xffffffffffffffff 000024ae: DUP2 000024af: GT 000024b0: ISZERO 000024b1: PUSH2 0x24b9 000024b4: JUMPI 000024b5: PUSH1 0x00 000024b7: DUP1 000024b8: REVERT 000024b9: JUMPDEST 000024ba: DUP5 000024bb: ADD 000024bc: PUSH1 0x1f 000024be: DUP2 000024bf: ADD 000024c0: DUP7 000024c1: SGT 000024c2: PUSH2 0x24ca 000024c5: JUMPI 000024c6: PUSH1 0x00 000024c8: DUP1 000024c9: REVERT 000024ca: JUMPDEST 000024cb: DUP1 000024cc: CALLDATALOAD 000024cd: PUSH8 0xffffffffffffffff 000024d6: DUP2 000024d7: GT 000024d8: ISZERO 000024d9: PUSH2 0x24e1 000024dc: JUMPI 000024dd: PUSH1 0x00 000024df: DUP1 000024e0: REVERT 000024e1: JUMPDEST 000024e2: DUP7 000024e3: PUSH1 0x20 000024e5: DUP3 000024e6: DUP5 000024e7: ADD 000024e8: ADD 000024e9: GT 000024ea: ISZERO 000024eb: PUSH2 0x24f3 000024ee: JUMPI 000024ef: PUSH1 0x00 000024f1: DUP1 000024f2: REVERT 000024f3: JUMPDEST 000024f4: SWAP4 000024f5: SWAP7 000024f6: PUSH1 0x20 000024f8: SWAP2 000024f9: SWAP1 000024fa: SWAP2 000024fb: ADD 000024fc: SWAP6 000024fd: POP 000024fe: SWAP3 000024ff: SWAP4 00002500: POP 00002501: POP 00002502: POP 00002503: JUMP 00002504: JUMPDEST 00002505: PUSH1 0x00 00002507: PUSH1 0x20 00002509: DUP3 0000250a: DUP5 0000250b: SUB 0000250c: SLT 0000250d: ISZERO 0000250e: PUSH2 0x2516 00002511: JUMPI 00002512: PUSH1 0x00 00002514: DUP1 00002515: REVERT 00002516: JUMPDEST 00002517: POP 00002518: CALLDATALOAD 00002519: SWAP2 0000251a: SWAP1 0000251b: POP 0000251c: JUMP 0000251d: JUMPDEST 0000251e: PUSH1 0x00 00002520: DUP1 00002521: PUSH1 0x40 00002523: DUP4 00002524: DUP6 00002525: SUB 00002526: SLT 00002527: ISZERO 00002528: PUSH2 0x2530 0000252b: JUMPI 0000252c: PUSH1 0x00 0000252e: DUP1 0000252f: REVERT 00002530: JUMPDEST 00002531: DUP3 00002532: CALLDATALOAD 00002533: SWAP2 00002534: POP 00002535: PUSH2 0x2540 00002538: PUSH1 0x20 0000253a: DUP5 0000253b: ADD 0000253c: PUSH2 0x23c1 0000253f: JUMP 00002540: JUMPDEST 00002541: SWAP1 00002542: POP 00002543: SWAP3 00002544: POP 00002545: SWAP3 00002546: SWAP1 00002547: POP 00002548: JUMP 00002549: JUMPDEST 0000254a: PUSH1 0x20 0000254c: DUP1 0000254d: DUP3 0000254e: MSTORE 0000254f: DUP3 00002550: MLOAD 00002551: DUP3 00002552: DUP3 00002553: ADD 00002554: DUP2 00002555: SWAP1 00002556: MSTORE 00002557: PUSH1 0x00 00002559: SWAP2 0000255a: DUP5 0000255b: ADD 0000255c: SWAP1 0000255d: PUSH1 0x40 0000255f: DUP5 00002560: ADD 00002561: SWAP1 00002562: DUP4 00002563: JUMPDEST 00002564: DUP2 00002565: DUP2 00002566: LT 00002567: ISZERO 00002568: PUSH2 0x23b6 0000256b: JUMPI 0000256c: DUP4 0000256d: MLOAD 0000256e: PUSH1 0x01 00002570: PUSH1 0x01 00002572: PUSH1 0xa0 00002574: SHL 00002575: SUB 00002576: AND 00002577: DUP4 00002578: MSTORE 00002579: PUSH1 0x20 0000257b: SWAP4 0000257c: DUP5 0000257d: ADD 0000257e: SWAP4 0000257f: SWAP1 00002580: SWAP3 00002581: ADD 00002582: SWAP2 00002583: PUSH1 0x01 00002585: ADD 00002586: PUSH2 0x2563 00002589: JUMP 0000258a: JUMPDEST 0000258b: PUSH1 0x00 0000258d: DUP1 0000258e: PUSH1 0x40 00002590: DUP4 00002591: DUP6 00002592: SUB 00002593: SLT 00002594: ISZERO 00002595: PUSH2 0x259d 00002598: JUMPI 00002599: PUSH1 0x00 0000259b: DUP1 0000259c: REVERT 0000259d: JUMPDEST 0000259e: POP 0000259f: POP 000025a0: DUP1 000025a1: CALLDATALOAD 000025a2: SWAP3 000025a3: PUSH1 0x20 000025a5: SWAP1 000025a6: SWAP2 000025a7: ADD 000025a8: CALLDATALOAD 000025a9: SWAP2 000025aa: POP 000025ab: JUMP 000025ac: JUMPDEST 000025ad: PUSH1 0x20 000025af: DUP1 000025b0: DUP3 000025b1: MSTORE 000025b2: DUP3 000025b3: MLOAD 000025b4: DUP3 000025b5: DUP3 000025b6: ADD 000025b7: DUP2 000025b8: SWAP1 000025b9: MSTORE 000025ba: PUSH1 0x00 000025bc: SWAP2 000025bd: DUP5 000025be: ADD 000025bf: SWAP1 000025c0: PUSH1 0x40 000025c2: DUP5 000025c3: ADD 000025c4: SWAP1 000025c5: DUP4 000025c6: JUMPDEST 000025c7: DUP2 000025c8: DUP2 000025c9: LT 000025ca: ISZERO 000025cb: PUSH2 0x23b6 000025ce: JUMPI 000025cf: PUSH2 0x25ec 000025d2: DUP4 000025d3: DUP6 000025d4: MLOAD 000025d5: DUP1 000025d6: MLOAD 000025d7: PUSH1 0x01 000025d9: PUSH1 0x01 000025db: PUSH1 0xa0 000025dd: SHL 000025de: SUB 000025df: AND 000025e0: DUP3 000025e1: MSTORE 000025e2: PUSH1 0x20 000025e4: SWAP1 000025e5: DUP2 000025e6: ADD 000025e7: MLOAD 000025e8: SWAP2 000025e9: ADD 000025ea: MSTORE 000025eb: JUMP 000025ec: JUMPDEST 000025ed: PUSH1 0x20 000025ef: SWAP4 000025f0: SWAP1 000025f1: SWAP4 000025f2: ADD 000025f3: SWAP3 000025f4: PUSH1 0x40 000025f6: SWAP3 000025f7: SWAP1 000025f8: SWAP3 000025f9: ADD 000025fa: SWAP2 000025fb: PUSH1 0x01 000025fd: ADD 000025fe: PUSH2 0x25c6 00002601: JUMP 00002602: JUMPDEST 00002603: PUSH1 0x00 00002605: DUP1 00002606: PUSH1 0x00 00002608: PUSH1 0x40 0000260a: DUP5 0000260b: DUP7 0000260c: SUB 0000260d: SLT 0000260e: ISZERO 0000260f: PUSH2 0x2617 00002612: JUMPI 00002613: PUSH1 0x00 00002615: DUP1 00002616: REVERT 00002617: JUMPDEST 00002618: DUP4 00002619: CALLDATALOAD 0000261a: SWAP3 0000261b: POP 0000261c: PUSH1 0x20 0000261e: DUP5 0000261f: ADD 00002620: CALLDATALOAD 00002621: PUSH8 0xffffffffffffffff 0000262a: DUP2 0000262b: GT 0000262c: ISZERO 0000262d: PUSH2 0x2635 00002630: JUMPI 00002631: PUSH1 0x00 00002633: DUP1 00002634: REVERT 00002635: JUMPDEST 00002636: DUP5 00002637: ADD 00002638: PUSH1 0x1f 0000263a: DUP2 0000263b: ADD 0000263c: DUP7 0000263d: SGT 0000263e: PUSH2 0x2646 00002641: JUMPI 00002642: PUSH1 0x00 00002644: DUP1 00002645: REVERT 00002646: JUMPDEST 00002647: DUP1 00002648: CALLDATALOAD 00002649: PUSH8 0xffffffffffffffff 00002652: DUP2 00002653: GT 00002654: ISZERO 00002655: PUSH2 0x265d 00002658: JUMPI 00002659: PUSH1 0x00 0000265b: DUP1 0000265c: REVERT 0000265d: JUMPDEST 0000265e: DUP7 0000265f: PUSH1 0x20 00002661: DUP3 00002662: PUSH1 0x05 00002664: SHL 00002665: DUP5 00002666: ADD 00002667: ADD 00002668: GT 00002669: ISZERO 0000266a: PUSH2 0x24f3 0000266d: JUMPI 0000266e: PUSH1 0x00 00002670: DUP1 00002671: REVERT 00002672: JUMPDEST 00002673: PUSH1 0x00 00002675: DUP1 00002676: PUSH1 0x00 00002678: PUSH1 0x60 0000267a: DUP5 0000267b: DUP7 0000267c: SUB 0000267d: SLT 0000267e: ISZERO 0000267f: PUSH2 0x2687 00002682: JUMPI 00002683: PUSH1 0x00 00002685: DUP1 00002686: REVERT 00002687: JUMPDEST 00002688: PUSH2 0x2690 0000268b: DUP5 0000268c: PUSH2 0x23c1 0000268f: JUMP 00002690: JUMPDEST 00002691: SWAP3 00002692: POP 00002693: PUSH2 0x269e 00002696: PUSH1 0x20 00002698: DUP6 00002699: ADD 0000269a: PUSH2 0x23c1 0000269d: JUMP 0000269e: JUMPDEST 0000269f: SWAP3 000026a0: SWAP6 000026a1: SWAP3 000026a2: SWAP5 000026a3: POP 000026a4: POP 000026a5: POP 000026a6: PUSH1 0x40 000026a8: SWAP2 000026a9: SWAP1 000026aa: SWAP2 000026ab: ADD 000026ac: CALLDATALOAD 000026ad: SWAP1 000026ae: JUMP 000026af: JUMPDEST 000026b0: PUSH4 0x4e487b71 000026b5: PUSH1 0xe0 000026b7: SHL 000026b8: PUSH1 0x00 000026ba: MSTORE 000026bb: PUSH1 0x41 000026bd: PUSH1 0x04 000026bf: MSTORE 000026c0: PUSH1 0x24 000026c2: PUSH1 0x00 000026c4: REVERT 000026c5: JUMPDEST 000026c6: PUSH4 0x4e487b71 000026cb: PUSH1 0xe0 000026cd: SHL 000026ce: PUSH1 0x00 000026d0: MSTORE 000026d1: PUSH1 0x32 000026d3: PUSH1 0x04 000026d5: MSTORE 000026d6: PUSH1 0x24 000026d8: PUSH1 0x00 000026da: REVERT 000026db: JUMPDEST 000026dc: PUSH1 0x00 000026de: DUP3 000026df: MLOAD 000026e0: PUSH1 0x00 000026e2: JUMPDEST 000026e3: DUP2 000026e4: DUP2 000026e5: LT 000026e6: ISZERO 000026e7: PUSH2 0x26fc 000026ea: JUMPI 000026eb: PUSH1 0x20 000026ed: DUP2 000026ee: DUP7 000026ef: ADD 000026f0: DUP2 000026f1: ADD 000026f2: MLOAD 000026f3: DUP6 000026f4: DUP4 000026f5: ADD 000026f6: MSTORE 000026f7: ADD 000026f8: PUSH2 0x26e2 000026fb: JUMP 000026fc: JUMPDEST 000026fd: POP 000026fe: PUSH1 0x00 00002700: SWAP3 00002701: ADD 00002702: SWAP2 00002703: DUP3 00002704: MSTORE 00002705: POP 00002706: SWAP2 00002707: SWAP1 00002708: POP 00002709: JUMP 0000270a: JUMPDEST 0000270b: PUSH1 0x00 0000270d: PUSH1 0x20 0000270f: DUP3 00002710: DUP5 00002711: SUB 00002712: SLT 00002713: ISZERO 00002714: PUSH2 0x271c 00002717: JUMPI 00002718: PUSH1 0x00 0000271a: DUP1 0000271b: REVERT 0000271c: JUMPDEST 0000271d: POP 0000271e: MLOAD 0000271f: SWAP2 00002720: SWAP1 00002721: POP 00002722: JUMP 00002723: JUMPDEST 00002724: PUSH4 0x4e487b71 00002729: PUSH1 0xe0 0000272b: SHL 0000272c: PUSH1 0x00 0000272e: MSTORE 0000272f: PUSH1 0x11 00002731: PUSH1 0x04 00002733: MSTORE 00002734: PUSH1 0x24 00002736: PUSH1 0x00 00002738: REVERT 00002739: JUMPDEST 0000273a: DUP1 0000273b: DUP3 0000273c: ADD 0000273d: DUP1 0000273e: DUP3 0000273f: GT 00002740: ISZERO 00002741: PUSH2 0x0800 00002744: JUMPI 00002745: PUSH2 0x0800 00002748: PUSH2 0x2723 0000274b: JUMP 0000274c: JUMPDEST 0000274d: DUP2 0000274e: DUP2 0000274f: SUB 00002750: DUP2 00002751: DUP2 00002752: GT 00002753: ISZERO 00002754: PUSH2 0x0800 00002757: JUMPI 00002758: PUSH2 0x0800 0000275b: PUSH2 0x2723 0000275e: JUMP 0000275f: JUMPDEST 00002760: PUSH1 0x00 00002762: PUSH1 0x20 00002764: DUP3 00002765: DUP5 00002766: SUB 00002767: SLT 00002768: ISZERO 00002769: PUSH2 0x2771 0000276c: JUMPI 0000276d: PUSH1 0x00 0000276f: DUP1 00002770: REVERT 00002771: JUMPDEST 00002772: DUP2 00002773: MLOAD 00002774: PUSH2 0x104a 00002777: DUP2 00002778: PUSH2 0x23dd 0000277b: JUMP 0000277c: JUMPDEST 0000277d: PUSH4 0x4e487b71 00002782: PUSH1 0xe0 00002784: SHL 00002785: PUSH1 0x00 00002787: MSTORE 00002788: PUSH1 0x31 0000278a: PUSH1 0x04 0000278c: MSTORE 0000278d: PUSH1 0x24 0000278f: PUSH1 0x00 00002791: REVERT 00002792: INVALID 00002793: UNKNOWN(0xAF) 00002794: UNKNOWN(0x29) 00002795: UNKNOWN(0x0D) 00002796: DUP7 00002797: DUP1 00002798: DUP3 00002799: EXP 0000279a: UNKNOWN(0xAD) 0000279b: SWAP3 0000279c: UNKNOWN(0x28) 0000279d: SSTORE 0000279e: RETURN 0000279f: SWAP12 000027a0: ADDRESS 000027a1: PUSH1 0x97 000027a3: UNKNOWN(0xB2) 000027a4: UNKNOWN(0x0E) 000027a5: UNKNOWN(0x28) 000027a6: PUSH24 0x4d6c1ad35a20325630c3a02c872340a532bdd7bb02bea115 000027bf: UNKNOWN(0xC1) 000027c0: UNKNOWN(0xB0) 000027c1: CALL 000027c2: UNKNOWN(0xBA) 000027c3: DUP8 000027c4: UNKNOWN(0xEA) 000027c5: UNKNOWN(0xC9) 000027c6: DUP3 000027c7: CREATE2 000027c8: UNKNOWN(0xB7) 000027c9: SWAP12 000027ca: MLOAD 000027cb: UNKNOWN(0xAC) 000027cc: XOR 000027cd: SWAP16 000027ce: STATICCALL 000027cf: UNKNOWN(0xAC) 000027d0: SHL 000027d1: PUSH16 0xce4c6ad1028fbb14d0f715be3e35174b 000027e2: UNKNOWN(0xEC) 000027e3: ORIGIN 000027e4: UNKNOWN(0x4C) 000027e5: CREATE2 000027e6: UNKNOWN(0xF9) 000027e7: SWAP10 000027e8: UNKNOWN(0xEA) 000027e9: CODECOPY 000027ea: SHR 000027eb: LOG4 000027ec: UNKNOWN(0xC4) 000027ed: UNKNOWN(0xCA) 000027ee: UNKNOWN(0x4C) 000027ef: DIFFICULTY 000027f0: PUSH32 0x2d159143236d81225394f3bd65b44e6e29fdf4d7ba0773d9bb3f5cc15eb80ba3 00002811: PUSH24 0x77a2646970667358221220cf155cc2499566f150a0b71454 0000282a: TSTORE 0000282b: SSTORE 0000282c: DUP8 0000282d: UNKNOWN(0xA7) 0000282e: UNKNOWN(0xDD) 0000282f: SHR 00002830: UNKNOWN(0xE0) 00002831: MSTORE 00002832: SELFDESTRUCT 00002833: LOG0 00002834: RETURNDATACOPY 00002835: LOG1 00002836: GT 00002837: TSTORE 00002838: SELFDESTRUCT 00002839: UNKNOWN(0xC2) 0000283a: PUSH7 0x5a0e64736f6c63 00002842: NUMBER 00002843: STOP 00002844: ADDMOD 00002845: BYTE 00002846: STOP 00002847: CALLER
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | cast | SELFDESTRUCT present | 85 | no | — |
viewevidence_json{
"notes": "selfdestruct can remove contract code and send funds; review reachability",
"selfdestruct_count": 2
}
|
| high | upgradeability | detector | Untrusted DELEGATECALL target reachable | 55 | no | no |
viewtrace_id: 0x7ceec78e91f5752a6cbd255c39c24a8858c4a6798a20a6712a3f0d37f665bb2b
validation_json{
"sink": "DELEGATECALL",
"errors": 0,
"status": "unknown",
"attempts": 192,
"trace_id": "0x7ceec78e91f5752a6cbd255c39c24a8858c4a6798a20a6712a3f0d37f665bb2b",
"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": "0xe1f21c67",
"selector": "0xe1f21c67",
"calldata_variants": [
"0xe1f21c67",
"0xe1f21c670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe4860339",
"selector": "0xe4860339",
"calldata_variants": [
"0xe4860339",
"0xe48603390000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe7e31e7a",
"selector": "0xe7e31e7a",
"calldata_variants": [
"0xe7e31e7a",
"0xe7e31e7a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf0225a3c",
"selector": "0xf0225a3c",
"calldata_variants": [
"0xf0225a3c",
"0xf0225a3c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf1880b24",
"selector": "0xf1880b24",
"calldata_variants": [
"0xf1880b24",
"0xf1880b240000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf60d7e9c",
"selector": "0xf60d7e9c",
"calldata_variants": [
"0xf60d7e9c",
"0xf60d7e9c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xcc855ccc",
"selector": "0xcc855ccc",
"calldata_variants": [
"0xcc855ccc",
"0xcc855ccc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd48bfca7",
"selector": "0xd48bfca7",
"calldata_variants": [
"0xd48bfca7",
"0xd48bfca70000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 7088,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
}
],
"guards_detected": [
{
"pc": 10211,
"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": "0xe1f21c67",
"selector": "0xe1f21c67",
"calldata_variants": [
"0xe1f21c67",
"0xe1f21c670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe4860339",
"selector": "0xe4860339",
"calldata_variants": [
"0xe4860339",
"0xe48603390000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe7e31e7a",
"selector": "0xe7e31e7a",
"calldata_variants": [
"0xe7e31e7a",
"0xe7e31e7a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf0225a3c",
"selector": "0xf0225a3c",
"calldata_variants": [
"0xf0225a3c",
"0xf0225a3c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf1880b24",
"selector": "0xf1880b24",
"calldata_variants": [
"0xf1880b24",
"0xf1880b240000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf60d7e9c",
"selector": "0xf60d7e9c",
"calldata_variants": [
"0xf60d7e9c",
"0xf60d7e9c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xcc855ccc",
"selector": "0xcc855ccc",
"calldata_variants": [
"0xcc855ccc",
"0xcc855ccc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd48bfca7",
"selector": "0xd48bfca7",
"calldata_variants": [
"0xd48bfca7",
"0xd48bfca70000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 10211,
"type": "tx_origin_used"
}
]
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0xdde44a864426764a4fd4787780c641c470c57eaa92ab7c44226825d61f03052a
call_targets:
0x468f873e7ba0907e2dee2f61d011a3d311178706
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xdde44a864426764a4fd4787780c641c470c57eaa92ab7c44226825d61f03052a",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x468f873e7ba0907e2dee2f61d011a3d311178706"
],
"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": "0xe1f21c67",
"selector": "0xe1f21c67",
"calldata_variants": [
"0xe1f21c67",
"0xe1f21c670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe4860339",
"selector": "0xe4860339",
"calldata_variants": [
"0xe4860339",
"0xe48603390000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe7e31e7a",
"selector": "0xe7e31e7a",
"calldata_variants": [
"0xe7e31e7a",
"0xe7e31e7a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf0225a3c",
"selector": "0xf0225a3c",
"calldata_variants": [
"0xf0225a3c",
"0xf0225a3c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf1880b24",
"selector": "0xf1880b24",
"calldata_variants": [
"0xf1880b24",
"0xf1880b240000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf60d7e9c",
"selector": "0xf60d7e9c",
"calldata_variants": [
"0xf60d7e9c",
"0xf60d7e9c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xcc855ccc",
"selector": "0xcc855ccc",
"calldata_variants": [
"0xcc855ccc",
"0xcc855ccc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd48bfca7",
"selector": "0xd48bfca7",
"calldata_variants": [
"0xd48bfca7",
"0xd48bfca70000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 2800,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2854,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4554,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 8,
"guards_detected": [
{
"pc": 10211,
"type": "tx_origin_used"
}
]
}
|
| medium | other | detector | SELFDESTRUCT reachable | 45 | no | no |
viewtrace_id: 0x8ef860214aab13c0d94783e143bd5f2f2423b7d5f1c7f04ce0aad21765fa8268
validation_json{
"sink": "SELFDESTRUCT",
"errors": 0,
"status": "unknown",
"attempts": 32,
"trace_id": "0x8ef860214aab13c0d94783e143bd5f2f2423b7d5f1c7f04ce0aad21765fa8268",
"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": "0xe1f21c67",
"selector": "0xe1f21c67",
"calldata_variants": [
"0xe1f21c67",
"0xe1f21c670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe4860339",
"selector": "0xe4860339",
"calldata_variants": [
"0xe4860339",
"0xe48603390000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe7e31e7a",
"selector": "0xe7e31e7a",
"calldata_variants": [
"0xe7e31e7a",
"0xe7e31e7a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf0225a3c",
"selector": "0xf0225a3c",
"calldata_variants": [
"0xf0225a3c",
"0xf0225a3c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf1880b24",
"selector": "0xf1880b24",
"calldata_variants": [
"0xf1880b24",
"0xf1880b240000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf60d7e9c",
"selector": "0xf60d7e9c",
"calldata_variants": [
"0xf60d7e9c",
"0xf60d7e9c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xcc855ccc",
"selector": "0xcc855ccc",
"calldata_variants": [
"0xcc855ccc",
"0xcc855ccc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd48bfca7",
"selector": "0xd48bfca7",
"calldata_variants": [
"0xd48bfca7",
"0xd48bfca70000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 10211,
"type": "tx_origin_used"
}
],
"selfdestruct_count": 2
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0xdde44a864426764a4fd4787780c641c470c57eaa92ab7c44226825d61f03052a
call_targets:
0x468f873e7ba0907e2dee2f61d011a3d311178706
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xdde44a864426764a4fd4787780c641c470c57eaa92ab7c44226825d61f03052a",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x468f873e7ba0907e2dee2f61d011a3d311178706"
],
"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": "0xe1f21c67",
"selector": "0xe1f21c67",
"calldata_variants": [
"0xe1f21c67",
"0xe1f21c670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe4860339",
"selector": "0xe4860339",
"calldata_variants": [
"0xe4860339",
"0xe48603390000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe7e31e7a",
"selector": "0xe7e31e7a",
"calldata_variants": [
"0xe7e31e7a",
"0xe7e31e7a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf0225a3c",
"selector": "0xf0225a3c",
"calldata_variants": [
"0xf0225a3c",
"0xf0225a3c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf1880b24",
"selector": "0xf1880b24",
"calldata_variants": [
"0xf1880b24",
"0xf1880b240000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf60d7e9c",
"selector": "0xf60d7e9c",
"calldata_variants": [
"0xf60d7e9c",
"0xf60d7e9c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xcc855ccc",
"selector": "0xcc855ccc",
"calldata_variants": [
"0xcc855ccc",
"0xcc855ccc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd48bfca7",
"selector": "0xd48bfca7",
"calldata_variants": [
"0xd48bfca7",
"0xd48bfca70000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 2800,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 2854,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4554,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 8,
"guards_detected": [
{
"pc": 10211,
"type": "tx_origin_used"
}
],
"untrusted_call_count": 8
}
|
| 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 | CREATE/CREATE2 reachable | 45 | no | no |
viewtrace_id: 0x8ef860214aab13c0d94783e143bd5f2f2423b7d5f1c7f04ce0aad21765fa8268
validation_json{
"sink": "CREATE",
"errors": 0,
"status": "unknown",
"attempts": 32,
"trace_id": "0x8ef860214aab13c0d94783e143bd5f2f2423b7d5f1c7f04ce0aad21765fa8268",
"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": "0xe1f21c67",
"selector": "0xe1f21c67",
"calldata_variants": [
"0xe1f21c67",
"0xe1f21c670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe4860339",
"selector": "0xe4860339",
"calldata_variants": [
"0xe4860339",
"0xe48603390000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe7e31e7a",
"selector": "0xe7e31e7a",
"calldata_variants": [
"0xe7e31e7a",
"0xe7e31e7a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf0225a3c",
"selector": "0xf0225a3c",
"calldata_variants": [
"0xf0225a3c",
"0xf0225a3c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf1880b24",
"selector": "0xf1880b24",
"calldata_variants": [
"0xf1880b24",
"0xf1880b240000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf60d7e9c",
"selector": "0xf60d7e9c",
"calldata_variants": [
"0xf60d7e9c",
"0xf60d7e9c0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xcc855ccc",
"selector": "0xcc855ccc",
"calldata_variants": [
"0xcc855ccc",
"0xcc855ccc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd48bfca7",
"selector": "0xd48bfca7",
"calldata_variants": [
"0xd48bfca7",
"0xd48bfca70000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"create_count": 0,
"create2_count": 2
}
|
| low | other | cast | Contract creation opcode present | 60 | no | — |
viewevidence_json{
"notes": "runtime can deploy contracts dynamically via CREATE/CREATE2",
"create_count": 0,
"create2_count": 2
}
|
| 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": 5
}
|