TW
Tripwire
Find contracts. Test them. Review real vulns.

Analysis Run

99041987-80f5-485d-80b1-2417648d8417

complete
Chain ID
1
Address
Block Number
Created
Mon, Jan 5, 2026 7:00 PM
Review Summary

What survived the funnel

Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?

Confirmed
0
Validated
0
Source
Bytecode only
Review Backing
Not yet
Best current signal
Untrusted DELEGATECALL target reachable
crit 0 high 0 proxy context implementation known
Review Checklist
1. Read the findings table first. Ignore raw jobs until the result looks real.
2. Confirm attacker control, not just the existence of a sink.
3. Confirm money or privilege impact.
4. Keep it if the behavior is real. Kill it if this is normal proxy, admin, or upgrade plumbing.

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
31737 report.consolidate complete 1 / 1 3 months ago
95845 artifact.fetch complete 1 / 3 1 week ago
95846 tool.cast_disasm complete 1 / 3 1 week ago
95847 analysis.bundle complete 1 / 3 1 week ago
95848 capability.graph complete 1 / 3 1 week ago
95849 detector.run complete 1 / 3 1 week ago
95850 validation.fork complete 1 / 3 1 week ago

Artifact

Runtime bytecode: available
Creation TX:
Deployer:
Proxy: yes
Verified Source: no

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 1
Findings
0
No findings?
yes
Summary
Reviewed runtime bytecode bundle and identified AccessControl/UUPS-style guards around the only observable value transfer and upgrade paths; no concrete, unprotected value-extraction path is evident from bytecode alone.
View stderr
[codex:1217152] OpenAI Codex v0.77.0 (research preview)
[codex:1217152] --------
[codex:1217152] workdir: /tmp/codex-multi-hbpjsfoj
[codex:1217152] model: gpt-5.2-codex
[codex:1217152] provider: openai
[codex:1217152] approval: never
[codex:1217152] sandbox: read-only
[codex:1217152] reasoning effort: xhigh
[codex:1217152] reasoning summaries: auto
[codex:1217152] session id: 019b8f7c-a8ec-7c81-8208-eeec7ce285a5
[codex:1217152] --------
[codex:1217152] user
[codex:1217152] 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:1217152] 
[codex:1217152] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:1217152] 
[codex:1217152] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:1217152] - Gas inefficiency, code quality, or best practices
[codex:1217152] - Theoretical vulnerabilities without a clear extraction path
[codex:1217152] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:1217152] - Issues requiring social engineering or off-chain coordination
[codex:1217152] 
[codex:1217152] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:1217152] - CALL/DELEGATECALL with controllable destination or calldata
[codex:1217152] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:1217152] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:1217152] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:1217152] - External calls before state updates (reentrancy)
[codex:1217152] - SELFDESTRUCT with controllable beneficiary
[codex:1217152] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:1217152] 
[codex:1217152] For each finding, you MUST explain:
[codex:1217152] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:1217152] 2. The concrete sequence of transactions to extract value
[codex:1217152] 3. Why you believe this is exploitable (not just suspicious)
[codex:1217152] 
[codex:1217152] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:1217152] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:1217152] 
[codex:1217152] Output MUST be valid JSON matching the provided schema.
[codex:1217152] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:1217152] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:1217152] mcp startup: no servers
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Prioritizing BYTECODE_BUNDLE.txt reading**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc ls in /tmp/codex-multi-hbpjsfoj succeeded in 6ms:
[codex:1217152] BYTECODE_BUNDLE.txt
[codex:1217152] codex-output-schema.json
[codex:1217152] exec
[codex:1217152] /bin/bash -lc 'wc -l BYTECODE_BUNDLE.txt' in /tmp/codex-multi-hbpjsfoj succeeded in 6ms:
[codex:1217152] 5 BYTECODE_BUNDLE.txt
[codex:1217152] exec
[codex:1217152] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-hbpjsfoj succeeded in 5ms:
[codex:1217152] Runtime bytecode bundle for best-effort auditing.
[codex:1217152] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:1217152] 
[codex:1217152] FILE: runtime_bytecode.hex
[codex:1217152] 0x60806040526004361061010d5760003560e01c80638129fc1c11610095578063c49baebe11610064578063c49baebe14610304578063ccd9399814610338578063d547741f1461036c578063db2e21bc1461038c578063e12fba8d146103a157600080fd5b80638129fc1c1461027c57806391d1485414610291578063a217fddf146102b1578063ad3cb1cc146102c657600080fd5b806336568abe116100dc57806336568abe146101f45780634f1ef2861461021457806352d1902d1461022757806370ff8fdb1461023c5780637d2b9cc01461025c57600080fd5b806301ffc9a71461012257806305643f3914610157578063248a9ca3146101a65780632f2ff15d146101d457600080fd5b3661011d5761011b336103af565b005b600080fd5b34801561012e57600080fd5b5061014261013d366004611228565b610413565b60405190151581526020015b60405180910390f35b34801561016357600080fd5b50610142610172366004611252565b60009081527ff177c69799c54616dafe77c22ebee5241cfaca9a608e9fb90c5c56a34d576e00602052604090205460ff1690565b3480156101b257600080fd5b506101c66101c1366004611252565b61044a565b60405190815260200161014e565b3480156101e057600080fd5b5061011b6101ef366004611287565b61046c565b34801561020057600080fd5b5061011b61020f366004611287565b61048e565b61011b61022236600461136a565b6104c6565b34801561023357600080fd5b506101c66104e5565b34801561024857600080fd5b5061011b61025736600461144b565b610502565b34801561026857600080fd5b5061011b610277366004611252565b610631565b34801561028857600080fd5b5061011b610661565b34801561029d57600080fd5b506101426102ac366004611287565b61078b565b3480156102bd57600080fd5b506101c6600081565b3480156102d257600080fd5b506102f7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161014e9190611581565b34801561031057600080fd5b506101c67f21702c8af46127c7fa207f89d0b0a8441bb32959a0ac7df790e9ab1a25c9892681565b34801561034457600080fd5b507f0abe884846eee1d492e84e31ee30140e7b2e501dde84c2790e64629bd4209300546101c6565b34801561037857600080fd5b5061011b610387366004611287565b6107c3565b34801561039857600080fd5b5061011b6107df565b61011b6103af3660046115b4565b346000036103d0576040516341abc80160e01b815260040160405180910390fd5b6040513481526001600160a01b0382169033907fb2d8c64c6b025b34c219301320c7cbc757fa77c134e652d33e449d9629735f539060200160405180910390a350565b60006001600160e01b03198216637965db0b60e01b148061044457506301ffc9a760e01b6001600160e01b03198316145b92915050565b60009081526000805160206116a0833981519152602052604090206001015490565b6104758261044a565b61047e81610816565b6104888383610823565b50505050565b6001600160a01b03811633146104b75760405163334bd91960e11b815260040160405180910390fd5b6104c182826108c8565b505050565b6104ce610944565b6104d7826109eb565b6104e182826109f6565b5050565b60006104ef610ab8565b5060008051602061168083398151915290565b7ff177c69799c54616dafe77c22ebee5241cfaca9a608e9fb90c5c56a34d576e006105308286868630610b01565b60008060008061053f86610e25565b929650909450925090506001600160a01b03811630146105725760405163412ce84360e01b815260040160405180910390fd5b60008281526020869052604090205460ff16156105a25760405163d0ebeb4b60e01b815260040160405180910390fd5b6000828152602086905260409020805460ff191660011790556105c58484610e7f565b6105e2576040516312171d8360e31b815260040160405180910390fd5b60408051848152602081018490526001600160a01b038616917f3b3ea932258c0790aa2c649875c0051f6eedd02c64674181babf9ecf6611f6aa910160405180910390a2505050505050505050565b600061063c81610816565b507f0abe884846eee1d492e84e31ee30140e7b2e501dde84c2790e64629bd420930055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156106a75750825b905060008267ffffffffffffffff1660011480156106c45750303b155b9050811580156106d2575080155b156106f05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561071a57845460ff60401b1916600160401b1785555b610722610edd565b61072a610ee9565b610732610ee9565b61073d600033610823565b50831561078457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b60009182526000805160206116a0833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6107cc8261044a565b6107d581610816565b61048883836108c8565b60006107ea81610816565b60405133904780156108fc02916000818181858888f193505050501580156104e1573d6000803e3d6000fd5b6108208133610ef1565b50565b60006000805160206116a083398151915261083e848461078b565b6108be576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556108743390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610444565b6000915050610444565b60006000805160206116a08339815191526108e3848461078b565b156108be576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610444565b306001600160a01b037f000000000000000000000000bdead28e8a46457646de417d0295c535e2bad4ca1614806109cb57507f000000000000000000000000bdead28e8a46457646de417d0295c535e2bad4ca6001600160a01b03166109bf600080516020611680833981519152546001600160a01b031690565b6001600160a01b031614155b156109e95760405163703e46dd60e11b815260040160405180910390fd5b565b60006104e181610816565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a50575060408051601f3d908101601f19168201909252610a4d918101906115cf565b60015b610a7d57604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b6000805160206116808339815191528114610aae57604051632a87526960e21b815260048101829052602401610a74565b6104c18383610f2a565b306001600160a01b037f000000000000000000000000bdead28e8a46457646de417d0295c535e2bad4ca16146109e95760405163703e46dd60e11b815260040160405180910390fd5b8451606814610b2357604051636eca2e4b60e01b815260040160405180910390fd5b6000816001600160a01b031663ccd939986040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8791906115cf565b90508085511015610bab576040516322e5ce4360e21b815260040160405180910390fd5b6000610bb687610f80565b905060008267ffffffffffffffff811115610bd357610bd36112b3565b604051908082528060200260200182016040528015610bfc578160200160208202803683370190505b50905060005b83811015610e1a5760006001848a8481518110610c2157610c216115e8565b60200260200101518a8581518110610c3b57610c3b6115e8565b60200260200101518a8681518110610c5557610c556115e8565b602002602001015160405160008152602001604052604051610c93949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015610cb5573d6000803e3d6000fd5b505050602060405103519050856001600160a01b03166391d14854876001600160a01b031663c49baebe6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3291906115cf565b6040516001600160e01b031960e084901b16815260048101919091526001600160a01b0384166024820152604401602060405180830381865afa158015610d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da191906115fe565b610dbe57604051636caa20b560e11b815260040160405180910390fd5b610dc88382611002565b15610de6576040516323ef34dd60e21b815260040160405180910390fd5b80838381518110610df957610df96115e8565b6001600160a01b039092166020928302919091019091015250600101610c02565b505050505050505050565b600080600080610e36855160681490565b610e5357604051636eca2e4b60e01b815260040160405180910390fd5b6001600160a01b0360148601511693506034850151925060548501519150606885015190509193509193565b600080836001600160a01b03168360405160006040518083038185875af1925050503d8060008114610ecd576040519150601f19603f3d011682016040523d82523d6000602084013e610ed2565b606091505b509095945050505050565b610ee561105d565b6109e95b6109e961105d565b610efb828261078b565b6104e15760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610a74565b610f33826110a6565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115610f78576104c1828261110b565b6104e1611181565b604080518082018252601a81527f19457468657265756d205369676e6564204d6573736167653a0a0000000000006020808301919091528251808401845260038152620c4c0d60ea1b81830152925160009391610fe39184918491889101611620565b6040516020818303038152906040528051906020012092505050919050565b6000805b835181101561105357826001600160a01b031684828151811061102b5761102b6115e8565b60200260200101516001600160a01b03160361104b576001915050610444565b600101611006565b5060009392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166109e957604051631afcd79f60e31b815260040160405180910390fd5b806001600160a01b03163b6000036110dc57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610a74565b60008051602061168083398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516111289190611663565b600060405180830381855af49150503d8060008114611163576040519150601f19603f3d011682016040523d82523d6000602084013e611168565b606091505b50915091506111788583836111a0565b95945050505050565b34156109e95760405163b398979f60e01b815260040160405180910390fd5b6060826111b5576111b0826111ff565b6111f8565b81511580156111cc57506001600160a01b0384163b155b156111f557604051639996b31560e01b81526001600160a01b0385166004820152602401610a74565b50805b9392505050565b80511561120f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b60006020828403121561123a57600080fd5b81356001600160e01b0319811681146111f857600080fd5b60006020828403121561126457600080fd5b5035919050565b80356001600160a01b038116811461128257600080fd5b919050565b6000806040838503121561129a57600080fd5b823591506112aa6020840161126b565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156112f2576112f26112b3565b604052919050565b600082601f83011261130b57600080fd5b813567ffffffffffffffff811115611325576113256112b3565b611338601f8201601f19166020016112c9565b81815284602083860101111561134d57600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561137d57600080fd5b6113868361126b565b9150602083013567ffffffffffffffff8111156113a257600080fd5b6113ae858286016112fa565b9150509250929050565b600067ffffffffffffffff8211156113d2576113d26112b3565b5060051b60200190565b600082601f8301126113ed57600080fd5b813560206114026113fd836113b8565b6112c9565b8083825260208201915060208460051b87010193508684111561142457600080fd5b602086015b848110156114405780358352918301918301611429565b509695505050505050565b6000806000806080858703121561146157600080fd5b843567ffffffffffffffff8082111561147957600080fd5b818701915087601f83011261148d57600080fd5b8135602061149d6113fd836113b8565b82815260059290921b8401810191818101908b8411156114bc57600080fd5b948201945b838610156114ea57853560ff811681146114db5760008081fd5b825294820194908201906114c1565b9850508801359250508082111561150057600080fd5b61150c888389016113dc565b9450604087013591508082111561152257600080fd5b61152e888389016113dc565b9350606087013591508082111561154457600080fd5b50611551878288016112fa565b91505092959194509250565b60005b83811015611578578181015183820152602001611560565b50506000910152565b60208152600082518060208401526115a081604085016020870161155d565b601f01601f19169190910160400192915050565b6000602082840312156115c657600080fd5b6111f88261126b565b6000602082840312156115e157600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561161057600080fd5b815180151581146111f857600080fd5b6000845161163281846020890161155d565b84519083019061164681836020890161155d565b845191019061165981836020880161155d565b0195945050505050565b6000825161167581846020870161155d565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220f891248afd5fcbc7e1e4bee1536f70478d815adc30810eedbe9467a410a4ec2264736f6c63430008180033
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Inspecting upgradeable contract bytecode**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] from textwrap import shorten
[codex:1217152] 
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] # opcode map
[codex:1217152] ops={
[codex:1217152] 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:1217152] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
[codex:1217152] 0x20:'SHA3',
[codex:1217152] 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:1217152] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:1217152] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1217152] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1217152] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152] 
[codex:1217152] def disasm(start,end):
[codex:1217152]     i=start
[codex:1217152]     out=[]
[codex:1217152]     while i<end:
[codex:1217152]         op=code[i]
[codex:1217152]         name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152]         if 0x60<=op<=0x7f:
[codex:1217152]             n=op-0x5f
[codex:1217152]             data=code[i+1:i+1+n]
[codex:1217152]             out.append((i,name,data.hex()))
[codex:1217152]             i+=1+n
[codex:1217152]         else:
[codex:1217152]             out.append((i,name,''))
[codex:1217152]             i+=1
[codex:1217152]     return out
[codex:1217152] 
[codex:1217152] # find function entry addresses 0x048e etc
[codex:1217152] for addr in [0x046c,0x048e,0x04c6,0x07df,0x078b,0x0823,0x08c8,0x0ef1]:
[codex:1217152]     print('---',hex(addr))
[codex:1217152]     for off,name,data in disasm(addr, addr+80):
[codex:1217152]         if data:
[codex:1217152]             print(f'{off:04x}: {name} 0x{data}')
[codex:1217152]         else:
[codex:1217152]             print(f'{off:04x}: {name}')
[codex:1217152] 
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 30ms:
[codex:1217152] --- 0x46c
[codex:1217152] 046c: JUMPDEST
[codex:1217152] 046d: PUSH2 0x0475
[codex:1217152] 0470: DUP3
[codex:1217152] 0471: PUSH2 0x044a
[codex:1217152] 0474: JUMP
[codex:1217152] 0475: JUMPDEST
[codex:1217152] 0476: PUSH2 0x047e
[codex:1217152] 0479: DUP2
[codex:1217152] 047a: PUSH2 0x0816
[codex:1217152] 047d: JUMP
[codex:1217152] 047e: JUMPDEST
[codex:1217152] 047f: PUSH2 0x0488
[codex:1217152] 0482: DUP4
[codex:1217152] 0483: DUP4
[codex:1217152] 0484: PUSH2 0x0823
[codex:1217152] 0487: JUMP
[codex:1217152] 0488: JUMPDEST
[codex:1217152] 0489: POP
[codex:1217152] 048a: POP
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Analyzing function selector and parameter decoding**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:1217152] 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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',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:1217152] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1217152] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1217152] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152] 
[codex:1217152] def disasm(start,end):
[codex:1217152]     i=start
[codex:1217152]     while i<end:
[codex:1217152]         op=code[i]
[codex:1217152]         name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152]         if 0x60<=op<=0x7f:
[codex:1217152]             n=op-0x5f
[codex:1217152]             data=code[i+1:i+1+n]
[codex:1217152]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152]             i+=1+n
[codex:1217152]         else:
[codex:1217152]             print(f'{i:04x}: {name}')
[codex:1217152]             i+=1
[codex:1217152] 
[codex:1217152] print('--- 0x1280')
[codex:1217152] disasm(0x1280,0x1290)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 21ms:
[codex:1217152] --- 0x1280
[codex:1217152] 1280: DUP1
[codex:1217152] 1281: REVERT
[codex:1217152] 1282: JUMPDEST
[codex:1217152] 1283: SWAP2
[codex:1217152] 1284: SWAP1
[codex:1217152] 1285: POP
[codex:1217152] 1286: JUMP
[codex:1217152] 1287: JUMPDEST
[codex:1217152] 1288: PUSH1 0x00
[codex:1217152] 128a: DUP1
[codex:1217152] 128b: PUSH1 0x40
[codex:1217152] 128d: DUP4
[codex:1217152] 128e: DUP6
[codex:1217152] 128f: SUB
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Extending disassembly range**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:1217152] 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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',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:1217152] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1217152] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1217152] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152] 
[codex:1217152] def disasm(start,end):
[codex:1217152]     i=start
[codex:1217152]     while i<end:
[codex:1217152]         op=code[i]
[codex:1217152]         name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152]         if 0x60<=op<=0x7f:
[codex:1217152]             n=op-0x5f
[codex:1217152]             data=code[i+1:i+1+n]
[codex:1217152]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152]             i+=1+n
[codex:1217152]         else:
[codex:1217152]             print(f'{i:04x}: {name}')
[codex:1217152]             i+=1
[codex:1217152] 
[codex:1217152] print('--- 0x1260-0x12c0')
[codex:1217152] disasm(0x1260,0x12c0)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 25ms:
[codex:1217152] --- 0x1260-0x12c0
[codex:1217152] 1260: PUSH1 0x00
[codex:1217152] 1262: DUP1
[codex:1217152] 1263: REVERT
[codex:1217152] 1264: JUMPDEST
[codex:1217152] 1265: POP
[codex:1217152] 1266: CALLDATALOAD
[codex:1217152] 1267: SWAP2
[codex:1217152] 1268: SWAP1
[codex:1217152] 1269: POP
[codex:1217152] 126a: JUMP
[codex:1217152] 126b: JUMPDEST
[codex:1217152] 126c: DUP1
[codex:1217152] 126d: CALLDATALOAD
[codex:1217152] 126e: PUSH1 0x01
[codex:1217152] 1270: PUSH1 0x01
[codex:1217152] 1272: PUSH1 0xa0
[codex:1217152] 1274: SHL
[codex:1217152] 1275: SUB
[codex:1217152] 1276: DUP2
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Decoding function selectors and access control logic**
[codex:1217152] 
[codex:1217152] I'm breaking down EVM bytecode to identify how various functions decode parameters—like addresses or bytes32—and mapping those to known AccessControl roles and checks, including how restricted calls send contract balance only to authorized callers. I'm piecing together the role-checking mechanism from opcode flows and constants embedded in code.
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import hashlib
[codex:1217152] 
[codex:1217152] def selector(sig):
[codex:1217152]     return hashlib.sha3_256(sig.encode()).hexdigest()[:8]
[codex:1217152] 
[codex:1217152] candidates=[
[codex:1217152]     'AccessControlUnauthorizedAccount(address,bytes32)',
[codex:1217152]     'AccessControlUnauthorizedAccount(address,string)',
[codex:1217152]     'AccessControlMissingRole(address,bytes32)',
[codex:1217152]     'AccessControlBadConfirmation()',
[codex:1217152]     'OwnableUnauthorizedAccount(address)',
[codex:1217152]     'OwnableInvalidOwner(address)',
[codex:1217152]     'Unauthorized()',
[codex:1217152]     'NotAuthorized()',
[codex:1217152] ]
[codex:1217152] for sig in candidates:
[codex:1217152]     print(sig, selector(sig))
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 25ms:
[codex:1217152] AccessControlUnauthorizedAccount(address,bytes32) 4dd1b6f8
[codex:1217152] AccessControlUnauthorizedAccount(address,string) b9fb09f5
[codex:1217152] AccessControlMissingRole(address,bytes32) 39dd6470
[codex:1217152] AccessControlBadConfirmation() 5715c118
[codex:1217152] OwnableUnauthorizedAccount(address) 367c2886
[codex:1217152] OwnableInvalidOwner(address) 63d14d69
[codex:1217152] Unauthorized() 94b7950d
[codex:1217152] NotAuthorized() fd3fa225
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Comparing hash functions for event signature**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] try:
[codex:1217152]     import sha3
[codex:1217152]     def keccak256(x):
[codex:1217152]         k=sha3.keccak_256(); k.update(x); return k.hexdigest()
[codex:1217152]     for sig in ['AccessControlUnauthorizedAccount(address,bytes32)','AccessControlMissingRole(address,bytes32)','AccessControlBadConfirmation()','OwnableUnauthorizedAccount(address)']:
[codex:1217152]         print(sig, keccak256(sig.encode())[:8])
[codex:1217152] except Exception as e:
[codex:1217152]     print('no sha3', e)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 18ms:
[codex:1217152] no sha3 No module named 'sha3'
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Analyzing contract call instructions**
[codex:1217152] 
[codex:1217152] I'm noting that SHA3 isn't installed and debating keccak implementations but deciding not to pursue that now. I'm focusing on the access control check at 0x0ef1 and suspecting the withdraw function at 0x7df is role-restricted and thus not exploitable. To confirm, I'll scan for CALL, DELEGATECALL, and SELFDESTRUCT instructions with non-zero value transfers and analyze their contexts to detect any unguarded asset withdrawals. I'll write a script to locate these calls along with their offsets for deeper examination.
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] 
[codex:1217152] ops={0xf1:'CALL',0xf4:'DELEGATECALL',0xfa:'STATICCALL',0xff:'SELFDESTRUCT'}
[codex:1217152] 
[codex:1217152] for i,b in enumerate(code):
[codex:1217152]     if b in ops:
[codex:1217152]         print(hex(i), ops[b])
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 19ms:
[codex:1217152] 0xaa DELEGATECALL
[codex:1217152] 0xc5 SELFDESTRUCT
[codex:1217152] 0xe0 SELFDESTRUCT
[codex:1217152] 0x102 CALL
[codex:1217152] 0x179 CALL
[codex:1217152] 0x18a STATICCALL
[codex:1217152] 0x1a2 SELFDESTRUCT
[codex:1217152] 0x31a DELEGATECALL
[codex:1217152] 0x31e STATICCALL
[codex:1217152] 0x3f6 STATICCALL
[codex:1217152] 0x432 SELFDESTRUCT
[codex:1217152] 0x504 CALL
[codex:1217152] 0x515 STATICCALL
[codex:1217152] 0x583 SELFDESTRUCT
[codex:1217152] 0x5b4 SELFDESTRUCT
[codex:1217152] 0x66b CALL
[codex:1217152] 0x68d SELFDESTRUCT
[codex:1217152] 0x692 SELFDESTRUCT
[codex:1217152] 0x693 SELFDESTRUCT
[codex:1217152] 0x694 SELFDESTRUCT
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Planning precise opcode parsing**
[codex:1217152] 
[codex:1217152] I see the naive disassembler picks up false SELFDESTRUCT opcodes inside data pushes and metadata, so I’ll focus on building a proper parser that honors PUSH data lengths and iterates sequentially to accurately find real opcodes like CALL, DELEGATECALL, SELFDESTRUCT, and STATICCALL before the metadata section. This way, I can avoid mistaking data bytes for opcodes.
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] 
[codex:1217152] ops={
[codex:1217152] 0xf1:'CALL',0xf4:'DELEGATECALL',0xfa:'STATICCALL',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152] 
[codex:1217152] addrs=[]
[codex:1217152] i=0
[codex:1217152] while i<len(code):
[codex:1217152]     op=code[i]
[codex:1217152]     if op in ops:
[codex:1217152]         addrs.append((i,ops[op]))
[codex:1217152]     if 0x60<=op<=0x7f:
[codex:1217152]         n=op-0x5f
[codex:1217152]         i+=1+n
[codex:1217152]     else:
[codex:1217152]         i+=1
[codex:1217152] 
[codex:1217152] for off,name in addrs:
[codex:1217152]     print(hex(off), name)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 21ms:
[codex:1217152] 0x800 CALL
[codex:1217152] 0xa23 STATICCALL
[codex:1217152] 0xb52 STATICCALL
[codex:1217152] 0xca4 STATICCALL
[codex:1217152] 0xcfd STATICCALL
[codex:1217152] 0xd6c STATICCALL
[codex:1217152] 0xe9d CALL
[codex:1217152] 0x1134 DELEGATECALL
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Inspecting external call instructions**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:1217152] 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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:1217152] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1217152] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1217152] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152] 
[codex:1217152] def disasm(start,end):
[codex:1217152]     i=start
[codex:1217152]     while i<end:
[codex:1217152]         op=code[i]
[codex:1217152]         name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152]         if 0x60<=op<=0x7f:
[codex:1217152]             n=op-0x5f
[codex:1217152]             data=code[i+1:i+1+n]
[codex:1217152]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152]             i+=1+n
[codex:1217152]         else:
[codex:1217152]             print(f'{i:04x}: {name}')
[codex:1217152]             i+=1
[codex:1217152] 
[codex:1217152] print('--- around 0xe90')
[codex:1217152] disasm(0xe80,0xec0)
[codex:1217152] print('--- around 0x1120')
[codex:1217152] disasm(0x1110,0x1160)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 20ms:
[codex:1217152] --- around 0xe90
[codex:1217152] 0e80: PUSH1 0x00
[codex:1217152] 0e82: DUP1
[codex:1217152] 0e83: DUP4
[codex:1217152] 0e84: PUSH1 0x01
[codex:1217152] 0e86: PUSH1 0x01
[codex:1217152] 0e88: PUSH1 0xa0
[codex:1217152] 0e8a: SHL
[codex:1217152] 0e8b: SUB
[codex:1217152] 0e8c: AND
[codex:1217152] 0e8d: DUP4
[codex:1217152] 0e8e: PUSH1 0x40
[codex:1217152] 0e90: MLOAD
[codex:1217152] 0e91: PUSH1 0x00
[codex:1217152] 0e93: PUSH1 0x40
[codex:1217152] 0e95: MLOAD
[codex:1217152] 0e96: DUP1
[codex:1217152] 0e97: DUP4
[codex:1217152] 0e98: SUB
[codex:1217152] 0e99: DUP2
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Analyzing low-level CALL usage**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:1217152] 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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:1217152] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1217152] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1217152] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152] 
[codex:1217152] def disasm(start,end):
[codex:1217152]     i=start
[codex:1217152]     while i<end:
[codex:1217152]         op=code[i]
[codex:1217152]         name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152]         if 0x60<=op<=0x7f:
[codex:1217152]             n=op-0x5f
[codex:1217152]             data=code[i+1:i+1+n]
[codex:1217152]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152]             i+=1+n
[codex:1217152]         else:
[codex:1217152]             print(f'{i:04x}: {name}')
[codex:1217152]             i+=1
[codex:1217152] 
[codex:1217152] print('--- 0xe40-0xea5')
[codex:1217152] disasm(0xe40,0xea5)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 19ms:
[codex:1217152] --- 0xe40-0xea5
[codex:1217152] 0e40: UNKNOWN_ca
[codex:1217152] 0e41: UNKNOWN_2e
[codex:1217152] 0e42: UNKNOWN_4b
[codex:1217152] 0e43: PUSH1 0xe0
[codex:1217152] 0e45: SHL
[codex:1217152] 0e46: DUP2
[codex:1217152] 0e47: MSTORE
[codex:1217152] 0e48: PUSH1 0x04
[codex:1217152] 0e4a: ADD
[codex:1217152] 0e4b: PUSH1 0x40
[codex:1217152] 0e4d: MLOAD
[codex:1217152] 0e4e: DUP1
[codex:1217152] 0e4f: SWAP2
[codex:1217152] 0e50: SUB
[codex:1217152] 0e51: SWAP1
[codex:1217152] 0e52: REVERT
[codex:1217152] 0e53: JUMPDEST
[codex:1217152] 0e54: PUSH1 0x01
[codex:1217152] 0e56: PUSH1 0x01
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Analyzing potential function boundaries**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] pattern=bytes([0x61,0x0e,0x7f])  # PUSH2 0x0e7f
[codex:1217152] for i in range(len(code)-2):
[codex:1217152]     if code[i:i+3]==pattern:
[codex:1217152]         print(hex(i))
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 19ms:
[codex:1217152] 0x5c1
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Inspecting disassembly near 0x5c1**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:1217152] 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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:1217152] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1217152] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1217152] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152] 
[codex:1217152] def disasm(start,end):
[codex:1217152]     i=start
[codex:1217152]     while i<end:
[codex:1217152]         op=code[i]
[codex:1217152]         name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152]         if 0x60<=op<=0x7f:
[codex:1217152]             n=op-0x5f
[codex:1217152]             data=code[i+1:i+1+n]
[codex:1217152]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152]             i+=1+n
[codex:1217152]         else:
[codex:1217152]             print(f'{i:04x}: {name}')
[codex:1217152]             i+=1
[codex:1217152] 
[codex:1217152] print('--- 0x5a0-0x5e5')
[codex:1217152] disasm(0x5a0,0x5e5)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 18ms:
[codex:1217152] --- 0x5a0-0x5e5
[codex:1217152] 05a0: SWAP1
[codex:1217152] 05a1: REVERT
[codex:1217152] 05a2: JUMPDEST
[codex:1217152] 05a3: PUSH1 0x00
[codex:1217152] 05a5: DUP3
[codex:1217152] 05a6: DUP2
[codex:1217152] 05a7: MSTORE
[codex:1217152] 05a8: PUSH1 0x20
[codex:1217152] 05aa: DUP7
[codex:1217152] 05ab: SWAP1
[codex:1217152] 05ac: MSTORE
[codex:1217152] 05ad: PUSH1 0x40
[codex:1217152] 05af: SWAP1
[codex:1217152] 05b0: SHA3
[codex:1217152] 05b1: DUP1
[codex:1217152] 05b2: SLOAD
[codex:1217152] 05b3: PUSH1 0xff
[codex:1217152] 05b5: NOT
[codex:1217152] 05b6: AND
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Analyzing function calls and dispatch mapping**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:1217152] 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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:1217152] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1217152] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1217152] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152] 
[codex:1217152] def disasm(start,end):
[codex:1217152]     i=start
[codex:1217152]     while i<end:
[codex:1217152]         op=code[i]
[codex:1217152]         name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152]         if 0x60<=op<=0x7f:
[codex:1217152]             n=op-0x5f
[codex:1217152]             data=code[i+1:i+1+n]
[codex:1217152]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152]             i+=1+n
[codex:1217152]         else:
[codex:1217152]             print(f'{i:04x}: {name}')
[codex:1217152]             i+=1
[codex:1217152] 
[codex:1217152] print('--- 0x500-0x620')
[codex:1217152] disasm(0x500,0x620)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 19ms:
[codex:1217152] --- 0x500-0x620
[codex:1217152] 0500: SWAP1
[codex:1217152] 0501: JUMP
[codex:1217152] 0502: JUMPDEST
[codex:1217152] 0503: PUSH32 0xf177c69799c54616dafe77c22ebee5241cfaca9a608e9fb90c5c56a34d576e00
[codex:1217152] 0524: PUSH2 0x0530
[codex:1217152] 0527: DUP3
[codex:1217152] 0528: DUP7
[codex:1217152] 0529: DUP7
[codex:1217152] 052a: DUP7
[codex:1217152] 052b: ADDRESS
[codex:1217152] 052c: PUSH2 0x0b01
[codex:1217152] 052f: JUMP
[codex:1217152] 0530: JUMPDEST
[codex:1217152] 0531: PUSH1 0x00
[codex:1217152] 0533: DUP1
[codex:1217152] 0534: PUSH1 0x00
[codex:1217152] 0536: DUP1
[codex:1217152] 0537: PUSH2 0x053f
[codex:1217152] 053a: DUP7
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Analyzing contract call and reentrancy logic**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:1217152] 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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:1217152] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1217152] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1217152] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152] 
[codex:1217152] def disasm(start,end):
[codex:1217152]     i=start
[codex:1217152]     while i<end:
[codex:1217152]         op=code[i]
[codex:1217152]         name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152]         if 0x60<=op<=0x7f:
[codex:1217152]             n=op-0x5f
[codex:1217152]             data=code[i+1:i+1+n]
[codex:1217152]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152]             i+=1+n
[codex:1217152]         else:
[codex:1217152]             print(f'{i:04x}: {name}')
[codex:1217152]             i+=1
[codex:1217152] 
[codex:1217152] print('--- 0x61d-0x690')
[codex:1217152] disasm(0x61d,0x690)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 18ms:
[codex:1217152] --- 0x61d-0x690
[codex:1217152] 061d: SWAP2
[codex:1217152] 061e: ADD
[codex:1217152] 061f: PUSH1 0x40
[codex:1217152] 0621: MLOAD
[codex:1217152] 0622: DUP1
[codex:1217152] 0623: SWAP2
[codex:1217152] 0624: SUB
[codex:1217152] 0625: SWAP1
[codex:1217152] 0626: LOG2
[codex:1217152] 0627: POP
[codex:1217152] 0628: POP
[codex:1217152] 0629: POP
[codex:1217152] 062a: POP
[codex:1217152] 062b: POP
[codex:1217152] 062c: POP
[codex:1217152] 062d: POP
[codex:1217152] 062e: POP
[codex:1217152] 062f: POP
[codex:1217152] 0630: JUMP
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Analyzing event and function roles**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:1217152] 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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:1217152] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1217152] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1217152] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152] 
[codex:1217152] def disasm(start,end):
[codex:1217152]     i=start
[codex:1217152]     while i<end:
[codex:1217152]         op=code[i]
[codex:1217152]         name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152]         if 0x60<=op<=0x7f:
[codex:1217152]             n=op-0x5f
[codex:1217152]             data=code[i+1:i+1+n]
[codex:1217152]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152]             i+=1+n
[codex:1217152]         else:
[codex:1217152]             print(f'{i:04x}: {name}')
[codex:1217152]             i+=1
[codex:1217152] 
[codex:1217152] print('--- 0xe20-0xe80')
[codex:1217152] disasm(0xe20,0xe80)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 22ms:
[codex:1217152] --- 0xe20-0xe80
[codex:1217152] 0e20: POP
[codex:1217152] 0e21: POP
[codex:1217152] 0e22: POP
[codex:1217152] 0e23: POP
[codex:1217152] 0e24: JUMP
[codex:1217152] 0e25: JUMPDEST
[codex:1217152] 0e26: PUSH1 0x00
[codex:1217152] 0e28: DUP1
[codex:1217152] 0e29: PUSH1 0x00
[codex:1217152] 0e2b: DUP1
[codex:1217152] 0e2c: PUSH2 0x0e36
[codex:1217152] 0e2f: DUP6
[codex:1217152] 0e30: MLOAD
[codex:1217152] 0e31: PUSH1 0x68
[codex:1217152] 0e33: EQ
[codex:1217152] 0e34: SWAP1
[codex:1217152] 0e35: JUMP
[codex:1217152] 0e36: JUMPDEST
[codex:1217152] 0e37: PUSH2 0x0e53
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Analyzing memory decoding and call execution**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:1217152] 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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:1217152] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1217152] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1217152] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152] 
[codex:1217152] def disasm(start,end):
[codex:1217152]     i=start
[codex:1217152]     while i<end:
[codex:1217152]         op=code[i]
[codex:1217152]         name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152]         if 0x60<=op<=0x7f:
[codex:1217152]             n=op-0x5f
[codex:1217152]             data=code[i+1:i+1+n]
[codex:1217152]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152]             i+=1+n
[codex:1217152]         else:
[codex:1217152]             print(f'{i:04x}: {name}')
[codex:1217152]             i+=1
[codex:1217152] 
[codex:1217152] print('--- 0x144b-0x1500')
[codex:1217152] disasm(0x144b,0x1500)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 18ms:
[codex:1217152] --- 0x144b-0x1500
[codex:1217152] 144b: JUMPDEST
[codex:1217152] 144c: PUSH1 0x00
[codex:1217152] 144e: DUP1
[codex:1217152] 144f: PUSH1 0x00
[codex:1217152] 1451: DUP1
[codex:1217152] 1452: PUSH1 0x80
[codex:1217152] 1454: DUP6
[codex:1217152] 1455: DUP8
[codex:1217152] 1456: SUB
[codex:1217152] 1457: SLT
[codex:1217152] 1458: ISZERO
[codex:1217152] 1459: PUSH2 0x1461
[codex:1217152] 145c: JUMPI
[codex:1217152] 145d: PUSH1 0x00
[codex:1217152] 145f: DUP1
[codex:1217152] 1460: REVERT
[codex:1217152] 1461: JUMPDEST
[codex:1217152] 1462: DUP5
[codex:1217152] 1463: CALLDATALOAD
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Examining upgrade function protections**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:1217152] 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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:1217152] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1217152] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1217152] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152] 
[codex:1217152] def disasm(start,end):
[codex:1217152]     i=start
[codex:1217152]     while i<end:
[codex:1217152]         op=code[i]
[codex:1217152]         name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152]         if 0x60<=op<=0x7f:
[codex:1217152]             n=op-0x5f
[codex:1217152]             data=code[i+1:i+1+n]
[codex:1217152]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152]             i+=1+n
[codex:1217152]         else:
[codex:1217152]             print(f'{i:04x}: {name}')
[codex:1217152]             i+=1
[codex:1217152] 
[codex:1217152] print('--- 0x0944-0x09f0')
[codex:1217152] disasm(0x0944,0x09f0)
[codex:1217152] print('--- 0x09f0-0x0a40')
[codex:1217152] disasm(0x09f0,0x0a40)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 25ms:
[codex:1217152] --- 0x0944-0x09f0
[codex:1217152] 0944: JUMPDEST
[codex:1217152] 0945: ADDRESS
[codex:1217152] 0946: PUSH1 0x01
[codex:1217152] 0948: PUSH1 0x01
[codex:1217152] 094a: PUSH1 0xa0
[codex:1217152] 094c: SHL
[codex:1217152] 094d: SUB
[codex:1217152] 094e: PUSH32 0x000000000000000000000000bdead28e8a46457646de417d0295c535e2bad4ca
[codex:1217152] 096f: AND
[codex:1217152] 0970: EQ
[codex:1217152] 0971: DUP1
[codex:1217152] 0972: PUSH2 0x09cb
[codex:1217152] 0975: JUMPI
[codex:1217152] 0976: POP
[codex:1217152] 0977: PUSH32 0x000000000000000000000000bdead28e8a46457646de417d0295c535e2bad4ca
[codex:1217152] 0998: PUSH1 0x01
[codex:1217152] 099a: PUSH1 0x01
[codex:1217152] 099c: PUSH1 0xa0
[codex:1217152] 099e: SHL
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Analyzing access control and proxy checks in bytecode**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:1217152] 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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:1217152] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1217152] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1217152] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152] 
[codex:1217152] def disasm(start,end):
[codex:1217152]     i=start
[codex:1217152]     while i<end:
[codex:1217152]         op=code[i]
[codex:1217152]         name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152]         if 0x60<=op<=0x7f:
[codex:1217152]             n=op-0x5f
[codex:1217152]             data=code[i+1:i+1+n]
[codex:1217152]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152]             i+=1+n
[codex:1217152]         else:
[codex:1217152]             print(f'{i:04x}: {name}')
[codex:1217152]             i+=1
[codex:1217152] 
[codex:1217152] print('--- 0x0b01-0x0c20')
[codex:1217152] disasm(0x0b01,0x0c20)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 18ms:
[codex:1217152] --- 0x0b01-0x0c20
[codex:1217152] 0b01: JUMPDEST
[codex:1217152] 0b02: DUP5
[codex:1217152] 0b03: MLOAD
[codex:1217152] 0b04: PUSH1 0x68
[codex:1217152] 0b06: EQ
[codex:1217152] 0b07: PUSH2 0x0b23
[codex:1217152] 0b0a: JUMPI
[codex:1217152] 0b0b: PUSH1 0x40
[codex:1217152] 0b0d: MLOAD
[codex:1217152] 0b0e: PUSH4 0x6eca2e4b
[codex:1217152] 0b13: PUSH1 0xe0
[codex:1217152] 0b15: SHL
[codex:1217152] 0b16: DUP2
[codex:1217152] 0b17: MSTORE
[codex:1217152] 0b18: PUSH1 0x04
[codex:1217152] 0b1a: ADD
[codex:1217152] 0b1b: PUSH1 0x40
[codex:1217152] 0b1d: MLOAD
[codex:1217152] 0b1e: DUP1
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Analyzing function access and role checks**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import importlib.util
[codex:1217152] for m in ['eth_utils','Crypto','pycryptodome','sha3']:
[codex:1217152]     spec=importlib.util.find_spec(m)
[codex:1217152]     print(m, bool(spec))
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 19ms:
[codex:1217152] eth_utils True
[codex:1217152] Crypto True
[codex:1217152] pycryptodome False
[codex:1217152] sha3 False
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Analyzing contract selectors and access control**
[codex:1217152] 
[codex:1217152] I’m planning to compute keccak selectors for known AccessControl and AccessManager functions using eth_utils.keccak in Python to identify the functions behind selectors like 0x70ff8fdb. I'll compare these with event topics and role constants found in the code to confirm AccessControl usage. Then, I’ll look into whether critical functions, especially the one at 0x70ff8fdb, have proper access restrictions by searching for caller checks around relevant addresses like 0x0b01. I'll test for presence of CALLER opcodes in that region to understand access control enforcement.
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] # disassemble between 0xb01 and 0xe20 to find CALLER usage
[codex:1217152] ops={
[codex:1217152] 0x33:'CALLER',0x35:'CALLDATALOAD',0x54:'SLOAD',0x55:'SSTORE',0xf1:'CALL'
[codex:1217152] }
[codex:1217152] 
[codex:1217152] # simple disasm with push skipping
[codex:1217152] 
[codex:1217152] i=0xb01
[codex:1217152] end=0xe20
[codex:1217152] while i<end:
[codex:1217152]     op=code[i]
[codex:1217152]     if op==0x33:
[codex:1217152]         print(hex(i), 'CALLER')
[codex:1217152]     if 0x60<=op<=0x7f:
[codex:1217152]         n=op-0x5f
[codex:1217152]         i+=1+n
[codex:1217152]     else:
[codex:1217152]         i+=1
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 19ms:
[codex:1217152] 
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Analyzing signature verification potential**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:1217152] 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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:1217152] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1217152] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1217152] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152] 
[codex:1217152] def disasm(start,end):
[codex:1217152]     i=start
[codex:1217152]     while i<end:
[codex:1217152]         op=code[i]
[codex:1217152]         name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152]         if 0x60<=op<=0x7f:
[codex:1217152]             n=op-0x5f
[codex:1217152]             data=code[i+1:i+1+n]
[codex:1217152]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152]             i+=1+n
[codex:1217152]         else:
[codex:1217152]             print(f'{i:04x}: {name}')
[codex:1217152]             i+=1
[codex:1217152] 
[codex:1217152] print('--- 0xf60-0x10c0')
[codex:1217152] disasm(0xf60,0x10c0)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 19ms:
[codex:1217152] --- 0xf60-0x10c0
[codex:1217152] 0f60: UNKNOWN_5c
[codex:1217152] 0f61: UNKNOWN_2d
[codex:1217152] 0f62: EXTCODESIZE
[codex:1217152] 0f63: SWAP1
[codex:1217152] 0f64: PUSH1 0x00
[codex:1217152] 0f66: SWAP1
[codex:1217152] 0f67: LOG2
[codex:1217152] 0f68: DUP1
[codex:1217152] 0f69: MLOAD
[codex:1217152] 0f6a: ISZERO
[codex:1217152] 0f6b: PUSH2 0x0f78
[codex:1217152] 0f6e: JUMPI
[codex:1217152] 0f6f: PUSH2 0x04c1
[codex:1217152] 0f72: DUP3
[codex:1217152] 0f73: DUP3
[codex:1217152] 0f74: PUSH2 0x110b
[codex:1217152] 0f77: JUMP
[codex:1217152] 0f78: JUMPDEST
[codex:1217152] 0f79: PUSH2 0x04e1
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Examining signature verification area**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:1217152] 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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:1217152] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1217152] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1217152] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152] 
[codex:1217152] def disasm(start,end):
[codex:1217152]     i=start
[codex:1217152]     while i<end:
[codex:1217152]         op=code[i]
[codex:1217152]         name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152]         if 0x60<=op<=0x7f:
[codex:1217152]             n=op-0x5f
[codex:1217152]             data=code[i+1:i+1+n]
[codex:1217152]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152]             i+=1+n
[codex:1217152]         else:
[codex:1217152]             print(f'{i:04x}: {name}')
[codex:1217152]             i+=1
[codex:1217152] 
[codex:1217152] print('--- 0x11a0-0x1200')
[codex:1217152] disasm(0x11a0,0x1200)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 22ms:
[codex:1217152] --- 0x11a0-0x1200
[codex:1217152] 11a0: JUMPDEST
[codex:1217152] 11a1: PUSH1 0x60
[codex:1217152] 11a3: DUP3
[codex:1217152] 11a4: PUSH2 0x11b5
[codex:1217152] 11a7: JUMPI
[codex:1217152] 11a8: PUSH2 0x11b0
[codex:1217152] 11ab: DUP3
[codex:1217152] 11ac: PUSH2 0x11ff
[codex:1217152] 11af: JUMP
[codex:1217152] 11b0: JUMPDEST
[codex:1217152] 11b1: PUSH2 0x11f8
[codex:1217152] 11b4: JUMP
[codex:1217152] 11b5: JUMPDEST
[codex:1217152] 11b6: DUP2
[codex:1217152] 11b7: MLOAD
[codex:1217152] 11b8: ISZERO
[codex:1217152] 11b9: DUP1
[codex:1217152] 11ba: ISZERO
[codex:1217152] 11bb: PUSH2 0x11cc
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Investigating ecrecover usage**
[codex:1217152] exec
[codex:1217152] /bin/bash -lc "python - <<'PY'
[codex:1217152] import binascii
[codex:1217152] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1].split('\\n',1)[0].strip()
[codex:1217152] code=bytes.fromhex(hexdata)
[codex:1217152] ops={
[codex:1217152] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',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:1217152] 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',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1217152] 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:1217152] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:1217152] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:1217152] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:1217152] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:1217152] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1217152] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1217152] }
[codex:1217152] 
[codex:1217152] def disasm(start,end):
[codex:1217152]     i=start
[codex:1217152]     while i<end:
[codex:1217152]         op=code[i]
[codex:1217152]         name=ops.get(op,f'UNKNOWN_{op:02x}')
[codex:1217152]         if 0x60<=op<=0x7f:
[codex:1217152]             n=op-0x5f
[codex:1217152]             data=code[i+1:i+1+n]
[codex:1217152]             print(f'{i:04x}: {name} 0x{data.hex()}')
[codex:1217152]             i+=1+n
[codex:1217152]         else:
[codex:1217152]             print(f'{i:04x}: {name}')
[codex:1217152]             i+=1
[codex:1217152] 
[codex:1217152] print('--- 0xc80-0xd20')
[codex:1217152] disasm(0xc80,0xd20)
[codex:1217152] print('--- 0xd20-0xd90')
[codex:1217152] disasm(0xd20,0xd90)
[codex:1217152] PY" in /tmp/codex-multi-hbpjsfoj succeeded in 21ms:
[codex:1217152] --- 0xc80-0xd20
[codex:1217152] 0c80: SHA3
[codex:1217152] 0c81: DUP5
[codex:1217152] 0c82: ADD
[codex:1217152] 0c83: MSTORE
[codex:1217152] 0c84: PUSH1 0x40
[codex:1217152] 0c86: DUP4
[codex:1217152] 0c87: ADD
[codex:1217152] 0c88: MSTORE
[codex:1217152] 0c89: PUSH1 0x60
[codex:1217152] 0c8b: DUP3
[codex:1217152] 0c8c: ADD
[codex:1217152] 0c8d: MSTORE
[codex:1217152] 0c8e: PUSH1 0x80
[codex:1217152] 0c90: ADD
[codex:1217152] 0c91: SWAP1
[codex:1217152] 0c92: JUMP
[codex:1217152] 0c93: JUMPDEST
[codex:1217152] 0c94: PUSH1 0x20
[codex:1217152] 0c96: PUSH1 0x40
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Analyzing contract security patterns**
[codex:1217152] 
[codex:1217152] I'm reviewing contract calls and roles to assess vulnerabilities like unprotected executions or uninitialized proxies, focusing on concrete exploit paths that lead to profit. So far, access control checks and upgrade patterns suggest no obvious exploit, and I'll confirm this with a final JSON report stating no findings if everything looks secure.
[codex:1217152] exec
[codex:1217152] /bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-multi-hbpjsfoj succeeded in 5ms:
[codex:1217152] {"type": "object", "additionalProperties": false, "required": ["no_findings", "summary", "findings"], "properties": {"no_findings": {"type": "boolean"}, "summary": {"type": "string"}, "findings": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["severity", "category", "title", "evidence", "locations", "exploit_scenario", "recommendation"], "properties": {"severity": {"type": "string", "enum": ["info", "low", "medium", "high", "critical"]}, "category": {"type": "string", "enum": ["access_control", "reentrancy", "math", "oracle", "upgradeability", "auth", "other"]}, "title": {"type": "string"}, "exploit_scenario": {"type": "string"}, "recommendation": {"type": "string"}, "evidence": {"type": "string"}, "locations": {"type": "array", "items": {"type": "string"}}}}}}}
[codex:1217152] 
[codex:1217152] thinking
[codex:1217152] **Summarizing bytecode security analysis**
[codex:1217152] 
[codex:1217152] I’m preparing a concise JSON report stating no concrete exploit was found in the bytecode. My summary highlights the presence of AccessControl and UUPS guards and confirms no clear unprotected path to profit exists, keeping findings empty as requested.
[codex:1217152] codex
[codex:1217152] {"no_findings":true,"summary":"Reviewed runtime bytecode bundle and identified AccessControl/UUPS-style guards around the only observable value transfer and upgrade paths; no concrete, unprotected value-extraction path is evident from bytecode alone.","findings":[]}
[codex:1217152] tokens used
[codex:1217152] 100,663
[codex:1217152] {"no_findings":true,"summary":"Reviewed runtime bytecode bundle and identified AccessControl/UUPS-style guards around the only observable value transfer and upgrade paths; no concrete, unprotected value-extraction path is evident from bytecode alone.","findings":[]}
Metadata
{
    "codex": {
        "ran_at": "2026-01-05T19:00:16.176703+00:00",
        "returncode": 0
    },
    "summary": "Reviewed runtime bytecode bundle and identified AccessControl/UUPS-style guards around the only observable value transfer and upgrade paths; no concrete, unprotected value-extraction path is evident from bytecode alone.",
    "raw_final": {
        "summary": "Reviewed runtime bytecode bundle and identified AccessControl/UUPS-style guards around the only observable value transfer and upgrade paths; no concrete, unprotected value-extraction path is evident from bytecode alone.",
        "findings": [],
        "no_findings": true
    },
    "no_findings": true,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
1
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
7
EXT*/BALANCE
4
Total opcodes
3710
Flags
delegatecall_present
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0x04
00000007: CALLDATASIZE
00000008: LT
00000009: PUSH2 0x010d
0000000c: JUMPI
0000000d: PUSH1 0x00
0000000f: CALLDATALOAD
00000010: PUSH1 0xe0
00000012: SHR
00000013: DUP1
00000014: PUSH4 0x8129fc1c
00000019: GT
0000001a: PUSH2 0x0095
0000001d: JUMPI
0000001e: DUP1
0000001f: PUSH4 0xc49baebe
00000024: GT
00000025: PUSH2 0x0064
00000028: JUMPI
00000029: DUP1
0000002a: PUSH4 0xc49baebe
0000002f: EQ
00000030: PUSH2 0x0304
00000033: JUMPI
00000034: DUP1
00000035: PUSH4 0xccd93998
0000003a: EQ
0000003b: PUSH2 0x0338
0000003e: JUMPI
0000003f: DUP1
00000040: PUSH4 0xd547741f
00000045: EQ
00000046: PUSH2 0x036c
00000049: JUMPI
0000004a: DUP1
0000004b: PUSH4 0xdb2e21bc
00000050: EQ
00000051: PUSH2 0x038c
00000054: JUMPI
00000055: DUP1
00000056: PUSH4 0xe12fba8d
0000005b: EQ
0000005c: PUSH2 0x03a1
0000005f: JUMPI
00000060: PUSH1 0x00
00000062: DUP1
00000063: REVERT
00000064: JUMPDEST
00000065: DUP1
00000066: PUSH4 0x8129fc1c
0000006b: EQ
0000006c: PUSH2 0x027c
0000006f: JUMPI
00000070: DUP1
00000071: PUSH4 0x91d14854
00000076: EQ
00000077: PUSH2 0x0291
0000007a: JUMPI
0000007b: DUP1
0000007c: PUSH4 0xa217fddf
00000081: EQ
00000082: PUSH2 0x02b1
00000085: JUMPI
00000086: DUP1
00000087: PUSH4 0xad3cb1cc
0000008c: EQ
0000008d: PUSH2 0x02c6
00000090: JUMPI
00000091: PUSH1 0x00
00000093: DUP1
00000094: REVERT
00000095: JUMPDEST
00000096: DUP1
00000097: PUSH4 0x36568abe
0000009c: GT
0000009d: PUSH2 0x00dc
000000a0: JUMPI
000000a1: DUP1
000000a2: PUSH4 0x36568abe
000000a7: EQ
000000a8: PUSH2 0x01f4
000000ab: JUMPI
000000ac: DUP1
000000ad: PUSH4 0x4f1ef286
000000b2: EQ
000000b3: PUSH2 0x0214
000000b6: JUMPI
000000b7: DUP1
000000b8: PUSH4 0x52d1902d
000000bd: EQ
000000be: PUSH2 0x0227
000000c1: JUMPI
000000c2: DUP1
000000c3: PUSH4 0x70ff8fdb
000000c8: EQ
000000c9: PUSH2 0x023c
000000cc: JUMPI
000000cd: DUP1
000000ce: PUSH4 0x7d2b9cc0
000000d3: EQ
000000d4: PUSH2 0x025c
000000d7: JUMPI
000000d8: PUSH1 0x00
000000da: DUP1
000000db: REVERT
000000dc: JUMPDEST
000000dd: DUP1
000000de: PUSH4 0x01ffc9a7
000000e3: EQ
000000e4: PUSH2 0x0122
000000e7: JUMPI
000000e8: DUP1
000000e9: PUSH4 0x05643f39
000000ee: EQ
000000ef: PUSH2 0x0157
000000f2: JUMPI
000000f3: DUP1
000000f4: PUSH4 0x248a9ca3
000000f9: EQ
000000fa: PUSH2 0x01a6
000000fd: JUMPI
000000fe: DUP1
000000ff: PUSH4 0x2f2ff15d
00000104: EQ
00000105: PUSH2 0x01d4
00000108: JUMPI
00000109: PUSH1 0x00
0000010b: DUP1
0000010c: REVERT
0000010d: JUMPDEST
0000010e: CALLDATASIZE
0000010f: PUSH2 0x011d
00000112: JUMPI
00000113: PUSH2 0x011b
00000116: CALLER
00000117: PUSH2 0x03af
0000011a: JUMP
0000011b: JUMPDEST
0000011c: STOP
0000011d: JUMPDEST
0000011e: PUSH1 0x00
00000120: DUP1
00000121: REVERT
00000122: JUMPDEST
00000123: CALLVALUE
00000124: DUP1
00000125: ISZERO
00000126: PUSH2 0x012e
00000129: JUMPI
0000012a: PUSH1 0x00
0000012c: DUP1
0000012d: REVERT
0000012e: JUMPDEST
0000012f: POP
00000130: PUSH2 0x0142
00000133: PUSH2 0x013d
00000136: CALLDATASIZE
00000137: PUSH1 0x04
00000139: PUSH2 0x1228
0000013c: JUMP
0000013d: JUMPDEST
0000013e: PUSH2 0x0413
00000141: JUMP
00000142: JUMPDEST
00000143: PUSH1 0x40
00000145: MLOAD
00000146: SWAP1
00000147: ISZERO
00000148: ISZERO
00000149: DUP2
0000014a: MSTORE
0000014b: PUSH1 0x20
0000014d: ADD
0000014e: JUMPDEST
0000014f: PUSH1 0x40
00000151: MLOAD
00000152: DUP1
00000153: SWAP2
00000154: SUB
00000155: SWAP1
00000156: RETURN
00000157: JUMPDEST
00000158: CALLVALUE
00000159: DUP1
0000015a: ISZERO
0000015b: PUSH2 0x0163
0000015e: JUMPI
0000015f: PUSH1 0x00
00000161: DUP1
00000162: REVERT
00000163: JUMPDEST
00000164: POP
00000165: PUSH2 0x0142
00000168: PUSH2 0x0172
0000016b: CALLDATASIZE
0000016c: PUSH1 0x04
0000016e: PUSH2 0x1252
00000171: JUMP
00000172: JUMPDEST
00000173: PUSH1 0x00
00000175: SWAP1
00000176: DUP2
00000177: MSTORE
00000178: PUSH32 0xf177c69799c54616dafe77c22ebee5241cfaca9a608e9fb90c5c56a34d576e00
00000199: PUSH1 0x20
0000019b: MSTORE
0000019c: PUSH1 0x40
0000019e: SWAP1
0000019f: KECCAK256
000001a0: SLOAD
000001a1: PUSH1 0xff
000001a3: AND
000001a4: SWAP1
000001a5: JUMP
000001a6: JUMPDEST
000001a7: CALLVALUE
000001a8: DUP1
000001a9: ISZERO
000001aa: PUSH2 0x01b2
000001ad: JUMPI
000001ae: PUSH1 0x00
000001b0: DUP1
000001b1: REVERT
000001b2: JUMPDEST
000001b3: POP
000001b4: PUSH2 0x01c6
000001b7: PUSH2 0x01c1
000001ba: CALLDATASIZE
000001bb: PUSH1 0x04
000001bd: PUSH2 0x1252
000001c0: JUMP
000001c1: JUMPDEST
000001c2: PUSH2 0x044a
000001c5: JUMP
000001c6: JUMPDEST
000001c7: PUSH1 0x40
000001c9: MLOAD
000001ca: SWAP1
000001cb: DUP2
000001cc: MSTORE
000001cd: PUSH1 0x20
000001cf: ADD
000001d0: PUSH2 0x014e
000001d3: JUMP
000001d4: JUMPDEST
000001d5: CALLVALUE
000001d6: DUP1
000001d7: ISZERO
000001d8: PUSH2 0x01e0
000001db: JUMPI
000001dc: PUSH1 0x00
000001de: DUP1
000001df: REVERT
000001e0: JUMPDEST
000001e1: POP
000001e2: PUSH2 0x011b
000001e5: PUSH2 0x01ef
000001e8: CALLDATASIZE
000001e9: PUSH1 0x04
000001eb: PUSH2 0x1287
000001ee: JUMP
000001ef: JUMPDEST
000001f0: PUSH2 0x046c
000001f3: JUMP
000001f4: JUMPDEST
000001f5: CALLVALUE
000001f6: DUP1
000001f7: ISZERO
000001f8: PUSH2 0x0200
000001fb: JUMPI
000001fc: PUSH1 0x00
000001fe: DUP1
000001ff: REVERT
00000200: JUMPDEST
00000201: POP
00000202: PUSH2 0x011b
00000205: PUSH2 0x020f
00000208: CALLDATASIZE
00000209: PUSH1 0x04
0000020b: PUSH2 0x1287
0000020e: JUMP
0000020f: JUMPDEST
00000210: PUSH2 0x048e
00000213: JUMP
00000214: JUMPDEST
00000215: PUSH2 0x011b
00000218: PUSH2 0x0222
0000021b: CALLDATASIZE
0000021c: PUSH1 0x04
0000021e: PUSH2 0x136a
00000221: JUMP
00000222: JUMPDEST
00000223: PUSH2 0x04c6
00000226: JUMP
00000227: JUMPDEST
00000228: CALLVALUE
00000229: DUP1
0000022a: ISZERO
0000022b: PUSH2 0x0233
0000022e: JUMPI
0000022f: PUSH1 0x00
00000231: DUP1
00000232: REVERT
00000233: JUMPDEST
00000234: POP
00000235: PUSH2 0x01c6
00000238: PUSH2 0x04e5
0000023b: JUMP
0000023c: JUMPDEST
0000023d: CALLVALUE
0000023e: DUP1
0000023f: ISZERO
00000240: PUSH2 0x0248
00000243: JUMPI
00000244: PUSH1 0x00
00000246: DUP1
00000247: REVERT
00000248: JUMPDEST
00000249: POP
0000024a: PUSH2 0x011b
0000024d: PUSH2 0x0257
00000250: CALLDATASIZE
00000251: PUSH1 0x04
00000253: PUSH2 0x144b
00000256: JUMP
00000257: JUMPDEST
00000258: PUSH2 0x0502
0000025b: JUMP
0000025c: JUMPDEST
0000025d: CALLVALUE
0000025e: DUP1
0000025f: ISZERO
00000260: PUSH2 0x0268
00000263: JUMPI
00000264: PUSH1 0x00
00000266: DUP1
00000267: REVERT
00000268: JUMPDEST
00000269: POP
0000026a: PUSH2 0x011b
0000026d: PUSH2 0x0277
00000270: CALLDATASIZE
00000271: PUSH1 0x04
00000273: PUSH2 0x1252
00000276: JUMP
00000277: JUMPDEST
00000278: PUSH2 0x0631
0000027b: JUMP
0000027c: JUMPDEST
0000027d: CALLVALUE
0000027e: DUP1
0000027f: ISZERO
00000280: PUSH2 0x0288
00000283: JUMPI
00000284: PUSH1 0x00
00000286: DUP1
00000287: REVERT
00000288: JUMPDEST
00000289: POP
0000028a: PUSH2 0x011b
0000028d: PUSH2 0x0661
00000290: JUMP
00000291: JUMPDEST
00000292: CALLVALUE
00000293: DUP1
00000294: ISZERO
00000295: PUSH2 0x029d
00000298: JUMPI
00000299: PUSH1 0x00
0000029b: DUP1
0000029c: REVERT
0000029d: JUMPDEST
0000029e: POP
0000029f: PUSH2 0x0142
000002a2: PUSH2 0x02ac
000002a5: CALLDATASIZE
000002a6: PUSH1 0x04
000002a8: PUSH2 0x1287
000002ab: JUMP
000002ac: JUMPDEST
000002ad: PUSH2 0x078b
000002b0: JUMP
000002b1: JUMPDEST
000002b2: CALLVALUE
000002b3: DUP1
000002b4: ISZERO
000002b5: PUSH2 0x02bd
000002b8: JUMPI
000002b9: PUSH1 0x00
000002bb: DUP1
000002bc: REVERT
000002bd: JUMPDEST
000002be: POP
000002bf: PUSH2 0x01c6
000002c2: PUSH1 0x00
000002c4: DUP2
000002c5: JUMP
000002c6: JUMPDEST
000002c7: CALLVALUE
000002c8: DUP1
000002c9: ISZERO
000002ca: PUSH2 0x02d2
000002cd: JUMPI
000002ce: PUSH1 0x00
000002d0: DUP1
000002d1: REVERT
000002d2: JUMPDEST
000002d3: POP
000002d4: PUSH2 0x02f7
000002d7: PUSH1 0x40
000002d9: MLOAD
000002da: DUP1
000002db: PUSH1 0x40
000002dd: ADD
000002de: PUSH1 0x40
000002e0: MSTORE
000002e1: DUP1
000002e2: PUSH1 0x05
000002e4: DUP2
000002e5: MSTORE
000002e6: PUSH1 0x20
000002e8: ADD
000002e9: PUSH5 0x0352e302e3
000002ef: PUSH1 0xdc
000002f1: SHL
000002f2: DUP2
000002f3: MSTORE
000002f4: POP
000002f5: DUP2
000002f6: JUMP
000002f7: JUMPDEST
000002f8: PUSH1 0x40
000002fa: MLOAD
000002fb: PUSH2 0x014e
000002fe: SWAP2
000002ff: SWAP1
00000300: PUSH2 0x1581
00000303: JUMP
00000304: JUMPDEST
00000305: CALLVALUE
00000306: DUP1
00000307: ISZERO
00000308: PUSH2 0x0310
0000030b: JUMPI
0000030c: PUSH1 0x00
0000030e: DUP1
0000030f: REVERT
00000310: JUMPDEST
00000311: POP
00000312: PUSH2 0x01c6
00000315: PUSH32 0x21702c8af46127c7fa207f89d0b0a8441bb32959a0ac7df790e9ab1a25c98926
00000336: DUP2
00000337: JUMP
00000338: JUMPDEST
00000339: CALLVALUE
0000033a: DUP1
0000033b: ISZERO
0000033c: PUSH2 0x0344
0000033f: JUMPI
00000340: PUSH1 0x00
00000342: DUP1
00000343: REVERT
00000344: JUMPDEST
00000345: POP
00000346: PUSH32 0x0abe884846eee1d492e84e31ee30140e7b2e501dde84c2790e64629bd4209300
00000367: SLOAD
00000368: PUSH2 0x01c6
0000036b: JUMP
0000036c: JUMPDEST
0000036d: CALLVALUE
0000036e: DUP1
0000036f: ISZERO
00000370: PUSH2 0x0378
00000373: JUMPI
00000374: PUSH1 0x00
00000376: DUP1
00000377: REVERT
00000378: JUMPDEST
00000379: POP
0000037a: PUSH2 0x011b
0000037d: PUSH2 0x0387
00000380: CALLDATASIZE
00000381: PUSH1 0x04
00000383: PUSH2 0x1287
00000386: JUMP
00000387: JUMPDEST
00000388: PUSH2 0x07c3
0000038b: JUMP
0000038c: JUMPDEST
0000038d: CALLVALUE
0000038e: DUP1
0000038f: ISZERO
00000390: PUSH2 0x0398
00000393: JUMPI
00000394: PUSH1 0x00
00000396: DUP1
00000397: REVERT
00000398: JUMPDEST
00000399: POP
0000039a: PUSH2 0x011b
0000039d: PUSH2 0x07df
000003a0: JUMP
000003a1: JUMPDEST
000003a2: PUSH2 0x011b
000003a5: PUSH2 0x03af
000003a8: CALLDATASIZE
000003a9: PUSH1 0x04
000003ab: PUSH2 0x15b4
000003ae: JUMP
000003af: JUMPDEST
000003b0: CALLVALUE
000003b1: PUSH1 0x00
000003b3: SUB
000003b4: PUSH2 0x03d0
000003b7: JUMPI
000003b8: PUSH1 0x40
000003ba: MLOAD
000003bb: PUSH4 0x41abc801
000003c0: PUSH1 0xe0
000003c2: SHL
000003c3: DUP2
000003c4: MSTORE
000003c5: PUSH1 0x04
000003c7: ADD
000003c8: PUSH1 0x40
000003ca: MLOAD
000003cb: DUP1
000003cc: SWAP2
000003cd: SUB
000003ce: SWAP1
000003cf: REVERT
000003d0: JUMPDEST
000003d1: PUSH1 0x40
000003d3: MLOAD
000003d4: CALLVALUE
000003d5: DUP2
000003d6: MSTORE
000003d7: PUSH1 0x01
000003d9: PUSH1 0x01
000003db: PUSH1 0xa0
000003dd: SHL
000003de: SUB
000003df: DUP3
000003e0: AND
000003e1: SWAP1
000003e2: CALLER
000003e3: SWAP1
000003e4: PUSH32 0xb2d8c64c6b025b34c219301320c7cbc757fa77c134e652d33e449d9629735f53
00000405: SWAP1
00000406: PUSH1 0x20
00000408: ADD
00000409: PUSH1 0x40
0000040b: MLOAD
0000040c: DUP1
0000040d: SWAP2
0000040e: SUB
0000040f: SWAP1
00000410: LOG3
00000411: POP
00000412: JUMP
00000413: JUMPDEST
00000414: PUSH1 0x00
00000416: PUSH1 0x01
00000418: PUSH1 0x01
0000041a: PUSH1 0xe0
0000041c: SHL
0000041d: SUB
0000041e: NOT
0000041f: DUP3
00000420: AND
00000421: PUSH4 0x7965db0b
00000426: PUSH1 0xe0
00000428: SHL
00000429: EQ
0000042a: DUP1
0000042b: PUSH2 0x0444
0000042e: JUMPI
0000042f: POP
00000430: PUSH4 0x01ffc9a7
00000435: PUSH1 0xe0
00000437: SHL
00000438: PUSH1 0x01
0000043a: PUSH1 0x01
0000043c: PUSH1 0xe0
0000043e: SHL
0000043f: SUB
00000440: NOT
00000441: DUP4
00000442: AND
00000443: EQ
00000444: JUMPDEST
00000445: SWAP3
00000446: SWAP2
00000447: POP
00000448: POP
00000449: JUMP
0000044a: JUMPDEST
0000044b: PUSH1 0x00
0000044d: SWAP1
0000044e: DUP2
0000044f: MSTORE
00000450: PUSH1 0x00
00000452: DUP1
00000453: MLOAD
00000454: PUSH1 0x20
00000456: PUSH2 0x16a0
00000459: DUP4
0000045a: CODECOPY
0000045b: DUP2
0000045c: MLOAD
0000045d: SWAP2
0000045e: MSTORE
0000045f: PUSH1 0x20
00000461: MSTORE
00000462: PUSH1 0x40
00000464: SWAP1
00000465: KECCAK256
00000466: PUSH1 0x01
00000468: ADD
00000469: SLOAD
0000046a: SWAP1
0000046b: JUMP
0000046c: JUMPDEST
0000046d: PUSH2 0x0475
00000470: DUP3
00000471: PUSH2 0x044a
00000474: JUMP
00000475: JUMPDEST
00000476: PUSH2 0x047e
00000479: DUP2
0000047a: PUSH2 0x0816
0000047d: JUMP
0000047e: JUMPDEST
0000047f: PUSH2 0x0488
00000482: DUP4
00000483: DUP4
00000484: PUSH2 0x0823
00000487: JUMP
00000488: JUMPDEST
00000489: POP
0000048a: POP
0000048b: POP
0000048c: POP
0000048d: JUMP
0000048e: JUMPDEST
0000048f: PUSH1 0x01
00000491: PUSH1 0x01
00000493: PUSH1 0xa0
00000495: SHL
00000496: SUB
00000497: DUP2
00000498: AND
00000499: CALLER
0000049a: EQ
0000049b: PUSH2 0x04b7
0000049e: JUMPI
0000049f: PUSH1 0x40
000004a1: MLOAD
000004a2: PUSH4 0x334bd919
000004a7: PUSH1 0xe1
000004a9: SHL
000004aa: DUP2
000004ab: MSTORE
000004ac: PUSH1 0x04
000004ae: ADD
000004af: PUSH1 0x40
000004b1: MLOAD
000004b2: DUP1
000004b3: SWAP2
000004b4: SUB
000004b5: SWAP1
000004b6: REVERT
000004b7: JUMPDEST
000004b8: PUSH2 0x04c1
000004bb: DUP3
000004bc: DUP3
000004bd: PUSH2 0x08c8
000004c0: JUMP
000004c1: JUMPDEST
000004c2: POP
000004c3: POP
000004c4: POP
000004c5: JUMP
000004c6: JUMPDEST
000004c7: PUSH2 0x04ce
000004ca: PUSH2 0x0944
000004cd: JUMP
000004ce: JUMPDEST
000004cf: PUSH2 0x04d7
000004d2: DUP3
000004d3: PUSH2 0x09eb
000004d6: JUMP
000004d7: JUMPDEST
000004d8: PUSH2 0x04e1
000004db: DUP3
000004dc: DUP3
000004dd: PUSH2 0x09f6
000004e0: JUMP
000004e1: JUMPDEST
000004e2: POP
000004e3: POP
000004e4: JUMP
000004e5: JUMPDEST
000004e6: PUSH1 0x00
000004e8: PUSH2 0x04ef
000004eb: PUSH2 0x0ab8
000004ee: JUMP
000004ef: JUMPDEST
000004f0: POP
000004f1: PUSH1 0x00
000004f3: DUP1
000004f4: MLOAD
000004f5: PUSH1 0x20
000004f7: PUSH2 0x1680
000004fa: DUP4
000004fb: CODECOPY
000004fc: DUP2
000004fd: MLOAD
000004fe: SWAP2
000004ff: MSTORE
00000500: SWAP1
00000501: JUMP
00000502: JUMPDEST
00000503: PUSH32 0xf177c69799c54616dafe77c22ebee5241cfaca9a608e9fb90c5c56a34d576e00
00000524: PUSH2 0x0530
00000527: DUP3
00000528: DUP7
00000529: DUP7
0000052a: DUP7
0000052b: ADDRESS
0000052c: PUSH2 0x0b01
0000052f: JUMP
00000530: JUMPDEST
00000531: PUSH1 0x00
00000533: DUP1
00000534: PUSH1 0x00
00000536: DUP1
00000537: PUSH2 0x053f
0000053a: DUP7
0000053b: PUSH2 0x0e25
0000053e: JUMP
0000053f: JUMPDEST
00000540: SWAP3
00000541: SWAP7
00000542: POP
00000543: SWAP1
00000544: SWAP5
00000545: POP
00000546: SWAP3
00000547: POP
00000548: SWAP1
00000549: POP
0000054a: PUSH1 0x01
0000054c: PUSH1 0x01
0000054e: PUSH1 0xa0
00000550: SHL
00000551: SUB
00000552: DUP2
00000553: AND
00000554: ADDRESS
00000555: EQ
00000556: PUSH2 0x0572
00000559: JUMPI
0000055a: PUSH1 0x40
0000055c: MLOAD
0000055d: PUSH4 0x412ce843
00000562: PUSH1 0xe0
00000564: SHL
00000565: DUP2
00000566: MSTORE
00000567: PUSH1 0x04
00000569: ADD
0000056a: PUSH1 0x40
0000056c: MLOAD
0000056d: DUP1
0000056e: SWAP2
0000056f: SUB
00000570: SWAP1
00000571: REVERT
00000572: JUMPDEST
00000573: PUSH1 0x00
00000575: DUP3
00000576: DUP2
00000577: MSTORE
00000578: PUSH1 0x20
0000057a: DUP7
0000057b: SWAP1
0000057c: MSTORE
0000057d: PUSH1 0x40
0000057f: SWAP1
00000580: KECCAK256
00000581: SLOAD
00000582: PUSH1 0xff
00000584: AND
00000585: ISZERO
00000586: PUSH2 0x05a2
00000589: JUMPI
0000058a: PUSH1 0x40
0000058c: MLOAD
0000058d: PUSH4 0xd0ebeb4b
00000592: PUSH1 0xe0
00000594: SHL
00000595: DUP2
00000596: MSTORE
00000597: PUSH1 0x04
00000599: ADD
0000059a: PUSH1 0x40
0000059c: MLOAD
0000059d: DUP1
0000059e: SWAP2
0000059f: SUB
000005a0: SWAP1
000005a1: REVERT
000005a2: JUMPDEST
000005a3: PUSH1 0x00
000005a5: DUP3
000005a6: DUP2
000005a7: MSTORE
000005a8: PUSH1 0x20
000005aa: DUP7
000005ab: SWAP1
000005ac: MSTORE
000005ad: PUSH1 0x40
000005af: SWAP1
000005b0: KECCAK256
000005b1: DUP1
000005b2: SLOAD
000005b3: PUSH1 0xff
000005b5: NOT
000005b6: AND
000005b7: PUSH1 0x01
000005b9: OR
000005ba: SWAP1
000005bb: SSTORE
000005bc: PUSH2 0x05c5
000005bf: DUP5
000005c0: DUP5
000005c1: PUSH2 0x0e7f
000005c4: JUMP
000005c5: JUMPDEST
000005c6: PUSH2 0x05e2
000005c9: JUMPI
000005ca: PUSH1 0x40
000005cc: MLOAD
000005cd: PUSH4 0x12171d83
000005d2: PUSH1 0xe3
000005d4: SHL
000005d5: DUP2
000005d6: MSTORE
000005d7: PUSH1 0x04
000005d9: ADD
000005da: PUSH1 0x40
000005dc: MLOAD
000005dd: DUP1
000005de: SWAP2
000005df: SUB
000005e0: SWAP1
000005e1: REVERT
000005e2: JUMPDEST
000005e3: PUSH1 0x40
000005e5: DUP1
000005e6: MLOAD
000005e7: DUP5
000005e8: DUP2
000005e9: MSTORE
000005ea: PUSH1 0x20
000005ec: DUP2
000005ed: ADD
000005ee: DUP5
000005ef: SWAP1
000005f0: MSTORE
000005f1: PUSH1 0x01
000005f3: PUSH1 0x01
000005f5: PUSH1 0xa0
000005f7: SHL
000005f8: SUB
000005f9: DUP7
000005fa: AND
000005fb: SWAP2
000005fc: PUSH32 0x3b3ea932258c0790aa2c649875c0051f6eedd02c64674181babf9ecf6611f6aa
0000061d: SWAP2
0000061e: ADD
0000061f: PUSH1 0x40
00000621: MLOAD
00000622: DUP1
00000623: SWAP2
00000624: SUB
00000625: SWAP1
00000626: LOG2
00000627: POP
00000628: POP
00000629: POP
0000062a: POP
0000062b: POP
0000062c: POP
0000062d: POP
0000062e: POP
0000062f: POP
00000630: JUMP
00000631: JUMPDEST
00000632: PUSH1 0x00
00000634: PUSH2 0x063c
00000637: DUP2
00000638: PUSH2 0x0816
0000063b: JUMP
0000063c: JUMPDEST
0000063d: POP
0000063e: PUSH32 0x0abe884846eee1d492e84e31ee30140e7b2e501dde84c2790e64629bd4209300
0000065f: SSTORE
00000660: JUMP
00000661: JUMPDEST
00000662: PUSH32 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00
00000683: DUP1
00000684: SLOAD
00000685: PUSH1 0x01
00000687: PUSH1 0x40
00000689: SHL
0000068a: DUP2
0000068b: DIV
0000068c: PUSH1 0xff
0000068e: AND
0000068f: ISZERO
00000690: SWAP1
00000691: PUSH8 0xffffffffffffffff
0000069a: AND
0000069b: PUSH1 0x00
0000069d: DUP2
0000069e: ISZERO
0000069f: DUP1
000006a0: ISZERO
000006a1: PUSH2 0x06a7
000006a4: JUMPI
000006a5: POP
000006a6: DUP3
000006a7: JUMPDEST
000006a8: SWAP1
000006a9: POP
000006aa: PUSH1 0x00
000006ac: DUP3
000006ad: PUSH8 0xffffffffffffffff
000006b6: AND
000006b7: PUSH1 0x01
000006b9: EQ
000006ba: DUP1
000006bb: ISZERO
000006bc: PUSH2 0x06c4
000006bf: JUMPI
000006c0: POP
000006c1: ADDRESS
000006c2: EXTCODESIZE
000006c3: ISZERO
000006c4: JUMPDEST
000006c5: SWAP1
000006c6: POP
000006c7: DUP2
000006c8: ISZERO
000006c9: DUP1
000006ca: ISZERO
000006cb: PUSH2 0x06d2
000006ce: JUMPI
000006cf: POP
000006d0: DUP1
000006d1: ISZERO
000006d2: JUMPDEST
000006d3: ISZERO
000006d4: PUSH2 0x06f0
000006d7: JUMPI
000006d8: PUSH1 0x40
000006da: MLOAD
000006db: PUSH4 0xf92ee8a9
000006e0: PUSH1 0xe0
000006e2: SHL
000006e3: DUP2
000006e4: MSTORE
000006e5: PUSH1 0x04
000006e7: ADD
000006e8: PUSH1 0x40
000006ea: MLOAD
000006eb: DUP1
000006ec: SWAP2
000006ed: SUB
000006ee: SWAP1
000006ef: REVERT
000006f0: JUMPDEST
000006f1: DUP5
000006f2: SLOAD
000006f3: PUSH8 0xffffffffffffffff
000006fc: NOT
000006fd: AND
000006fe: PUSH1 0x01
00000700: OR
00000701: DUP6
00000702: SSTORE
00000703: DUP4
00000704: ISZERO
00000705: PUSH2 0x071a
00000708: JUMPI
00000709: DUP5
0000070a: SLOAD
0000070b: PUSH1 0xff
0000070d: PUSH1 0x40
0000070f: SHL
00000710: NOT
00000711: AND
00000712: PUSH1 0x01
00000714: PUSH1 0x40
00000716: SHL
00000717: OR
00000718: DUP6
00000719: SSTORE
0000071a: JUMPDEST
0000071b: PUSH2 0x0722
0000071e: PUSH2 0x0edd
00000721: JUMP
00000722: JUMPDEST
00000723: PUSH2 0x072a
00000726: PUSH2 0x0ee9
00000729: JUMP
0000072a: JUMPDEST
0000072b: PUSH2 0x0732
0000072e: PUSH2 0x0ee9
00000731: JUMP
00000732: JUMPDEST
00000733: PUSH2 0x073d
00000736: PUSH1 0x00
00000738: CALLER
00000739: PUSH2 0x0823
0000073c: JUMP
0000073d: JUMPDEST
0000073e: POP
0000073f: DUP4
00000740: ISZERO
00000741: PUSH2 0x0784
00000744: JUMPI
00000745: DUP5
00000746: SLOAD
00000747: PUSH1 0xff
00000749: PUSH1 0x40
0000074b: SHL
0000074c: NOT
0000074d: AND
0000074e: DUP6
0000074f: SSTORE
00000750: PUSH1 0x40
00000752: MLOAD
00000753: PUSH1 0x01
00000755: DUP2
00000756: MSTORE
00000757: PUSH32 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2
00000778: SWAP1
00000779: PUSH1 0x20
0000077b: ADD
0000077c: PUSH1 0x40
0000077e: MLOAD
0000077f: DUP1
00000780: SWAP2
00000781: SUB
00000782: SWAP1
00000783: LOG1
00000784: JUMPDEST
00000785: POP
00000786: POP
00000787: POP
00000788: POP
00000789: POP
0000078a: JUMP
0000078b: JUMPDEST
0000078c: PUSH1 0x00
0000078e: SWAP2
0000078f: DUP3
00000790: MSTORE
00000791: PUSH1 0x00
00000793: DUP1
00000794: MLOAD
00000795: PUSH1 0x20
00000797: PUSH2 0x16a0
0000079a: DUP4
0000079b: CODECOPY
0000079c: DUP2
0000079d: MLOAD
0000079e: SWAP2
0000079f: MSTORE
000007a0: PUSH1 0x20
000007a2: SWAP1
000007a3: DUP2
000007a4: MSTORE
000007a5: PUSH1 0x40
000007a7: DUP1
000007a8: DUP5
000007a9: KECCAK256
000007aa: PUSH1 0x01
000007ac: PUSH1 0x01
000007ae: PUSH1 0xa0
000007b0: SHL
000007b1: SUB
000007b2: SWAP4
000007b3: SWAP1
000007b4: SWAP4
000007b5: AND
000007b6: DUP5
000007b7: MSTORE
000007b8: SWAP2
000007b9: SWAP1
000007ba: MSTORE
000007bb: SWAP1
000007bc: KECCAK256
000007bd: SLOAD
000007be: PUSH1 0xff
000007c0: AND
000007c1: SWAP1
000007c2: JUMP
000007c3: JUMPDEST
000007c4: PUSH2 0x07cc
000007c7: DUP3
000007c8: PUSH2 0x044a
000007cb: JUMP
000007cc: JUMPDEST
000007cd: PUSH2 0x07d5
000007d0: DUP2
000007d1: PUSH2 0x0816
000007d4: JUMP
000007d5: JUMPDEST
000007d6: PUSH2 0x0488
000007d9: DUP4
000007da: DUP4
000007db: PUSH2 0x08c8
000007de: JUMP
000007df: JUMPDEST
000007e0: PUSH1 0x00
000007e2: PUSH2 0x07ea
000007e5: DUP2
000007e6: PUSH2 0x0816
000007e9: JUMP
000007ea: JUMPDEST
000007eb: PUSH1 0x40
000007ed: MLOAD
000007ee: CALLER
000007ef: SWAP1
000007f0: SELFBALANCE
000007f1: DUP1
000007f2: ISZERO
000007f3: PUSH2 0x08fc
000007f6: MUL
000007f7: SWAP2
000007f8: PUSH1 0x00
000007fa: DUP2
000007fb: DUP2
000007fc: DUP2
000007fd: DUP6
000007fe: DUP9
000007ff: DUP9
00000800: CALL
00000801: SWAP4
00000802: POP
00000803: POP
00000804: POP
00000805: POP
00000806: ISZERO
00000807: DUP1
00000808: ISZERO
00000809: PUSH2 0x04e1
0000080c: JUMPI
0000080d: RETURNDATASIZE
0000080e: PUSH1 0x00
00000810: DUP1
00000811: RETURNDATACOPY
00000812: RETURNDATASIZE
00000813: PUSH1 0x00
00000815: REVERT
00000816: JUMPDEST
00000817: PUSH2 0x0820
0000081a: DUP2
0000081b: CALLER
0000081c: PUSH2 0x0ef1
0000081f: JUMP
00000820: JUMPDEST
00000821: POP
00000822: JUMP
00000823: JUMPDEST
00000824: PUSH1 0x00
00000826: PUSH1 0x00
00000828: DUP1
00000829: MLOAD
0000082a: PUSH1 0x20
0000082c: PUSH2 0x16a0
0000082f: DUP4
00000830: CODECOPY
00000831: DUP2
00000832: MLOAD
00000833: SWAP2
00000834: MSTORE
00000835: PUSH2 0x083e
00000838: DUP5
00000839: DUP5
0000083a: PUSH2 0x078b
0000083d: JUMP
0000083e: JUMPDEST
0000083f: PUSH2 0x08be
00000842: JUMPI
00000843: PUSH1 0x00
00000845: DUP5
00000846: DUP2
00000847: MSTORE
00000848: PUSH1 0x20
0000084a: DUP3
0000084b: DUP2
0000084c: MSTORE
0000084d: PUSH1 0x40
0000084f: DUP1
00000850: DUP4
00000851: KECCAK256
00000852: PUSH1 0x01
00000854: PUSH1 0x01
00000856: PUSH1 0xa0
00000858: SHL
00000859: SUB
0000085a: DUP8
0000085b: AND
0000085c: DUP5
0000085d: MSTORE
0000085e: SWAP1
0000085f: SWAP2
00000860: MSTORE
00000861: SWAP1
00000862: KECCAK256
00000863: DUP1
00000864: SLOAD
00000865: PUSH1 0xff
00000867: NOT
00000868: AND
00000869: PUSH1 0x01
0000086b: OR
0000086c: SWAP1
0000086d: SSTORE
0000086e: PUSH2 0x0874
00000871: CALLER
00000872: SWAP1
00000873: JUMP
00000874: JUMPDEST
00000875: PUSH1 0x01
00000877: PUSH1 0x01
00000879: PUSH1 0xa0
0000087b: SHL
0000087c: SUB
0000087d: AND
0000087e: DUP4
0000087f: PUSH1 0x01
00000881: PUSH1 0x01
00000883: PUSH1 0xa0
00000885: SHL
00000886: SUB
00000887: AND
00000888: DUP6
00000889: PUSH32 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d
000008aa: PUSH1 0x40
000008ac: MLOAD
000008ad: PUSH1 0x40
000008af: MLOAD
000008b0: DUP1
000008b1: SWAP2
000008b2: SUB
000008b3: SWAP1
000008b4: LOG4
000008b5: PUSH1 0x01
000008b7: SWAP2
000008b8: POP
000008b9: POP
000008ba: PUSH2 0x0444
000008bd: JUMP
000008be: JUMPDEST
000008bf: PUSH1 0x00
000008c1: SWAP2
000008c2: POP
000008c3: POP
000008c4: PUSH2 0x0444
000008c7: JUMP
000008c8: JUMPDEST
000008c9: PUSH1 0x00
000008cb: PUSH1 0x00
000008cd: DUP1
000008ce: MLOAD
000008cf: PUSH1 0x20
000008d1: PUSH2 0x16a0
000008d4: DUP4
000008d5: CODECOPY
000008d6: DUP2
000008d7: MLOAD
000008d8: SWAP2
000008d9: MSTORE
000008da: PUSH2 0x08e3
000008dd: DUP5
000008de: DUP5
000008df: PUSH2 0x078b
000008e2: JUMP
000008e3: JUMPDEST
000008e4: ISZERO
000008e5: PUSH2 0x08be
000008e8: JUMPI
000008e9: PUSH1 0x00
000008eb: DUP5
000008ec: DUP2
000008ed: MSTORE
000008ee: PUSH1 0x20
000008f0: DUP3
000008f1: DUP2
000008f2: MSTORE
000008f3: PUSH1 0x40
000008f5: DUP1
000008f6: DUP4
000008f7: KECCAK256
000008f8: PUSH1 0x01
000008fa: PUSH1 0x01
000008fc: PUSH1 0xa0
000008fe: SHL
000008ff: SUB
00000900: DUP8
00000901: AND
00000902: DUP1
00000903: DUP6
00000904: MSTORE
00000905: SWAP3
00000906: MSTORE
00000907: DUP1
00000908: DUP4
00000909: KECCAK256
0000090a: DUP1
0000090b: SLOAD
0000090c: PUSH1 0xff
0000090e: NOT
0000090f: AND
00000910: SWAP1
00000911: SSTORE
00000912: MLOAD
00000913: CALLER
00000914: SWAP3
00000915: DUP8
00000916: SWAP2
00000917: PUSH32 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b
00000938: SWAP2
00000939: SWAP1
0000093a: LOG4
0000093b: PUSH1 0x01
0000093d: SWAP2
0000093e: POP
0000093f: POP
00000940: PUSH2 0x0444
00000943: JUMP
00000944: JUMPDEST
00000945: ADDRESS
00000946: PUSH1 0x01
00000948: PUSH1 0x01
0000094a: PUSH1 0xa0
0000094c: SHL
0000094d: SUB
0000094e: PUSH32 0x000000000000000000000000bdead28e8a46457646de417d0295c535e2bad4ca
0000096f: AND
00000970: EQ
00000971: DUP1
00000972: PUSH2 0x09cb
00000975: JUMPI
00000976: POP
00000977: PUSH32 0x000000000000000000000000bdead28e8a46457646de417d0295c535e2bad4ca
00000998: PUSH1 0x01
0000099a: PUSH1 0x01
0000099c: PUSH1 0xa0
0000099e: SHL
0000099f: SUB
000009a0: AND
000009a1: PUSH2 0x09bf
000009a4: PUSH1 0x00
000009a6: DUP1
000009a7: MLOAD
000009a8: PUSH1 0x20
000009aa: PUSH2 0x1680
000009ad: DUP4
000009ae: CODECOPY
000009af: DUP2
000009b0: MLOAD
000009b1: SWAP2
000009b2: MSTORE
000009b3: SLOAD
000009b4: PUSH1 0x01
000009b6: PUSH1 0x01
000009b8: PUSH1 0xa0
000009ba: SHL
000009bb: SUB
000009bc: AND
000009bd: SWAP1
000009be: JUMP
000009bf: JUMPDEST
000009c0: PUSH1 0x01
000009c2: PUSH1 0x01
000009c4: PUSH1 0xa0
000009c6: SHL
000009c7: SUB
000009c8: AND
000009c9: EQ
000009ca: ISZERO
000009cb: JUMPDEST
000009cc: ISZERO
000009cd: PUSH2 0x09e9
000009d0: JUMPI
000009d1: PUSH1 0x40
000009d3: MLOAD
000009d4: PUSH4 0x703e46dd
000009d9: PUSH1 0xe1
000009db: SHL
000009dc: DUP2
000009dd: MSTORE
000009de: PUSH1 0x04
000009e0: ADD
000009e1: PUSH1 0x40
000009e3: MLOAD
000009e4: DUP1
000009e5: SWAP2
000009e6: SUB
000009e7: SWAP1
000009e8: REVERT
000009e9: JUMPDEST
000009ea: JUMP
000009eb: JUMPDEST
000009ec: PUSH1 0x00
000009ee: PUSH2 0x04e1
000009f1: DUP2
000009f2: PUSH2 0x0816
000009f5: JUMP
000009f6: JUMPDEST
000009f7: DUP2
000009f8: PUSH1 0x01
000009fa: PUSH1 0x01
000009fc: PUSH1 0xa0
000009fe: SHL
000009ff: SUB
00000a00: AND
00000a01: PUSH4 0x52d1902d
00000a06: PUSH1 0x40
00000a08: MLOAD
00000a09: DUP2
00000a0a: PUSH4 0xffffffff
00000a0f: AND
00000a10: PUSH1 0xe0
00000a12: SHL
00000a13: DUP2
00000a14: MSTORE
00000a15: PUSH1 0x04
00000a17: ADD
00000a18: PUSH1 0x20
00000a1a: PUSH1 0x40
00000a1c: MLOAD
00000a1d: DUP1
00000a1e: DUP4
00000a1f: SUB
00000a20: DUP2
00000a21: DUP7
00000a22: GAS
00000a23: STATICCALL
00000a24: SWAP3
00000a25: POP
00000a26: POP
00000a27: POP
00000a28: DUP1
00000a29: ISZERO
00000a2a: PUSH2 0x0a50
00000a2d: JUMPI
00000a2e: POP
00000a2f: PUSH1 0x40
00000a31: DUP1
00000a32: MLOAD
00000a33: PUSH1 0x1f
00000a35: RETURNDATASIZE
00000a36: SWAP1
00000a37: DUP2
00000a38: ADD
00000a39: PUSH1 0x1f
00000a3b: NOT
00000a3c: AND
00000a3d: DUP3
00000a3e: ADD
00000a3f: SWAP1
00000a40: SWAP3
00000a41: MSTORE
00000a42: PUSH2 0x0a4d
00000a45: SWAP2
00000a46: DUP2
00000a47: ADD
00000a48: SWAP1
00000a49: PUSH2 0x15cf
00000a4c: JUMP
00000a4d: JUMPDEST
00000a4e: PUSH1 0x01
00000a50: JUMPDEST
00000a51: PUSH2 0x0a7d
00000a54: JUMPI
00000a55: PUSH1 0x40
00000a57: MLOAD
00000a58: PUSH4 0x4c9c8ce3
00000a5d: PUSH1 0xe0
00000a5f: SHL
00000a60: DUP2
00000a61: MSTORE
00000a62: PUSH1 0x01
00000a64: PUSH1 0x01
00000a66: PUSH1 0xa0
00000a68: SHL
00000a69: SUB
00000a6a: DUP4
00000a6b: AND
00000a6c: PUSH1 0x04
00000a6e: DUP3
00000a6f: ADD
00000a70: MSTORE
00000a71: PUSH1 0x24
00000a73: ADD
00000a74: JUMPDEST
00000a75: PUSH1 0x40
00000a77: MLOAD
00000a78: DUP1
00000a79: SWAP2
00000a7a: SUB
00000a7b: SWAP1
00000a7c: REVERT
00000a7d: JUMPDEST
00000a7e: PUSH1 0x00
00000a80: DUP1
00000a81: MLOAD
00000a82: PUSH1 0x20
00000a84: PUSH2 0x1680
00000a87: DUP4
00000a88: CODECOPY
00000a89: DUP2
00000a8a: MLOAD
00000a8b: SWAP2
00000a8c: MSTORE
00000a8d: DUP2
00000a8e: EQ
00000a8f: PUSH2 0x0aae
00000a92: JUMPI
00000a93: PUSH1 0x40
00000a95: MLOAD
00000a96: PUSH4 0x2a875269
00000a9b: PUSH1 0xe2
00000a9d: SHL
00000a9e: DUP2
00000a9f: MSTORE
00000aa0: PUSH1 0x04
00000aa2: DUP2
00000aa3: ADD
00000aa4: DUP3
00000aa5: SWAP1
00000aa6: MSTORE
00000aa7: PUSH1 0x24
00000aa9: ADD
00000aaa: PUSH2 0x0a74
00000aad: JUMP
00000aae: JUMPDEST
00000aaf: PUSH2 0x04c1
00000ab2: DUP4
00000ab3: DUP4
00000ab4: PUSH2 0x0f2a
00000ab7: JUMP
00000ab8: JUMPDEST
00000ab9: ADDRESS
00000aba: PUSH1 0x01
00000abc: PUSH1 0x01
00000abe: PUSH1 0xa0
00000ac0: SHL
00000ac1: SUB
00000ac2: PUSH32 0x000000000000000000000000bdead28e8a46457646de417d0295c535e2bad4ca
00000ae3: AND
00000ae4: EQ
00000ae5: PUSH2 0x09e9
00000ae8: JUMPI
00000ae9: PUSH1 0x40
00000aeb: MLOAD
00000aec: PUSH4 0x703e46dd
00000af1: PUSH1 0xe1
00000af3: SHL
00000af4: DUP2
00000af5: MSTORE
00000af6: PUSH1 0x04
00000af8: ADD
00000af9: PUSH1 0x40
00000afb: MLOAD
00000afc: DUP1
00000afd: SWAP2
00000afe: SUB
00000aff: SWAP1
00000b00: REVERT
00000b01: JUMPDEST
00000b02: DUP5
00000b03: MLOAD
00000b04: PUSH1 0x68
00000b06: EQ
00000b07: PUSH2 0x0b23
00000b0a: JUMPI
00000b0b: PUSH1 0x40
00000b0d: MLOAD
00000b0e: PUSH4 0x6eca2e4b
00000b13: PUSH1 0xe0
00000b15: SHL
00000b16: DUP2
00000b17: MSTORE
00000b18: PUSH1 0x04
00000b1a: ADD
00000b1b: PUSH1 0x40
00000b1d: MLOAD
00000b1e: DUP1
00000b1f: SWAP2
00000b20: SUB
00000b21: SWAP1
00000b22: REVERT
00000b23: JUMPDEST
00000b24: PUSH1 0x00
00000b26: DUP2
00000b27: PUSH1 0x01
00000b29: PUSH1 0x01
00000b2b: PUSH1 0xa0
00000b2d: SHL
00000b2e: SUB
00000b2f: AND
00000b30: PUSH4 0xccd93998
00000b35: PUSH1 0x40
00000b37: MLOAD
00000b38: DUP2
00000b39: PUSH4 0xffffffff
00000b3e: AND
00000b3f: PUSH1 0xe0
00000b41: SHL
00000b42: DUP2
00000b43: MSTORE
00000b44: PUSH1 0x04
00000b46: ADD
00000b47: PUSH1 0x20
00000b49: PUSH1 0x40
00000b4b: MLOAD
00000b4c: DUP1
00000b4d: DUP4
00000b4e: SUB
00000b4f: DUP2
00000b50: DUP7
00000b51: GAS
00000b52: STATICCALL
00000b53: ISZERO
00000b54: DUP1
00000b55: ISZERO
00000b56: PUSH2 0x0b63
00000b59: JUMPI
00000b5a: RETURNDATASIZE
00000b5b: PUSH1 0x00
00000b5d: DUP1
00000b5e: RETURNDATACOPY
00000b5f: RETURNDATASIZE
00000b60: PUSH1 0x00
00000b62: REVERT
00000b63: JUMPDEST
00000b64: POP
00000b65: POP
00000b66: POP
00000b67: POP
00000b68: PUSH1 0x40
00000b6a: MLOAD
00000b6b: RETURNDATASIZE
00000b6c: PUSH1 0x1f
00000b6e: NOT
00000b6f: PUSH1 0x1f
00000b71: DUP3
00000b72: ADD
00000b73: AND
00000b74: DUP3
00000b75: ADD
00000b76: DUP1
00000b77: PUSH1 0x40
00000b79: MSTORE
00000b7a: POP
00000b7b: DUP2
00000b7c: ADD
00000b7d: SWAP1
00000b7e: PUSH2 0x0b87
00000b81: SWAP2
00000b82: SWAP1
00000b83: PUSH2 0x15cf
00000b86: JUMP
00000b87: JUMPDEST
00000b88: SWAP1
00000b89: POP
00000b8a: DUP1
00000b8b: DUP6
00000b8c: MLOAD
00000b8d: LT
00000b8e: ISZERO
00000b8f: PUSH2 0x0bab
00000b92: JUMPI
00000b93: PUSH1 0x40
00000b95: MLOAD
00000b96: PUSH4 0x22e5ce43
00000b9b: PUSH1 0xe2
00000b9d: SHL
00000b9e: DUP2
00000b9f: MSTORE
00000ba0: PUSH1 0x04
00000ba2: ADD
00000ba3: PUSH1 0x40
00000ba5: MLOAD
00000ba6: DUP1
00000ba7: SWAP2
00000ba8: SUB
00000ba9: SWAP1
00000baa: REVERT
00000bab: JUMPDEST
00000bac: PUSH1 0x00
00000bae: PUSH2 0x0bb6
00000bb1: DUP8
00000bb2: PUSH2 0x0f80
00000bb5: JUMP
00000bb6: JUMPDEST
00000bb7: SWAP1
00000bb8: POP
00000bb9: PUSH1 0x00
00000bbb: DUP3
00000bbc: PUSH8 0xffffffffffffffff
00000bc5: DUP2
00000bc6: GT
00000bc7: ISZERO
00000bc8: PUSH2 0x0bd3
00000bcb: JUMPI
00000bcc: PUSH2 0x0bd3
00000bcf: PUSH2 0x12b3
00000bd2: JUMP
00000bd3: JUMPDEST
00000bd4: PUSH1 0x40
00000bd6: MLOAD
00000bd7: SWAP1
00000bd8: DUP1
00000bd9: DUP3
00000bda: MSTORE
00000bdb: DUP1
00000bdc: PUSH1 0x20
00000bde: MUL
00000bdf: PUSH1 0x20
00000be1: ADD
00000be2: DUP3
00000be3: ADD
00000be4: PUSH1 0x40
00000be6: MSTORE
00000be7: DUP1
00000be8: ISZERO
00000be9: PUSH2 0x0bfc
00000bec: JUMPI
00000bed: DUP2
00000bee: PUSH1 0x20
00000bf0: ADD
00000bf1: PUSH1 0x20
00000bf3: DUP3
00000bf4: MUL
00000bf5: DUP1
00000bf6: CALLDATASIZE
00000bf7: DUP4
00000bf8: CALLDATACOPY
00000bf9: ADD
00000bfa: SWAP1
00000bfb: POP
00000bfc: JUMPDEST
00000bfd: POP
00000bfe: SWAP1
00000bff: POP
00000c00: PUSH1 0x00
00000c02: JUMPDEST
00000c03: DUP4
00000c04: DUP2
00000c05: LT
00000c06: ISZERO
00000c07: PUSH2 0x0e1a
00000c0a: JUMPI
00000c0b: PUSH1 0x00
00000c0d: PUSH1 0x01
00000c0f: DUP5
00000c10: DUP11
00000c11: DUP5
00000c12: DUP2
00000c13: MLOAD
00000c14: DUP2
00000c15: LT
00000c16: PUSH2 0x0c21
00000c19: JUMPI
00000c1a: PUSH2 0x0c21
00000c1d: PUSH2 0x15e8
00000c20: JUMP
00000c21: JUMPDEST
00000c22: PUSH1 0x20
00000c24: MUL
00000c25: PUSH1 0x20
00000c27: ADD
00000c28: ADD
00000c29: MLOAD
00000c2a: DUP11
00000c2b: DUP6
00000c2c: DUP2
00000c2d: MLOAD
00000c2e: DUP2
00000c2f: LT
00000c30: PUSH2 0x0c3b
00000c33: JUMPI
00000c34: PUSH2 0x0c3b
00000c37: PUSH2 0x15e8
00000c3a: JUMP
00000c3b: JUMPDEST
00000c3c: PUSH1 0x20
00000c3e: MUL
00000c3f: PUSH1 0x20
00000c41: ADD
00000c42: ADD
00000c43: MLOAD
00000c44: DUP11
00000c45: DUP7
00000c46: DUP2
00000c47: MLOAD
00000c48: DUP2
00000c49: LT
00000c4a: PUSH2 0x0c55
00000c4d: JUMPI
00000c4e: PUSH2 0x0c55
00000c51: PUSH2 0x15e8
00000c54: JUMP
00000c55: JUMPDEST
00000c56: PUSH1 0x20
00000c58: MUL
00000c59: PUSH1 0x20
00000c5b: ADD
00000c5c: ADD
00000c5d: MLOAD
00000c5e: PUSH1 0x40
00000c60: MLOAD
00000c61: PUSH1 0x00
00000c63: DUP2
00000c64: MSTORE
00000c65: PUSH1 0x20
00000c67: ADD
00000c68: PUSH1 0x40
00000c6a: MSTORE
00000c6b: PUSH1 0x40
00000c6d: MLOAD
00000c6e: PUSH2 0x0c93
00000c71: SWAP5
00000c72: SWAP4
00000c73: SWAP3
00000c74: SWAP2
00000c75: SWAP1
00000c76: SWAP4
00000c77: DUP5
00000c78: MSTORE
00000c79: PUSH1 0xff
00000c7b: SWAP3
00000c7c: SWAP1
00000c7d: SWAP3
00000c7e: AND
00000c7f: PUSH1 0x20
00000c81: DUP5
00000c82: ADD
00000c83: MSTORE
00000c84: PUSH1 0x40
00000c86: DUP4
00000c87: ADD
00000c88: MSTORE
00000c89: PUSH1 0x60
00000c8b: DUP3
00000c8c: ADD
00000c8d: MSTORE
00000c8e: PUSH1 0x80
00000c90: ADD
00000c91: SWAP1
00000c92: JUMP
00000c93: JUMPDEST
00000c94: PUSH1 0x20
00000c96: PUSH1 0x40
00000c98: MLOAD
00000c99: PUSH1 0x20
00000c9b: DUP2
00000c9c: SUB
00000c9d: SWAP1
00000c9e: DUP1
00000c9f: DUP5
00000ca0: SUB
00000ca1: SWAP1
00000ca2: DUP6
00000ca3: GAS
00000ca4: STATICCALL
00000ca5: ISZERO
00000ca6: DUP1
00000ca7: ISZERO
00000ca8: PUSH2 0x0cb5
00000cab: JUMPI
00000cac: RETURNDATASIZE
00000cad: PUSH1 0x00
00000caf: DUP1
00000cb0: RETURNDATACOPY
00000cb1: RETURNDATASIZE
00000cb2: PUSH1 0x00
00000cb4: REVERT
00000cb5: JUMPDEST
00000cb6: POP
00000cb7: POP
00000cb8: POP
00000cb9: PUSH1 0x20
00000cbb: PUSH1 0x40
00000cbd: MLOAD
00000cbe: SUB
00000cbf: MLOAD
00000cc0: SWAP1
00000cc1: POP
00000cc2: DUP6
00000cc3: PUSH1 0x01
00000cc5: PUSH1 0x01
00000cc7: PUSH1 0xa0
00000cc9: SHL
00000cca: SUB
00000ccb: AND
00000ccc: PUSH4 0x91d14854
00000cd1: DUP8
00000cd2: PUSH1 0x01
00000cd4: PUSH1 0x01
00000cd6: PUSH1 0xa0
00000cd8: SHL
00000cd9: SUB
00000cda: AND
00000cdb: PUSH4 0xc49baebe
00000ce0: PUSH1 0x40
00000ce2: MLOAD
00000ce3: DUP2
00000ce4: PUSH4 0xffffffff
00000ce9: AND
00000cea: PUSH1 0xe0
00000cec: SHL
00000ced: DUP2
00000cee: MSTORE
00000cef: PUSH1 0x04
00000cf1: ADD
00000cf2: PUSH1 0x20
00000cf4: PUSH1 0x40
00000cf6: MLOAD
00000cf7: DUP1
00000cf8: DUP4
00000cf9: SUB
00000cfa: DUP2
00000cfb: DUP7
00000cfc: GAS
00000cfd: STATICCALL
00000cfe: ISZERO
00000cff: DUP1
00000d00: ISZERO
00000d01: PUSH2 0x0d0e
00000d04: JUMPI
00000d05: RETURNDATASIZE
00000d06: PUSH1 0x00
00000d08: DUP1
00000d09: RETURNDATACOPY
00000d0a: RETURNDATASIZE
00000d0b: PUSH1 0x00
00000d0d: REVERT
00000d0e: JUMPDEST
00000d0f: POP
00000d10: POP
00000d11: POP
00000d12: POP
00000d13: PUSH1 0x40
00000d15: MLOAD
00000d16: RETURNDATASIZE
00000d17: PUSH1 0x1f
00000d19: NOT
00000d1a: PUSH1 0x1f
00000d1c: DUP3
00000d1d: ADD
00000d1e: AND
00000d1f: DUP3
00000d20: ADD
00000d21: DUP1
00000d22: PUSH1 0x40
00000d24: MSTORE
00000d25: POP
00000d26: DUP2
00000d27: ADD
00000d28: SWAP1
00000d29: PUSH2 0x0d32
00000d2c: SWAP2
00000d2d: SWAP1
00000d2e: PUSH2 0x15cf
00000d31: JUMP
00000d32: JUMPDEST
00000d33: PUSH1 0x40
00000d35: MLOAD
00000d36: PUSH1 0x01
00000d38: PUSH1 0x01
00000d3a: PUSH1 0xe0
00000d3c: SHL
00000d3d: SUB
00000d3e: NOT
00000d3f: PUSH1 0xe0
00000d41: DUP5
00000d42: SWAP1
00000d43: SHL
00000d44: AND
00000d45: DUP2
00000d46: MSTORE
00000d47: PUSH1 0x04
00000d49: DUP2
00000d4a: ADD
00000d4b: SWAP2
00000d4c: SWAP1
00000d4d: SWAP2
00000d4e: MSTORE
00000d4f: PUSH1 0x01
00000d51: PUSH1 0x01
00000d53: PUSH1 0xa0
00000d55: SHL
00000d56: SUB
00000d57: DUP5
00000d58: AND
00000d59: PUSH1 0x24
00000d5b: DUP3
00000d5c: ADD
00000d5d: MSTORE
00000d5e: PUSH1 0x44
00000d60: ADD
00000d61: PUSH1 0x20
00000d63: PUSH1 0x40
00000d65: MLOAD
00000d66: DUP1
00000d67: DUP4
00000d68: SUB
00000d69: DUP2
00000d6a: DUP7
00000d6b: GAS
00000d6c: STATICCALL
00000d6d: ISZERO
00000d6e: DUP1
00000d6f: ISZERO
00000d70: PUSH2 0x0d7d
00000d73: JUMPI
00000d74: RETURNDATASIZE
00000d75: PUSH1 0x00
00000d77: DUP1
00000d78: RETURNDATACOPY
00000d79: RETURNDATASIZE
00000d7a: PUSH1 0x00
00000d7c: REVERT
00000d7d: JUMPDEST
00000d7e: POP
00000d7f: POP
00000d80: POP
00000d81: POP
00000d82: PUSH1 0x40
00000d84: MLOAD
00000d85: RETURNDATASIZE
00000d86: PUSH1 0x1f
00000d88: NOT
00000d89: PUSH1 0x1f
00000d8b: DUP3
00000d8c: ADD
00000d8d: AND
00000d8e: DUP3
00000d8f: ADD
00000d90: DUP1
00000d91: PUSH1 0x40
00000d93: MSTORE
00000d94: POP
00000d95: DUP2
00000d96: ADD
00000d97: SWAP1
00000d98: PUSH2 0x0da1
00000d9b: SWAP2
00000d9c: SWAP1
00000d9d: PUSH2 0x15fe
00000da0: JUMP
00000da1: JUMPDEST
00000da2: PUSH2 0x0dbe
00000da5: JUMPI
00000da6: PUSH1 0x40
00000da8: MLOAD
00000da9: PUSH4 0x6caa20b5
00000dae: PUSH1 0xe1
00000db0: SHL
00000db1: DUP2
00000db2: MSTORE
00000db3: PUSH1 0x04
00000db5: ADD
00000db6: PUSH1 0x40
00000db8: MLOAD
00000db9: DUP1
00000dba: SWAP2
00000dbb: SUB
00000dbc: SWAP1
00000dbd: REVERT
00000dbe: JUMPDEST
00000dbf: PUSH2 0x0dc8
00000dc2: DUP4
00000dc3: DUP3
00000dc4: PUSH2 0x1002
00000dc7: JUMP
00000dc8: JUMPDEST
00000dc9: ISZERO
00000dca: PUSH2 0x0de6
00000dcd: JUMPI
00000dce: PUSH1 0x40
00000dd0: MLOAD
00000dd1: PUSH4 0x23ef34dd
00000dd6: PUSH1 0xe2
00000dd8: SHL
00000dd9: DUP2
00000dda: MSTORE
00000ddb: PUSH1 0x04
00000ddd: ADD
00000dde: PUSH1 0x40
00000de0: MLOAD
00000de1: DUP1
00000de2: SWAP2
00000de3: SUB
00000de4: SWAP1
00000de5: REVERT
00000de6: JUMPDEST
00000de7: DUP1
00000de8: DUP4
00000de9: DUP4
00000dea: DUP2
00000deb: MLOAD
00000dec: DUP2
00000ded: LT
00000dee: PUSH2 0x0df9
00000df1: JUMPI
00000df2: PUSH2 0x0df9
00000df5: PUSH2 0x15e8
00000df8: JUMP
00000df9: JUMPDEST
00000dfa: PUSH1 0x01
00000dfc: PUSH1 0x01
00000dfe: PUSH1 0xa0
00000e00: SHL
00000e01: SUB
00000e02: SWAP1
00000e03: SWAP3
00000e04: AND
00000e05: PUSH1 0x20
00000e07: SWAP3
00000e08: DUP4
00000e09: MUL
00000e0a: SWAP2
00000e0b: SWAP1
00000e0c: SWAP2
00000e0d: ADD
00000e0e: SWAP1
00000e0f: SWAP2
00000e10: ADD
00000e11: MSTORE
00000e12: POP
00000e13: PUSH1 0x01
00000e15: ADD
00000e16: PUSH2 0x0c02
00000e19: JUMP
00000e1a: JUMPDEST
00000e1b: POP
00000e1c: POP
00000e1d: POP
00000e1e: POP
00000e1f: POP
00000e20: POP
00000e21: POP
00000e22: POP
00000e23: POP
00000e24: JUMP
00000e25: JUMPDEST
00000e26: PUSH1 0x00
00000e28: DUP1
00000e29: PUSH1 0x00
00000e2b: DUP1
00000e2c: PUSH2 0x0e36
00000e2f: DUP6
00000e30: MLOAD
00000e31: PUSH1 0x68
00000e33: EQ
00000e34: SWAP1
00000e35: JUMP
00000e36: JUMPDEST
00000e37: PUSH2 0x0e53
00000e3a: JUMPI
00000e3b: PUSH1 0x40
00000e3d: MLOAD
00000e3e: PUSH4 0x6eca2e4b
00000e43: PUSH1 0xe0
00000e45: SHL
00000e46: DUP2
00000e47: MSTORE
00000e48: PUSH1 0x04
00000e4a: ADD
00000e4b: PUSH1 0x40
00000e4d: MLOAD
00000e4e: DUP1
00000e4f: SWAP2
00000e50: SUB
00000e51: SWAP1
00000e52: REVERT
00000e53: JUMPDEST
00000e54: PUSH1 0x01
00000e56: PUSH1 0x01
00000e58: PUSH1 0xa0
00000e5a: SHL
00000e5b: SUB
00000e5c: PUSH1 0x14
00000e5e: DUP7
00000e5f: ADD
00000e60: MLOAD
00000e61: AND
00000e62: SWAP4
00000e63: POP
00000e64: PUSH1 0x34
00000e66: DUP6
00000e67: ADD
00000e68: MLOAD
00000e69: SWAP3
00000e6a: POP
00000e6b: PUSH1 0x54
00000e6d: DUP6
00000e6e: ADD
00000e6f: MLOAD
00000e70: SWAP2
00000e71: POP
00000e72: PUSH1 0x68
00000e74: DUP6
00000e75: ADD
00000e76: MLOAD
00000e77: SWAP1
00000e78: POP
00000e79: SWAP2
00000e7a: SWAP4
00000e7b: POP
00000e7c: SWAP2
00000e7d: SWAP4
00000e7e: JUMP
00000e7f: JUMPDEST
00000e80: PUSH1 0x00
00000e82: DUP1
00000e83: DUP4
00000e84: PUSH1 0x01
00000e86: PUSH1 0x01
00000e88: PUSH1 0xa0
00000e8a: SHL
00000e8b: SUB
00000e8c: AND
00000e8d: DUP4
00000e8e: PUSH1 0x40
00000e90: MLOAD
00000e91: PUSH1 0x00
00000e93: PUSH1 0x40
00000e95: MLOAD
00000e96: DUP1
00000e97: DUP4
00000e98: SUB
00000e99: DUP2
00000e9a: DUP6
00000e9b: DUP8
00000e9c: GAS
00000e9d: CALL
00000e9e: SWAP3
00000e9f: POP
00000ea0: POP
00000ea1: POP
00000ea2: RETURNDATASIZE
00000ea3: DUP1
00000ea4: PUSH1 0x00
00000ea6: DUP2
00000ea7: EQ
00000ea8: PUSH2 0x0ecd
00000eab: JUMPI
00000eac: PUSH1 0x40
00000eae: MLOAD
00000eaf: SWAP2
00000eb0: POP
00000eb1: PUSH1 0x1f
00000eb3: NOT
00000eb4: PUSH1 0x3f
00000eb6: RETURNDATASIZE
00000eb7: ADD
00000eb8: AND
00000eb9: DUP3
00000eba: ADD
00000ebb: PUSH1 0x40
00000ebd: MSTORE
00000ebe: RETURNDATASIZE
00000ebf: DUP3
00000ec0: MSTORE
00000ec1: RETURNDATASIZE
00000ec2: PUSH1 0x00
00000ec4: PUSH1 0x20
00000ec6: DUP5
00000ec7: ADD
00000ec8: RETURNDATACOPY
00000ec9: PUSH2 0x0ed2
00000ecc: JUMP
00000ecd: JUMPDEST
00000ece: PUSH1 0x60
00000ed0: SWAP2
00000ed1: POP
00000ed2: JUMPDEST
00000ed3: POP
00000ed4: SWAP1
00000ed5: SWAP6
00000ed6: SWAP5
00000ed7: POP
00000ed8: POP
00000ed9: POP
00000eda: POP
00000edb: POP
00000edc: JUMP
00000edd: JUMPDEST
00000ede: PUSH2 0x0ee5
00000ee1: PUSH2 0x105d
00000ee4: JUMP
00000ee5: JUMPDEST
00000ee6: PUSH2 0x09e9
00000ee9: JUMPDEST
00000eea: PUSH2 0x09e9
00000eed: PUSH2 0x105d
00000ef0: JUMP
00000ef1: JUMPDEST
00000ef2: PUSH2 0x0efb
00000ef5: DUP3
00000ef6: DUP3
00000ef7: PUSH2 0x078b
00000efa: JUMP
00000efb: JUMPDEST
00000efc: PUSH2 0x04e1
00000eff: JUMPI
00000f00: PUSH1 0x40
00000f02: MLOAD
00000f03: PUSH4 0xe2517d3f
00000f08: PUSH1 0xe0
00000f0a: SHL
00000f0b: DUP2
00000f0c: MSTORE
00000f0d: PUSH1 0x01
00000f0f: PUSH1 0x01
00000f11: PUSH1 0xa0
00000f13: SHL
00000f14: SUB
00000f15: DUP3
00000f16: AND
00000f17: PUSH1 0x04
00000f19: DUP3
00000f1a: ADD
00000f1b: MSTORE
00000f1c: PUSH1 0x24
00000f1e: DUP2
00000f1f: ADD
00000f20: DUP4
00000f21: SWAP1
00000f22: MSTORE
00000f23: PUSH1 0x44
00000f25: ADD
00000f26: PUSH2 0x0a74
00000f29: JUMP
00000f2a: JUMPDEST
00000f2b: PUSH2 0x0f33
00000f2e: DUP3
00000f2f: PUSH2 0x10a6
00000f32: JUMP
00000f33: JUMPDEST
00000f34: PUSH1 0x40
00000f36: MLOAD
00000f37: PUSH1 0x01
00000f39: PUSH1 0x01
00000f3b: PUSH1 0xa0
00000f3d: SHL
00000f3e: SUB
00000f3f: DUP4
00000f40: AND
00000f41: SWAP1
00000f42: PUSH32 0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b
00000f63: SWAP1
00000f64: PUSH1 0x00
00000f66: SWAP1
00000f67: LOG2
00000f68: DUP1
00000f69: MLOAD
00000f6a: ISZERO
00000f6b: PUSH2 0x0f78
00000f6e: JUMPI
00000f6f: PUSH2 0x04c1
00000f72: DUP3
00000f73: DUP3
00000f74: PUSH2 0x110b
00000f77: JUMP
00000f78: JUMPDEST
00000f79: PUSH2 0x04e1
00000f7c: PUSH2 0x1181
00000f7f: JUMP
00000f80: JUMPDEST
00000f81: PUSH1 0x40
00000f83: DUP1
00000f84: MLOAD
00000f85: DUP1
00000f86: DUP3
00000f87: ADD
00000f88: DUP3
00000f89: MSTORE
00000f8a: PUSH1 0x1a
00000f8c: DUP2
00000f8d: MSTORE
00000f8e: PUSH32 0x19457468657265756d205369676e6564204d6573736167653a0a000000000000
00000faf: PUSH1 0x20
00000fb1: DUP1
00000fb2: DUP4
00000fb3: ADD
00000fb4: SWAP2
00000fb5: SWAP1
00000fb6: SWAP2
00000fb7: MSTORE
00000fb8: DUP3
00000fb9: MLOAD
00000fba: DUP1
00000fbb: DUP5
00000fbc: ADD
00000fbd: DUP5
00000fbe: MSTORE
00000fbf: PUSH1 0x03
00000fc1: DUP2
00000fc2: MSTORE
00000fc3: PUSH3 0x0c4c0d
00000fc7: PUSH1 0xea
00000fc9: SHL
00000fca: DUP2
00000fcb: DUP4
00000fcc: ADD
00000fcd: MSTORE
00000fce: SWAP3
00000fcf: MLOAD
00000fd0: PUSH1 0x00
00000fd2: SWAP4
00000fd3: SWAP2
00000fd4: PUSH2 0x0fe3
00000fd7: SWAP2
00000fd8: DUP5
00000fd9: SWAP2
00000fda: DUP5
00000fdb: SWAP2
00000fdc: DUP9
00000fdd: SWAP2
00000fde: ADD
00000fdf: PUSH2 0x1620
00000fe2: JUMP
00000fe3: JUMPDEST
00000fe4: PUSH1 0x40
00000fe6: MLOAD
00000fe7: PUSH1 0x20
00000fe9: DUP2
00000fea: DUP4
00000feb: SUB
00000fec: SUB
00000fed: DUP2
00000fee: MSTORE
00000fef: SWAP1
00000ff0: PUSH1 0x40
00000ff2: MSTORE
00000ff3: DUP1
00000ff4: MLOAD
00000ff5: SWAP1
00000ff6: PUSH1 0x20
00000ff8: ADD
00000ff9: KECCAK256
00000ffa: SWAP3
00000ffb: POP
00000ffc: POP
00000ffd: POP
00000ffe: SWAP2
00000fff: SWAP1
00001000: POP
00001001: JUMP
00001002: JUMPDEST
00001003: PUSH1 0x00
00001005: DUP1
00001006: JUMPDEST
00001007: DUP4
00001008: MLOAD
00001009: DUP2
0000100a: LT
0000100b: ISZERO
0000100c: PUSH2 0x1053
0000100f: JUMPI
00001010: DUP3
00001011: PUSH1 0x01
00001013: PUSH1 0x01
00001015: PUSH1 0xa0
00001017: SHL
00001018: SUB
00001019: AND
0000101a: DUP5
0000101b: DUP3
0000101c: DUP2
0000101d: MLOAD
0000101e: DUP2
0000101f: LT
00001020: PUSH2 0x102b
00001023: JUMPI
00001024: PUSH2 0x102b
00001027: PUSH2 0x15e8
0000102a: JUMP
0000102b: JUMPDEST
0000102c: PUSH1 0x20
0000102e: MUL
0000102f: PUSH1 0x20
00001031: ADD
00001032: ADD
00001033: MLOAD
00001034: PUSH1 0x01
00001036: PUSH1 0x01
00001038: PUSH1 0xa0
0000103a: SHL
0000103b: SUB
0000103c: AND
0000103d: SUB
0000103e: PUSH2 0x104b
00001041: JUMPI
00001042: PUSH1 0x01
00001044: SWAP2
00001045: POP
00001046: POP
00001047: PUSH2 0x0444
0000104a: JUMP
0000104b: JUMPDEST
0000104c: PUSH1 0x01
0000104e: ADD
0000104f: PUSH2 0x1006
00001052: JUMP
00001053: JUMPDEST
00001054: POP
00001055: PUSH1 0x00
00001057: SWAP4
00001058: SWAP3
00001059: POP
0000105a: POP
0000105b: POP
0000105c: JUMP
0000105d: JUMPDEST
0000105e: PUSH32 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00
0000107f: SLOAD
00001080: PUSH1 0x01
00001082: PUSH1 0x40
00001084: SHL
00001085: SWAP1
00001086: DIV
00001087: PUSH1 0xff
00001089: AND
0000108a: PUSH2 0x09e9
0000108d: JUMPI
0000108e: PUSH1 0x40
00001090: MLOAD
00001091: PUSH4 0x1afcd79f
00001096: PUSH1 0xe3
00001098: SHL
00001099: DUP2
0000109a: MSTORE
0000109b: PUSH1 0x04
0000109d: ADD
0000109e: PUSH1 0x40
000010a0: MLOAD
000010a1: DUP1
000010a2: SWAP2
000010a3: SUB
000010a4: SWAP1
000010a5: REVERT
000010a6: JUMPDEST
000010a7: DUP1
000010a8: PUSH1 0x01
000010aa: PUSH1 0x01
000010ac: PUSH1 0xa0
000010ae: SHL
000010af: SUB
000010b0: AND
000010b1: EXTCODESIZE
000010b2: PUSH1 0x00
000010b4: SUB
000010b5: PUSH2 0x10dc
000010b8: JUMPI
000010b9: PUSH1 0x40
000010bb: MLOAD
000010bc: PUSH4 0x4c9c8ce3
000010c1: PUSH1 0xe0
000010c3: SHL
000010c4: DUP2
000010c5: MSTORE
000010c6: PUSH1 0x01
000010c8: PUSH1 0x01
000010ca: PUSH1 0xa0
000010cc: SHL
000010cd: SUB
000010ce: DUP3
000010cf: AND
000010d0: PUSH1 0x04
000010d2: DUP3
000010d3: ADD
000010d4: MSTORE
000010d5: PUSH1 0x24
000010d7: ADD
000010d8: PUSH2 0x0a74
000010db: JUMP
000010dc: JUMPDEST
000010dd: PUSH1 0x00
000010df: DUP1
000010e0: MLOAD
000010e1: PUSH1 0x20
000010e3: PUSH2 0x1680
000010e6: DUP4
000010e7: CODECOPY
000010e8: DUP2
000010e9: MLOAD
000010ea: SWAP2
000010eb: MSTORE
000010ec: DUP1
000010ed: SLOAD
000010ee: PUSH1 0x01
000010f0: PUSH1 0x01
000010f2: PUSH1 0xa0
000010f4: SHL
000010f5: SUB
000010f6: NOT
000010f7: AND
000010f8: PUSH1 0x01
000010fa: PUSH1 0x01
000010fc: PUSH1 0xa0
000010fe: SHL
000010ff: SUB
00001100: SWAP3
00001101: SWAP1
00001102: SWAP3
00001103: AND
00001104: SWAP2
00001105: SWAP1
00001106: SWAP2
00001107: OR
00001108: SWAP1
00001109: SSTORE
0000110a: JUMP
0000110b: JUMPDEST
0000110c: PUSH1 0x60
0000110e: PUSH1 0x00
00001110: DUP1
00001111: DUP5
00001112: PUSH1 0x01
00001114: PUSH1 0x01
00001116: PUSH1 0xa0
00001118: SHL
00001119: SUB
0000111a: AND
0000111b: DUP5
0000111c: PUSH1 0x40
0000111e: MLOAD
0000111f: PUSH2 0x1128
00001122: SWAP2
00001123: SWAP1
00001124: PUSH2 0x1663
00001127: JUMP
00001128: JUMPDEST
00001129: PUSH1 0x00
0000112b: PUSH1 0x40
0000112d: MLOAD
0000112e: DUP1
0000112f: DUP4
00001130: SUB
00001131: DUP2
00001132: DUP6
00001133: GAS
00001134: DELEGATECALL
00001135: SWAP2
00001136: POP
00001137: POP
00001138: RETURNDATASIZE
00001139: DUP1
0000113a: PUSH1 0x00
0000113c: DUP2
0000113d: EQ
0000113e: PUSH2 0x1163
00001141: JUMPI
00001142: PUSH1 0x40
00001144: MLOAD
00001145: SWAP2
00001146: POP
00001147: PUSH1 0x1f
00001149: NOT
0000114a: PUSH1 0x3f
0000114c: RETURNDATASIZE
0000114d: ADD
0000114e: AND
0000114f: DUP3
00001150: ADD
00001151: PUSH1 0x40
00001153: MSTORE
00001154: RETURNDATASIZE
00001155: DUP3
00001156: MSTORE
00001157: RETURNDATASIZE
00001158: PUSH1 0x00
0000115a: PUSH1 0x20
0000115c: DUP5
0000115d: ADD
0000115e: RETURNDATACOPY
0000115f: PUSH2 0x1168
00001162: JUMP
00001163: JUMPDEST
00001164: PUSH1 0x60
00001166: SWAP2
00001167: POP
00001168: JUMPDEST
00001169: POP
0000116a: SWAP2
0000116b: POP
0000116c: SWAP2
0000116d: POP
0000116e: PUSH2 0x1178
00001171: DUP6
00001172: DUP4
00001173: DUP4
00001174: PUSH2 0x11a0
00001177: JUMP
00001178: JUMPDEST
00001179: SWAP6
0000117a: SWAP5
0000117b: POP
0000117c: POP
0000117d: POP
0000117e: POP
0000117f: POP
00001180: JUMP
00001181: JUMPDEST
00001182: CALLVALUE
00001183: ISZERO
00001184: PUSH2 0x09e9
00001187: JUMPI
00001188: PUSH1 0x40
0000118a: MLOAD
0000118b: PUSH4 0xb398979f
00001190: PUSH1 0xe0
00001192: SHL
00001193: DUP2
00001194: MSTORE
00001195: PUSH1 0x04
00001197: ADD
00001198: PUSH1 0x40
0000119a: MLOAD
0000119b: DUP1
0000119c: SWAP2
0000119d: SUB
0000119e: SWAP1
0000119f: REVERT
000011a0: JUMPDEST
000011a1: PUSH1 0x60
000011a3: DUP3
000011a4: PUSH2 0x11b5
000011a7: JUMPI
000011a8: PUSH2 0x11b0
000011ab: DUP3
000011ac: PUSH2 0x11ff
000011af: JUMP
000011b0: JUMPDEST
000011b1: PUSH2 0x11f8
000011b4: JUMP
000011b5: JUMPDEST
000011b6: DUP2
000011b7: MLOAD
000011b8: ISZERO
000011b9: DUP1
000011ba: ISZERO
000011bb: PUSH2 0x11cc
000011be: JUMPI
000011bf: POP
000011c0: PUSH1 0x01
000011c2: PUSH1 0x01
000011c4: PUSH1 0xa0
000011c6: SHL
000011c7: SUB
000011c8: DUP5
000011c9: AND
000011ca: EXTCODESIZE
000011cb: ISZERO
000011cc: JUMPDEST
000011cd: ISZERO
000011ce: PUSH2 0x11f5
000011d1: JUMPI
000011d2: PUSH1 0x40
000011d4: MLOAD
000011d5: PUSH4 0x9996b315
000011da: PUSH1 0xe0
000011dc: SHL
000011dd: DUP2
000011de: MSTORE
000011df: PUSH1 0x01
000011e1: PUSH1 0x01
000011e3: PUSH1 0xa0
000011e5: SHL
000011e6: SUB
000011e7: DUP6
000011e8: AND
000011e9: PUSH1 0x04
000011eb: DUP3
000011ec: ADD
000011ed: MSTORE
000011ee: PUSH1 0x24
000011f0: ADD
000011f1: PUSH2 0x0a74
000011f4: JUMP
000011f5: JUMPDEST
000011f6: POP
000011f7: DUP1
000011f8: JUMPDEST
000011f9: SWAP4
000011fa: SWAP3
000011fb: POP
000011fc: POP
000011fd: POP
000011fe: JUMP
000011ff: JUMPDEST
00001200: DUP1
00001201: MLOAD
00001202: ISZERO
00001203: PUSH2 0x120f
00001206: JUMPI
00001207: DUP1
00001208: MLOAD
00001209: DUP1
0000120a: DUP3
0000120b: PUSH1 0x20
0000120d: ADD
0000120e: REVERT
0000120f: JUMPDEST
00001210: PUSH1 0x40
00001212: MLOAD
00001213: PUSH4 0xd6bda275
00001218: PUSH1 0xe0
0000121a: SHL
0000121b: DUP2
0000121c: MSTORE
0000121d: PUSH1 0x04
0000121f: ADD
00001220: PUSH1 0x40
00001222: MLOAD
00001223: DUP1
00001224: SWAP2
00001225: SUB
00001226: SWAP1
00001227: REVERT
00001228: JUMPDEST
00001229: PUSH1 0x00
0000122b: PUSH1 0x20
0000122d: DUP3
0000122e: DUP5
0000122f: SUB
00001230: SLT
00001231: ISZERO
00001232: PUSH2 0x123a
00001235: JUMPI
00001236: PUSH1 0x00
00001238: DUP1
00001239: REVERT
0000123a: JUMPDEST
0000123b: DUP2
0000123c: CALLDATALOAD
0000123d: PUSH1 0x01
0000123f: PUSH1 0x01
00001241: PUSH1 0xe0
00001243: SHL
00001244: SUB
00001245: NOT
00001246: DUP2
00001247: AND
00001248: DUP2
00001249: EQ
0000124a: PUSH2 0x11f8
0000124d: JUMPI
0000124e: PUSH1 0x00
00001250: DUP1
00001251: REVERT
00001252: JUMPDEST
00001253: PUSH1 0x00
00001255: PUSH1 0x20
00001257: DUP3
00001258: DUP5
00001259: SUB
0000125a: SLT
0000125b: ISZERO
0000125c: PUSH2 0x1264
0000125f: JUMPI
00001260: PUSH1 0x00
00001262: DUP1
00001263: REVERT
00001264: JUMPDEST
00001265: POP
00001266: CALLDATALOAD
00001267: SWAP2
00001268: SWAP1
00001269: POP
0000126a: JUMP
0000126b: JUMPDEST
0000126c: DUP1
0000126d: CALLDATALOAD
0000126e: PUSH1 0x01
00001270: PUSH1 0x01
00001272: PUSH1 0xa0
00001274: SHL
00001275: SUB
00001276: DUP2
00001277: AND
00001278: DUP2
00001279: EQ
0000127a: PUSH2 0x1282
0000127d: JUMPI
0000127e: PUSH1 0x00
00001280: DUP1
00001281: REVERT
00001282: JUMPDEST
00001283: SWAP2
00001284: SWAP1
00001285: POP
00001286: JUMP
00001287: JUMPDEST
00001288: PUSH1 0x00
0000128a: DUP1
0000128b: PUSH1 0x40
0000128d: DUP4
0000128e: DUP6
0000128f: SUB
00001290: SLT
00001291: ISZERO
00001292: PUSH2 0x129a
00001295: JUMPI
00001296: PUSH1 0x00
00001298: DUP1
00001299: REVERT
0000129a: JUMPDEST
0000129b: DUP3
0000129c: CALLDATALOAD
0000129d: SWAP2
0000129e: POP
0000129f: PUSH2 0x12aa
000012a2: PUSH1 0x20
000012a4: DUP5
000012a5: ADD
000012a6: PUSH2 0x126b
000012a9: JUMP
000012aa: JUMPDEST
000012ab: SWAP1
000012ac: POP
000012ad: SWAP3
000012ae: POP
000012af: SWAP3
000012b0: SWAP1
000012b1: POP
000012b2: JUMP
000012b3: JUMPDEST
000012b4: PUSH4 0x4e487b71
000012b9: PUSH1 0xe0
000012bb: SHL
000012bc: PUSH1 0x00
000012be: MSTORE
000012bf: PUSH1 0x41
000012c1: PUSH1 0x04
000012c3: MSTORE
000012c4: PUSH1 0x24
000012c6: PUSH1 0x00
000012c8: REVERT
000012c9: JUMPDEST
000012ca: PUSH1 0x40
000012cc: MLOAD
000012cd: PUSH1 0x1f
000012cf: DUP3
000012d0: ADD
000012d1: PUSH1 0x1f
000012d3: NOT
000012d4: AND
000012d5: DUP2
000012d6: ADD
000012d7: PUSH8 0xffffffffffffffff
000012e0: DUP2
000012e1: GT
000012e2: DUP3
000012e3: DUP3
000012e4: LT
000012e5: OR
000012e6: ISZERO
000012e7: PUSH2 0x12f2
000012ea: JUMPI
000012eb: PUSH2 0x12f2
000012ee: PUSH2 0x12b3
000012f1: JUMP
000012f2: JUMPDEST
000012f3: PUSH1 0x40
000012f5: MSTORE
000012f6: SWAP2
000012f7: SWAP1
000012f8: POP
000012f9: JUMP
000012fa: JUMPDEST
000012fb: PUSH1 0x00
000012fd: DUP3
000012fe: PUSH1 0x1f
00001300: DUP4
00001301: ADD
00001302: SLT
00001303: PUSH2 0x130b
00001306: JUMPI
00001307: PUSH1 0x00
00001309: DUP1
0000130a: REVERT
0000130b: JUMPDEST
0000130c: DUP2
0000130d: CALLDATALOAD
0000130e: PUSH8 0xffffffffffffffff
00001317: DUP2
00001318: GT
00001319: ISZERO
0000131a: PUSH2 0x1325
0000131d: JUMPI
0000131e: PUSH2 0x1325
00001321: PUSH2 0x12b3
00001324: JUMP
00001325: JUMPDEST
00001326: PUSH2 0x1338
00001329: PUSH1 0x1f
0000132b: DUP3
0000132c: ADD
0000132d: PUSH1 0x1f
0000132f: NOT
00001330: AND
00001331: PUSH1 0x20
00001333: ADD
00001334: PUSH2 0x12c9
00001337: JUMP
00001338: JUMPDEST
00001339: DUP2
0000133a: DUP2
0000133b: MSTORE
0000133c: DUP5
0000133d: PUSH1 0x20
0000133f: DUP4
00001340: DUP7
00001341: ADD
00001342: ADD
00001343: GT
00001344: ISZERO
00001345: PUSH2 0x134d
00001348: JUMPI
00001349: PUSH1 0x00
0000134b: DUP1
0000134c: REVERT
0000134d: JUMPDEST
0000134e: DUP2
0000134f: PUSH1 0x20
00001351: DUP6
00001352: ADD
00001353: PUSH1 0x20
00001355: DUP4
00001356: ADD
00001357: CALLDATACOPY
00001358: PUSH1 0x00
0000135a: SWAP2
0000135b: DUP2
0000135c: ADD
0000135d: PUSH1 0x20
0000135f: ADD
00001360: SWAP2
00001361: SWAP1
00001362: SWAP2
00001363: MSTORE
00001364: SWAP4
00001365: SWAP3
00001366: POP
00001367: POP
00001368: POP
00001369: JUMP
0000136a: JUMPDEST
0000136b: PUSH1 0x00
0000136d: DUP1
0000136e: PUSH1 0x40
00001370: DUP4
00001371: DUP6
00001372: SUB
00001373: SLT
00001374: ISZERO
00001375: PUSH2 0x137d
00001378: JUMPI
00001379: PUSH1 0x00
0000137b: DUP1
0000137c: REVERT
0000137d: JUMPDEST
0000137e: PUSH2 0x1386
00001381: DUP4
00001382: PUSH2 0x126b
00001385: JUMP
00001386: JUMPDEST
00001387: SWAP2
00001388: POP
00001389: PUSH1 0x20
0000138b: DUP4
0000138c: ADD
0000138d: CALLDATALOAD
0000138e: PUSH8 0xffffffffffffffff
00001397: DUP2
00001398: GT
00001399: ISZERO
0000139a: PUSH2 0x13a2
0000139d: JUMPI
0000139e: PUSH1 0x00
000013a0: DUP1
000013a1: REVERT
000013a2: JUMPDEST
000013a3: PUSH2 0x13ae
000013a6: DUP6
000013a7: DUP3
000013a8: DUP7
000013a9: ADD
000013aa: PUSH2 0x12fa
000013ad: JUMP
000013ae: JUMPDEST
000013af: SWAP2
000013b0: POP
000013b1: POP
000013b2: SWAP3
000013b3: POP
000013b4: SWAP3
000013b5: SWAP1
000013b6: POP
000013b7: JUMP
000013b8: JUMPDEST
000013b9: PUSH1 0x00
000013bb: PUSH8 0xffffffffffffffff
000013c4: DUP3
000013c5: GT
000013c6: ISZERO
000013c7: PUSH2 0x13d2
000013ca: JUMPI
000013cb: PUSH2 0x13d2
000013ce: PUSH2 0x12b3
000013d1: JUMP
000013d2: JUMPDEST
000013d3: POP
000013d4: PUSH1 0x05
000013d6: SHL
000013d7: PUSH1 0x20
000013d9: ADD
000013da: SWAP1
000013db: JUMP
000013dc: JUMPDEST
000013dd: PUSH1 0x00
000013df: DUP3
000013e0: PUSH1 0x1f
000013e2: DUP4
000013e3: ADD
000013e4: SLT
000013e5: PUSH2 0x13ed
000013e8: JUMPI
000013e9: PUSH1 0x00
000013eb: DUP1
000013ec: REVERT
000013ed: JUMPDEST
000013ee: DUP2
000013ef: CALLDATALOAD
000013f0: PUSH1 0x20
000013f2: PUSH2 0x1402
000013f5: PUSH2 0x13fd
000013f8: DUP4
000013f9: PUSH2 0x13b8
000013fc: JUMP
000013fd: JUMPDEST
000013fe: PUSH2 0x12c9
00001401: JUMP
00001402: JUMPDEST
00001403: DUP1
00001404: DUP4
00001405: DUP3
00001406: MSTORE
00001407: PUSH1 0x20
00001409: DUP3
0000140a: ADD
0000140b: SWAP2
0000140c: POP
0000140d: PUSH1 0x20
0000140f: DUP5
00001410: PUSH1 0x05
00001412: SHL
00001413: DUP8
00001414: ADD
00001415: ADD
00001416: SWAP4
00001417: POP
00001418: DUP7
00001419: DUP5
0000141a: GT
0000141b: ISZERO
0000141c: PUSH2 0x1424
0000141f: JUMPI
00001420: PUSH1 0x00
00001422: DUP1
00001423: REVERT
00001424: JUMPDEST
00001425: PUSH1 0x20
00001427: DUP7
00001428: ADD
00001429: JUMPDEST
0000142a: DUP5
0000142b: DUP2
0000142c: LT
0000142d: ISZERO
0000142e: PUSH2 0x1440
00001431: JUMPI
00001432: DUP1
00001433: CALLDATALOAD
00001434: DUP4
00001435: MSTORE
00001436: SWAP2
00001437: DUP4
00001438: ADD
00001439: SWAP2
0000143a: DUP4
0000143b: ADD
0000143c: PUSH2 0x1429
0000143f: JUMP
00001440: JUMPDEST
00001441: POP
00001442: SWAP7
00001443: SWAP6
00001444: POP
00001445: POP
00001446: POP
00001447: POP
00001448: POP
00001449: POP
0000144a: JUMP
0000144b: JUMPDEST
0000144c: PUSH1 0x00
0000144e: DUP1
0000144f: PUSH1 0x00
00001451: DUP1
00001452: PUSH1 0x80
00001454: DUP6
00001455: DUP8
00001456: SUB
00001457: SLT
00001458: ISZERO
00001459: PUSH2 0x1461
0000145c: JUMPI
0000145d: PUSH1 0x00
0000145f: DUP1
00001460: REVERT
00001461: JUMPDEST
00001462: DUP5
00001463: CALLDATALOAD
00001464: PUSH8 0xffffffffffffffff
0000146d: DUP1
0000146e: DUP3
0000146f: GT
00001470: ISZERO
00001471: PUSH2 0x1479
00001474: JUMPI
00001475: PUSH1 0x00
00001477: DUP1
00001478: REVERT
00001479: JUMPDEST
0000147a: DUP2
0000147b: DUP8
0000147c: ADD
0000147d: SWAP2
0000147e: POP
0000147f: DUP8
00001480: PUSH1 0x1f
00001482: DUP4
00001483: ADD
00001484: SLT
00001485: PUSH2 0x148d
00001488: JUMPI
00001489: PUSH1 0x00
0000148b: DUP1
0000148c: REVERT
0000148d: JUMPDEST
0000148e: DUP2
0000148f: CALLDATALOAD
00001490: PUSH1 0x20
00001492: PUSH2 0x149d
00001495: PUSH2 0x13fd
00001498: DUP4
00001499: PUSH2 0x13b8
0000149c: JUMP
0000149d: JUMPDEST
0000149e: DUP3
0000149f: DUP2
000014a0: MSTORE
000014a1: PUSH1 0x05
000014a3: SWAP3
000014a4: SWAP1
000014a5: SWAP3
000014a6: SHL
000014a7: DUP5
000014a8: ADD
000014a9: DUP2
000014aa: ADD
000014ab: SWAP2
000014ac: DUP2
000014ad: DUP2
000014ae: ADD
000014af: SWAP1
000014b0: DUP12
000014b1: DUP5
000014b2: GT
000014b3: ISZERO
000014b4: PUSH2 0x14bc
000014b7: JUMPI
000014b8: PUSH1 0x00
000014ba: DUP1
000014bb: REVERT
000014bc: JUMPDEST
000014bd: SWAP5
000014be: DUP3
000014bf: ADD
000014c0: SWAP5
000014c1: JUMPDEST
000014c2: DUP4
000014c3: DUP7
000014c4: LT
000014c5: ISZERO
000014c6: PUSH2 0x14ea
000014c9: JUMPI
000014ca: DUP6
000014cb: CALLDATALOAD
000014cc: PUSH1 0xff
000014ce: DUP2
000014cf: AND
000014d0: DUP2
000014d1: EQ
000014d2: PUSH2 0x14db
000014d5: JUMPI
000014d6: PUSH1 0x00
000014d8: DUP1
000014d9: DUP2
000014da: REVERT
000014db: JUMPDEST
000014dc: DUP3
000014dd: MSTORE
000014de: SWAP5
000014df: DUP3
000014e0: ADD
000014e1: SWAP5
000014e2: SWAP1
000014e3: DUP3
000014e4: ADD
000014e5: SWAP1
000014e6: PUSH2 0x14c1
000014e9: JUMP
000014ea: JUMPDEST
000014eb: SWAP9
000014ec: POP
000014ed: POP
000014ee: DUP9
000014ef: ADD
000014f0: CALLDATALOAD
000014f1: SWAP3
000014f2: POP
000014f3: POP
000014f4: DUP1
000014f5: DUP3
000014f6: GT
000014f7: ISZERO
000014f8: PUSH2 0x1500
000014fb: JUMPI
000014fc: PUSH1 0x00
000014fe: DUP1
000014ff: REVERT
00001500: JUMPDEST
00001501: PUSH2 0x150c
00001504: DUP9
00001505: DUP4
00001506: DUP10
00001507: ADD
00001508: PUSH2 0x13dc
0000150b: JUMP
0000150c: JUMPDEST
0000150d: SWAP5
0000150e: POP
0000150f: PUSH1 0x40
00001511: DUP8
00001512: ADD
00001513: CALLDATALOAD
00001514: SWAP2
00001515: POP
00001516: DUP1
00001517: DUP3
00001518: GT
00001519: ISZERO
0000151a: PUSH2 0x1522
0000151d: JUMPI
0000151e: PUSH1 0x00
00001520: DUP1
00001521: REVERT
00001522: JUMPDEST
00001523: PUSH2 0x152e
00001526: DUP9
00001527: DUP4
00001528: DUP10
00001529: ADD
0000152a: PUSH2 0x13dc
0000152d: JUMP
0000152e: JUMPDEST
0000152f: SWAP4
00001530: POP
00001531: PUSH1 0x60
00001533: DUP8
00001534: ADD
00001535: CALLDATALOAD
00001536: SWAP2
00001537: POP
00001538: DUP1
00001539: DUP3
0000153a: GT
0000153b: ISZERO
0000153c: PUSH2 0x1544
0000153f: JUMPI
00001540: PUSH1 0x00
00001542: DUP1
00001543: REVERT
00001544: JUMPDEST
00001545: POP
00001546: PUSH2 0x1551
00001549: DUP8
0000154a: DUP3
0000154b: DUP9
0000154c: ADD
0000154d: PUSH2 0x12fa
00001550: JUMP
00001551: JUMPDEST
00001552: SWAP2
00001553: POP
00001554: POP
00001555: SWAP3
00001556: SWAP6
00001557: SWAP2
00001558: SWAP5
00001559: POP
0000155a: SWAP3
0000155b: POP
0000155c: JUMP
0000155d: JUMPDEST
0000155e: PUSH1 0x00
00001560: JUMPDEST
00001561: DUP4
00001562: DUP2
00001563: LT
00001564: ISZERO
00001565: PUSH2 0x1578
00001568: JUMPI
00001569: DUP2
0000156a: DUP2
0000156b: ADD
0000156c: MLOAD
0000156d: DUP4
0000156e: DUP3
0000156f: ADD
00001570: MSTORE
00001571: PUSH1 0x20
00001573: ADD
00001574: PUSH2 0x1560
00001577: JUMP
00001578: JUMPDEST
00001579: POP
0000157a: POP
0000157b: PUSH1 0x00
0000157d: SWAP2
0000157e: ADD
0000157f: MSTORE
00001580: JUMP
00001581: JUMPDEST
00001582: PUSH1 0x20
00001584: DUP2
00001585: MSTORE
00001586: PUSH1 0x00
00001588: DUP3
00001589: MLOAD
0000158a: DUP1
0000158b: PUSH1 0x20
0000158d: DUP5
0000158e: ADD
0000158f: MSTORE
00001590: PUSH2 0x15a0
00001593: DUP2
00001594: PUSH1 0x40
00001596: DUP6
00001597: ADD
00001598: PUSH1 0x20
0000159a: DUP8
0000159b: ADD
0000159c: PUSH2 0x155d
0000159f: JUMP
000015a0: JUMPDEST
000015a1: PUSH1 0x1f
000015a3: ADD
000015a4: PUSH1 0x1f
000015a6: NOT
000015a7: AND
000015a8: SWAP2
000015a9: SWAP1
000015aa: SWAP2
000015ab: ADD
000015ac: PUSH1 0x40
000015ae: ADD
000015af: SWAP3
000015b0: SWAP2
000015b1: POP
000015b2: POP
000015b3: JUMP
000015b4: JUMPDEST
000015b5: PUSH1 0x00
000015b7: PUSH1 0x20
000015b9: DUP3
000015ba: DUP5
000015bb: SUB
000015bc: SLT
000015bd: ISZERO
000015be: PUSH2 0x15c6
000015c1: JUMPI
000015c2: PUSH1 0x00
000015c4: DUP1
000015c5: REVERT
000015c6: JUMPDEST
000015c7: PUSH2 0x11f8
000015ca: DUP3
000015cb: PUSH2 0x126b
000015ce: JUMP
000015cf: JUMPDEST
000015d0: PUSH1 0x00
000015d2: PUSH1 0x20
000015d4: DUP3
000015d5: DUP5
000015d6: SUB
000015d7: SLT
000015d8: ISZERO
000015d9: PUSH2 0x15e1
000015dc: JUMPI
000015dd: PUSH1 0x00
000015df: DUP1
000015e0: REVERT
000015e1: JUMPDEST
000015e2: POP
000015e3: MLOAD
000015e4: SWAP2
000015e5: SWAP1
000015e6: POP
000015e7: JUMP
000015e8: JUMPDEST
000015e9: PUSH4 0x4e487b71
000015ee: PUSH1 0xe0
000015f0: SHL
000015f1: PUSH1 0x00
000015f3: MSTORE
000015f4: PUSH1 0x32
000015f6: PUSH1 0x04
000015f8: MSTORE
000015f9: PUSH1 0x24
000015fb: PUSH1 0x00
000015fd: REVERT
000015fe: JUMPDEST
000015ff: PUSH1 0x00
00001601: PUSH1 0x20
00001603: DUP3
00001604: DUP5
00001605: SUB
00001606: SLT
00001607: ISZERO
00001608: PUSH2 0x1610
0000160b: JUMPI
0000160c: PUSH1 0x00
0000160e: DUP1
0000160f: REVERT
00001610: JUMPDEST
00001611: DUP2
00001612: MLOAD
00001613: DUP1
00001614: ISZERO
00001615: ISZERO
00001616: DUP2
00001617: EQ
00001618: PUSH2 0x11f8
0000161b: JUMPI
0000161c: PUSH1 0x00
0000161e: DUP1
0000161f: REVERT
00001620: JUMPDEST
00001621: PUSH1 0x00
00001623: DUP5
00001624: MLOAD
00001625: PUSH2 0x1632
00001628: DUP2
00001629: DUP5
0000162a: PUSH1 0x20
0000162c: DUP10
0000162d: ADD
0000162e: PUSH2 0x155d
00001631: JUMP
00001632: JUMPDEST
00001633: DUP5
00001634: MLOAD
00001635: SWAP1
00001636: DUP4
00001637: ADD
00001638: SWAP1
00001639: PUSH2 0x1646
0000163c: DUP2
0000163d: DUP4
0000163e: PUSH1 0x20
00001640: DUP10
00001641: ADD
00001642: PUSH2 0x155d
00001645: JUMP
00001646: JUMPDEST
00001647: DUP5
00001648: MLOAD
00001649: SWAP2
0000164a: ADD
0000164b: SWAP1
0000164c: PUSH2 0x1659
0000164f: DUP2
00001650: DUP4
00001651: PUSH1 0x20
00001653: DUP9
00001654: ADD
00001655: PUSH2 0x155d
00001658: JUMP
00001659: JUMPDEST
0000165a: ADD
0000165b: SWAP6
0000165c: SWAP5
0000165d: POP
0000165e: POP
0000165f: POP
00001660: POP
00001661: POP
00001662: JUMP
00001663: JUMPDEST
00001664: PUSH1 0x00
00001666: DUP3
00001667: MLOAD
00001668: PUSH2 0x1675
0000166b: DUP2
0000166c: DUP5
0000166d: PUSH1 0x20
0000166f: DUP8
00001670: ADD
00001671: PUSH2 0x155d
00001674: JUMP
00001675: JUMPDEST
00001676: SWAP2
00001677: SWAP1
00001678: SWAP2
00001679: ADD
0000167a: SWAP3
0000167b: SWAP2
0000167c: POP
0000167d: POP
0000167e: JUMP
0000167f: INVALID
00001680: CALLDATASIZE
00001681: ADDMOD
00001682: SWAP5
00001683: LOG1
00001684: EXTCODESIZE
00001685: LOG1
00001686: LOG3
00001687: UNKNOWN(0x21)
00001688: MOD
00001689: PUSH8 0xc828492db98dca3e
00001692: KECCAK256
00001693: PUSH23 0xcc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775
000016ab: UNKNOWN(0xE5)
000016ac: DUP14
000016ad: UNKNOWN(0xD5)
000016ae: COINBASE
000016af: UNKNOWN(0xE0)
000016b0: DUP11
000016b1: GT
000016b2: PUSH13 0x6c53815c0bd028192f7b626800
000016c0: LOG2
000016c1: PUSH5 0x6970667358
000016c7: UNKNOWN(0x22)
000016c8: SLT
000016c9: KECCAK256
000016ca: UNKNOWN(0xF8)
000016cb: SWAP2
000016cc: UNKNOWN(0x24)
000016cd: DUP11
000016ce: REVERT
000016cf: PUSH0
000016d0: UNKNOWN(0xCB)
000016d1: UNKNOWN(0xC7)
000016d2: UNKNOWN(0xE1)
000016d3: UNKNOWN(0xE4)
000016d4: UNKNOWN(0xBE)
000016d5: UNKNOWN(0xE1)
000016d6: MSTORE8
000016d7: PUSH16 0x70478d815adc30810eedbe9467a410a4
000016e8: UNKNOWN(0xEC)
000016e9: UNKNOWN(0x22)
000016ea: PUSH5 0x736f6c6343
000016f0: STOP
000016f1: ADDMOD
000016f2: XOR
000016f3: STOP
000016f4: CALLER

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
critical upgradeability detector Untrusted DELEGATECALL target reachable 70 no no
view
trace_id: 0x491f4f8eef34f3d4f343bbb38b3765103eae27b51fe8ef9d75c6c64cf018f4a3
validation_json
{
    "sink": "DELEGATECALL",
    "errors": 0,
    "status": "unknown",
    "attempts": 192,
    "trace_id": "0x491f4f8eef34f3d4f343bbb38b3765103eae27b51fe8ef9d75c6c64cf018f4a3",
    "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": "0xc49baebe",
            "selector": "0xc49baebe",
            "calldata_variants": [
                "0xc49baebe",
                "0xc49baebe0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xccd93998",
            "selector": "0xccd93998",
            "calldata_variants": [
                "0xccd93998",
                "0xccd939980000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd547741f",
            "selector": "0xd547741f",
            "calldata_variants": [
                "0xd547741f",
                "0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdb2e21bc",
            "selector": "0xdb2e21bc",
            "calldata_variants": [
                "0xdb2e21bc",
                "0xdb2e21bc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe12fba8d",
            "selector": "0xe12fba8d",
            "calldata_variants": [
                "0xe12fba8d",
                "0xe12fba8d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x8129fc1c",
            "selector": "0x8129fc1c",
            "calldata_variants": [
                "0x8129fc1c",
                "0x8129fc1c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x91d14854",
            "selector": "0x91d14854",
            "calldata_variants": [
                "0x91d14854",
                "0x91d148540000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa217fddf",
            "selector": "0xa217fddf",
            "calldata_variants": [
                "0xa217fddf",
                "0xa217fddf0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 4404,
            "opcode": "DELEGATECALL",
            "returndata_checked": null,
            "value_expression_category": "n/a",
            "target_expression_category": "computed"
        }
    ],
    "guards_detected": [],
    "delegatecall_count": 1,
    "untrusted_delegatecall_count": 1
}
high other detector Untrusted CALL target/value reachable 60 no no
view
trace_id: 0xdd1a39b2e9c3b469487e6f41995398b59936df372c897197f3092d2b3d43987a
call_targets: 0xbdead28e8a46457646de417d0295c535e2bad4ca
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xdd1a39b2e9c3b469487e6f41995398b59936df372c897197f3092d2b3d43987a",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xbdead28e8a46457646de417d0295c535e2bad4ca"
    ],
    "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": "0xc49baebe",
            "selector": "0xc49baebe",
            "calldata_variants": [
                "0xc49baebe",
                "0xc49baebe0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xccd93998",
            "selector": "0xccd93998",
            "calldata_variants": [
                "0xccd93998",
                "0xccd939980000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd547741f",
            "selector": "0xd547741f",
            "calldata_variants": [
                "0xd547741f",
                "0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdb2e21bc",
            "selector": "0xdb2e21bc",
            "calldata_variants": [
                "0xdb2e21bc",
                "0xdb2e21bc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe12fba8d",
            "selector": "0xe12fba8d",
            "calldata_variants": [
                "0xe12fba8d",
                "0xe12fba8d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x8129fc1c",
            "selector": "0x8129fc1c",
            "calldata_variants": [
                "0x8129fc1c",
                "0x8129fc1c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x91d14854",
            "selector": "0x91d14854",
            "calldata_variants": [
                "0x91d14854",
                "0x91d148540000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa217fddf",
            "selector": "0xa217fddf",
            "calldata_variants": [
                "0xa217fddf",
                "0xa217fddf0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 2048,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 3741,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 2,
    "guards_detected": [],
    "untrusted_call_count": 2
}
high other detector ETH value transfer possible 55 no no
view
trace_id: 0xdd1a39b2e9c3b469487e6f41995398b59936df372c897197f3092d2b3d43987a
call_targets: 0xbdead28e8a46457646de417d0295c535e2bad4ca
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xdd1a39b2e9c3b469487e6f41995398b59936df372c897197f3092d2b3d43987a",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xbdead28e8a46457646de417d0295c535e2bad4ca"
    ],
    "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": "0xc49baebe",
            "selector": "0xc49baebe",
            "calldata_variants": [
                "0xc49baebe",
                "0xc49baebe0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xccd93998",
            "selector": "0xccd93998",
            "calldata_variants": [
                "0xccd93998",
                "0xccd939980000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd547741f",
            "selector": "0xd547741f",
            "calldata_variants": [
                "0xd547741f",
                "0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xdb2e21bc",
            "selector": "0xdb2e21bc",
            "calldata_variants": [
                "0xdb2e21bc",
                "0xdb2e21bc0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xe12fba8d",
            "selector": "0xe12fba8d",
            "calldata_variants": [
                "0xe12fba8d",
                "0xe12fba8d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x8129fc1c",
            "selector": "0x8129fc1c",
            "calldata_variants": [
                "0x8129fc1c",
                "0x8129fc1c0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x91d14854",
            "selector": "0x91d14854",
            "calldata_variants": [
                "0x91d14854",
                "0x91d148540000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa217fddf",
            "selector": "0xa217fddf",
            "calldata_variants": [
                "0xa217fddf",
                "0xa217fddf0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 2048,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 3741,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 2,
    "guards_detected": []
}
medium upgradeability cast DELEGATECALL present 80 no
view
evidence_json
{
    "notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
    "delegatecall_count": 1
}