159e3a0f-c428-4b8a-82d1-6d7abf8eb94b
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 31470 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 77446 | artifact.fetch | complete | 1 / 3 | 2 weeks ago |
| 77447 | tool.cast_disasm | complete | 1 / 3 | 2 weeks ago |
| 77448 | analysis.bundle | complete | 1 / 3 | 2 weeks ago |
| 77449 | capability.graph | complete | 1 / 3 | 2 weeks ago |
| 77450 | detector.run | complete | 1 / 3 | 2 weeks ago |
| 77451 | validation.fork | complete | 1 / 3 | 2 weeks ago |
No slither job recorded yet.
[codex:1413553] OpenAI Codex v0.77.0 (research preview)
[codex:1413553] --------
[codex:1413553] workdir: /tmp/codex-multi-1cr916mq
[codex:1413553] model: gpt-5.2-codex
[codex:1413553] provider: openai
[codex:1413553] approval: never
[codex:1413553] sandbox: read-only
[codex:1413553] reasoning effort: xhigh
[codex:1413553] reasoning summaries: auto
[codex:1413553] session id: 019b85f1-4d8e-7362-9a78-16de754ae3ab
[codex:1413553] --------
[codex:1413553] user
[codex:1413553] 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:1413553]
[codex:1413553] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:1413553]
[codex:1413553] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:1413553] - Gas inefficiency, code quality, or best practices
[codex:1413553] - Theoretical vulnerabilities without a clear extraction path
[codex:1413553] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:1413553] - Issues requiring social engineering or off-chain coordination
[codex:1413553]
[codex:1413553] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:1413553] - CALL/DELEGATECALL with controllable destination or calldata
[codex:1413553] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:1413553] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:1413553] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:1413553] - External calls before state updates (reentrancy)
[codex:1413553] - SELFDESTRUCT with controllable beneficiary
[codex:1413553] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:1413553]
[codex:1413553] For each finding, you MUST explain:
[codex:1413553] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:1413553] 2. The concrete sequence of transactions to extract value
[codex:1413553] 3. Why you believe this is exploitable (not just suspicious)
[codex:1413553]
[codex:1413553] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:1413553] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:1413553]
[codex:1413553] Output MUST be valid JSON matching the provided schema.
[codex:1413553] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:1413553] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:1413553] mcp startup: no servers
[codex:1413553]
[codex:1413553] thinking
[codex:1413553] **Reading BYTECODE_BUNDLE.txt file**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc ls in /tmp/codex-multi-1cr916mq succeeded in 5ms:
[codex:1413553] BYTECODE_BUNDLE.txt
[codex:1413553] codex-output-schema.json
[codex:1413553] exec
[codex:1413553] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-1cr916mq succeeded in 5ms:
[codex:1413553] Runtime bytecode bundle for best-effort auditing.
[codex:1413553] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:1413553]
[codex:1413553] FILE: runtime_bytecode.hex
[codex:1413553] 0x60806040526004361061009f575f3560e01c80639e4e7318116100635780639e4e731814610227578063a0ab965314610251578063a0e67e2b14610279578063affed0e0146102a3578063ba9a91a5146102cd578063f698da25146102f7576100df565b806304622c2e146101435780631279991b1461016d5780632f54bf6e1461019757806333330fe0146101d357806342cde4e8146101fd576100df565b366100df577fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c33346040516100d59291906109b2565b60405180910390a1005b335f357fffffffff0000000000000000000000000000000000000000000000000000000016346040517fc46a58f800000000000000000000000000000000000000000000000000000000815260040161013a93929190610a13565b60405180910390fd5b34801561014e575f5ffd5b50610157610321565b6040516101649190610a60565b60405180910390f35b348015610178575f5ffd5b50610181610347565b60405161018e9190610a60565b60405180910390f35b3480156101a2575f5ffd5b506101bd60048036038101906101b89190610ab4565b61036d565b6040516101ca9190610af9565b60405180910390f35b3480156101de575f5ffd5b506101e761038a565b6040516101f49190610a60565b60405180910390f35b348015610208575f5ffd5b506102116103b0565b60405161021e9190610b12565b60405180910390f35b348015610232575f5ffd5b5061023b6103b6565b6040516102489190610a60565b60405180910390f35b34801561025c575f5ffd5b5061027760048036038101906102729190610eb0565b6103dc565b005b348015610284575f5ffd5b5061028d610888565b60405161029a9190611088565b60405180910390f35b3480156102ae575f5ffd5b506102b7610913565b6040516102c49190610b12565b60405180910390f35b3480156102d8575f5ffd5b506102e1610918565b6040516102ee9190610a60565b60405180910390f35b348015610302575f5ffd5b5061030b61093e565b6040516103189190610a60565b60405180910390f35b7f32f3de0d7fc1cdd909bb4d992a94061e800669c611b9d07f137df1f4bb85f0975f1b81565b7f3ee892349ae4bbe61dce18f95115b5dc02daf49204cc602458cd4c1f540d56d75f1b81565b6002602052805f5260405f205f915054906101000a900460ff1681565b7fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac564725f1b81565b60015481565b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc65f1b81565b600154875114610418576040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8551875114801561042a575087518751145b610460576040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806104c557505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8290610507576040517f3221267a0000000000000000000000000000000000000000000000000000000081526004016104fe91906110a8565b60405180910390fd5b505f7f3ee892349ae4bbe61dce18f95115b5dc02daf49204cc602458cd4c1f540d56d75f1b868686805190602001205f54878760405160200161055097969594939291906110d0565b6040516020818303038152906040528051906020012090505f6003548260405160200161057e9291906111b1565b6040516020818303038152906040528051906020012090505f5f90505f5f90505b60015481101561073c575f6001848e84815181106105c0576105bf6111e7565b5b60200260200101518e85815181106105db576105da6111e7565b5b60200260200101518e86815181106105f6576105f56111e7565b5b60200260200101516040515f815260200160405260405161061a9493929190611223565b6020604051602081039080840390855afa15801561063a573d5f5f3e3d5ffd5b5050506020604051035190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16116106ab576040517f39d43e8800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661072b576040517f5d652eb100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050808060010191505061059f565b5060015f5461074b9190611293565b5f819055505f865111156107995761076288610944565b610798576040517f27033d6600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5f8873ffffffffffffffffffffffffffffffffffffffff16888690896040516107c29190611318565b5f60405180830381858888f193505050503d805f81146107fd576040519150601f19603f3d011682016040523d82523d5f602084013e610802565b606091505b505090508061083d576040517f75cfdcce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f187ae0bfb8619f02a4db1cfef70a54e5722d00d8fcfe6811f1a1f044633ca0a7868a8a8a60405161087294939291906113d1565b60405180910390a1505050505050505050505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561090957602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116108c0575b5050505050905090565b5f5481565b7f72dc1dc597006ea524d75bd3377c4663827629e52e27fd2169cca6f90f6d1ef95f1b81565b60035481565b5f5f823b90505f8163ffffffff1611915050919050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6109848261095b565b9050919050565b6109948161097a565b82525050565b5f819050919050565b6109ac8161099a565b82525050565b5f6040820190506109c55f83018561098b565b6109d260208301846109a3565b9392505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610a0d816109d9565b82525050565b5f606082019050610a265f83018661098b565b610a336020830185610a04565b610a4060408301846109a3565b949350505050565b5f819050919050565b610a5a81610a48565b82525050565b5f602082019050610a735f830184610a51565b92915050565b5f604051905090565b5f5ffd5b5f5ffd5b610a938161097a565b8114610a9d575f5ffd5b50565b5f81359050610aae81610a8a565b92915050565b5f60208284031215610ac957610ac8610a82565b5b5f610ad684828501610aa0565b91505092915050565b5f8115159050919050565b610af381610adf565b82525050565b5f602082019050610b0c5f830184610aea565b92915050565b5f602082019050610b255f8301846109a3565b92915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610b7582610b2f565b810181811067ffffffffffffffff82111715610b9457610b93610b3f565b5b80604052505050565b5f610ba6610a79565b9050610bb28282610b6c565b919050565b5f67ffffffffffffffff821115610bd157610bd0610b3f565b5b602082029050602081019050919050565b5f5ffd5b5f60ff82169050919050565b610bfb81610be6565b8114610c05575f5ffd5b50565b5f81359050610c1681610bf2565b92915050565b5f610c2e610c2984610bb7565b610b9d565b90508083825260208201905060208402830185811115610c5157610c50610be2565b5b835b81811015610c7a5780610c668882610c08565b845260208401935050602081019050610c53565b5050509392505050565b5f82601f830112610c9857610c97610b2b565b5b8135610ca8848260208601610c1c565b91505092915050565b5f67ffffffffffffffff821115610ccb57610cca610b3f565b5b602082029050602081019050919050565b610ce581610a48565b8114610cef575f5ffd5b50565b5f81359050610d0081610cdc565b92915050565b5f610d18610d1384610cb1565b610b9d565b90508083825260208201905060208402830185811115610d3b57610d3a610be2565b5b835b81811015610d645780610d508882610cf2565b845260208401935050602081019050610d3d565b5050509392505050565b5f82601f830112610d8257610d81610b2b565b5b8135610d92848260208601610d06565b91505092915050565b5f610da58261095b565b9050919050565b610db581610d9b565b8114610dbf575f5ffd5b50565b5f81359050610dd081610dac565b92915050565b610ddf8161099a565b8114610de9575f5ffd5b50565b5f81359050610dfa81610dd6565b92915050565b5f5ffd5b5f67ffffffffffffffff821115610e1e57610e1d610b3f565b5b610e2782610b2f565b9050602081019050919050565b828183375f83830152505050565b5f610e54610e4f84610e04565b610b9d565b905082815260208101848484011115610e7057610e6f610e00565b5b610e7b848285610e34565b509392505050565b5f82601f830112610e9757610e96610b2b565b5b8135610ea7848260208601610e42565b91505092915050565b5f5f5f5f5f5f5f5f610100898b031215610ecd57610ecc610a82565b5b5f89013567ffffffffffffffff811115610eea57610ee9610a86565b5b610ef68b828c01610c84565b985050602089013567ffffffffffffffff811115610f1757610f16610a86565b5b610f238b828c01610d6e565b975050604089013567ffffffffffffffff811115610f4457610f43610a86565b5b610f508b828c01610d6e565b9650506060610f618b828c01610dc2565b9550506080610f728b828c01610dec565b94505060a089013567ffffffffffffffff811115610f9357610f92610a86565b5b610f9f8b828c01610e83565b93505060c0610fb08b828c01610aa0565b92505060e0610fc18b828c01610dec565b9150509295985092959890939650565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6110038161097a565b82525050565b5f6110148383610ffa565b60208301905092915050565b5f602082019050919050565b5f61103682610fd1565b6110408185610fdb565b935061104b83610feb565b805f5b8381101561107b5781516110628882611009565b975061106d83611020565b92505060018101905061104e565b5085935050505092915050565b5f6020820190508181035f8301526110a0818461102c565b905092915050565b5f6020820190506110bb5f83018461098b565b92915050565b6110ca81610d9b565b82525050565b5f60e0820190506110e35f83018a610a51565b6110f060208301896110c1565b6110fd60408301886109a3565b61110a6060830187610a51565b61111760808301866109a3565b61112460a083018561098b565b61113160c08301846109a3565b98975050505050505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f61117b60028361113d565b915061118682611147565b600282019050919050565b5f819050919050565b6111ab6111a682610a48565b611191565b82525050565b5f6111bb8261116f565b91506111c7828561119a565b6020820191506111d7828461119a565b6020820191508190509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b61121d81610be6565b82525050565b5f6080820190506112365f830187610a51565b6112436020830186611214565b6112506040830185610a51565b61125d6060830184610a51565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61129d8261099a565b91506112a88361099a565b92508282019050808211156112c0576112bf611266565b5b92915050565b5f81519050919050565b5f81905092915050565b8281835e5f83830152505050565b5f6112f2826112c6565b6112fc81856112d0565b935061130c8185602086016112da565b80840191505092915050565b5f61132382846112e8565b915081905092915050565b5f819050919050565b5f61135161134c6113478461095b565b61132e565b61095b565b9050919050565b5f61136282611337565b9050919050565b5f61137382611358565b9050919050565b61138381611369565b82525050565b5f82825260208201905092915050565b5f6113a3826112c6565b6113ad8185611389565b93506113bd8185602086016112da565b6113c681610b2f565b840191505092915050565b5f6080820190506113e45f83018761098b565b6113f1602083018661137a565b6113fe60408301856109a3565b81810360608301526114108184611399565b90509594505050505056fea26469706673582212201c1c501529f986e5b363882530da2c263d7d66c1567338bf66d8aa861bfcab8564736f6c634300081b0033
[codex:1413553]
[codex:1413553] thinking
[codex:1413553] **Preparing to analyze bytecode for vulnerabilities**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import sys
[codex:1413553] hexstr=open('BYTECODE_BUNDLE.txt').read().split('runtime_bytecode.hex')[1]
[codex:1413553] # extract hex after 0x
[codex:1413553] import re
[codex:1413553] m=re.search(r'0x([0-9a-fA-F]+)',hexstr)
[codex:1413553] code=m.group(1)
[codex:1413553] # opcode map
[codex:1413553] opcodes={
[codex:1413553] 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:1413553] 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:1413553] 0x20:'SHA3',
[codex:1413553] 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:1413553] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1413553] 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:1413553] 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:1413553] 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:1413553] 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:1413553] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1413553] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1413553] }
[codex:1413553] code_bytes=bytes.fromhex(code)
[codex:1413553] # disassemble printing offset, opcode, immediate
[codex:1413553] out=[]
[codex:1413553] i=0
[codex:1413553] while i<len(code_bytes):
[codex:1413553] op=code_bytes[i]
[codex:1413553] name=opcodes.get(op, f'OP_{op:02x}')
[codex:1413553] if 0x60 <= op <= 0x7f:
[codex:1413553] n=op-0x5f
[codex:1413553] imm=code_bytes[i+1:i+1+n]
[codex:1413553] out.append((i, name, '0x'+imm.hex()))
[codex:1413553] i+=1+n
[codex:1413553] else:
[codex:1413553] out.append((i, name, None))
[codex:1413553] i+=1
[codex:1413553]
[codex:1413553] # print with offsets
[codex:1413553] for off,name,imm in out:
[codex:1413553] if imm is None:
[codex:1413553] print(f'{off:04x}: {name}')
[codex:1413553] else:
[codex:1413553] print(f'{off:04x}: {name} {imm}')
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 28ms:
[codex:1413553] 0000: PUSH1 0x80
[codex:1413553] 0002: PUSH1 0x40
[codex:1413553] 0004: MSTORE
[codex:1413553] 0005: PUSH1 0x04
[codex:1413553] 0007: CALLDATASIZE
[codex:1413553] 0008: LT
[codex:1413553] 0009: PUSH2 0x009f
[codex:1413553] 000c: JUMPI
[codex:1413553] 000d: OP_5f
[codex:1413553] 000e: CALLDATALOAD
[codex:1413553] 000f: PUSH1 0xe0
[codex:1413553] 0011: SHR
[codex:1413553] 0012: DUP1
[codex:1413553] 0013: PUSH4 0x9e4e7318
[codex:1413553] 0018: GT
[codex:1413553] 0019: PUSH2 0x0063
[codex:1413553] 001c: JUMPI
[codex:1413553] 001d: DUP1
[codex:1413553] 001e: PUSH4 0x9e4e7318
[codex:1413553] 0023: EQ
[codex:1413553]
[codex:1413553]
[codex:1413553]
[codex:1413553] thinking
[codex:1413553] **Analyzing multisig contract bytecode structure**
[codex:1413553] thinking
[codex:1413553] **Decoding intricate calldata and verifying meta-transaction logic**
[codex:1413553]
[codex:1413553] I’m dissecting the complex calldata decoder that parses multiple static and dynamic parameters, matching a function resembling a meta-transaction executor. It verifies the caller against an authorized executor address or allows anyone if zero, then constructs EIP-712 hashes using stored constants and nonce values. The subsequent signature verification loop enforces sorted, unique signers and likely applies threshold checks for multisig approval.
[codex:1413553] thinking
[codex:1413553] **Analyzing owner mapping and storage layout correlations**
[codex:1413553]
[codex:1413553] I’m examining how the contract verifies owners against a stored mapping, mapping this logic to Gnosis Safe’s typical storage layout and function selectors. It looks like slot2 holds the owners mapping, slot0 the nonce, and the contract supports standard Safe functions like getOwners(), suggesting this is a variant of Gnosis Safe or strongly inspired by it. I’m also considering subtle differences in selector mappings and storage orders to confirm exact correspondence.
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] try:
[codex:1413553] import sha3
[codex:1413553] k=sha3.keccak_256()
[codex:1413553] k.update(b'isOwner(address)')
[codex:1413553] print(k.hexdigest()[:8])
[codex:1413553] except Exception as e:
[codex:1413553] print('err',e)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 18ms:
[codex:1413553] err No module named 'sha3'
[codex:1413553]
[codex:1413553] thinking
[codex:1413553] **Analyzing Gnosis Safe function selectors and calldata decoding**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read()
[codex:1413553] m=re.search(r'0x([0-9a-fA-F]+)',code)
[codex:1413553] hexstr=m.group(1)
[codex:1413553] code_bytes=bytes.fromhex(hexstr)
[codex:1413553] # opcode map
[codex:1413553] opcodes={
[codex:1413553] 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:1413553] 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:1413553] 0x20:'SHA3',
[codex:1413553] 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:1413553] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1413553] 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:1413553] 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:1413553] 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:1413553] 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:1413553] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1413553] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1413553] }
[codex:1413553]
[codex:1413553] def disasm(start,end):
[codex:1413553] i=start
[codex:1413553] while i<end:
[codex:1413553] op=code_bytes[i]
[codex:1413553] name=opcodes.get(op, f'OP_{op:02x}')
[codex:1413553] if 0x60<=op<=0x7f:
[codex:1413553] n=op-0x5f
[codex:1413553] imm=code_bytes[i+1:i+1+n]
[codex:1413553] print(f'{i:04x}: {name} 0x{imm.hex()}')
[codex:1413553] i+=1+n
[codex:1413553] else:
[codex:1413553] print(f'{i:04x}: {name}')
[codex:1413553] i+=1
[codex:1413553]
[codex:1413553] # print around 0x0ab4
[codex:1413553] start=0x0aa0; end=0x0b10
[codex:1413553] print('---')
[codex:1413553] disasm(start,end)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 27ms:
[codex:1413553] ---
[codex:1413553] 0aa0: JUMPDEST
[codex:1413553] 0aa1: OP_5f
[codex:1413553] 0aa2: DUP2
[codex:1413553] 0aa3: CALLDATALOAD
[codex:1413553] 0aa4: SWAP1
[codex:1413553] 0aa5: POP
[codex:1413553] 0aa6: PUSH2 0x0aae
[codex:1413553] 0aa9: DUP2
[codex:1413553] 0aaa: PUSH2 0x0a8a
[codex:1413553] 0aad: JUMP
[codex:1413553] 0aae: JUMPDEST
[codex:1413553] 0aaf: SWAP3
[codex:1413553] 0ab0: SWAP2
[codex:1413553] 0ab1: POP
[codex:1413553] 0ab2: POP
[codex:1413553] 0ab3: JUMP
[codex:1413553] 0ab4: JUMPDEST
[codex:1413553] 0ab5: OP_5f
[codex:1413553] 0ab6: PUSH1 0x20
[codex:1413553]
[codex:1413553] thinking
[codex:1413553] **Analyzing bytecode decoder structure**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read(); m=re.search(r'0x([0-9a-fA-F]+)',code); code_bytes=bytes.fromhex(m.group(1))
[codex:1413553] opcodes={
[codex:1413553] 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:1413553] 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:1413553] 0x20:'SHA3',
[codex:1413553] 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:1413553] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:1413553] 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:1413553] 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:1413553] 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:1413553] 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:1413553] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:1413553] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:1413553] }
[codex:1413553]
[codex:1413553] def disasm(start,end):
[codex:1413553] i=start
[codex:1413553] while i<end:
[codex:1413553] op=code_bytes[i]; name=opcodes.get(op, f'OP_{op:02x}')
[codex:1413553] if 0x60<=op<=0x7f:
[codex:1413553] n=op-0x5f; imm=code_bytes[i+1:i+1+n]
[codex:1413553] print(f'{i:04x}: {name} 0x{imm.hex()}'); i+=1+n
[codex:1413553] else:
[codex:1413553] print(f'{i:04x}: {name}'); i+=1
[codex:1413553]
[codex:1413553] # print around 0x0a82
[codex:1413553] start=0x0a70; end=0x0ab4
[codex:1413553] print('---')
[codex:1413553] disasm(start,end)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 24ms:
[codex:1413553] ---
[codex:1413553] 0a70: EXP
[codex:1413553] 0a71: MLOAD
[codex:1413553] 0a72: JUMP
[codex:1413553] 0a73: JUMPDEST
[codex:1413553] 0a74: SWAP3
[codex:1413553] 0a75: SWAP2
[codex:1413553] 0a76: POP
[codex:1413553] 0a77: POP
[codex:1413553] 0a78: JUMP
[codex:1413553] 0a79: JUMPDEST
[codex:1413553] 0a7a: OP_5f
[codex:1413553] 0a7b: PUSH1 0x40
[codex:1413553] 0a7d: MLOAD
[codex:1413553] 0a7e: SWAP1
[codex:1413553] 0a7f: POP
[codex:1413553] 0a80: SWAP1
[codex:1413553] 0a81: JUMP
[codex:1413553] 0a82: JUMPDEST
[codex:1413553] 0a83: OP_5f
[codex:1413553]
[codex:1413553] thinking
[codex:1413553] **Analyzing function selectors and validation logic**
[codex:1413553]
[codex:1413553] I'm mapping the functions by their selectors and observing how addresses are decoded and validated, especially focusing on a likely `isOwner(address)` function. It seems similar to a Gnosis Safe contract with standard signature checks and EIP-1271 staticcalls. I'm also considering potential vulnerabilities by examining signature verification and calldata construction around specific opcode locations.
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read()
[codex:1413553] if '1626ba7e' in code:
[codex:1413553] print('found')
[codex:1413553] else:
[codex:1413553] # search hexstring for 1626ba7e
[codex:1413553] import re
[codex:1413553] m=re.search(r'0x([0-9a-fA-F]+)',code)
[codex:1413553] hexstr=m.group(1)
[codex:1413553] print('found' if '1626ba7e' in hexstr else 'not found')
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 25ms:
[codex:1413553] not found
[codex:1413553]
[codex:1413553] thinking
[codex:1413553] **Investigating signature verification selector**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read(); m=re.search(r'0x([0-9a-fA-F]+)',code); code_bytes=bytes.fromhex(m.group(1))
[codex:1413553] opcodes={
[codex:1413553] 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',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',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',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',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',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:1413553]
[codex:1413553] def disasm(start,end):
[codex:1413553] i=start
[codex:1413553] while i<end:
[codex:1413553] op=code_bytes[i]; name=opcodes.get(op, f'OP_{op:02x}')
[codex:1413553] if 0x60<=op<=0x7f:
[codex:1413553] n=op-0x5f; imm=code_bytes[i+1:i+1+n]
[codex:1413553] print(f'{i:04x}: {name} 0x{imm.hex()}'); i+=1+n
[codex:1413553] else:
[codex:1413553] print(f'{i:04x}: {name}'); i+=1
[codex:1413553]
[codex:1413553] start=0x1210; end=0x1266
[codex:1413553] print('---')
[codex:1413553] disasm(start,end)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 28ms:
[codex:1413553] ---
[codex:1413553] 1210: PUSH1 0x24
[codex:1413553] 1212: OP_5f
[codex:1413553] 1213: REVERT
[codex:1413553] 1214: JUMPDEST
[codex:1413553] 1215: PUSH2 0x121d
[codex:1413553] 1218: DUP2
[codex:1413553] 1219: PUSH2 0x0be6
[codex:1413553] 121c: JUMP
[codex:1413553] 121d: JUMPDEST
[codex:1413553] 121e: DUP3
[codex:1413553] 121f: MSTORE
[codex:1413553] 1220: POP
[codex:1413553] 1221: POP
[codex:1413553] 1222: JUMP
[codex:1413553] 1223: JUMPDEST
[codex:1413553] 1224: OP_5f
[codex:1413553] 1225: PUSH1 0x80
[codex:1413553] 1227: DUP3
[codex:1413553] 1228: ADD
[codex:1413553]
[codex:1413553] thinking
[codex:1413553] **Analyzing ecrecover call and signature checks**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read(); m=re.search(r'0x([0-9a-fA-F]+)',code); code_bytes=bytes.fromhex(m.group(1))
[codex:1413553] opcodes={
[codex:1413553] 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',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',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',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',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',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:1413553]
[codex:1413553] def disasm(start,end):
[codex:1413553] i=start
[codex:1413553] while i<end:
[codex:1413553] op=code_bytes[i]; name=opcodes.get(op, f'OP_{op:02x}')
[codex:1413553] if 0x60<=op<=0x7f:
[codex:1413553] n=op-0x5f; imm=code_bytes[i+1:i+1+n]
[codex:1413553] print(f'{i:04x}: {name} 0x{imm.hex()}'); i+=1+n
[codex:1413553] else:
[codex:1413553] print(f'{i:04x}: {name}'); i+=1
[codex:1413553]
[codex:1413553] start=0x0730; end=0x07a5
[codex:1413553] print('---')
[codex:1413553] disasm(start,end)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 25ms:
[codex:1413553] ---
[codex:1413553] 0730: DUP1
[codex:1413553] 0731: DUP1
[codex:1413553] 0732: PUSH1 0x01
[codex:1413553] 0734: ADD
[codex:1413553] 0735: SWAP2
[codex:1413553] 0736: POP
[codex:1413553] 0737: POP
[codex:1413553] 0738: PUSH2 0x059f
[codex:1413553] 073b: JUMP
[codex:1413553] 073c: JUMPDEST
[codex:1413553] 073d: POP
[codex:1413553] 073e: PUSH1 0x01
[codex:1413553] 0740: OP_5f
[codex:1413553] 0741: SLOAD
[codex:1413553] 0742: PUSH2 0x074b
[codex:1413553] 0745: SWAP2
[codex:1413553] 0746: SWAP1
[codex:1413553] 0747: PUSH2 0x1293
[codex:1413553] 074a: JUMP
[codex:1413553]
[codex:1413553] thinking
[codex:1413553] **Analyzing refund and nonce handling logic**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] try:
[codex:1413553] from Crypto.Hash import keccak
[codex:1413553] k=keccak.new(digest_bits=256)
[codex:1413553] k.update(b'getThreshold()')
[codex:1413553] print(k.hexdigest()[:8])
[codex:1413553] except Exception as e:
[codex:1413553] print('err',e)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 55ms:
[codex:1413553] e75235b8
[codex:1413553]
[codex:1413553] thinking
[codex:1413553] **Computing function selectors**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] from Crypto.Hash import keccak
[codex:1413553]
[codex:1413553] def selector(sig):
[codex:1413553] k=keccak.new(digest_bits=256)
[codex:1413553] k.update(sig.encode())
[codex:1413553] return k.hexdigest()[:8]
[codex:1413553]
[codex:1413553] sigs=[
[codex:1413553] 'getOwners()',
[codex:1413553] 'getThreshold()',
[codex:1413553] 'isOwner(address)',
[codex:1413553] 'nonce()',
[codex:1413553] 'getChainId()',
[codex:1413553] 'domainSeparator()',
[codex:1413553] 'getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)',
[codex:1413553] 'execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)',
[codex:1413553] 'approveHash(bytes32)',
[codex:1413553] 'approvedHashes(address,bytes32)',
[codex:1413553] 'getOwners()'
[codex:1413553] ]
[codex:1413553] for s in sigs:
[codex:1413553] print(s, selector(s))
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 37ms:
[codex:1413553] getOwners() a0e67e2b
[codex:1413553] getThreshold() e75235b8
[codex:1413553] isOwner(address) 2f54bf6e
[codex:1413553] nonce() affed0e0
[codex:1413553] getChainId() 3408e470
[codex:1413553] domainSeparator() f698da25
[codex:1413553] getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256) d8d11f78
[codex:1413553] execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes) 6a761202
[codex:1413553] approveHash(bytes32) d4d9bdcd
[codex:1413553] approvedHashes(address,bytes32) 7d832974
[codex:1413553] getOwners() a0e67e2b
[codex:1413553]
[codex:1413553] thinking
[codex:1413553] **Analyzing contract function selectors**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] from Crypto.Hash import keccak
[codex:1413553]
[codex:1413553] def sel(sig):
[codex:1413553] k=keccak.new(digest_bits=256); k.update(sig.encode()); return k.hexdigest()[:8]
[codex:1413553]
[codex:1413553] candidates=[
[codex:1413553] 'execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)',
[codex:1413553] 'execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256,bytes)',
[codex:1413553] 'executeTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)',
[codex:1413553] 'executeTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256,bytes)',
[codex:1413553] 'execute(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes)',
[codex:1413553] 'execute(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256,bytes)',
[codex:1413553] 'getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)',
[codex:1413553] 'encodeTransactionData(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)',
[codex:1413553] 'getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256,bytes32)',
[codex:1413553] 'checkSignatures(bytes32,bytes,bytes)',
[codex:1413553] 'execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256)',
[codex:1413553] 'execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256,bytes)',
[codex:1413553] ]
[codex:1413553] for c in candidates:
[codex:1413553] print(c, sel(c))
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 39ms:
[codex:1413553] execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes) 6a761202
[codex:1413553] execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256,bytes) b4a2ee9d
[codex:1413553] executeTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes) 3f9f3d09
[codex:1413553] executeTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256,bytes) 1dc4e463
[codex:1413553] execute(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,bytes) 6a4d7651
[codex:1413553] execute(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256,bytes) c32c9294
[codex:1413553] getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256) d8d11f78
[codex:1413553] encodeTransactionData(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256) e86637db
[codex:1413553] getTransactionHash(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256,bytes32) 0ab6e0a2
[codex:1413553] checkSignatures(bytes32,bytes,bytes) 934f3a11
[codex:1413553] execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256) caad0464
[codex:1413553] execTransaction(address,uint256,bytes,uint8,uint256,uint256,uint256,address,address,uint256,bytes) b4a2ee9d
[codex:1413553]
[codex:1413553] thinking
[codex:1413553] **Analyzing function parameter decoding**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read(); m=re.search(r'0x([0-9a-fA-F]+)',code); code_bytes=bytes.fromhex(m.group(1))
[codex:1413553] opcodes={
[codex:1413553] 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',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',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',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',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',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:1413553]
[codex:1413553] def disasm(start,end):
[codex:1413553] i=start
[codex:1413553] while i<end:
[codex:1413553] op=code_bytes[i]; name=opcodes.get(op, f'OP_{op:02x}')
[codex:1413553] if 0x60<=op<=0x7f:
[codex:1413553] n=op-0x5f; imm=code_bytes[i+1:i+1+n]
[codex:1413553] print(f'{i:04x}: {name} 0x{imm.hex()}'); i+=1+n
[codex:1413553] else:
[codex:1413553] print(f'{i:04x}: {name}'); i+=1
[codex:1413553]
[codex:1413553] start=0x0d00; end=0x0d90
[codex:1413553] print('---')
[codex:1413553] disasm(start,end)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 25ms:
[codex:1413553] ---
[codex:1413553] 0d00: JUMPDEST
[codex:1413553] 0d01: SWAP3
[codex:1413553] 0d02: SWAP2
[codex:1413553] 0d03: POP
[codex:1413553] 0d04: POP
[codex:1413553] 0d05: JUMP
[codex:1413553] 0d06: JUMPDEST
[codex:1413553] 0d07: OP_5f
[codex:1413553] 0d08: PUSH2 0x0d18
[codex:1413553] 0d0b: PUSH2 0x0d13
[codex:1413553] 0d0e: DUP5
[codex:1413553] 0d0f: PUSH2 0x0cb1
[codex:1413553] 0d12: JUMP
[codex:1413553] 0d13: JUMPDEST
[codex:1413553] 0d14: PUSH2 0x0b9d
[codex:1413553] 0d17: JUMP
[codex:1413553] 0d18: JUMPDEST
[codex:1413553] 0d19: SWAP1
[codex:1413553] 0d1a: POP
[codex:1413553]
[codex:1413553] thinking
[codex:1413553] **Analyzing dynamic array decoding and function selectors**
[codex:1413553]
[codex:1413553] I'm unpacking how the bytecode decodes dynamic arrays like `uint256[]` and `bytes`, checking length validation with uint64 bounds, and trying to map function selectors to Gnosis Safe variants. The goal is to identify parameter types and potential vulnerabilities, especially in signature verification and transaction execution. I'm tracing the logic behind signature checks and domain separator consistency to see if replay or unauthorized execution risks exist.
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] from Crypto.Hash import keccak
[codex:1413553]
[codex:1413553] def keccak_hex(s):
[codex:1413553] k=keccak.new(digest_bits=256); k.update(s.encode()); return k.hexdigest()
[codex:1413553]
[codex:1413553] cands={
[codex:1413553] 'EIP712Domain(uint256 chainId,address verifyingContract)':None,
[codex:1413553] 'SafeTx(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)':None,
[codex:1413553] 'SafeMessage(bytes message)':None,
[codex:1413553] 'EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)':None,
[codex:1413553] 'Transaction(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)':None,
[codex:1413553] 'Execution(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)':None,
[codex:1413553] 'Execute(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce)':None,
[codex:1413553] 'SafeMessage(bytes message)':None,
[codex:1413553] }
[codex:1413553] for s in list(cands):
[codex:1413553] print(s, keccak_hex(s))
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 35ms:
[codex:1413553] EIP712Domain(uint256 chainId,address verifyingContract) 47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a79469218
[codex:1413553] SafeTx(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce) bb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d8
[codex:1413553] SafeMessage(bytes message) 60b3cbf8b4a223d68d641b3b6ddf9a298e7f33710cf3d3a9d1146b5a6150fbca
[codex:1413553] EIP712Domain(string name,string version,uint256 chainId,address verifyingContract) 8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f
[codex:1413553] Transaction(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce) f6a8e4354614ba5f3f1d6e653b1f3e68c8e37c36dfaa21d783839cee1d6831b2
[codex:1413553] Execution(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce) 31e976cbd047d7e9d55a4ca16fb7eadc05a3b0350f2a97e4527b46ccd4837ae1
[codex:1413553] Execute(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,uint256 nonce) 68518d42e51fde82d7833fa3ada9aab3e4f75261bcc8505d329b5a53ad9b07cb
[codex:1413553]
[codex:1413553] thinking
[codex:1413553] **Analyzing bytecode hashes and signature patterns**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read(); m=re.search(r'0x([0-9a-fA-F]+)',code); code_bytes=bytes.fromhex(m.group(1))
[codex:1413553] # find SSTORE opcodes
[codex:1413553] sstore_offsets=[i for i,b in enumerate(code_bytes) if b==0x55]
[codex:1413553] print('SSTORE offsets', [hex(o) for o in sstore_offsets])
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 29ms:
[codex:1413553] SSTORE offsets ['0x74f']
[codex:1413553]
[codex:1413553] thinking
[codex:1413553] **Checking for delegatecall usage**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read(); m=re.search(r'0x([0-9a-fA-F]+)',code); code_bytes=bytes.fromhex(m.group(1))
[codex:1413553] ops=[('DELEGATECALL',0xf4),('CALL',0xf1),('CALLCODE',0xf2),('STATICCALL',0xfa),('SELFDESTRUCT',0xff)]
[codex:1413553] for name,op in ops:
[codex:1413553] offs=[hex(i) for i,b in enumerate(code_bytes) if b==op]
[codex:1413553] print(name, offs)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 25ms:
[codex:1413553] DELEGATECALL ['0xaf', '0x1ed', '0x33e', '0x35b', '0x51d']
[codex:1413553] CALL ['0x33d', '0x39f', '0x7ce', '0x857', '0x13e7']
[codex:1413553] CALLCODE ['0x3be', '0xc14', '0xd4e', '0x12ec']
[codex:1413553] STATICCALL ['0x62b', '0xdf4', '0x1012']
[codex:1413553] SELFDESTRUCT ['0xa7', '0xe4', '0xe5', '0xe6', '0xe7', '0x386', '0x463', '0x464', '0x465', '0x466', '0x467', '0x468', '0x469', '0x46a', '0x46b', '0x46c', '0x46d', '0x46e', '0x46f', '0x470', '0x471', '0x472', '0x473', '0x474', '0x475', '0x476', '0x47a', '0x47b', '0x47c', '0x47d', '0x47e', '0x47f', '0x480', '0x481', '0x482', '0x483', '0x484', '0x485', '0x486', '0x487', '0x488', '0x489', '0x48a', '0x48b', '0x48c', '0x48d', '0x498', '0x499', '0x49a', '0x49b', '0x49c', '0x49d', '0x49e', '0x49f', '0x4a0', '0x4a1', '0x4a2', '0x4a3', '0x4a4', '0x4a5', '0x4a6', '0x4a7', '0x4a8', '0x4a9', '0x4aa', '0x4ab', '0x4af', '0x4b0', '0x4b1', '0x4b2', '0x4b3', '0x4b4', '0x4b5', '0x4b6', '0x4b7', '0x4b8', '0x4b9', '0x4ba', '0x4bb', '0x4bc', '0x4bd', '0x4be', '0x4bf', '0x4c0', '0x4c1', '0x4c2', '0x649', '0x64a', '0x64b', '0x64c', '0x64d', '0x64e', '0x64f', '0x650', '0x651', '0x652', '0x653', '0x654', '0x655', '0x656', '0x657', '0x658', '0x659', '0x65a', '0x65b', '0x65c', '0x660', '0x661', '0x662', '0x663', '0x664', '0x665', '0x666', '0x667', '0x668', '0x669', '0x66a', '0x66b', '0x66c', '0x66d', '0x66e', '0x66f', '0x670', '0x671', '0x672', '0x673', '0x6b1', '0x6b2', '0x6b3', '0x6b4', '0x6b5', '0x6b6', '0x6b7', '0x6b8', '0x6b9', '0x6ba', '0x6bb', '0x6bc', '0x6bd', '0x6be', '0x6bf', '0x6c0', '0x6c1', '0x6c2', '0x6c3', '0x6c4', '0x6c7', '0x6c8', '0x6c9', '0x6ca', '0x6cb', '0x6cc', '0x6cd', '0x6ce', '0x6cf', '0x6d0', '0x6d1', '0x6d2', '0x6d3', '0x6d4', '0x6d5', '0x6d6', '0x6d7', '0x6d8', '0x6d9', '0x6da', '0x6f4', '0x79d', '0x79e', '0x79f', '0x7a0', '0x7a1', '0x7a2', '0x7a3', '0x7a4', '0x7a5', '0x7a6', '0x7a7', '0x7a8', '0x7a9', '0x7aa', '0x7ab', '0x7ac', '0x7ad', '0x7ae', '0x7af', '0x7b0', '0x8cd', '0x8ce', '0x8cf', '0x8d0', '0x8d1', '0x8d2', '0x8d3', '0x8d4', '0x8d5', '0x8d6', '0x8d7', '0x8d8', '0x8d9', '0x8da', '0x8db', '0x8dc', '0x8dd', '0x8de', '0x8df', '0x8e0', '0x8e3', '0x8e4', '0x8e5', '0x8e6', '0x8e7', '0x8e8', '0x8e9', '0x8ea', '0x8eb', '0x8ec', '0x8ed', '0x8ee', '0x8ef', '0x8f0', '0x8f1', '0x8f2', '0x8f3', '0x8f4', '0x8f5', '0x8f6', '0x94e', '0x94f', '0x950', '0x951', '0x95e', '0x95f', '0x960', '0x961', '0x962', '0x963', '0x964', '0x965', '0x966', '0x967', '0x968', '0x969', '0x96a', '0x96b', '0x96c', '0x96d', '0x96e', '0x96f', '0x970', '0x971', '0x9dc', '0x9dd', '0x9de', '0x9df', '0xb7c', '0xb7d', '0xb7e', '0xb7f', '0xb80', '0xb81', '0xb82', '0xb83', '0xbba', '0xbbb', '0xbbc', '0xbbd', '0xbbe', '0xbbf', '0xbc0', '0xbc1', '0xbe9', '0xcb4', '0xcb5', '0xcb6', '0xcb7', '0xcb8', '0xcb9', '0xcba', '0xcbb', '0xe07', '0xe08', '0xe09', '0xe0a', '0xe0b', '0xe0c', '0xe0d', '0xe0e', '0xed3', '0xed4', '0xed5', '0xed6', '0xed7', '0xed8', '0xed9', '0xeda', '0xf00', '0xf01', '0xf02', '0xf03', '0xf04', '0xf05', '0xf06', '0xf07', '0xf2d', '0xf2e', '0xf2f', '0xf30', '0xf31', '0xf32', '0xf33', '0xf34', '0xf7c', '0xf7d', '0xf7e', '0xf7f', '0xf80', '0xf81', '0xf82', '0xf83']
[codex:1413553]
[codex:1413553] thinking
[codex:1413553] **Analyzing opcode accuracy and storage mapping**
[codex:1413553]
[codex:1413553] I'm verifying real opcode locations versus data bytes to avoid false positives like misreading PUSH data as calls. I’m also starting to map storage slots and constants to known wallet types, aiming to identify any exploitable vulnerabilities or confirm no findings per the user's strict criteria.
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read(); m=re.search(r'0x([0-9a-fA-F]+)',code); code_bytes=bytes.fromhex(m.group(1))
[codex:1413553] opcodes={
[codex:1413553] 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',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',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',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',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',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:1413553]
[codex:1413553] def disasm(start,end):
[codex:1413553] i=start
[codex:1413553] while i<end:
[codex:1413553] op=code_bytes[i]; name=opcodes.get(op, f'OP_{op:02x}')
[codex:1413553] if 0x60<=op<=0x7f:
[codex:1413553] n=op-0x5f; imm=code_bytes[i+1:i+1+n]
[codex:1413553] print(f'{i:04x}: {name} 0x{imm.hex()}'); i+=1+n
[codex:1413553] else:
[codex:1413553] print(f'{i:04x}: {name}'); i+=1
[codex:1413553]
[codex:1413553] start=0x0500; end=0x05a0
[codex:1413553] print('---')
[codex:1413553] disasm(start,end)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 24ms:
[codex:1413553] ---
[codex:1413553] 0500: BLOCKHASH
[codex:1413553] 0501: MLOAD
[codex:1413553] 0502: DUP1
[codex:1413553] 0503: SWAP2
[codex:1413553] 0504: SUB
[codex:1413553] 0505: SWAP1
[codex:1413553] 0506: REVERT
[codex:1413553] 0507: JUMPDEST
[codex:1413553] 0508: POP
[codex:1413553] 0509: OP_5f
[codex:1413553] 050a: PUSH32 0x3ee892349ae4bbe61dce18f95115b5dc02daf49204cc602458cd4c1f540d56d7
[codex:1413553] 052b: OP_5f
[codex:1413553] 052c: SHL
[codex:1413553] 052d: DUP7
[codex:1413553] 052e: DUP7
[codex:1413553] 052f: DUP7
[codex:1413553] 0530: DUP1
[codex:1413553] 0531: MLOAD
[codex:1413553] 0532: SWAP1
[codex:1413553]
[codex:1413553] thinking
[codex:1413553] **Analyzing memory construction and hashing steps**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read(); m=re.search(r'0x([0-9a-fA-F]+)',code); code_bytes=bytes.fromhex(m.group(1))
[codex:1413553] opcodes={
[codex:1413553] 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',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',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',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',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',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:1413553]
[codex:1413553] def disasm(start,end):
[codex:1413553] i=start
[codex:1413553] while i<end:
[codex:1413553] op=code_bytes[i]; name=opcodes.get(op, f'OP_{op:02x}')
[codex:1413553] if 0x60<=op<=0x7f:
[codex:1413553] n=op-0x5f; imm=code_bytes[i+1:i+1+n]
[codex:1413553] print(f'{i:04x}: {name} 0x{imm.hex()}'); i+=1+n
[codex:1413553] else:
[codex:1413553] print(f'{i:04x}: {name}'); i+=1
[codex:1413553]
[codex:1413553] start=0x10d0; end=0x113d
[codex:1413553] print('---')
[codex:1413553] disasm(start,end)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 26ms:
[codex:1413553] ---
[codex:1413553] 10d0: JUMPDEST
[codex:1413553] 10d1: OP_5f
[codex:1413553] 10d2: PUSH1 0xe0
[codex:1413553] 10d4: DUP3
[codex:1413553] 10d5: ADD
[codex:1413553] 10d6: SWAP1
[codex:1413553] 10d7: POP
[codex:1413553] 10d8: PUSH2 0x10e3
[codex:1413553] 10db: OP_5f
[codex:1413553] 10dc: DUP4
[codex:1413553] 10dd: ADD
[codex:1413553] 10de: DUP11
[codex:1413553] 10df: PUSH2 0x0a51
[codex:1413553] 10e2: JUMP
[codex:1413553] 10e3: JUMPDEST
[codex:1413553] 10e4: PUSH2 0x10f0
[codex:1413553] 10e7: PUSH1 0x20
[codex:1413553] 10e9: DUP4
[codex:1413553] 10ea: ADD
[codex:1413553]
[codex:1413553] thinking
[codex:1413553] **Analyzing struct field layout and hash computation**
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read(); m=re.search(r'0x([0-9a-fA-F]+)',code); code_bytes=bytes.fromhex(m.group(1))
[codex:1413553] opcodes={
[codex:1413553] 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',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',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',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',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',0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:1413553]
[codex:1413553] def disasm(start,end):
[codex:1413553] i=start
[codex:1413553] while i<end:
[codex:1413553] op=code_bytes[i]; name=opcodes.get(op, f'OP_{op:02x}')
[codex:1413553] if 0x60<=op<=0x7f:
[codex:1413553] n=op-0x5f; imm=code_bytes[i+1:i+1+n]
[codex:1413553] print(f'{i:04x}: {name} 0x{imm.hex()}'); i+=1+n
[codex:1413553] else:
[codex:1413553] print(f'{i:04x}: {name}'); i+=1
[codex:1413553]
[codex:1413553] start=0x11b0; end=0x11e8
[codex:1413553] print('---')
[codex:1413553] disasm(start,end)
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 24ms:
[codex:1413553] ---
[codex:1413553] 11b0: JUMP
[codex:1413553] 11b1: JUMPDEST
[codex:1413553] 11b2: OP_5f
[codex:1413553] 11b3: PUSH2 0x11bb
[codex:1413553] 11b6: DUP3
[codex:1413553] 11b7: PUSH2 0x116f
[codex:1413553] 11ba: JUMP
[codex:1413553] 11bb: JUMPDEST
[codex:1413553] 11bc: SWAP2
[codex:1413553] 11bd: POP
[codex:1413553] 11be: PUSH2 0x11c7
[codex:1413553] 11c1: DUP3
[codex:1413553] 11c2: DUP6
[codex:1413553] 11c3: PUSH2 0x119a
[codex:1413553] 11c6: JUMP
[codex:1413553] 11c7: JUMPDEST
[codex:1413553] 11c8: PUSH1 0x20
[codex:1413553] 11ca: DUP3
[codex:1413553] 11cb: ADD
[codex:1413553]
[codex:1413553] thinking
[codex:1413553] **Analyzing multi-signature verification flow**
[codex:1413553]
[codex:1413553] I'm inspecting the signature verification logic in detail to confirm it always runs and can't be bypassed. I'm cross-checking potential shortcut branches, how `v` values are handled in signatures, and looking for approved hash mechanics, comparing to known Safe contract signature schemes. I'll also explore nearby bytecode for constants like 27/28 to understand signature parsing fully.
[codex:1413553] exec
[codex:1413553] /bin/bash -lc "python - <<'PY'
[codex:1413553] import re
[codex:1413553] code=open('BYTECODE_BUNDLE.txt').read(); m=re.search(r'0x([0-9a-fA-F]+)',code); code_bytes=bytes.fromhex(m.group(1))
[codex:1413553]
[codex:1413553] values=[]
[codex:1413553] i=0
[codex:1413553] while i < len(code_bytes):
[codex:1413553] op=code_bytes[i]
[codex:1413553] if 0x60<=op<=0x7f:
[codex:1413553] n=op-0x5f
[codex:1413553] imm=code_bytes[i+1:i+1+n]
[codex:1413553] if op==0x60:
[codex:1413553] values.append((i, imm[0]))
[codex:1413553] i+=1+n
[codex:1413553] else:
[codex:1413553] i+=1
[codex:1413553]
[codex:1413553] # filter between 0x0500 and 0x0800
[codex:1413553] vals=[(off,val) for off,val in values if 0x0500<=off<=0x0800]
[codex:1413553] # show push1 values 0x1b,0x1c,0x1f,0x20,0x24,0x40 etc maybe
[codex:1413553] interesting={0x1b,0x1c,0x1f,0x20,0x24,0x27,0x28,0x2a,0x40}
[codex:1413553] for off,val in vals:
[codex:1413553] if val in interesting:
[codex:1413553] print(hex(off), hex(val))
[codex:1413553] PY" in /tmp/codex-multi-1cr916mq succeeded in 26ms:
[codex:1413553] 0x533 0x20
[codex:1413553] 0x53b 0x40
[codex:1413553] 0x53e 0x20
[codex:1413553] 0x551 0x40
[codex:1413553] 0x554 0x20
[codex:1413553] 0x55d 0x40
[codex:1413553] 0x563 0x20
[codex:1413553] 0x56e 0x40
[codex:1413553] 0x571 0x20
[codex:1413553] 0x57f 0x40
[codex:1413553] 0x582 0x20
[codex:1413553] 0x58b 0x40
[codex:1413553] 0x591 0x20
[codex:1413553] 0x5c1 0x20
[codex:1413553] 0x5c4 0x20
[codex:1413553] 0x5dc 0x20
[codex:1413553] 0x5df 0x20
[codex:1413553] 0x5f7 0x20
[codex:1413553] 0x5fa 0x20
[codex:1413553] 0x5ff 0x40
[codex:1413553]
[codex:1413553] thinking
[codex:1413553] **Analyzing signature verification and call flow**
[codex:1413553] codex
[codex:1413553] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path identified from the provided runtime bytecode bundle.","findings":[]}
[codex:1413553] tokens used
[codex:1413553] 111,538
[codex:1413553] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path identified from the provided runtime bytecode bundle.","findings":[]}
{
"codex": {
"ran_at": "2026-01-03T22:31:25.787640+00:00",
"returncode": 0
},
"summary": "No concrete, exploitable value-extraction path identified from the provided runtime bytecode bundle.",
"raw_final": {
"summary": "No concrete, exploitable value-extraction path identified from the provided runtime bytecode bundle.",
"findings": [],
"no_findings": true
},
"no_findings": true,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x009f 0000000c: JUMPI 0000000d: PUSH0 0000000e: CALLDATALOAD 0000000f: PUSH1 0xe0 00000011: SHR 00000012: DUP1 00000013: PUSH4 0x9e4e7318 00000018: GT 00000019: PUSH2 0x0063 0000001c: JUMPI 0000001d: DUP1 0000001e: PUSH4 0x9e4e7318 00000023: EQ 00000024: PUSH2 0x0227 00000027: JUMPI 00000028: DUP1 00000029: PUSH4 0xa0ab9653 0000002e: EQ 0000002f: PUSH2 0x0251 00000032: JUMPI 00000033: DUP1 00000034: PUSH4 0xa0e67e2b 00000039: EQ 0000003a: PUSH2 0x0279 0000003d: JUMPI 0000003e: DUP1 0000003f: PUSH4 0xaffed0e0 00000044: EQ 00000045: PUSH2 0x02a3 00000048: JUMPI 00000049: DUP1 0000004a: PUSH4 0xba9a91a5 0000004f: EQ 00000050: PUSH2 0x02cd 00000053: JUMPI 00000054: DUP1 00000055: PUSH4 0xf698da25 0000005a: EQ 0000005b: PUSH2 0x02f7 0000005e: JUMPI 0000005f: PUSH2 0x00df 00000062: JUMP 00000063: JUMPDEST 00000064: DUP1 00000065: PUSH4 0x04622c2e 0000006a: EQ 0000006b: PUSH2 0x0143 0000006e: JUMPI 0000006f: DUP1 00000070: PUSH4 0x1279991b 00000075: EQ 00000076: PUSH2 0x016d 00000079: JUMPI 0000007a: DUP1 0000007b: PUSH4 0x2f54bf6e 00000080: EQ 00000081: PUSH2 0x0197 00000084: JUMPI 00000085: DUP1 00000086: PUSH4 0x33330fe0 0000008b: EQ 0000008c: PUSH2 0x01d3 0000008f: JUMPI 00000090: DUP1 00000091: PUSH4 0x42cde4e8 00000096: EQ 00000097: PUSH2 0x01fd 0000009a: JUMPI 0000009b: PUSH2 0x00df 0000009e: JUMP 0000009f: JUMPDEST 000000a0: CALLDATASIZE 000000a1: PUSH2 0x00df 000000a4: JUMPI 000000a5: PUSH32 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c 000000c6: CALLER 000000c7: CALLVALUE 000000c8: PUSH1 0x40 000000ca: MLOAD 000000cb: PUSH2 0x00d5 000000ce: SWAP3 000000cf: SWAP2 000000d0: SWAP1 000000d1: PUSH2 0x09b2 000000d4: JUMP 000000d5: JUMPDEST 000000d6: PUSH1 0x40 000000d8: MLOAD 000000d9: DUP1 000000da: SWAP2 000000db: SUB 000000dc: SWAP1 000000dd: LOG1 000000de: STOP 000000df: JUMPDEST 000000e0: CALLER 000000e1: PUSH0 000000e2: CALLDATALOAD 000000e3: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000 00000104: AND 00000105: CALLVALUE 00000106: PUSH1 0x40 00000108: MLOAD 00000109: PUSH32 0xc46a58f800000000000000000000000000000000000000000000000000000000 0000012a: DUP2 0000012b: MSTORE 0000012c: PUSH1 0x04 0000012e: ADD 0000012f: PUSH2 0x013a 00000132: SWAP4 00000133: SWAP3 00000134: SWAP2 00000135: SWAP1 00000136: PUSH2 0x0a13 00000139: JUMP 0000013a: JUMPDEST 0000013b: PUSH1 0x40 0000013d: MLOAD 0000013e: DUP1 0000013f: SWAP2 00000140: SUB 00000141: SWAP1 00000142: REVERT 00000143: JUMPDEST 00000144: CALLVALUE 00000145: DUP1 00000146: ISZERO 00000147: PUSH2 0x014e 0000014a: JUMPI 0000014b: PUSH0 0000014c: PUSH0 0000014d: REVERT 0000014e: JUMPDEST 0000014f: POP 00000150: PUSH2 0x0157 00000153: PUSH2 0x0321 00000156: JUMP 00000157: JUMPDEST 00000158: PUSH1 0x40 0000015a: MLOAD 0000015b: PUSH2 0x0164 0000015e: SWAP2 0000015f: SWAP1 00000160: PUSH2 0x0a60 00000163: JUMP 00000164: JUMPDEST 00000165: PUSH1 0x40 00000167: MLOAD 00000168: DUP1 00000169: SWAP2 0000016a: SUB 0000016b: SWAP1 0000016c: RETURN 0000016d: JUMPDEST 0000016e: CALLVALUE 0000016f: DUP1 00000170: ISZERO 00000171: PUSH2 0x0178 00000174: JUMPI 00000175: PUSH0 00000176: PUSH0 00000177: REVERT 00000178: JUMPDEST 00000179: POP 0000017a: PUSH2 0x0181 0000017d: PUSH2 0x0347 00000180: JUMP 00000181: JUMPDEST 00000182: PUSH1 0x40 00000184: MLOAD 00000185: PUSH2 0x018e 00000188: SWAP2 00000189: SWAP1 0000018a: PUSH2 0x0a60 0000018d: JUMP 0000018e: JUMPDEST 0000018f: PUSH1 0x40 00000191: MLOAD 00000192: DUP1 00000193: SWAP2 00000194: SUB 00000195: SWAP1 00000196: RETURN 00000197: JUMPDEST 00000198: CALLVALUE 00000199: DUP1 0000019a: ISZERO 0000019b: PUSH2 0x01a2 0000019e: JUMPI 0000019f: PUSH0 000001a0: PUSH0 000001a1: REVERT 000001a2: JUMPDEST 000001a3: POP 000001a4: PUSH2 0x01bd 000001a7: PUSH1 0x04 000001a9: DUP1 000001aa: CALLDATASIZE 000001ab: SUB 000001ac: DUP2 000001ad: ADD 000001ae: SWAP1 000001af: PUSH2 0x01b8 000001b2: SWAP2 000001b3: SWAP1 000001b4: PUSH2 0x0ab4 000001b7: JUMP 000001b8: JUMPDEST 000001b9: PUSH2 0x036d 000001bc: JUMP 000001bd: JUMPDEST 000001be: PUSH1 0x40 000001c0: MLOAD 000001c1: PUSH2 0x01ca 000001c4: SWAP2 000001c5: SWAP1 000001c6: PUSH2 0x0af9 000001c9: JUMP 000001ca: JUMPDEST 000001cb: PUSH1 0x40 000001cd: MLOAD 000001ce: DUP1 000001cf: SWAP2 000001d0: SUB 000001d1: SWAP1 000001d2: RETURN 000001d3: JUMPDEST 000001d4: CALLVALUE 000001d5: DUP1 000001d6: ISZERO 000001d7: PUSH2 0x01de 000001da: JUMPI 000001db: PUSH0 000001dc: PUSH0 000001dd: REVERT 000001de: JUMPDEST 000001df: POP 000001e0: PUSH2 0x01e7 000001e3: PUSH2 0x038a 000001e6: JUMP 000001e7: JUMPDEST 000001e8: PUSH1 0x40 000001ea: MLOAD 000001eb: PUSH2 0x01f4 000001ee: SWAP2 000001ef: SWAP1 000001f0: PUSH2 0x0a60 000001f3: JUMP 000001f4: JUMPDEST 000001f5: PUSH1 0x40 000001f7: MLOAD 000001f8: DUP1 000001f9: SWAP2 000001fa: SUB 000001fb: SWAP1 000001fc: RETURN 000001fd: JUMPDEST 000001fe: CALLVALUE 000001ff: DUP1 00000200: ISZERO 00000201: PUSH2 0x0208 00000204: JUMPI 00000205: PUSH0 00000206: PUSH0 00000207: REVERT 00000208: JUMPDEST 00000209: POP 0000020a: PUSH2 0x0211 0000020d: PUSH2 0x03b0 00000210: JUMP 00000211: JUMPDEST 00000212: PUSH1 0x40 00000214: MLOAD 00000215: PUSH2 0x021e 00000218: SWAP2 00000219: SWAP1 0000021a: PUSH2 0x0b12 0000021d: JUMP 0000021e: JUMPDEST 0000021f: PUSH1 0x40 00000221: MLOAD 00000222: DUP1 00000223: SWAP2 00000224: SUB 00000225: SWAP1 00000226: RETURN 00000227: JUMPDEST 00000228: CALLVALUE 00000229: DUP1 0000022a: ISZERO 0000022b: PUSH2 0x0232 0000022e: JUMPI 0000022f: PUSH0 00000230: PUSH0 00000231: REVERT 00000232: JUMPDEST 00000233: POP 00000234: PUSH2 0x023b 00000237: PUSH2 0x03b6 0000023a: JUMP 0000023b: JUMPDEST 0000023c: PUSH1 0x40 0000023e: MLOAD 0000023f: PUSH2 0x0248 00000242: SWAP2 00000243: SWAP1 00000244: PUSH2 0x0a60 00000247: JUMP 00000248: JUMPDEST 00000249: PUSH1 0x40 0000024b: MLOAD 0000024c: DUP1 0000024d: SWAP2 0000024e: SUB 0000024f: SWAP1 00000250: RETURN 00000251: JUMPDEST 00000252: CALLVALUE 00000253: DUP1 00000254: ISZERO 00000255: PUSH2 0x025c 00000258: JUMPI 00000259: PUSH0 0000025a: PUSH0 0000025b: REVERT 0000025c: JUMPDEST 0000025d: POP 0000025e: PUSH2 0x0277 00000261: PUSH1 0x04 00000263: DUP1 00000264: CALLDATASIZE 00000265: SUB 00000266: DUP2 00000267: ADD 00000268: SWAP1 00000269: PUSH2 0x0272 0000026c: SWAP2 0000026d: SWAP1 0000026e: PUSH2 0x0eb0 00000271: JUMP 00000272: JUMPDEST 00000273: PUSH2 0x03dc 00000276: JUMP 00000277: JUMPDEST 00000278: STOP 00000279: JUMPDEST 0000027a: CALLVALUE 0000027b: DUP1 0000027c: ISZERO 0000027d: PUSH2 0x0284 00000280: JUMPI 00000281: PUSH0 00000282: PUSH0 00000283: REVERT 00000284: JUMPDEST 00000285: POP 00000286: PUSH2 0x028d 00000289: PUSH2 0x0888 0000028c: JUMP 0000028d: JUMPDEST 0000028e: PUSH1 0x40 00000290: MLOAD 00000291: PUSH2 0x029a 00000294: SWAP2 00000295: SWAP1 00000296: PUSH2 0x1088 00000299: JUMP 0000029a: JUMPDEST 0000029b: PUSH1 0x40 0000029d: MLOAD 0000029e: DUP1 0000029f: SWAP2 000002a0: SUB 000002a1: SWAP1 000002a2: RETURN 000002a3: JUMPDEST 000002a4: CALLVALUE 000002a5: DUP1 000002a6: ISZERO 000002a7: PUSH2 0x02ae 000002aa: JUMPI 000002ab: PUSH0 000002ac: PUSH0 000002ad: REVERT 000002ae: JUMPDEST 000002af: POP 000002b0: PUSH2 0x02b7 000002b3: PUSH2 0x0913 000002b6: JUMP 000002b7: JUMPDEST 000002b8: PUSH1 0x40 000002ba: MLOAD 000002bb: PUSH2 0x02c4 000002be: SWAP2 000002bf: SWAP1 000002c0: PUSH2 0x0b12 000002c3: JUMP 000002c4: JUMPDEST 000002c5: PUSH1 0x40 000002c7: MLOAD 000002c8: DUP1 000002c9: SWAP2 000002ca: SUB 000002cb: SWAP1 000002cc: RETURN 000002cd: JUMPDEST 000002ce: CALLVALUE 000002cf: DUP1 000002d0: ISZERO 000002d1: PUSH2 0x02d8 000002d4: JUMPI 000002d5: PUSH0 000002d6: PUSH0 000002d7: REVERT 000002d8: JUMPDEST 000002d9: POP 000002da: PUSH2 0x02e1 000002dd: PUSH2 0x0918 000002e0: JUMP 000002e1: JUMPDEST 000002e2: PUSH1 0x40 000002e4: MLOAD 000002e5: PUSH2 0x02ee 000002e8: SWAP2 000002e9: SWAP1 000002ea: PUSH2 0x0a60 000002ed: JUMP 000002ee: JUMPDEST 000002ef: PUSH1 0x40 000002f1: MLOAD 000002f2: DUP1 000002f3: SWAP2 000002f4: SUB 000002f5: SWAP1 000002f6: RETURN 000002f7: JUMPDEST 000002f8: CALLVALUE 000002f9: DUP1 000002fa: ISZERO 000002fb: PUSH2 0x0302 000002fe: JUMPI 000002ff: PUSH0 00000300: PUSH0 00000301: REVERT 00000302: JUMPDEST 00000303: POP 00000304: PUSH2 0x030b 00000307: PUSH2 0x093e 0000030a: JUMP 0000030b: JUMPDEST 0000030c: PUSH1 0x40 0000030e: MLOAD 0000030f: PUSH2 0x0318 00000312: SWAP2 00000313: SWAP1 00000314: PUSH2 0x0a60 00000317: JUMP 00000318: JUMPDEST 00000319: PUSH1 0x40 0000031b: MLOAD 0000031c: DUP1 0000031d: SWAP2 0000031e: SUB 0000031f: SWAP1 00000320: RETURN 00000321: JUMPDEST 00000322: PUSH32 0x32f3de0d7fc1cdd909bb4d992a94061e800669c611b9d07f137df1f4bb85f097 00000343: PUSH0 00000344: SHL 00000345: DUP2 00000346: JUMP 00000347: JUMPDEST 00000348: PUSH32 0x3ee892349ae4bbe61dce18f95115b5dc02daf49204cc602458cd4c1f540d56d7 00000369: PUSH0 0000036a: SHL 0000036b: DUP2 0000036c: JUMP 0000036d: JUMPDEST 0000036e: PUSH1 0x02 00000370: PUSH1 0x20 00000372: MSTORE 00000373: DUP1 00000374: PUSH0 00000375: MSTORE 00000376: PUSH1 0x40 00000378: PUSH0 00000379: KECCAK256 0000037a: PUSH0 0000037b: SWAP2 0000037c: POP 0000037d: SLOAD 0000037e: SWAP1 0000037f: PUSH2 0x0100 00000382: EXP 00000383: SWAP1 00000384: DIV 00000385: PUSH1 0xff 00000387: AND 00000388: DUP2 00000389: JUMP 0000038a: JUMPDEST 0000038b: PUSH32 0xd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac56472 000003ac: PUSH0 000003ad: SHL 000003ae: DUP2 000003af: JUMP 000003b0: JUMPDEST 000003b1: PUSH1 0x01 000003b3: SLOAD 000003b4: DUP2 000003b5: JUMP 000003b6: JUMPDEST 000003b7: PUSH32 0xc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6 000003d8: PUSH0 000003d9: SHL 000003da: DUP2 000003db: JUMP 000003dc: JUMPDEST 000003dd: PUSH1 0x01 000003df: SLOAD 000003e0: DUP8 000003e1: MLOAD 000003e2: EQ 000003e3: PUSH2 0x0418 000003e6: JUMPI 000003e7: PUSH1 0x40 000003e9: MLOAD 000003ea: PUSH32 0x4be6321b00000000000000000000000000000000000000000000000000000000 0000040b: DUP2 0000040c: MSTORE 0000040d: PUSH1 0x04 0000040f: ADD 00000410: PUSH1 0x40 00000412: MLOAD 00000413: DUP1 00000414: SWAP2 00000415: SUB 00000416: SWAP1 00000417: REVERT 00000418: JUMPDEST 00000419: DUP6 0000041a: MLOAD 0000041b: DUP8 0000041c: MLOAD 0000041d: EQ 0000041e: DUP1 0000041f: ISZERO 00000420: PUSH2 0x042a 00000423: JUMPI 00000424: POP 00000425: DUP8 00000426: MLOAD 00000427: DUP8 00000428: MLOAD 00000429: EQ 0000042a: JUMPDEST 0000042b: PUSH2 0x0460 0000042e: JUMPI 0000042f: PUSH1 0x40 00000431: MLOAD 00000432: PUSH32 0x4be6321b00000000000000000000000000000000000000000000000000000000 00000453: DUP2 00000454: MSTORE 00000455: PUSH1 0x04 00000457: ADD 00000458: PUSH1 0x40 0000045a: MLOAD 0000045b: DUP1 0000045c: SWAP2 0000045d: SUB 0000045e: SWAP1 0000045f: REVERT 00000460: JUMPDEST 00000461: CALLER 00000462: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000477: AND 00000478: DUP3 00000479: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000048e: AND 0000048f: EQ 00000490: DUP1 00000491: PUSH2 0x04c5 00000494: JUMPI 00000495: POP 00000496: PUSH0 00000497: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000004ac: AND 000004ad: DUP3 000004ae: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000004c3: AND 000004c4: EQ 000004c5: JUMPDEST 000004c6: DUP3 000004c7: SWAP1 000004c8: PUSH2 0x0507 000004cb: JUMPI 000004cc: PUSH1 0x40 000004ce: MLOAD 000004cf: PUSH32 0x3221267a00000000000000000000000000000000000000000000000000000000 000004f0: DUP2 000004f1: MSTORE 000004f2: PUSH1 0x04 000004f4: ADD 000004f5: PUSH2 0x04fe 000004f8: SWAP2 000004f9: SWAP1 000004fa: PUSH2 0x10a8 000004fd: JUMP 000004fe: JUMPDEST 000004ff: PUSH1 0x40 00000501: MLOAD 00000502: DUP1 00000503: SWAP2 00000504: SUB 00000505: SWAP1 00000506: REVERT 00000507: JUMPDEST 00000508: POP 00000509: PUSH0 0000050a: PUSH32 0x3ee892349ae4bbe61dce18f95115b5dc02daf49204cc602458cd4c1f540d56d7 0000052b: PUSH0 0000052c: SHL 0000052d: DUP7 0000052e: DUP7 0000052f: DUP7 00000530: DUP1 00000531: MLOAD 00000532: SWAP1 00000533: PUSH1 0x20 00000535: ADD 00000536: KECCAK256 00000537: PUSH0 00000538: SLOAD 00000539: DUP8 0000053a: DUP8 0000053b: PUSH1 0x40 0000053d: MLOAD 0000053e: PUSH1 0x20 00000540: ADD 00000541: PUSH2 0x0550 00000544: SWAP8 00000545: SWAP7 00000546: SWAP6 00000547: SWAP5 00000548: SWAP4 00000549: SWAP3 0000054a: SWAP2 0000054b: SWAP1 0000054c: PUSH2 0x10d0 0000054f: JUMP 00000550: JUMPDEST 00000551: PUSH1 0x40 00000553: MLOAD 00000554: PUSH1 0x20 00000556: DUP2 00000557: DUP4 00000558: SUB 00000559: SUB 0000055a: DUP2 0000055b: MSTORE 0000055c: SWAP1 0000055d: PUSH1 0x40 0000055f: MSTORE 00000560: DUP1 00000561: MLOAD 00000562: SWAP1 00000563: PUSH1 0x20 00000565: ADD 00000566: KECCAK256 00000567: SWAP1 00000568: POP 00000569: PUSH0 0000056a: PUSH1 0x03 0000056c: SLOAD 0000056d: DUP3 0000056e: PUSH1 0x40 00000570: MLOAD 00000571: PUSH1 0x20 00000573: ADD 00000574: PUSH2 0x057e 00000577: SWAP3 00000578: SWAP2 00000579: SWAP1 0000057a: PUSH2 0x11b1 0000057d: JUMP 0000057e: JUMPDEST 0000057f: PUSH1 0x40 00000581: MLOAD 00000582: PUSH1 0x20 00000584: DUP2 00000585: DUP4 00000586: SUB 00000587: SUB 00000588: DUP2 00000589: MSTORE 0000058a: SWAP1 0000058b: PUSH1 0x40 0000058d: MSTORE 0000058e: DUP1 0000058f: MLOAD 00000590: SWAP1 00000591: PUSH1 0x20 00000593: ADD 00000594: KECCAK256 00000595: SWAP1 00000596: POP 00000597: PUSH0 00000598: PUSH0 00000599: SWAP1 0000059a: POP 0000059b: PUSH0 0000059c: PUSH0 0000059d: SWAP1 0000059e: POP 0000059f: JUMPDEST 000005a0: PUSH1 0x01 000005a2: SLOAD 000005a3: DUP2 000005a4: LT 000005a5: ISZERO 000005a6: PUSH2 0x073c 000005a9: JUMPI 000005aa: PUSH0 000005ab: PUSH1 0x01 000005ad: DUP5 000005ae: DUP15 000005af: DUP5 000005b0: DUP2 000005b1: MLOAD 000005b2: DUP2 000005b3: LT 000005b4: PUSH2 0x05c0 000005b7: JUMPI 000005b8: PUSH2 0x05bf 000005bb: PUSH2 0x11e7 000005be: JUMP 000005bf: JUMPDEST 000005c0: JUMPDEST 000005c1: PUSH1 0x20 000005c3: MUL 000005c4: PUSH1 0x20 000005c6: ADD 000005c7: ADD 000005c8: MLOAD 000005c9: DUP15 000005ca: DUP6 000005cb: DUP2 000005cc: MLOAD 000005cd: DUP2 000005ce: LT 000005cf: PUSH2 0x05db 000005d2: JUMPI 000005d3: PUSH2 0x05da 000005d6: PUSH2 0x11e7 000005d9: JUMP 000005da: JUMPDEST 000005db: JUMPDEST 000005dc: PUSH1 0x20 000005de: MUL 000005df: PUSH1 0x20 000005e1: ADD 000005e2: ADD 000005e3: MLOAD 000005e4: DUP15 000005e5: DUP7 000005e6: DUP2 000005e7: MLOAD 000005e8: DUP2 000005e9: LT 000005ea: PUSH2 0x05f6 000005ed: JUMPI 000005ee: PUSH2 0x05f5 000005f1: PUSH2 0x11e7 000005f4: JUMP 000005f5: JUMPDEST 000005f6: JUMPDEST 000005f7: PUSH1 0x20 000005f9: MUL 000005fa: PUSH1 0x20 000005fc: ADD 000005fd: ADD 000005fe: MLOAD 000005ff: PUSH1 0x40 00000601: MLOAD 00000602: PUSH0 00000603: DUP2 00000604: MSTORE 00000605: PUSH1 0x20 00000607: ADD 00000608: PUSH1 0x40 0000060a: MSTORE 0000060b: PUSH1 0x40 0000060d: MLOAD 0000060e: PUSH2 0x061a 00000611: SWAP5 00000612: SWAP4 00000613: SWAP3 00000614: SWAP2 00000615: SWAP1 00000616: PUSH2 0x1223 00000619: JUMP 0000061a: JUMPDEST 0000061b: PUSH1 0x20 0000061d: PUSH1 0x40 0000061f: MLOAD 00000620: PUSH1 0x20 00000622: DUP2 00000623: SUB 00000624: SWAP1 00000625: DUP1 00000626: DUP5 00000627: SUB 00000628: SWAP1 00000629: DUP6 0000062a: GAS 0000062b: STATICCALL 0000062c: ISZERO 0000062d: DUP1 0000062e: ISZERO 0000062f: PUSH2 0x063a 00000632: JUMPI 00000633: RETURNDATASIZE 00000634: PUSH0 00000635: PUSH0 00000636: RETURNDATACOPY 00000637: RETURNDATASIZE 00000638: PUSH0 00000639: REVERT 0000063a: JUMPDEST 0000063b: POP 0000063c: POP 0000063d: POP 0000063e: PUSH1 0x20 00000640: PUSH1 0x40 00000642: MLOAD 00000643: SUB 00000644: MLOAD 00000645: SWAP1 00000646: POP 00000647: DUP3 00000648: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000065d: AND 0000065e: DUP2 0000065f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000674: AND 00000675: GT 00000676: PUSH2 0x06ab 00000679: JUMPI 0000067a: PUSH1 0x40 0000067c: MLOAD 0000067d: PUSH32 0x39d43e8800000000000000000000000000000000000000000000000000000000 0000069e: DUP2 0000069f: MSTORE 000006a0: PUSH1 0x04 000006a2: ADD 000006a3: PUSH1 0x40 000006a5: MLOAD 000006a6: DUP1 000006a7: SWAP2 000006a8: SUB 000006a9: SWAP1 000006aa: REVERT 000006ab: JUMPDEST 000006ac: PUSH1 0x02 000006ae: PUSH0 000006af: DUP3 000006b0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000006c5: AND 000006c6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000006db: AND 000006dc: DUP2 000006dd: MSTORE 000006de: PUSH1 0x20 000006e0: ADD 000006e1: SWAP1 000006e2: DUP2 000006e3: MSTORE 000006e4: PUSH1 0x20 000006e6: ADD 000006e7: PUSH0 000006e8: KECCAK256 000006e9: PUSH0 000006ea: SWAP1 000006eb: SLOAD 000006ec: SWAP1 000006ed: PUSH2 0x0100 000006f0: EXP 000006f1: SWAP1 000006f2: DIV 000006f3: PUSH1 0xff 000006f5: AND 000006f6: PUSH2 0x072b 000006f9: JUMPI 000006fa: PUSH1 0x40 000006fc: MLOAD 000006fd: PUSH32 0x5d652eb100000000000000000000000000000000000000000000000000000000 0000071e: DUP2 0000071f: MSTORE 00000720: PUSH1 0x04 00000722: ADD 00000723: PUSH1 0x40 00000725: MLOAD 00000726: DUP1 00000727: SWAP2 00000728: SUB 00000729: SWAP1 0000072a: REVERT 0000072b: JUMPDEST 0000072c: DUP1 0000072d: SWAP3 0000072e: POP 0000072f: POP 00000730: DUP1 00000731: DUP1 00000732: PUSH1 0x01 00000734: ADD 00000735: SWAP2 00000736: POP 00000737: POP 00000738: PUSH2 0x059f 0000073b: JUMP 0000073c: JUMPDEST 0000073d: POP 0000073e: PUSH1 0x01 00000740: PUSH0 00000741: SLOAD 00000742: PUSH2 0x074b 00000745: SWAP2 00000746: SWAP1 00000747: PUSH2 0x1293 0000074a: JUMP 0000074b: JUMPDEST 0000074c: PUSH0 0000074d: DUP2 0000074e: SWAP1 0000074f: SSTORE 00000750: POP 00000751: PUSH0 00000752: DUP7 00000753: MLOAD 00000754: GT 00000755: ISZERO 00000756: PUSH2 0x0799 00000759: JUMPI 0000075a: PUSH2 0x0762 0000075d: DUP9 0000075e: PUSH2 0x0944 00000761: JUMP 00000762: JUMPDEST 00000763: PUSH2 0x0798 00000766: JUMPI 00000767: PUSH1 0x40 00000769: MLOAD 0000076a: PUSH32 0x27033d6600000000000000000000000000000000000000000000000000000000 0000078b: DUP2 0000078c: MSTORE 0000078d: PUSH1 0x04 0000078f: ADD 00000790: PUSH1 0x40 00000792: MLOAD 00000793: DUP1 00000794: SWAP2 00000795: SUB 00000796: SWAP1 00000797: REVERT 00000798: JUMPDEST 00000799: JUMPDEST 0000079a: PUSH0 0000079b: DUP9 0000079c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007b1: AND 000007b2: DUP9 000007b3: DUP7 000007b4: SWAP1 000007b5: DUP10 000007b6: PUSH1 0x40 000007b8: MLOAD 000007b9: PUSH2 0x07c2 000007bc: SWAP2 000007bd: SWAP1 000007be: PUSH2 0x1318 000007c1: JUMP 000007c2: JUMPDEST 000007c3: PUSH0 000007c4: PUSH1 0x40 000007c6: MLOAD 000007c7: DUP1 000007c8: DUP4 000007c9: SUB 000007ca: DUP2 000007cb: DUP6 000007cc: DUP9 000007cd: DUP9 000007ce: CALL 000007cf: SWAP4 000007d0: POP 000007d1: POP 000007d2: POP 000007d3: POP 000007d4: RETURNDATASIZE 000007d5: DUP1 000007d6: PUSH0 000007d7: DUP2 000007d8: EQ 000007d9: PUSH2 0x07fd 000007dc: JUMPI 000007dd: PUSH1 0x40 000007df: MLOAD 000007e0: SWAP2 000007e1: POP 000007e2: PUSH1 0x1f 000007e4: NOT 000007e5: PUSH1 0x3f 000007e7: RETURNDATASIZE 000007e8: ADD 000007e9: AND 000007ea: DUP3 000007eb: ADD 000007ec: PUSH1 0x40 000007ee: MSTORE 000007ef: RETURNDATASIZE 000007f0: DUP3 000007f1: MSTORE 000007f2: RETURNDATASIZE 000007f3: PUSH0 000007f4: PUSH1 0x20 000007f6: DUP5 000007f7: ADD 000007f8: RETURNDATACOPY 000007f9: PUSH2 0x0802 000007fc: JUMP 000007fd: JUMPDEST 000007fe: PUSH1 0x60 00000800: SWAP2 00000801: POP 00000802: JUMPDEST 00000803: POP 00000804: POP 00000805: SWAP1 00000806: POP 00000807: DUP1 00000808: PUSH2 0x083d 0000080b: JUMPI 0000080c: PUSH1 0x40 0000080e: MLOAD 0000080f: PUSH32 0x75cfdcce00000000000000000000000000000000000000000000000000000000 00000830: DUP2 00000831: MSTORE 00000832: PUSH1 0x04 00000834: ADD 00000835: PUSH1 0x40 00000837: MLOAD 00000838: DUP1 00000839: SWAP2 0000083a: SUB 0000083b: SWAP1 0000083c: REVERT 0000083d: JUMPDEST 0000083e: PUSH32 0x187ae0bfb8619f02a4db1cfef70a54e5722d00d8fcfe6811f1a1f044633ca0a7 0000085f: DUP7 00000860: DUP11 00000861: DUP11 00000862: DUP11 00000863: PUSH1 0x40 00000865: MLOAD 00000866: PUSH2 0x0872 00000869: SWAP5 0000086a: SWAP4 0000086b: SWAP3 0000086c: SWAP2 0000086d: SWAP1 0000086e: PUSH2 0x13d1 00000871: JUMP 00000872: JUMPDEST 00000873: PUSH1 0x40 00000875: MLOAD 00000876: DUP1 00000877: SWAP2 00000878: SUB 00000879: SWAP1 0000087a: LOG1 0000087b: POP 0000087c: POP 0000087d: POP 0000087e: POP 0000087f: POP 00000880: POP 00000881: POP 00000882: POP 00000883: POP 00000884: POP 00000885: POP 00000886: POP 00000887: JUMP 00000888: JUMPDEST 00000889: PUSH1 0x60 0000088b: PUSH1 0x04 0000088d: DUP1 0000088e: SLOAD 0000088f: DUP1 00000890: PUSH1 0x20 00000892: MUL 00000893: PUSH1 0x20 00000895: ADD 00000896: PUSH1 0x40 00000898: MLOAD 00000899: SWAP1 0000089a: DUP2 0000089b: ADD 0000089c: PUSH1 0x40 0000089e: MSTORE 0000089f: DUP1 000008a0: SWAP3 000008a1: SWAP2 000008a2: SWAP1 000008a3: DUP2 000008a4: DUP2 000008a5: MSTORE 000008a6: PUSH1 0x20 000008a8: ADD 000008a9: DUP3 000008aa: DUP1 000008ab: SLOAD 000008ac: DUP1 000008ad: ISZERO 000008ae: PUSH2 0x0909 000008b1: JUMPI 000008b2: PUSH1 0x20 000008b4: MUL 000008b5: DUP3 000008b6: ADD 000008b7: SWAP2 000008b8: SWAP1 000008b9: PUSH0 000008ba: MSTORE 000008bb: PUSH1 0x20 000008bd: PUSH0 000008be: KECCAK256 000008bf: SWAP1 000008c0: JUMPDEST 000008c1: DUP2 000008c2: PUSH0 000008c3: SWAP1 000008c4: SLOAD 000008c5: SWAP1 000008c6: PUSH2 0x0100 000008c9: EXP 000008ca: SWAP1 000008cb: DIV 000008cc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000008e1: AND 000008e2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000008f7: AND 000008f8: DUP2 000008f9: MSTORE 000008fa: PUSH1 0x20 000008fc: ADD 000008fd: SWAP1 000008fe: PUSH1 0x01 00000900: ADD 00000901: SWAP1 00000902: DUP1 00000903: DUP4 00000904: GT 00000905: PUSH2 0x08c0 00000908: JUMPI 00000909: JUMPDEST 0000090a: POP 0000090b: POP 0000090c: POP 0000090d: POP 0000090e: POP 0000090f: SWAP1 00000910: POP 00000911: SWAP1 00000912: JUMP 00000913: JUMPDEST 00000914: PUSH0 00000915: SLOAD 00000916: DUP2 00000917: JUMP 00000918: JUMPDEST 00000919: PUSH32 0x72dc1dc597006ea524d75bd3377c4663827629e52e27fd2169cca6f90f6d1ef9 0000093a: PUSH0 0000093b: SHL 0000093c: DUP2 0000093d: JUMP 0000093e: JUMPDEST 0000093f: PUSH1 0x03 00000941: SLOAD 00000942: DUP2 00000943: JUMP 00000944: JUMPDEST 00000945: PUSH0 00000946: PUSH0 00000947: DUP3 00000948: EXTCODESIZE 00000949: SWAP1 0000094a: POP 0000094b: PUSH0 0000094c: DUP2 0000094d: PUSH4 0xffffffff 00000952: AND 00000953: GT 00000954: SWAP2 00000955: POP 00000956: POP 00000957: SWAP2 00000958: SWAP1 00000959: POP 0000095a: JUMP 0000095b: JUMPDEST 0000095c: PUSH0 0000095d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000972: DUP3 00000973: AND 00000974: SWAP1 00000975: POP 00000976: SWAP2 00000977: SWAP1 00000978: POP 00000979: JUMP 0000097a: JUMPDEST 0000097b: PUSH0 0000097c: PUSH2 0x0984 0000097f: DUP3 00000980: PUSH2 0x095b 00000983: JUMP 00000984: JUMPDEST 00000985: SWAP1 00000986: POP 00000987: SWAP2 00000988: SWAP1 00000989: POP 0000098a: JUMP 0000098b: JUMPDEST 0000098c: PUSH2 0x0994 0000098f: DUP2 00000990: PUSH2 0x097a 00000993: JUMP 00000994: JUMPDEST 00000995: DUP3 00000996: MSTORE 00000997: POP 00000998: POP 00000999: JUMP 0000099a: JUMPDEST 0000099b: PUSH0 0000099c: DUP2 0000099d: SWAP1 0000099e: POP 0000099f: SWAP2 000009a0: SWAP1 000009a1: POP 000009a2: JUMP 000009a3: JUMPDEST 000009a4: PUSH2 0x09ac 000009a7: DUP2 000009a8: PUSH2 0x099a 000009ab: JUMP 000009ac: JUMPDEST 000009ad: DUP3 000009ae: MSTORE 000009af: POP 000009b0: POP 000009b1: JUMP 000009b2: JUMPDEST 000009b3: PUSH0 000009b4: PUSH1 0x40 000009b6: DUP3 000009b7: ADD 000009b8: SWAP1 000009b9: POP 000009ba: PUSH2 0x09c5 000009bd: PUSH0 000009be: DUP4 000009bf: ADD 000009c0: DUP6 000009c1: PUSH2 0x098b 000009c4: JUMP 000009c5: JUMPDEST 000009c6: PUSH2 0x09d2 000009c9: PUSH1 0x20 000009cb: DUP4 000009cc: ADD 000009cd: DUP5 000009ce: PUSH2 0x09a3 000009d1: JUMP 000009d2: JUMPDEST 000009d3: SWAP4 000009d4: SWAP3 000009d5: POP 000009d6: POP 000009d7: POP 000009d8: JUMP 000009d9: JUMPDEST 000009da: PUSH0 000009db: PUSH32 0xffffffff00000000000000000000000000000000000000000000000000000000 000009fc: DUP3 000009fd: AND 000009fe: SWAP1 000009ff: POP 00000a00: SWAP2 00000a01: SWAP1 00000a02: POP 00000a03: JUMP 00000a04: JUMPDEST 00000a05: PUSH2 0x0a0d 00000a08: DUP2 00000a09: PUSH2 0x09d9 00000a0c: JUMP 00000a0d: JUMPDEST 00000a0e: DUP3 00000a0f: MSTORE 00000a10: POP 00000a11: POP 00000a12: JUMP 00000a13: JUMPDEST 00000a14: PUSH0 00000a15: PUSH1 0x60 00000a17: DUP3 00000a18: ADD 00000a19: SWAP1 00000a1a: POP 00000a1b: PUSH2 0x0a26 00000a1e: PUSH0 00000a1f: DUP4 00000a20: ADD 00000a21: DUP7 00000a22: PUSH2 0x098b 00000a25: JUMP 00000a26: JUMPDEST 00000a27: PUSH2 0x0a33 00000a2a: PUSH1 0x20 00000a2c: DUP4 00000a2d: ADD 00000a2e: DUP6 00000a2f: PUSH2 0x0a04 00000a32: JUMP 00000a33: JUMPDEST 00000a34: PUSH2 0x0a40 00000a37: PUSH1 0x40 00000a39: DUP4 00000a3a: ADD 00000a3b: DUP5 00000a3c: PUSH2 0x09a3 00000a3f: JUMP 00000a40: JUMPDEST 00000a41: SWAP5 00000a42: SWAP4 00000a43: POP 00000a44: POP 00000a45: POP 00000a46: POP 00000a47: JUMP 00000a48: JUMPDEST 00000a49: PUSH0 00000a4a: DUP2 00000a4b: SWAP1 00000a4c: POP 00000a4d: SWAP2 00000a4e: SWAP1 00000a4f: POP 00000a50: JUMP 00000a51: JUMPDEST 00000a52: PUSH2 0x0a5a 00000a55: DUP2 00000a56: PUSH2 0x0a48 00000a59: JUMP 00000a5a: JUMPDEST 00000a5b: DUP3 00000a5c: MSTORE 00000a5d: POP 00000a5e: POP 00000a5f: JUMP 00000a60: JUMPDEST 00000a61: PUSH0 00000a62: PUSH1 0x20 00000a64: DUP3 00000a65: ADD 00000a66: SWAP1 00000a67: POP 00000a68: PUSH2 0x0a73 00000a6b: PUSH0 00000a6c: DUP4 00000a6d: ADD 00000a6e: DUP5 00000a6f: PUSH2 0x0a51 00000a72: JUMP 00000a73: JUMPDEST 00000a74: SWAP3 00000a75: SWAP2 00000a76: POP 00000a77: POP 00000a78: JUMP 00000a79: JUMPDEST 00000a7a: PUSH0 00000a7b: PUSH1 0x40 00000a7d: MLOAD 00000a7e: SWAP1 00000a7f: POP 00000a80: SWAP1 00000a81: JUMP 00000a82: JUMPDEST 00000a83: PUSH0 00000a84: PUSH0 00000a85: REVERT 00000a86: JUMPDEST 00000a87: PUSH0 00000a88: PUSH0 00000a89: REVERT 00000a8a: JUMPDEST 00000a8b: PUSH2 0x0a93 00000a8e: DUP2 00000a8f: PUSH2 0x097a 00000a92: JUMP 00000a93: JUMPDEST 00000a94: DUP2 00000a95: EQ 00000a96: PUSH2 0x0a9d 00000a99: JUMPI 00000a9a: PUSH0 00000a9b: PUSH0 00000a9c: REVERT 00000a9d: JUMPDEST 00000a9e: POP 00000a9f: JUMP 00000aa0: JUMPDEST 00000aa1: PUSH0 00000aa2: DUP2 00000aa3: CALLDATALOAD 00000aa4: SWAP1 00000aa5: POP 00000aa6: PUSH2 0x0aae 00000aa9: DUP2 00000aaa: PUSH2 0x0a8a 00000aad: JUMP 00000aae: JUMPDEST 00000aaf: SWAP3 00000ab0: SWAP2 00000ab1: POP 00000ab2: POP 00000ab3: JUMP 00000ab4: JUMPDEST 00000ab5: PUSH0 00000ab6: PUSH1 0x20 00000ab8: DUP3 00000ab9: DUP5 00000aba: SUB 00000abb: SLT 00000abc: ISZERO 00000abd: PUSH2 0x0ac9 00000ac0: JUMPI 00000ac1: PUSH2 0x0ac8 00000ac4: PUSH2 0x0a82 00000ac7: JUMP 00000ac8: JUMPDEST 00000ac9: JUMPDEST 00000aca: PUSH0 00000acb: PUSH2 0x0ad6 00000ace: DUP5 00000acf: DUP3 00000ad0: DUP6 00000ad1: ADD 00000ad2: PUSH2 0x0aa0 00000ad5: JUMP 00000ad6: JUMPDEST 00000ad7: SWAP2 00000ad8: POP 00000ad9: POP 00000ada: SWAP3 00000adb: SWAP2 00000adc: POP 00000add: POP 00000ade: JUMP 00000adf: JUMPDEST 00000ae0: PUSH0 00000ae1: DUP2 00000ae2: ISZERO 00000ae3: ISZERO 00000ae4: SWAP1 00000ae5: POP 00000ae6: SWAP2 00000ae7: SWAP1 00000ae8: POP 00000ae9: JUMP 00000aea: JUMPDEST 00000aeb: PUSH2 0x0af3 00000aee: DUP2 00000aef: PUSH2 0x0adf 00000af2: JUMP 00000af3: JUMPDEST 00000af4: DUP3 00000af5: MSTORE 00000af6: POP 00000af7: POP 00000af8: JUMP 00000af9: JUMPDEST 00000afa: PUSH0 00000afb: PUSH1 0x20 00000afd: DUP3 00000afe: ADD 00000aff: SWAP1 00000b00: POP 00000b01: PUSH2 0x0b0c 00000b04: PUSH0 00000b05: DUP4 00000b06: ADD 00000b07: DUP5 00000b08: PUSH2 0x0aea 00000b0b: JUMP 00000b0c: JUMPDEST 00000b0d: SWAP3 00000b0e: SWAP2 00000b0f: POP 00000b10: POP 00000b11: JUMP 00000b12: JUMPDEST 00000b13: PUSH0 00000b14: PUSH1 0x20 00000b16: DUP3 00000b17: ADD 00000b18: SWAP1 00000b19: POP 00000b1a: PUSH2 0x0b25 00000b1d: PUSH0 00000b1e: DUP4 00000b1f: ADD 00000b20: DUP5 00000b21: PUSH2 0x09a3 00000b24: JUMP 00000b25: JUMPDEST 00000b26: SWAP3 00000b27: SWAP2 00000b28: POP 00000b29: POP 00000b2a: JUMP 00000b2b: JUMPDEST 00000b2c: PUSH0 00000b2d: PUSH0 00000b2e: REVERT 00000b2f: JUMPDEST 00000b30: PUSH0 00000b31: PUSH1 0x1f 00000b33: NOT 00000b34: PUSH1 0x1f 00000b36: DUP4 00000b37: ADD 00000b38: AND 00000b39: SWAP1 00000b3a: POP 00000b3b: SWAP2 00000b3c: SWAP1 00000b3d: POP 00000b3e: JUMP 00000b3f: JUMPDEST 00000b40: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00000b61: PUSH0 00000b62: MSTORE 00000b63: PUSH1 0x41 00000b65: PUSH1 0x04 00000b67: MSTORE 00000b68: PUSH1 0x24 00000b6a: PUSH0 00000b6b: REVERT 00000b6c: JUMPDEST 00000b6d: PUSH2 0x0b75 00000b70: DUP3 00000b71: PUSH2 0x0b2f 00000b74: JUMP 00000b75: JUMPDEST 00000b76: DUP2 00000b77: ADD 00000b78: DUP2 00000b79: DUP2 00000b7a: LT 00000b7b: PUSH8 0xffffffffffffffff 00000b84: DUP3 00000b85: GT 00000b86: OR 00000b87: ISZERO 00000b88: PUSH2 0x0b94 00000b8b: JUMPI 00000b8c: PUSH2 0x0b93 00000b8f: PUSH2 0x0b3f 00000b92: JUMP 00000b93: JUMPDEST 00000b94: JUMPDEST 00000b95: DUP1 00000b96: PUSH1 0x40 00000b98: MSTORE 00000b99: POP 00000b9a: POP 00000b9b: POP 00000b9c: JUMP 00000b9d: JUMPDEST 00000b9e: PUSH0 00000b9f: PUSH2 0x0ba6 00000ba2: PUSH2 0x0a79 00000ba5: JUMP 00000ba6: JUMPDEST 00000ba7: SWAP1 00000ba8: POP 00000ba9: PUSH2 0x0bb2 00000bac: DUP3 00000bad: DUP3 00000bae: PUSH2 0x0b6c 00000bb1: JUMP 00000bb2: JUMPDEST 00000bb3: SWAP2 00000bb4: SWAP1 00000bb5: POP 00000bb6: JUMP 00000bb7: JUMPDEST 00000bb8: PUSH0 00000bb9: PUSH8 0xffffffffffffffff 00000bc2: DUP3 00000bc3: GT 00000bc4: ISZERO 00000bc5: PUSH2 0x0bd1 00000bc8: JUMPI 00000bc9: PUSH2 0x0bd0 00000bcc: PUSH2 0x0b3f 00000bcf: JUMP 00000bd0: JUMPDEST 00000bd1: JUMPDEST 00000bd2: PUSH1 0x20 00000bd4: DUP3 00000bd5: MUL 00000bd6: SWAP1 00000bd7: POP 00000bd8: PUSH1 0x20 00000bda: DUP2 00000bdb: ADD 00000bdc: SWAP1 00000bdd: POP 00000bde: SWAP2 00000bdf: SWAP1 00000be0: POP 00000be1: JUMP 00000be2: JUMPDEST 00000be3: PUSH0 00000be4: PUSH0 00000be5: REVERT 00000be6: JUMPDEST 00000be7: PUSH0 00000be8: PUSH1 0xff 00000bea: DUP3 00000beb: AND 00000bec: SWAP1 00000bed: POP 00000bee: SWAP2 00000bef: SWAP1 00000bf0: POP 00000bf1: JUMP 00000bf2: JUMPDEST 00000bf3: PUSH2 0x0bfb 00000bf6: DUP2 00000bf7: PUSH2 0x0be6 00000bfa: JUMP 00000bfb: JUMPDEST 00000bfc: DUP2 00000bfd: EQ 00000bfe: PUSH2 0x0c05 00000c01: JUMPI 00000c02: PUSH0 00000c03: PUSH0 00000c04: REVERT 00000c05: JUMPDEST 00000c06: POP 00000c07: JUMP 00000c08: JUMPDEST 00000c09: PUSH0 00000c0a: DUP2 00000c0b: CALLDATALOAD 00000c0c: SWAP1 00000c0d: POP 00000c0e: PUSH2 0x0c16 00000c11: DUP2 00000c12: PUSH2 0x0bf2 00000c15: JUMP 00000c16: JUMPDEST 00000c17: SWAP3 00000c18: SWAP2 00000c19: POP 00000c1a: POP 00000c1b: JUMP 00000c1c: JUMPDEST 00000c1d: PUSH0 00000c1e: PUSH2 0x0c2e 00000c21: PUSH2 0x0c29 00000c24: DUP5 00000c25: PUSH2 0x0bb7 00000c28: JUMP 00000c29: JUMPDEST 00000c2a: PUSH2 0x0b9d 00000c2d: JUMP 00000c2e: JUMPDEST 00000c2f: SWAP1 00000c30: POP 00000c31: DUP1 00000c32: DUP4 00000c33: DUP3 00000c34: MSTORE 00000c35: PUSH1 0x20 00000c37: DUP3 00000c38: ADD 00000c39: SWAP1 00000c3a: POP 00000c3b: PUSH1 0x20 00000c3d: DUP5 00000c3e: MUL 00000c3f: DUP4 00000c40: ADD 00000c41: DUP6 00000c42: DUP2 00000c43: GT 00000c44: ISZERO 00000c45: PUSH2 0x0c51 00000c48: JUMPI 00000c49: PUSH2 0x0c50 00000c4c: PUSH2 0x0be2 00000c4f: JUMP 00000c50: JUMPDEST 00000c51: JUMPDEST 00000c52: DUP4 00000c53: JUMPDEST 00000c54: DUP2 00000c55: DUP2 00000c56: LT 00000c57: ISZERO 00000c58: PUSH2 0x0c7a 00000c5b: JUMPI 00000c5c: DUP1 00000c5d: PUSH2 0x0c66 00000c60: DUP9 00000c61: DUP3 00000c62: PUSH2 0x0c08 00000c65: JUMP 00000c66: JUMPDEST 00000c67: DUP5 00000c68: MSTORE 00000c69: PUSH1 0x20 00000c6b: DUP5 00000c6c: ADD 00000c6d: SWAP4 00000c6e: POP 00000c6f: POP 00000c70: PUSH1 0x20 00000c72: DUP2 00000c73: ADD 00000c74: SWAP1 00000c75: POP 00000c76: PUSH2 0x0c53 00000c79: JUMP 00000c7a: JUMPDEST 00000c7b: POP 00000c7c: POP 00000c7d: POP 00000c7e: SWAP4 00000c7f: SWAP3 00000c80: POP 00000c81: POP 00000c82: POP 00000c83: JUMP 00000c84: JUMPDEST 00000c85: PUSH0 00000c86: DUP3 00000c87: PUSH1 0x1f 00000c89: DUP4 00000c8a: ADD 00000c8b: SLT 00000c8c: PUSH2 0x0c98 00000c8f: JUMPI 00000c90: PUSH2 0x0c97 00000c93: PUSH2 0x0b2b 00000c96: JUMP 00000c97: JUMPDEST 00000c98: JUMPDEST 00000c99: DUP2 00000c9a: CALLDATALOAD 00000c9b: PUSH2 0x0ca8 00000c9e: DUP5 00000c9f: DUP3 00000ca0: PUSH1 0x20 00000ca2: DUP7 00000ca3: ADD 00000ca4: PUSH2 0x0c1c 00000ca7: JUMP 00000ca8: JUMPDEST 00000ca9: SWAP2 00000caa: POP 00000cab: POP 00000cac: SWAP3 00000cad: SWAP2 00000cae: POP 00000caf: POP 00000cb0: JUMP 00000cb1: JUMPDEST 00000cb2: PUSH0 00000cb3: PUSH8 0xffffffffffffffff 00000cbc: DUP3 00000cbd: GT 00000cbe: ISZERO 00000cbf: PUSH2 0x0ccb 00000cc2: JUMPI 00000cc3: PUSH2 0x0cca 00000cc6: PUSH2 0x0b3f 00000cc9: JUMP 00000cca: JUMPDEST 00000ccb: JUMPDEST 00000ccc: PUSH1 0x20 00000cce: DUP3 00000ccf: MUL 00000cd0: SWAP1 00000cd1: POP 00000cd2: PUSH1 0x20 00000cd4: DUP2 00000cd5: ADD 00000cd6: SWAP1 00000cd7: POP 00000cd8: SWAP2 00000cd9: SWAP1 00000cda: POP 00000cdb: JUMP 00000cdc: JUMPDEST 00000cdd: PUSH2 0x0ce5 00000ce0: DUP2 00000ce1: PUSH2 0x0a48 00000ce4: JUMP 00000ce5: JUMPDEST 00000ce6: DUP2 00000ce7: EQ 00000ce8: PUSH2 0x0cef 00000ceb: JUMPI 00000cec: PUSH0 00000ced: PUSH0 00000cee: REVERT 00000cef: JUMPDEST 00000cf0: POP 00000cf1: JUMP 00000cf2: JUMPDEST 00000cf3: PUSH0 00000cf4: DUP2 00000cf5: CALLDATALOAD 00000cf6: SWAP1 00000cf7: POP 00000cf8: PUSH2 0x0d00 00000cfb: DUP2 00000cfc: PUSH2 0x0cdc 00000cff: JUMP 00000d00: JUMPDEST 00000d01: SWAP3 00000d02: SWAP2 00000d03: POP 00000d04: POP 00000d05: JUMP 00000d06: JUMPDEST 00000d07: PUSH0 00000d08: PUSH2 0x0d18 00000d0b: PUSH2 0x0d13 00000d0e: DUP5 00000d0f: PUSH2 0x0cb1 00000d12: JUMP 00000d13: JUMPDEST 00000d14: PUSH2 0x0b9d 00000d17: JUMP 00000d18: JUMPDEST 00000d19: SWAP1 00000d1a: POP 00000d1b: DUP1 00000d1c: DUP4 00000d1d: DUP3 00000d1e: MSTORE 00000d1f: PUSH1 0x20 00000d21: DUP3 00000d22: ADD 00000d23: SWAP1 00000d24: POP 00000d25: PUSH1 0x20 00000d27: DUP5 00000d28: MUL 00000d29: DUP4 00000d2a: ADD 00000d2b: DUP6 00000d2c: DUP2 00000d2d: GT 00000d2e: ISZERO 00000d2f: PUSH2 0x0d3b 00000d32: JUMPI 00000d33: PUSH2 0x0d3a 00000d36: PUSH2 0x0be2 00000d39: JUMP 00000d3a: JUMPDEST 00000d3b: JUMPDEST 00000d3c: DUP4 00000d3d: JUMPDEST 00000d3e: DUP2 00000d3f: DUP2 00000d40: LT 00000d41: ISZERO 00000d42: PUSH2 0x0d64 00000d45: JUMPI 00000d46: DUP1 00000d47: PUSH2 0x0d50 00000d4a: DUP9 00000d4b: DUP3 00000d4c: PUSH2 0x0cf2 00000d4f: JUMP 00000d50: JUMPDEST 00000d51: DUP5 00000d52: MSTORE 00000d53: PUSH1 0x20 00000d55: DUP5 00000d56: ADD 00000d57: SWAP4 00000d58: POP 00000d59: POP 00000d5a: PUSH1 0x20 00000d5c: DUP2 00000d5d: ADD 00000d5e: SWAP1 00000d5f: POP 00000d60: PUSH2 0x0d3d 00000d63: JUMP 00000d64: JUMPDEST 00000d65: POP 00000d66: POP 00000d67: POP 00000d68: SWAP4 00000d69: SWAP3 00000d6a: POP 00000d6b: POP 00000d6c: POP 00000d6d: JUMP 00000d6e: JUMPDEST 00000d6f: PUSH0 00000d70: DUP3 00000d71: PUSH1 0x1f 00000d73: DUP4 00000d74: ADD 00000d75: SLT 00000d76: PUSH2 0x0d82 00000d79: JUMPI 00000d7a: PUSH2 0x0d81 00000d7d: PUSH2 0x0b2b 00000d80: JUMP 00000d81: JUMPDEST 00000d82: JUMPDEST 00000d83: DUP2 00000d84: CALLDATALOAD 00000d85: PUSH2 0x0d92 00000d88: DUP5 00000d89: DUP3 00000d8a: PUSH1 0x20 00000d8c: DUP7 00000d8d: ADD 00000d8e: PUSH2 0x0d06 00000d91: JUMP 00000d92: JUMPDEST 00000d93: SWAP2 00000d94: POP 00000d95: POP 00000d96: SWAP3 00000d97: SWAP2 00000d98: POP 00000d99: POP 00000d9a: JUMP 00000d9b: JUMPDEST 00000d9c: PUSH0 00000d9d: PUSH2 0x0da5 00000da0: DUP3 00000da1: PUSH2 0x095b 00000da4: JUMP 00000da5: JUMPDEST 00000da6: SWAP1 00000da7: POP 00000da8: SWAP2 00000da9: SWAP1 00000daa: POP 00000dab: JUMP 00000dac: JUMPDEST 00000dad: PUSH2 0x0db5 00000db0: DUP2 00000db1: PUSH2 0x0d9b 00000db4: JUMP 00000db5: JUMPDEST 00000db6: DUP2 00000db7: EQ 00000db8: PUSH2 0x0dbf 00000dbb: JUMPI 00000dbc: PUSH0 00000dbd: PUSH0 00000dbe: REVERT 00000dbf: JUMPDEST 00000dc0: POP 00000dc1: JUMP 00000dc2: JUMPDEST 00000dc3: PUSH0 00000dc4: DUP2 00000dc5: CALLDATALOAD 00000dc6: SWAP1 00000dc7: POP 00000dc8: PUSH2 0x0dd0 00000dcb: DUP2 00000dcc: PUSH2 0x0dac 00000dcf: JUMP 00000dd0: JUMPDEST 00000dd1: SWAP3 00000dd2: SWAP2 00000dd3: POP 00000dd4: POP 00000dd5: JUMP 00000dd6: JUMPDEST 00000dd7: PUSH2 0x0ddf 00000dda: DUP2 00000ddb: PUSH2 0x099a 00000dde: JUMP 00000ddf: JUMPDEST 00000de0: DUP2 00000de1: EQ 00000de2: PUSH2 0x0de9 00000de5: JUMPI 00000de6: PUSH0 00000de7: PUSH0 00000de8: REVERT 00000de9: JUMPDEST 00000dea: POP 00000deb: JUMP 00000dec: JUMPDEST 00000ded: PUSH0 00000dee: DUP2 00000def: CALLDATALOAD 00000df0: SWAP1 00000df1: POP 00000df2: PUSH2 0x0dfa 00000df5: DUP2 00000df6: PUSH2 0x0dd6 00000df9: JUMP 00000dfa: JUMPDEST 00000dfb: SWAP3 00000dfc: SWAP2 00000dfd: POP 00000dfe: POP 00000dff: JUMP 00000e00: JUMPDEST 00000e01: PUSH0 00000e02: PUSH0 00000e03: REVERT 00000e04: JUMPDEST 00000e05: PUSH0 00000e06: PUSH8 0xffffffffffffffff 00000e0f: DUP3 00000e10: GT 00000e11: ISZERO 00000e12: PUSH2 0x0e1e 00000e15: JUMPI 00000e16: PUSH2 0x0e1d 00000e19: PUSH2 0x0b3f 00000e1c: JUMP 00000e1d: JUMPDEST 00000e1e: JUMPDEST 00000e1f: PUSH2 0x0e27 00000e22: DUP3 00000e23: PUSH2 0x0b2f 00000e26: JUMP 00000e27: JUMPDEST 00000e28: SWAP1 00000e29: POP 00000e2a: PUSH1 0x20 00000e2c: DUP2 00000e2d: ADD 00000e2e: SWAP1 00000e2f: POP 00000e30: SWAP2 00000e31: SWAP1 00000e32: POP 00000e33: JUMP 00000e34: JUMPDEST 00000e35: DUP3 00000e36: DUP2 00000e37: DUP4 00000e38: CALLDATACOPY 00000e39: PUSH0 00000e3a: DUP4 00000e3b: DUP4 00000e3c: ADD 00000e3d: MSTORE 00000e3e: POP 00000e3f: POP 00000e40: POP 00000e41: JUMP 00000e42: JUMPDEST 00000e43: PUSH0 00000e44: PUSH2 0x0e54 00000e47: PUSH2 0x0e4f 00000e4a: DUP5 00000e4b: PUSH2 0x0e04 00000e4e: JUMP 00000e4f: JUMPDEST 00000e50: PUSH2 0x0b9d 00000e53: JUMP 00000e54: JUMPDEST 00000e55: SWAP1 00000e56: POP 00000e57: DUP3 00000e58: DUP2 00000e59: MSTORE 00000e5a: PUSH1 0x20 00000e5c: DUP2 00000e5d: ADD 00000e5e: DUP5 00000e5f: DUP5 00000e60: DUP5 00000e61: ADD 00000e62: GT 00000e63: ISZERO 00000e64: PUSH2 0x0e70 00000e67: JUMPI 00000e68: PUSH2 0x0e6f 00000e6b: PUSH2 0x0e00 00000e6e: JUMP 00000e6f: JUMPDEST 00000e70: JUMPDEST 00000e71: PUSH2 0x0e7b 00000e74: DUP5 00000e75: DUP3 00000e76: DUP6 00000e77: PUSH2 0x0e34 00000e7a: JUMP 00000e7b: JUMPDEST 00000e7c: POP 00000e7d: SWAP4 00000e7e: SWAP3 00000e7f: POP 00000e80: POP 00000e81: POP 00000e82: JUMP 00000e83: JUMPDEST 00000e84: PUSH0 00000e85: DUP3 00000e86: PUSH1 0x1f 00000e88: DUP4 00000e89: ADD 00000e8a: SLT 00000e8b: PUSH2 0x0e97 00000e8e: JUMPI 00000e8f: PUSH2 0x0e96 00000e92: PUSH2 0x0b2b 00000e95: JUMP 00000e96: JUMPDEST 00000e97: JUMPDEST 00000e98: DUP2 00000e99: CALLDATALOAD 00000e9a: PUSH2 0x0ea7 00000e9d: DUP5 00000e9e: DUP3 00000e9f: PUSH1 0x20 00000ea1: DUP7 00000ea2: ADD 00000ea3: PUSH2 0x0e42 00000ea6: JUMP 00000ea7: JUMPDEST 00000ea8: SWAP2 00000ea9: POP 00000eaa: POP 00000eab: SWAP3 00000eac: SWAP2 00000ead: POP 00000eae: POP 00000eaf: JUMP 00000eb0: JUMPDEST 00000eb1: PUSH0 00000eb2: PUSH0 00000eb3: PUSH0 00000eb4: PUSH0 00000eb5: PUSH0 00000eb6: PUSH0 00000eb7: PUSH0 00000eb8: PUSH0 00000eb9: PUSH2 0x0100 00000ebc: DUP10 00000ebd: DUP12 00000ebe: SUB 00000ebf: SLT 00000ec0: ISZERO 00000ec1: PUSH2 0x0ecd 00000ec4: JUMPI 00000ec5: PUSH2 0x0ecc 00000ec8: PUSH2 0x0a82 00000ecb: JUMP 00000ecc: JUMPDEST 00000ecd: JUMPDEST 00000ece: PUSH0 00000ecf: DUP10 00000ed0: ADD 00000ed1: CALLDATALOAD 00000ed2: PUSH8 0xffffffffffffffff 00000edb: DUP2 00000edc: GT 00000edd: ISZERO 00000ede: PUSH2 0x0eea 00000ee1: JUMPI 00000ee2: PUSH2 0x0ee9 00000ee5: PUSH2 0x0a86 00000ee8: JUMP 00000ee9: JUMPDEST 00000eea: JUMPDEST 00000eeb: PUSH2 0x0ef6 00000eee: DUP12 00000eef: DUP3 00000ef0: DUP13 00000ef1: ADD 00000ef2: PUSH2 0x0c84 00000ef5: JUMP 00000ef6: JUMPDEST 00000ef7: SWAP9 00000ef8: POP 00000ef9: POP 00000efa: PUSH1 0x20 00000efc: DUP10 00000efd: ADD 00000efe: CALLDATALOAD 00000eff: PUSH8 0xffffffffffffffff 00000f08: DUP2 00000f09: GT 00000f0a: ISZERO 00000f0b: PUSH2 0x0f17 00000f0e: JUMPI 00000f0f: PUSH2 0x0f16 00000f12: PUSH2 0x0a86 00000f15: JUMP 00000f16: JUMPDEST 00000f17: JUMPDEST 00000f18: PUSH2 0x0f23 00000f1b: DUP12 00000f1c: DUP3 00000f1d: DUP13 00000f1e: ADD 00000f1f: PUSH2 0x0d6e 00000f22: JUMP 00000f23: JUMPDEST 00000f24: SWAP8 00000f25: POP 00000f26: POP 00000f27: PUSH1 0x40 00000f29: DUP10 00000f2a: ADD 00000f2b: CALLDATALOAD 00000f2c: PUSH8 0xffffffffffffffff 00000f35: DUP2 00000f36: GT 00000f37: ISZERO 00000f38: PUSH2 0x0f44 00000f3b: JUMPI 00000f3c: PUSH2 0x0f43 00000f3f: PUSH2 0x0a86 00000f42: JUMP 00000f43: JUMPDEST 00000f44: JUMPDEST 00000f45: PUSH2 0x0f50 00000f48: DUP12 00000f49: DUP3 00000f4a: DUP13 00000f4b: ADD 00000f4c: PUSH2 0x0d6e 00000f4f: JUMP 00000f50: JUMPDEST 00000f51: SWAP7 00000f52: POP 00000f53: POP 00000f54: PUSH1 0x60 00000f56: PUSH2 0x0f61 00000f59: DUP12 00000f5a: DUP3 00000f5b: DUP13 00000f5c: ADD 00000f5d: PUSH2 0x0dc2 00000f60: JUMP 00000f61: JUMPDEST 00000f62: SWAP6 00000f63: POP 00000f64: POP 00000f65: PUSH1 0x80 00000f67: PUSH2 0x0f72 00000f6a: DUP12 00000f6b: DUP3 00000f6c: DUP13 00000f6d: ADD 00000f6e: PUSH2 0x0dec 00000f71: JUMP 00000f72: JUMPDEST 00000f73: SWAP5 00000f74: POP 00000f75: POP 00000f76: PUSH1 0xa0 00000f78: DUP10 00000f79: ADD 00000f7a: CALLDATALOAD 00000f7b: PUSH8 0xffffffffffffffff 00000f84: DUP2 00000f85: GT 00000f86: ISZERO 00000f87: PUSH2 0x0f93 00000f8a: JUMPI 00000f8b: PUSH2 0x0f92 00000f8e: PUSH2 0x0a86 00000f91: JUMP 00000f92: JUMPDEST 00000f93: JUMPDEST 00000f94: PUSH2 0x0f9f 00000f97: DUP12 00000f98: DUP3 00000f99: DUP13 00000f9a: ADD 00000f9b: PUSH2 0x0e83 00000f9e: JUMP 00000f9f: JUMPDEST 00000fa0: SWAP4 00000fa1: POP 00000fa2: POP 00000fa3: PUSH1 0xc0 00000fa5: PUSH2 0x0fb0 00000fa8: DUP12 00000fa9: DUP3 00000faa: DUP13 00000fab: ADD 00000fac: PUSH2 0x0aa0 00000faf: JUMP 00000fb0: JUMPDEST 00000fb1: SWAP3 00000fb2: POP 00000fb3: POP 00000fb4: PUSH1 0xe0 00000fb6: PUSH2 0x0fc1 00000fb9: DUP12 00000fba: DUP3 00000fbb: DUP13 00000fbc: ADD 00000fbd: PUSH2 0x0dec 00000fc0: JUMP 00000fc1: JUMPDEST 00000fc2: SWAP2 00000fc3: POP 00000fc4: POP 00000fc5: SWAP3 00000fc6: SWAP6 00000fc7: SWAP9 00000fc8: POP 00000fc9: SWAP3 00000fca: SWAP6 00000fcb: SWAP9 00000fcc: SWAP1 00000fcd: SWAP4 00000fce: SWAP7 00000fcf: POP 00000fd0: JUMP 00000fd1: JUMPDEST 00000fd2: PUSH0 00000fd3: DUP2 00000fd4: MLOAD 00000fd5: SWAP1 00000fd6: POP 00000fd7: SWAP2 00000fd8: SWAP1 00000fd9: POP 00000fda: JUMP 00000fdb: JUMPDEST 00000fdc: PUSH0 00000fdd: DUP3 00000fde: DUP3 00000fdf: MSTORE 00000fe0: PUSH1 0x20 00000fe2: DUP3 00000fe3: ADD 00000fe4: SWAP1 00000fe5: POP 00000fe6: SWAP3 00000fe7: SWAP2 00000fe8: POP 00000fe9: POP 00000fea: JUMP 00000feb: JUMPDEST 00000fec: PUSH0 00000fed: DUP2 00000fee: SWAP1 00000fef: POP 00000ff0: PUSH1 0x20 00000ff2: DUP3 00000ff3: ADD 00000ff4: SWAP1 00000ff5: POP 00000ff6: SWAP2 00000ff7: SWAP1 00000ff8: POP 00000ff9: JUMP 00000ffa: JUMPDEST 00000ffb: PUSH2 0x1003 00000ffe: DUP2 00000fff: PUSH2 0x097a 00001002: JUMP 00001003: JUMPDEST 00001004: DUP3 00001005: MSTORE 00001006: POP 00001007: POP 00001008: JUMP 00001009: JUMPDEST 0000100a: PUSH0 0000100b: PUSH2 0x1014 0000100e: DUP4 0000100f: DUP4 00001010: PUSH2 0x0ffa 00001013: JUMP 00001014: JUMPDEST 00001015: PUSH1 0x20 00001017: DUP4 00001018: ADD 00001019: SWAP1 0000101a: POP 0000101b: SWAP3 0000101c: SWAP2 0000101d: POP 0000101e: POP 0000101f: JUMP 00001020: JUMPDEST 00001021: PUSH0 00001022: PUSH1 0x20 00001024: DUP3 00001025: ADD 00001026: SWAP1 00001027: POP 00001028: SWAP2 00001029: SWAP1 0000102a: POP 0000102b: JUMP 0000102c: JUMPDEST 0000102d: PUSH0 0000102e: PUSH2 0x1036 00001031: DUP3 00001032: PUSH2 0x0fd1 00001035: JUMP 00001036: JUMPDEST 00001037: PUSH2 0x1040 0000103a: DUP2 0000103b: DUP6 0000103c: PUSH2 0x0fdb 0000103f: JUMP 00001040: JUMPDEST 00001041: SWAP4 00001042: POP 00001043: PUSH2 0x104b 00001046: DUP4 00001047: PUSH2 0x0feb 0000104a: JUMP 0000104b: JUMPDEST 0000104c: DUP1 0000104d: PUSH0 0000104e: JUMPDEST 0000104f: DUP4 00001050: DUP2 00001051: LT 00001052: ISZERO 00001053: PUSH2 0x107b 00001056: JUMPI 00001057: DUP2 00001058: MLOAD 00001059: PUSH2 0x1062 0000105c: DUP9 0000105d: DUP3 0000105e: PUSH2 0x1009 00001061: JUMP 00001062: JUMPDEST 00001063: SWAP8 00001064: POP 00001065: PUSH2 0x106d 00001068: DUP4 00001069: PUSH2 0x1020 0000106c: JUMP 0000106d: JUMPDEST 0000106e: SWAP3 0000106f: POP 00001070: POP 00001071: PUSH1 0x01 00001073: DUP2 00001074: ADD 00001075: SWAP1 00001076: POP 00001077: PUSH2 0x104e 0000107a: JUMP 0000107b: JUMPDEST 0000107c: POP 0000107d: DUP6 0000107e: SWAP4 0000107f: POP 00001080: POP 00001081: POP 00001082: POP 00001083: SWAP3 00001084: SWAP2 00001085: POP 00001086: POP 00001087: JUMP 00001088: JUMPDEST 00001089: PUSH0 0000108a: PUSH1 0x20 0000108c: DUP3 0000108d: ADD 0000108e: SWAP1 0000108f: POP 00001090: DUP2 00001091: DUP2 00001092: SUB 00001093: PUSH0 00001094: DUP4 00001095: ADD 00001096: MSTORE 00001097: PUSH2 0x10a0 0000109a: DUP2 0000109b: DUP5 0000109c: PUSH2 0x102c 0000109f: JUMP 000010a0: JUMPDEST 000010a1: SWAP1 000010a2: POP 000010a3: SWAP3 000010a4: SWAP2 000010a5: POP 000010a6: POP 000010a7: JUMP 000010a8: JUMPDEST 000010a9: PUSH0 000010aa: PUSH1 0x20 000010ac: DUP3 000010ad: ADD 000010ae: SWAP1 000010af: POP 000010b0: PUSH2 0x10bb 000010b3: PUSH0 000010b4: DUP4 000010b5: ADD 000010b6: DUP5 000010b7: PUSH2 0x098b 000010ba: JUMP 000010bb: JUMPDEST 000010bc: SWAP3 000010bd: SWAP2 000010be: POP 000010bf: POP 000010c0: JUMP 000010c1: JUMPDEST 000010c2: PUSH2 0x10ca 000010c5: DUP2 000010c6: PUSH2 0x0d9b 000010c9: JUMP 000010ca: JUMPDEST 000010cb: DUP3 000010cc: MSTORE 000010cd: POP 000010ce: POP 000010cf: JUMP 000010d0: JUMPDEST 000010d1: PUSH0 000010d2: PUSH1 0xe0 000010d4: DUP3 000010d5: ADD 000010d6: SWAP1 000010d7: POP 000010d8: PUSH2 0x10e3 000010db: PUSH0 000010dc: DUP4 000010dd: ADD 000010de: DUP11 000010df: PUSH2 0x0a51 000010e2: JUMP 000010e3: JUMPDEST 000010e4: PUSH2 0x10f0 000010e7: PUSH1 0x20 000010e9: DUP4 000010ea: ADD 000010eb: DUP10 000010ec: PUSH2 0x10c1 000010ef: JUMP 000010f0: JUMPDEST 000010f1: PUSH2 0x10fd 000010f4: PUSH1 0x40 000010f6: DUP4 000010f7: ADD 000010f8: DUP9 000010f9: PUSH2 0x09a3 000010fc: JUMP 000010fd: JUMPDEST 000010fe: PUSH2 0x110a 00001101: PUSH1 0x60 00001103: DUP4 00001104: ADD 00001105: DUP8 00001106: PUSH2 0x0a51 00001109: JUMP 0000110a: JUMPDEST 0000110b: PUSH2 0x1117 0000110e: PUSH1 0x80 00001110: DUP4 00001111: ADD 00001112: DUP7 00001113: PUSH2 0x09a3 00001116: JUMP 00001117: JUMPDEST 00001118: PUSH2 0x1124 0000111b: PUSH1 0xa0 0000111d: DUP4 0000111e: ADD 0000111f: DUP6 00001120: PUSH2 0x098b 00001123: JUMP 00001124: JUMPDEST 00001125: PUSH2 0x1131 00001128: PUSH1 0xc0 0000112a: DUP4 0000112b: ADD 0000112c: DUP5 0000112d: PUSH2 0x09a3 00001130: JUMP 00001131: JUMPDEST 00001132: SWAP9 00001133: SWAP8 00001134: POP 00001135: POP 00001136: POP 00001137: POP 00001138: POP 00001139: POP 0000113a: POP 0000113b: POP 0000113c: JUMP 0000113d: JUMPDEST 0000113e: PUSH0 0000113f: DUP2 00001140: SWAP1 00001141: POP 00001142: SWAP3 00001143: SWAP2 00001144: POP 00001145: POP 00001146: JUMP 00001147: JUMPDEST 00001148: PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 00001169: PUSH0 0000116a: DUP3 0000116b: ADD 0000116c: MSTORE 0000116d: POP 0000116e: JUMP 0000116f: JUMPDEST 00001170: PUSH0 00001171: PUSH2 0x117b 00001174: PUSH1 0x02 00001176: DUP4 00001177: PUSH2 0x113d 0000117a: JUMP 0000117b: JUMPDEST 0000117c: SWAP2 0000117d: POP 0000117e: PUSH2 0x1186 00001181: DUP3 00001182: PUSH2 0x1147 00001185: JUMP 00001186: JUMPDEST 00001187: PUSH1 0x02 00001189: DUP3 0000118a: ADD 0000118b: SWAP1 0000118c: POP 0000118d: SWAP2 0000118e: SWAP1 0000118f: POP 00001190: JUMP 00001191: JUMPDEST 00001192: PUSH0 00001193: DUP2 00001194: SWAP1 00001195: POP 00001196: SWAP2 00001197: SWAP1 00001198: POP 00001199: JUMP 0000119a: JUMPDEST 0000119b: PUSH2 0x11ab 0000119e: PUSH2 0x11a6 000011a1: DUP3 000011a2: PUSH2 0x0a48 000011a5: JUMP 000011a6: JUMPDEST 000011a7: PUSH2 0x1191 000011aa: JUMP 000011ab: JUMPDEST 000011ac: DUP3 000011ad: MSTORE 000011ae: POP 000011af: POP 000011b0: JUMP 000011b1: JUMPDEST 000011b2: PUSH0 000011b3: PUSH2 0x11bb 000011b6: DUP3 000011b7: PUSH2 0x116f 000011ba: JUMP 000011bb: JUMPDEST 000011bc: SWAP2 000011bd: POP 000011be: PUSH2 0x11c7 000011c1: DUP3 000011c2: DUP6 000011c3: PUSH2 0x119a 000011c6: JUMP 000011c7: JUMPDEST 000011c8: PUSH1 0x20 000011ca: DUP3 000011cb: ADD 000011cc: SWAP2 000011cd: POP 000011ce: PUSH2 0x11d7 000011d1: DUP3 000011d2: DUP5 000011d3: PUSH2 0x119a 000011d6: JUMP 000011d7: JUMPDEST 000011d8: PUSH1 0x20 000011da: DUP3 000011db: ADD 000011dc: SWAP2 000011dd: POP 000011de: DUP2 000011df: SWAP1 000011e0: POP 000011e1: SWAP4 000011e2: SWAP3 000011e3: POP 000011e4: POP 000011e5: POP 000011e6: JUMP 000011e7: JUMPDEST 000011e8: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00001209: PUSH0 0000120a: MSTORE 0000120b: PUSH1 0x32 0000120d: PUSH1 0x04 0000120f: MSTORE 00001210: PUSH1 0x24 00001212: PUSH0 00001213: REVERT 00001214: JUMPDEST 00001215: PUSH2 0x121d 00001218: DUP2 00001219: PUSH2 0x0be6 0000121c: JUMP 0000121d: JUMPDEST 0000121e: DUP3 0000121f: MSTORE 00001220: POP 00001221: POP 00001222: JUMP 00001223: JUMPDEST 00001224: PUSH0 00001225: PUSH1 0x80 00001227: DUP3 00001228: ADD 00001229: SWAP1 0000122a: POP 0000122b: PUSH2 0x1236 0000122e: PUSH0 0000122f: DUP4 00001230: ADD 00001231: DUP8 00001232: PUSH2 0x0a51 00001235: JUMP 00001236: JUMPDEST 00001237: PUSH2 0x1243 0000123a: PUSH1 0x20 0000123c: DUP4 0000123d: ADD 0000123e: DUP7 0000123f: PUSH2 0x1214 00001242: JUMP 00001243: JUMPDEST 00001244: PUSH2 0x1250 00001247: PUSH1 0x40 00001249: DUP4 0000124a: ADD 0000124b: DUP6 0000124c: PUSH2 0x0a51 0000124f: JUMP 00001250: JUMPDEST 00001251: PUSH2 0x125d 00001254: PUSH1 0x60 00001256: DUP4 00001257: ADD 00001258: DUP5 00001259: PUSH2 0x0a51 0000125c: JUMP 0000125d: JUMPDEST 0000125e: SWAP6 0000125f: SWAP5 00001260: POP 00001261: POP 00001262: POP 00001263: POP 00001264: POP 00001265: JUMP 00001266: JUMPDEST 00001267: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00001288: PUSH0 00001289: MSTORE 0000128a: PUSH1 0x11 0000128c: PUSH1 0x04 0000128e: MSTORE 0000128f: PUSH1 0x24 00001291: PUSH0 00001292: REVERT 00001293: JUMPDEST 00001294: PUSH0 00001295: PUSH2 0x129d 00001298: DUP3 00001299: PUSH2 0x099a 0000129c: JUMP 0000129d: JUMPDEST 0000129e: SWAP2 0000129f: POP 000012a0: PUSH2 0x12a8 000012a3: DUP4 000012a4: PUSH2 0x099a 000012a7: JUMP 000012a8: JUMPDEST 000012a9: SWAP3 000012aa: POP 000012ab: DUP3 000012ac: DUP3 000012ad: ADD 000012ae: SWAP1 000012af: POP 000012b0: DUP1 000012b1: DUP3 000012b2: GT 000012b3: ISZERO 000012b4: PUSH2 0x12c0 000012b7: JUMPI 000012b8: PUSH2 0x12bf 000012bb: PUSH2 0x1266 000012be: JUMP 000012bf: JUMPDEST 000012c0: JUMPDEST 000012c1: SWAP3 000012c2: SWAP2 000012c3: POP 000012c4: POP 000012c5: JUMP 000012c6: JUMPDEST 000012c7: PUSH0 000012c8: DUP2 000012c9: MLOAD 000012ca: SWAP1 000012cb: POP 000012cc: SWAP2 000012cd: SWAP1 000012ce: POP 000012cf: JUMP 000012d0: JUMPDEST 000012d1: PUSH0 000012d2: DUP2 000012d3: SWAP1 000012d4: POP 000012d5: SWAP3 000012d6: SWAP2 000012d7: POP 000012d8: POP 000012d9: JUMP 000012da: JUMPDEST 000012db: DUP3 000012dc: DUP2 000012dd: DUP4 000012de: MCOPY 000012df: PUSH0 000012e0: DUP4 000012e1: DUP4 000012e2: ADD 000012e3: MSTORE 000012e4: POP 000012e5: POP 000012e6: POP 000012e7: JUMP 000012e8: JUMPDEST 000012e9: PUSH0 000012ea: PUSH2 0x12f2 000012ed: DUP3 000012ee: PUSH2 0x12c6 000012f1: JUMP 000012f2: JUMPDEST 000012f3: PUSH2 0x12fc 000012f6: DUP2 000012f7: DUP6 000012f8: PUSH2 0x12d0 000012fb: JUMP 000012fc: JUMPDEST 000012fd: SWAP4 000012fe: POP 000012ff: PUSH2 0x130c 00001302: DUP2 00001303: DUP6 00001304: PUSH1 0x20 00001306: DUP7 00001307: ADD 00001308: PUSH2 0x12da 0000130b: JUMP 0000130c: JUMPDEST 0000130d: DUP1 0000130e: DUP5 0000130f: ADD 00001310: SWAP2 00001311: POP 00001312: POP 00001313: SWAP3 00001314: SWAP2 00001315: POP 00001316: POP 00001317: JUMP 00001318: JUMPDEST 00001319: PUSH0 0000131a: PUSH2 0x1323 0000131d: DUP3 0000131e: DUP5 0000131f: PUSH2 0x12e8 00001322: JUMP 00001323: JUMPDEST 00001324: SWAP2 00001325: POP 00001326: DUP2 00001327: SWAP1 00001328: POP 00001329: SWAP3 0000132a: SWAP2 0000132b: POP 0000132c: POP 0000132d: JUMP 0000132e: JUMPDEST 0000132f: PUSH0 00001330: DUP2 00001331: SWAP1 00001332: POP 00001333: SWAP2 00001334: SWAP1 00001335: POP 00001336: JUMP 00001337: JUMPDEST 00001338: PUSH0 00001339: PUSH2 0x1351 0000133c: PUSH2 0x134c 0000133f: PUSH2 0x1347 00001342: DUP5 00001343: PUSH2 0x095b 00001346: JUMP 00001347: JUMPDEST 00001348: PUSH2 0x132e 0000134b: JUMP 0000134c: JUMPDEST 0000134d: PUSH2 0x095b 00001350: JUMP 00001351: JUMPDEST 00001352: SWAP1 00001353: POP 00001354: SWAP2 00001355: SWAP1 00001356: POP 00001357: JUMP 00001358: JUMPDEST 00001359: PUSH0 0000135a: PUSH2 0x1362 0000135d: DUP3 0000135e: PUSH2 0x1337 00001361: JUMP 00001362: JUMPDEST 00001363: SWAP1 00001364: POP 00001365: SWAP2 00001366: SWAP1 00001367: POP 00001368: JUMP 00001369: JUMPDEST 0000136a: PUSH0 0000136b: PUSH2 0x1373 0000136e: DUP3 0000136f: PUSH2 0x1358 00001372: JUMP 00001373: JUMPDEST 00001374: SWAP1 00001375: POP 00001376: SWAP2 00001377: SWAP1 00001378: POP 00001379: JUMP 0000137a: JUMPDEST 0000137b: PUSH2 0x1383 0000137e: DUP2 0000137f: PUSH2 0x1369 00001382: JUMP 00001383: JUMPDEST 00001384: DUP3 00001385: MSTORE 00001386: POP 00001387: POP 00001388: JUMP 00001389: JUMPDEST 0000138a: PUSH0 0000138b: DUP3 0000138c: DUP3 0000138d: MSTORE 0000138e: PUSH1 0x20 00001390: DUP3 00001391: ADD 00001392: SWAP1 00001393: POP 00001394: SWAP3 00001395: SWAP2 00001396: POP 00001397: POP 00001398: JUMP 00001399: JUMPDEST 0000139a: PUSH0 0000139b: PUSH2 0x13a3 0000139e: DUP3 0000139f: PUSH2 0x12c6 000013a2: JUMP 000013a3: JUMPDEST 000013a4: PUSH2 0x13ad 000013a7: DUP2 000013a8: DUP6 000013a9: PUSH2 0x1389 000013ac: JUMP 000013ad: JUMPDEST 000013ae: SWAP4 000013af: POP 000013b0: PUSH2 0x13bd 000013b3: DUP2 000013b4: DUP6 000013b5: PUSH1 0x20 000013b7: DUP7 000013b8: ADD 000013b9: PUSH2 0x12da 000013bc: JUMP 000013bd: JUMPDEST 000013be: PUSH2 0x13c6 000013c1: DUP2 000013c2: PUSH2 0x0b2f 000013c5: JUMP 000013c6: JUMPDEST 000013c7: DUP5 000013c8: ADD 000013c9: SWAP2 000013ca: POP 000013cb: POP 000013cc: SWAP3 000013cd: SWAP2 000013ce: POP 000013cf: POP 000013d0: JUMP 000013d1: JUMPDEST 000013d2: PUSH0 000013d3: PUSH1 0x80 000013d5: DUP3 000013d6: ADD 000013d7: SWAP1 000013d8: POP 000013d9: PUSH2 0x13e4 000013dc: PUSH0 000013dd: DUP4 000013de: ADD 000013df: DUP8 000013e0: PUSH2 0x098b 000013e3: JUMP 000013e4: JUMPDEST 000013e5: PUSH2 0x13f1 000013e8: PUSH1 0x20 000013ea: DUP4 000013eb: ADD 000013ec: DUP7 000013ed: PUSH2 0x137a 000013f0: JUMP 000013f1: JUMPDEST 000013f2: PUSH2 0x13fe 000013f5: PUSH1 0x40 000013f7: DUP4 000013f8: ADD 000013f9: DUP6 000013fa: PUSH2 0x09a3 000013fd: JUMP 000013fe: JUMPDEST 000013ff: DUP2 00001400: DUP2 00001401: SUB 00001402: PUSH1 0x60 00001404: DUP4 00001405: ADD 00001406: MSTORE 00001407: PUSH2 0x1410 0000140a: DUP2 0000140b: DUP5 0000140c: PUSH2 0x1399 0000140f: JUMP 00001410: JUMPDEST 00001411: SWAP1 00001412: POP 00001413: SWAP6 00001414: SWAP5 00001415: POP 00001416: POP 00001417: POP 00001418: POP 00001419: POP 0000141a: JUMP 0000141b: INVALID 0000141c: LOG2 0000141d: PUSH5 0x6970667358 00001423: UNKNOWN(0x22) 00001424: SLT 00001425: KECCAK256 00001426: SHR 00001427: SHR 00001428: POP 00001429: ISZERO 0000142a: UNKNOWN(0x29) 0000142b: UNKNOWN(0xF9) 0000142c: DUP7 0000142d: UNKNOWN(0xE5) 0000142e: UNKNOWN(0xB3) 0000142f: PUSH4 0x882530da 00001434: UNKNOWN(0x2C) 00001435: UNKNOWN(0x26) 00001436: RETURNDATASIZE 00001437: PUSH30
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0x3eda19de8ceb41aa099553469200eff7e9318f3885ab219ea940ada9ec73ed2e
call_targets:
0xe99127b5f02e4840c02688d3bba4cb051bcdd47d
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x3eda19de8ceb41aa099553469200eff7e9318f3885ab219ea940ada9ec73ed2e",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xe99127b5f02e4840c02688d3bba4cb051bcdd47d"
],
"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": "0x9e4e7318",
"selector": "0x9e4e7318",
"calldata_variants": [
"0x9e4e7318",
"0x9e4e73180000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa0ab9653",
"selector": "0xa0ab9653",
"calldata_variants": [
"0xa0ab9653",
"0xa0ab96530000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa0e67e2b",
"selector": "0xa0e67e2b",
"calldata_variants": [
"0xa0e67e2b",
"0xa0e67e2b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xaffed0e0",
"selector": "0xaffed0e0",
"calldata_variants": [
"0xaffed0e0",
"0xaffed0e00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xba9a91a5",
"selector": "0xba9a91a5",
"calldata_variants": [
"0xba9a91a5",
"0xba9a91a50000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf698da25",
"selector": "0xf698da25",
"calldata_variants": [
"0xf698da25",
"0xf698da250000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x04622c2e",
"selector": "0x04622c2e",
"calldata_variants": [
"0x04622c2e",
"0x04622c2e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x1279991b",
"selector": "0x1279991b",
"calldata_variants": [
"0x1279991b",
"0x1279991b0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1998,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 1,
"guards_detected": [],
"untrusted_call_count": 1
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0x3eda19de8ceb41aa099553469200eff7e9318f3885ab219ea940ada9ec73ed2e
call_targets:
0xe99127b5f02e4840c02688d3bba4cb051bcdd47d
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x3eda19de8ceb41aa099553469200eff7e9318f3885ab219ea940ada9ec73ed2e",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xe99127b5f02e4840c02688d3bba4cb051bcdd47d"
],
"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": "0x9e4e7318",
"selector": "0x9e4e7318",
"calldata_variants": [
"0x9e4e7318",
"0x9e4e73180000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa0ab9653",
"selector": "0xa0ab9653",
"calldata_variants": [
"0xa0ab9653",
"0xa0ab96530000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa0e67e2b",
"selector": "0xa0e67e2b",
"calldata_variants": [
"0xa0e67e2b",
"0xa0e67e2b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xaffed0e0",
"selector": "0xaffed0e0",
"calldata_variants": [
"0xaffed0e0",
"0xaffed0e00000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xba9a91a5",
"selector": "0xba9a91a5",
"calldata_variants": [
"0xba9a91a5",
"0xba9a91a50000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf698da25",
"selector": "0xf698da25",
"calldata_variants": [
"0xf698da25",
"0xf698da250000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x04622c2e",
"selector": "0x04622c2e",
"calldata_variants": [
"0x04622c2e",
"0x04622c2e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x1279991b",
"selector": "0x1279991b",
"calldata_variants": [
"0x1279991b",
"0x1279991b0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 1998,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 1,
"guards_detected": []
}
|