f0df3f70-8245-4124-b2f7-2a2fe0b0bb48
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 |
|---|---|---|---|---|
| 31104 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 76438 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 76439 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 76440 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 76441 | capability.graph | complete | 1 / 3 | 1 week ago |
| 76442 | detector.run | complete | 1 / 3 | 1 week ago |
| 76443 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:893503] OpenAI Codex v0.77.0 (research preview)
[codex:893503] --------
[codex:893503] workdir: /tmp/codex-multi-xo09dn_7
[codex:893503] model: gpt-5.2-codex
[codex:893503] provider: openai
[codex:893503] approval: never
[codex:893503] sandbox: read-only
[codex:893503] reasoning effort: xhigh
[codex:893503] reasoning summaries: auto
[codex:893503] session id: 019b7ac3-cef3-7c11-a256-d4d0d0ff8a29
[codex:893503] --------
[codex:893503] user
[codex:893503] 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:893503]
[codex:893503] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:893503]
[codex:893503] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:893503] - Gas inefficiency, code quality, or best practices
[codex:893503] - Theoretical vulnerabilities without a clear extraction path
[codex:893503] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:893503] - Issues requiring social engineering or off-chain coordination
[codex:893503]
[codex:893503] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:893503] - CALL/DELEGATECALL with controllable destination or calldata
[codex:893503] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:893503] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:893503] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:893503] - External calls before state updates (reentrancy)
[codex:893503] - SELFDESTRUCT with controllable beneficiary
[codex:893503] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:893503]
[codex:893503] For each finding, you MUST explain:
[codex:893503] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:893503] 2. The concrete sequence of transactions to extract value
[codex:893503] 3. Why you believe this is exploitable (not just suspicious)
[codex:893503]
[codex:893503] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:893503] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:893503]
[codex:893503] Output MUST be valid JSON matching the provided schema.
[codex:893503] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:893503] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:893503] mcp startup: no servers
[codex:893503]
[codex:893503] thinking
[codex:893503] **Reading file contents**
[codex:893503] exec
[codex:893503] /bin/bash -lc ls in /tmp/codex-multi-xo09dn_7 succeeded in 5ms:
[codex:893503] BYTECODE_BUNDLE.txt
[codex:893503] codex-output-schema.json
[codex:893503] exec
[codex:893503] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-xo09dn_7 succeeded in 5ms:
[codex:893503] Runtime bytecode bundle for best-effort auditing.
[codex:893503] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:893503]
[codex:893503] FILE: runtime_bytecode.hex
[codex:893503] 0x60806040526004361061004e5760003560e01c80632f54bf6e1461005a57806342cde4e8146100975780635bebe4ee146100c25780637ecebe00146100eb578063daccfbb41461012857610055565b3661005557005b600080fd5b34801561006657600080fd5b50610081600480360381019061007c9190610b39565b610165565b60405161008e9190610df4565b60405180910390f35b3480156100a357600080fd5b506100ac610185565b6040516100b99190610f2f565b60405180910390f35b3480156100ce57600080fd5b506100e960048036038101906100e49190610b62565b610198565b005b3480156100f757600080fd5b50610112600480360381019061010d9190610b39565b61042f565b60405161011f9190610f14565b60405180910390f35b34801561013457600080fd5b5061014f600480360381019061014a9190610b39565b610447565b60405161015c9190610f14565b60405180910390f35b60006020528060005260406000206000915054906101000a900460ff1681565b600160009054906101000a900460ff1681565b6101a888888888888888886104e2565b6000806000806000806101fe88888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061079a565b95509550955095509550955061021333610447565b8614610254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161024b90610e94565b60405180910390fd5b3a851015610297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161028e90610e54565b60405180910390fd5b6102a0836108df565b6102df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d690610eb4565b60405180910390fd5b6001600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461032b9190610f71565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008373ffffffffffffffffffffffffffffffffffffffff168584846040516103979190610ddd565b600060405180830381858888f193505050503d80600081146103d5576040519150601f19603f3d011682016040523d82523d6000602084013e6103da565b606091505b505090508061041e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041590610ef4565b60405180910390fd5b505050505050505050505050505050565b60026020528060005260406000206000915090505481565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546401000000008373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff166104c79190610f71565b6104d19190610fc7565b6104db9190610f71565b9050919050565b600160009054906101000a900460ff1660ff168686905014610539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053090610e74565b60405180910390fd5b838390508686905014801561055357508787905086869050145b610592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058990610ed4565b60405180910390fd5b600082826040516105a4929190610dc4565b604051809103902090506000805b600160009054906101000a900460ff1660ff1681101561078d5760006001848d8d8581811061060a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061061f9190610c37565b8c8c86818110610658577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201358b8b87818110610698577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135604051600081526020016040526040516106bc9493929190610e0f565b6020604051602081039080840390855afa1580156106de573d6000803e3d6000fd5b5050506020604051035190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611801561076d57506000808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61077657600080fd5b809250508080610785906110f6565b9150506105b2565b5050505050505050505050565b6000806000806000606060008751116107b257600080fd5b600080600060208a0192506107c6836108ea565b809250819350505089518184846107dd9190611021565b6107e79190610f71565b146107f157600080fd5b6107fa82610957565b809250819350505061080c82826109dc565b9850610822818361081d9190610f71565b610957565b809250819350505061083482826109dc565b975061084a81836108459190610f71565b610957565b809250819350505061085c82826109dc565b9650610872818361086d9190610f71565b610957565b80925081935050506108848282610a11565b955061089a81836108959190610f71565b610957565b80925081935050506108ac82826109dc565b94506108c281836108bd9190610f71565b610957565b809250819350505060208203935080845250505091939550919395565b600060019050919050565b6000806000835160001a905060f881106109205760f78103806020036101000a6001860151049250808501600101935050610951565b60c0811061094b5760c0816109359190611021565b91506001846109449190610f71565b9250610950565b600080fd5b5b50915091565b6000806000835160001a9050608081101561097857600191508392506109d6565b60b88110156109a45760808161098e9190611021565b915060018461099d9190610f71565b92506109d5565b60c08110156109cf5760b78103806020036101000a60018601510492508085016001019350506109d4565b600080fd5b5b5b50915091565b6000808214156109ef5760009050610a0b565b60208211156109fd57600080fd5b816020036101000a83510490505b92915050565b600060148214610a2057600080fd5b600c6101000a835104905092915050565b600081359050610a4081611264565b92915050565b60008083601f840112610a5857600080fd5b8235905067ffffffffffffffff811115610a7157600080fd5b602083019150836020820283011115610a8957600080fd5b9250929050565b60008083601f840112610aa257600080fd5b8235905067ffffffffffffffff811115610abb57600080fd5b602083019150836020820283011115610ad357600080fd5b9250929050565b60008083601f840112610aec57600080fd5b8235905067ffffffffffffffff811115610b0557600080fd5b602083019150836001820283011115610b1d57600080fd5b9250929050565b600081359050610b338161127b565b92915050565b600060208284031215610b4b57600080fd5b6000610b5984828501610a31565b91505092915050565b6000806000806000806000806080898b031215610b7e57600080fd5b600089013567ffffffffffffffff811115610b9857600080fd5b610ba48b828c01610a90565b9850985050602089013567ffffffffffffffff811115610bc357600080fd5b610bcf8b828c01610a46565b9650965050604089013567ffffffffffffffff811115610bee57600080fd5b610bfa8b828c01610a46565b9450945050606089013567ffffffffffffffff811115610c1957600080fd5b610c258b828c01610ada565b92509250509295985092959890939650565b600060208284031215610c4957600080fd5b6000610c5784828501610b24565b91505092915050565b610c6981611067565b82525050565b610c7881611073565b82525050565b6000610c8a8385610f55565b9350610c978385846110b4565b82840190509392505050565b6000610cae82610f4a565b610cb88185610f55565b9350610cc88185602086016110c3565b80840191505092915050565b6000610ce1601183610f60565b9150610cec8261116e565b602082019050919050565b6000610d04601583610f60565b9150610d0f82611197565b602082019050919050565b6000610d27600d83610f60565b9150610d32826111c0565b602082019050919050565b6000610d4a600e83610f60565b9150610d55826111e9565b602082019050919050565b6000610d6d601283610f60565b9150610d7882611212565b602082019050919050565b6000610d90601283610f60565b9150610d9b8261123b565b602082019050919050565b610daf8161109d565b82525050565b610dbe816110a7565b82525050565b6000610dd1828486610c7e565b91508190509392505050565b6000610de98284610ca3565b915081905092915050565b6000602082019050610e096000830184610c60565b92915050565b6000608082019050610e246000830187610c6f565b610e316020830186610db5565b610e3e6040830185610c6f565b610e4b6060830184610c6f565b95945050505050565b60006020820190508181036000830152610e6d81610cd4565b9050919050565b60006020820190508181036000830152610e8d81610cf7565b9050919050565b60006020820190508181036000830152610ead81610d1a565b9050919050565b60006020820190508181036000830152610ecd81610d3d565b9050919050565b60006020820190508181036000830152610eed81610d60565b9050919050565b60006020820190508181036000830152610f0d81610d83565b9050919050565b6000602082019050610f296000830184610da6565b92915050565b6000602082019050610f446000830184610db5565b92915050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000610f7c8261109d565b9150610f878361109d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610fbc57610fbb61113f565b5b828201905092915050565b6000610fd28261109d565b9150610fdd8361109d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156110165761101561113f565b5b828202905092915050565b600061102c8261109d565b91506110378361109d565b92508282101561104a5761104961113f565b5b828203905092915050565b60006110608261107d565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b838110156110e15780820151818401526020810190506110c6565b838111156110f0576000848401525b50505050565b60006111018261109d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156111345761113361113f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f696e76616c696420676173207072696365000000000000000000000000000000600082015250565b7f6e6f7420656e6f756768207369676e6174757265730000000000000000000000600082015250565b7f696e76616c6964206e6f6e636500000000000000000000000000000000000000600082015250565b7f666f7262696464656e2063616c6c000000000000000000000000000000000000600082015250565b7f696e76616c6964207369676e6174757265730000000000000000000000000000600082015250565b7f7472616e73616374696f6e206661696c65640000000000000000000000000000600082015250565b61126d81611055565b811461127857600080fd5b50565b611284816110a7565b811461128f57600080fd5b5056fea26469706673582212204a7f120bb59664a117e9cff81052047e6388cc2463a615d4fe4867e55005891164736f6c63430008040033
[codex:893503]
[codex:893503] thinking
[codex:893503] **Decoding bytecode for exploit analysis**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503]
[codex:893503] hexdata = Path('BYTECODE_BUNDLE.txt').read_text().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[1].strip()
[codex:893503] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:893503]
[codex:893503] # EVM opcodes map
[codex:893503] opcodes = {i: f'OP_{i:02x}' for i in range(256)}
[codex:893503] # fill known
[codex:893503] names = {
[codex:893503] 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:893503] 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:893503] 0x20:'SHA3',
[codex:893503] 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:893503] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:893503] 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:893503] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:893503] 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:893503] 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:893503] 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:893503] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:893503] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:893503] }
[codex:893503] for k,v in names.items(): opcodes[k]=v
[codex:893503]
[codex:893503] code = bytes.fromhex(hexdata)
[codex:893503]
[codex:893503] # disassemble to list of (pc, op, imm)
[codex:893503] res=[]
[codex:893503] pc=0
[codex:893503] while pc < len(code):
[codex:893503] op=code[pc]
[codex:893503] name=opcodes[op]
[codex:893503] if 0x60 <= op <= 0x7f:
[codex:893503] n=op-0x5f
[codex:893503] imm=code[pc+1:pc+1+n]
[codex:893503] res.append((pc,name,imm.hex()))
[codex:893503] pc += 1+n
[codex:893503] else:
[codex:893503] res.append((pc,name,''))
[codex:893503] pc += 1
[codex:893503]
[codex:893503] # print a subset around key pcs
[codex:893503] # find jumpdests
[codex:893503] jumpdests=[pc for pc,name,imm in res if name=='JUMPDEST']
[codex:893503] print('jumpdests',jumpdests[:20],'... total',len(jumpdests))
[codex:893503]
[codex:893503] # print from 0x160 to 0x250
[codex:893503] for pc,name,imm in res:
[codex:893503] if 0x150 <= pc <= 0x260:
[codex:893503] print(f'{pc:04x}: {name} {imm}')
[codex:893503]
[codex:893503] print('--- 0x420-0x520 ---')
[codex:893503] for pc,name,imm in res:
[codex:893503] if 0x420 <= pc <= 0x520:
[codex:893503] print(f'{pc:04x}: {name} {imm}')
[codex:893503]
[codex:893503] print('--- 0x1a8-0x3f0 ---')
[codex:893503] for pc,name,imm in res:
[codex:893503] if 0x1a8 <= pc <= 0x3f0:
[codex:893503] print(f'{pc:04x}: {name} {imm}')
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 exited 1 in 35ms:
[codex:893503] Traceback (most recent call last):
[codex:893503] File "<stdin>", line 4, in <module>
[codex:893503] IndexError: list index out of range
[codex:893503]
[codex:893503] thinking
[codex:893503] **Examining file structure**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] # find first 0x... hex string
[codex:893503] m=re.search(r'0x[0-9a-fA-F]+', text)
[codex:893503] print('found', m.group(0)[:20], 'len', len(m.group(0)))
[codex:893503] hexdata=m.group(0)[2:]
[codex:893503] print('hexlen', len(hexdata))
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 29ms:
[codex:893503] found 0x608060405260043610 len 9618
[codex:893503] hexlen 9616
[codex:893503]
[codex:893503] thinking
[codex:893503] **Choosing regex approach**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503]
[codex:893503] opcodes={i:f'OP_{i:02x}' for i in range(256)}
[codex:893503] # fill known opcodes
[codex:893503] names={
[codex:893503] 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:893503] 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:893503] 0x20:'SHA3',
[codex:893503] 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:893503] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:893503] 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:893503] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:893503] 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:893503] 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:893503] 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:893503] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:893503] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:893503] }
[codex:893503] for k,v in names.items(): opcodes[k]=v
[codex:893503]
[codex:893503] res=[]
[codex:893503] pc=0
[codex:893503] while pc<len(code):
[codex:893503] op=code[pc]
[codex:893503] name=opcodes[op]
[codex:893503] if 0x60<=op<=0x7f:
[codex:893503] n=op-0x5f
[codex:893503] imm=code[pc+1:pc+1+n]
[codex:893503] res.append((pc,name,imm.hex()))
[codex:893503] pc+=1+n
[codex:893503] else:
[codex:893503] res.append((pc,name,''))
[codex:893503] pc+=1
[codex:893503]
[codex:893503] # helper to print region
[codex:893503]
[codex:893503] def dump(start,end):
[codex:893503] for pc,name,imm in res:
[codex:893503] if start<=pc<=end:
[codex:893503] if imm:
[codex:893503] print(f'{pc:04x}: {name} 0x{imm}')
[codex:893503] else:
[codex:893503] print(f'{pc:04x}: {name}')
[codex:893503]
[codex:893503] print('--- 0x150-0x220 ---')
[codex:893503] dump(0x150,0x220)
[codex:893503] print('--- 0x220-0x3f0 ---')
[codex:893503] dump(0x220,0x3f0)
[codex:893503] print('--- 0x420-0x520 ---')
[codex:893503] dump(0x420,0x520)
[codex:893503] print('--- 0x520-0x700 ---')
[codex:893503] dump(0x520,0x700)
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 33ms:
[codex:893503] --- 0x150-0x220 ---
[codex:893503] 0150: PUSH1 0x40
[codex:893503] 0152: MLOAD
[codex:893503] 0153: PUSH2 0x015c
[codex:893503] 0156: SWAP2
[codex:893503] 0157: SWAP1
[codex:893503] 0158: PUSH2 0x0f14
[codex:893503] 015b: JUMP
[codex:893503] 015c: JUMPDEST
[codex:893503] 015d: PUSH1 0x40
[codex:893503] 015f: MLOAD
[codex:893503] 0160: DUP1
[codex:893503] 0161: SWAP2
[codex:893503] 0162: SUB
[codex:893503] 0163: SWAP1
[codex:893503] 0164: RETURN
[codex:893503] 0165: JUMPDEST
[codex:893503] 0166: PUSH1 0x00
[codex:893503] 0168: PUSH1 0x20
[codex:893503] 016a: MSTORE
[codex:893503]
[codex:893503] thinking
[codex:893503] **Reviewing additional code section**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503]
[codex:893503] # opcode names (reuse from earlier minimal)
[codex:893503] ops={i:f'OP_{i:02x}' for i in range(256)}
[codex:893503] known={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:893503] 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:893503] 0x20:'SHA3',
[codex:893503] 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:893503] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:893503] 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:893503] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:893503] 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:893503] 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:893503] 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:893503] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:893503] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:893503] for k,v in known.items(): ops[k]=v
[codex:893503]
[codex:893503] res=[]
[codex:893503] pc=0
[codex:893503] while pc<len(code):
[codex:893503] op=code[pc]
[codex:893503] name=ops[op]
[codex:893503] if 0x60<=op<=0x7f:
[codex:893503] n=op-0x5f
[codex:893503] imm=code[pc+1:pc+1+n]
[codex:893503] res.append((pc,name,imm.hex()))
[codex:893503] pc+=1+n
[codex:893503] else:
[codex:893503] res.append((pc,name,''))
[codex:893503] pc+=1
[codex:893503]
[codex:893503] # dump 0x6e0-0x820
[codex:893503] for pc,name,imm in res:
[codex:893503] if 0x6e0 <= pc <= 0x820:
[codex:893503] if imm:
[codex:893503] print(f'{pc:04x}: {name} 0x{imm}')
[codex:893503] else:
[codex:893503] print(f'{pc:04x}: {name}')
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 31ms:
[codex:893503] 06e0: POP
[codex:893503] 06e1: POP
[codex:893503] 06e2: PUSH1 0x20
[codex:893503] 06e4: PUSH1 0x40
[codex:893503] 06e6: MLOAD
[codex:893503] 06e7: SUB
[codex:893503] 06e8: MLOAD
[codex:893503] 06e9: SWAP1
[codex:893503] 06ea: POP
[codex:893503] 06eb: DUP3
[codex:893503] 06ec: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:893503] 0701: AND
[codex:893503] 0702: DUP2
[codex:893503] 0703: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:893503] 0718: AND
[codex:893503] 0719: GT
[codex:893503] 071a: DUP1
[codex:893503] 071b: ISZERO
[codex:893503] 071c: PUSH2 0x076d
[codex:893503] 071f: JUMPI
[codex:893503]
[codex:893503] thinking
[codex:893503] **Analyzing authorization and signature checks**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503]
[codex:893503] ops={i:f'OP_{i:02x}' for i in range(256)}
[codex:893503] known={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:893503] 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:893503] 0x20:'SHA3',
[codex:893503] 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:893503] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:893503] 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:893503] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:893503] 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:893503] 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:893503] 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:893503] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:893503] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:893503] for k,v in known.items(): ops[k]=v
[codex:893503]
[codex:893503] res=[]
[codex:893503] pc=0
[codex:893503] while pc<len(code):
[codex:893503] op=code[pc]
[codex:893503] name=ops[op]
[codex:893503] if 0x60<=op<=0x7f:
[codex:893503] n=op-0x5f
[codex:893503] imm=code[pc+1:pc+1+n]
[codex:893503] res.append((pc,name,imm.hex()))
[codex:893503] pc+=1+n
[codex:893503] else:
[codex:893503] res.append((pc,name,''))
[codex:893503] pc+=1
[codex:893503]
[codex:893503] # dump around 0x0f60-0x0fd0
[codex:893503] for pc,name,imm in res:
[codex:893503] if 0x0f50 <= pc <= 0x0fd0:
[codex:893503] if imm:
[codex:893503] print(f'{pc:04x}: {name} 0x{imm}')
[codex:893503] else:
[codex:893503] print(f'{pc:04x}: {name}')
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 33ms:
[codex:893503] 0f50: POP
[codex:893503] 0f51: SWAP2
[codex:893503] 0f52: SWAP1
[codex:893503] 0f53: POP
[codex:893503] 0f54: JUMP
[codex:893503] 0f55: JUMPDEST
[codex:893503] 0f56: PUSH1 0x00
[codex:893503] 0f58: DUP2
[codex:893503] 0f59: SWAP1
[codex:893503] 0f5a: POP
[codex:893503] 0f5b: SWAP3
[codex:893503] 0f5c: SWAP2
[codex:893503] 0f5d: POP
[codex:893503] 0f5e: POP
[codex:893503] 0f5f: JUMP
[codex:893503] 0f60: JUMPDEST
[codex:893503] 0f61: PUSH1 0x00
[codex:893503] 0f63: DUP3
[codex:893503] 0f64: DUP3
[codex:893503] 0f65: MSTORE
[codex:893503]
[codex:893503] thinking
[codex:893503] **Analyzing SafeMath helper functions**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503]
[codex:893503] ops={i:f'OP_{i:02x}' for i in range(256)}
[codex:893503] known={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:893503] 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:893503] 0x20:'SHA3',
[codex:893503] 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:893503] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:893503] 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:893503] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:893503] 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:893503] 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:893503] 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:893503] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:893503] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:893503] for k,v in known.items(): ops[k]=v
[codex:893503]
[codex:893503] res=[]
[codex:893503] pc=0
[codex:893503] while pc<len(code):
[codex:893503] op=code[pc]
[codex:893503] name=ops[op]
[codex:893503] if 0x60<=op<=0x7f:
[codex:893503] n=op-0x5f
[codex:893503] imm=code[pc+1:pc+1+n]
[codex:893503] res.append((pc,name,imm.hex()))
[codex:893503] pc+=1+n
[codex:893503] else:
[codex:893503] res.append((pc,name,''))
[codex:893503] pc+=1
[codex:893503]
[codex:893503] # dump around 0x0fc7-0x1025
[codex:893503] for pc,name,imm in res:
[codex:893503] if 0x0fc7 <= pc <= 0x1025:
[codex:893503] if imm:
[codex:893503] print(f'{pc:04x}: {name} 0x{imm}')
[codex:893503] else:
[codex:893503] print(f'{pc:04x}: {name}')
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 33ms:
[codex:893503] 0fc7: JUMPDEST
[codex:893503] 0fc8: PUSH1 0x00
[codex:893503] 0fca: PUSH2 0x0fd2
[codex:893503] 0fcd: DUP3
[codex:893503] 0fce: PUSH2 0x109d
[codex:893503] 0fd1: JUMP
[codex:893503] 0fd2: JUMPDEST
[codex:893503] 0fd3: SWAP2
[codex:893503] 0fd4: POP
[codex:893503] 0fd5: PUSH2 0x0fdd
[codex:893503] 0fd8: DUP4
[codex:893503] 0fd9: PUSH2 0x109d
[codex:893503] 0fdc: JUMP
[codex:893503] 0fdd: JUMPDEST
[codex:893503] 0fde: SWAP3
[codex:893503] 0fdf: POP
[codex:893503] 0fe0: DUP2
[codex:893503] 0fe1: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
[codex:893503] 1002: DIV
[codex:893503] 1003: DUP4
[codex:893503]
[codex:893503] thinking
[codex:893503] **Analyzing storage access and parameter usage**
[codex:893503]
[codex:893503] I'm unpacking how the function at 0x42f uses storage by computing keccak hashes of slot and key values, trying to understand if it reads from a mapping or dynamic array. I'm exploring how parameters are passed on the stack or stored in memory to clarify where keys come from, as it’s not straightforward from the raw instructions. This investigation might uncover how nonce or threshold values are fetched using calldata decoding and function dispatch.
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503]
[codex:893503] ops={i:f'OP_{i:02x}' for i in range(256)}
[codex:893503] known={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:893503] 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:893503] 0x20:'SHA3',
[codex:893503] 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:893503] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:893503] 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:893503] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:893503] 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:893503] 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:893503] 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:893503] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:893503] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:893503] for k,v in known.items(): ops[k]=v
[codex:893503]
[codex:893503] res=[]
[codex:893503] pc=0
[codex:893503] while pc<len(code):
[codex:893503] op=code[pc]
[codex:893503] name=ops[op]
[codex:893503] if 0x60<=op<=0x7f:
[codex:893503] n=op-0x5f
[codex:893503] imm=code[pc+1:pc+1+n]
[codex:893503] res.append((pc,name,imm.hex()))
[codex:893503] pc+=1+n
[codex:893503] else:
[codex:893503] res.append((pc,name,''))
[codex:893503] pc+=1
[codex:893503]
[codex:893503] # dump around 0x0b20-0x0b80
[codex:893503] for pc,name,imm in res:
[codex:893503] if 0x0b20 <= pc <= 0x0b80:
[codex:893503] if imm:
[codex:893503] print(f'{pc:04x}: {name} 0x{imm}')
[codex:893503] else:
[codex:893503] print(f'{pc:04x}: {name}')
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 29ms:
[codex:893503] 0b20: SWAP3
[codex:893503] 0b21: SWAP1
[codex:893503] 0b22: POP
[codex:893503] 0b23: JUMP
[codex:893503] 0b24: JUMPDEST
[codex:893503] 0b25: PUSH1 0x00
[codex:893503] 0b27: DUP2
[codex:893503] 0b28: CALLDATALOAD
[codex:893503] 0b29: SWAP1
[codex:893503] 0b2a: POP
[codex:893503] 0b2b: PUSH2 0x0b33
[codex:893503] 0b2e: DUP2
[codex:893503] 0b2f: PUSH2 0x127b
[codex:893503] 0b32: JUMP
[codex:893503] 0b33: JUMPDEST
[codex:893503] 0b34: SWAP3
[codex:893503] 0b35: SWAP2
[codex:893503] 0b36: POP
[codex:893503] 0b37: POP
[codex:893503] 0b38: JUMP
[codex:893503]
[codex:893503] thinking
[codex:893503] **Analyzing stack usage and function behavior**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] # symbolic stack execution for snippet 0x447-0x4e1
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503]
[codex:893503] # map opcodes for snippet
[codex:893503] ops = {
[codex:893503] 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:893503] 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:893503] 0x20:'SHA3',
[codex:893503] 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:893503] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:893503] 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:893503] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:893503] 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:893503] 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:893503] 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:893503] 0xf1:'CALL',0xf3:'RETURN',0xf4:'DELEGATECALL',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:893503] }
[codex:893503]
[codex:893503] # disassemble snippet
[codex:893503] start=0x447
[codex:893503] end=0x4e1
[codex:893503]
[codex:893503] # build list of (pc,op,imm)
[codex:893503] res=[]
[codex:893503] pc=0
[codex:893503] while pc<len(code):
[codex:893503] op=code[pc]
[codex:893503] if 0x60<=op<=0x7f:
[codex:893503] n=op-0x5f
[codex:893503] imm=code[pc+1:pc+1+n]
[codex:893503] res.append((pc,op,imm))
[codex:893503] pc+=1+n
[codex:893503] else:
[codex:893503] res.append((pc,op,None))
[codex:893503] pc+=1
[codex:893503]
[codex:893503] # filter snippet
[codex:893503] snippet=[x for x in res if start<=x[0]<=end]
[codex:893503]
[codex:893503] stack=['A'] # parameter
[codex:893503]
[codex:893503] # symbolic memory for two slots
[codex:893503] memory={}
[codex:893503]
[codex:893503] def pop():
[codex:893503] return stack.pop(0)
[codex:893503]
[codex:893503] # We treat top of stack as index 0 for simplicity; but EVM stack uses top as end.
[codex:893503] # We'll implement top at end to be accurate.
[codex:893503] stack=['A']
[codex:893503]
[codex:893503] for pc,op,imm in snippet:
[codex:893503] name=ops.get(op,f'OP_{op:02x}')
[codex:893503] if name.startswith('PUSH'):
[codex:893503] val=int(imm.hex(),16) if imm else 0
[codex:893503] stack.append(f'0x{val:x}')
[codex:893503] elif name.startswith('DUP'):
[codex:893503] n=int(name[3:])
[codex:893503] stack.append(stack[-n])
[codex:893503] elif name.startswith('SWAP'):
[codex:893503] n=int(name[4:])
[codex:893503] stack[-1],stack[-1-n]=stack[-1-n],stack[-1]
[codex:893503] elif name=='POP':
[codex:893503] stack.pop()
[codex:893503] elif name=='MSTORE':
[codex:893503] offset=stack.pop(); val=stack.pop();
[codex:893503] memory[offset]=val
[codex:893503] elif name=='SHA3':
[codex:893503] size=stack.pop(); offset=stack.pop();
[codex:893503] # assume offset 0 and size 0x40, build from memory[0] and memory[0x20]
[codex:893503] a=memory.get('0x0','?')
[codex:893503] b=memory.get('0x20','?')
[codex:893503] stack.append(f'keccak({a},{b})')
[codex:893503] elif name=='SLOAD':
[codex:893503] key=stack.pop();
[codex:893503] stack.append(f'sload({key})')
[codex:893503] elif name=='ADDRESS':
[codex:893503] stack.append('address(this)')
[codex:893503] elif name=='AND':
[codex:893503] b=stack.pop(); a=stack.pop();
[codex:893503] # if AND with mask, ignore
[codex:893503] if b.startswith('0xffff') or a.startswith('0xffff'):
[codex:893503] stack.append(a if b.startswith('0xffff') else b)
[codex:893503] else:
[codex:893503] stack.append(f'({a}&{b})')
[codex:893503] elif name=='ADD':
[codex:893503] b=stack.pop(); a=stack.pop(); stack.append(f'({a}+{b})')
[codex:893503] elif name=='MUL':
[codex:893503] b=stack.pop(); a=stack.pop(); stack.append(f'({a}*{b})')
[codex:893503] elif name=='DIV':
[codex:893503] b=stack.pop(); a=stack.pop(); stack.append(f'({a}/{b})')
[codex:893503] elif name=='JUMP' or name=='JUMPI':
[codex:893503] pass
[codex:893503] else:
[codex:893503] # ignore unhandled
[codex:893503] pass
[codex:893503]
[codex:893503] print('stack end:', stack)
[codex:893503] print('memory:', memory)
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 40ms:
[codex:893503] stack end: ['A', '0x0', 'sload(keccak(A,?))', '0x100000000', '0x4c7', 'A', '0x4d1', 'address(this)', '0xf71', '0x4db']
[codex:893503] memory: {'0x0': 'A', '(0x0+0x20)': '0x2'}
[codex:893503]
[codex:893503] thinking
[codex:893503] **Analyzing symbolic interpreter and EVM stack behavior**
[codex:893503]
[codex:893503] I’m stepping through the symbolic interpreter’s memory handling and stack behavior in detail, correcting how memory offsets are treated—shifting from string offsets to numeric where possible. I’m also manually tracing EVM instructions around address 0x447 to understand stack operations, memory stores, and the logic behind signature and nonce checks that seem to secure the contract’s transaction execution. This careful walkthrough helps me verify whether the contract implements robust replay protection and signature validation, hinting it might be a multi-signature wallet or minimal forwarder.
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503]
[codex:893503] ops={i:f'OP_{i:02x}' for i in range(256)}
[codex:893503] # fill known names
[codex:893503] known={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:893503] 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:893503] 0x20:'SHA3',
[codex:893503] 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:893503] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:893503] 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:893503] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:893503] 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:893503] 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:893503] 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:893503] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:893503] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:893503] for k,v in known.items(): ops[k]=v
[codex:893503]
[codex:893503] res=[]
[codex:893503] pc=0
[codex:893503] while pc<len(code):
[codex:893503] op=code[pc]
[codex:893503] name=ops[op]
[codex:893503] if 0x60<=op<=0x7f:
[codex:893503] n=op-0x5f
[codex:893503] imm=code[pc+1:pc+1+n]
[codex:893503] res.append((pc,name,imm.hex()))
[codex:893503] pc+=1+n
[codex:893503] else:
[codex:893503] res.append((pc,name,''))
[codex:893503] pc+=1
[codex:893503]
[codex:893503] # dump around 0x08df-0x095f
[codex:893503] for pc,name,imm in res:
[codex:893503] if 0x08df <= pc <= 0x0960:
[codex:893503] if imm:
[codex:893503] print(f'{pc:04x}: {name} 0x{imm}')
[codex:893503] else:
[codex:893503] print(f'{pc:04x}: {name}')
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 35ms:
[codex:893503] 08df: JUMPDEST
[codex:893503] 08e0: PUSH1 0x00
[codex:893503] 08e2: PUSH1 0x01
[codex:893503] 08e4: SWAP1
[codex:893503] 08e5: POP
[codex:893503] 08e6: SWAP2
[codex:893503] 08e7: SWAP1
[codex:893503] 08e8: POP
[codex:893503] 08e9: JUMP
[codex:893503] 08ea: JUMPDEST
[codex:893503] 08eb: PUSH1 0x00
[codex:893503] 08ed: DUP1
[codex:893503] 08ee: PUSH1 0x00
[codex:893503] 08f0: DUP4
[codex:893503] 08f1: MLOAD
[codex:893503] 08f2: PUSH1 0x00
[codex:893503] 08f4: BYTE
[codex:893503] 08f5: SWAP1
[codex:893503] 08f6: POP
[codex:893503] 08f7: PUSH1 0xf8
[codex:893503]
[codex:893503] thinking
[codex:893503] **Examining signature verification and delegatecall risk**
[codex:893503]
[codex:893503] I'm analyzing bytecode related to signature parsing, likely ECDSA or MultiSig validation, focusing on the staticcall to ecrecover and checks enforcing sorted unique signers. I'm also verifying if any delegatecall opcode (0xf4) appears, which could indicate unprotected upgrade or arbitrary call risks. So far, signature validation appears robust with nonce and ownership checks, but I want to be certain no exploitable path exists before concluding.
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503] # find delegatecall
[codex:893503] indices=[i for i,b in enumerate(code) if b==0xf4]
[codex:893503] print('delegatecall offsets', indices)
[codex:893503] # find selfdestruct
[codex:893503] indices2=[i for i,b in enumerate(code) if b==0xff]
[codex:893503] print('selfdestruct offsets', indices2)
[codex:893503] # find call opcode 0xf1
[codex:893503] indices3=[i for i,b in enumerate(code) if b==0xf1]
[codex:893503] print('call offsets', indices3[:10], 'count', len(indices3))
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 27ms:
[codex:893503] delegatecall offsets [140, 1043]
[codex:893503] selfdestruct offsets [385, 404, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, 785, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1265, 1268, 1473, 1476, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1790, 1791, 1792, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1899, 2654, 2655, 2656, 2657, 2658, 2659, 2660, 2661, 2728, 2729, 2730, 2731, 2732, 2733, 2734, 2735, 2802, 2803, 2804, 2805, 2806, 2807, 2808, 2809, 2949, 2950, 2951, 2952, 2953, 2954, 2955, 2956, 2992, 2993, 2994, 2995, 2996, 2997, 2998, 2999, 3035, 3036, 3037, 3038, 3039, 3040, 3041, 3042, 3078, 3079, 3080, 3081, 3082, 3083, 3084, 3085, 3980, 3981, 3982, 3983, 3984, 3985, 3986, 3987, 3988, 3989, 3990, 3991, 3992, 3993, 3994, 3995, 3996, 3997, 3998, 3999, 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4008, 4009, 4010, 4011, 4066, 4067, 4068, 4069, 4070, 4071, 4072, 4073, 4074, 4075, 4076, 4077, 4078, 4079, 4080, 4081, 4082, 4083, 4084, 4085, 4086, 4087, 4088, 4089, 4090, 4091, 4092, 4093, 4094, 4095, 4096, 4097, 4225, 4226, 4227, 4228, 4229, 4230, 4231, 4232, 4233, 4234, 4235, 4236, 4237, 4238, 4239, 4240, 4241, 4242, 4243, 4244, 4267, 4357, 4358, 4359, 4360, 4361, 4362, 4363, 4364, 4365, 4366, 4367, 4368, 4369, 4370, 4371, 4372, 4373, 4374, 4375, 4376, 4377, 4378, 4379, 4380, 4381, 4382, 4383, 4384, 4385, 4386, 4387, 4388]
[codex:893503] call offsets [932, 2027] count 2
[codex:893503]
[codex:893503] thinking
[codex:893503] **Analyzing opcode occurrences**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503]
[codex:893503] ops={i:f'OP_{i:02x}' for i in range(256)}
[codex:893503] # fill known
[codex:893503] names={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:893503] 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:893503] 0x20:'SHA3',
[codex:893503] 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:893503] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:893503] 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:893503] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:893503] 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:893503] 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:893503] 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:893503] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:893503] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:893503] for k,v in names.items(): ops[k]=v
[codex:893503]
[codex:893503] res=[]
[codex:893503] pc=0
[codex:893503] while pc<len(code):
[codex:893503] op=code[pc]
[codex:893503] name=ops[op]
[codex:893503] if 0x60<=op<=0x7f:
[codex:893503] n=op-0x5f
[codex:893503] imm=code[pc+1:pc+1+n]
[codex:893503] res.append((pc,name,imm.hex()))
[codex:893503] pc+=1+n
[codex:893503] else:
[codex:893503] res.append((pc,name,''))
[codex:893503] pc+=1
[codex:893503]
[codex:893503] # print delegatecall occurrences
[codex:893503] for pc,name,imm in res:
[codex:893503] if name=='DELEGATECALL':
[codex:893503] print('DELEGATECALL at', hex(pc))
[codex:893503]
[codex:893503] for pc,name,imm in res:
[codex:893503] if name=='SELFDESTRUCT':
[codex:893503] print('SELFDESTRUCT at', hex(pc))
[codex:893503]
[codex:893503] for pc,name,imm in res:
[codex:893503] if name=='CALL':
[codex:893503] print('CALL at', hex(pc))
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 31ms:
[codex:893503] CALL at 0x3a4
[codex:893503]
[codex:893503] thinking
[codex:893503] **Analyzing multi-signature execution flow**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503]
[codex:893503] # simple disasm to show pushes of string constants around 0x1100? Actually strings in data at end; we just locate by reading ascii.
[codex:893503]
[codex:893503] # find ascii strings
[codex:893503] for m in re.finditer(b'invalid|not enough|forbidden|transaction failed', code):
[codex:893503] start=max(m.start()-20,0)
[codex:893503] end=m.start()+40
[codex:893503] print(m.start(), code[start:end])
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 26ms:
[codex:893503] 4464 b'\x00\x00\x00\x00\x00`\x00R`\x11`\x04R`$`\x00\xfd[\x7finvalid gas price\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV['
[codex:893503] 4505 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV[\x7fnot enough signatures\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV['
[codex:893503] 4546 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV[\x7finvalid nonce\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV['
[codex:893503] 4587 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV[\x7fforbidden call\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV['
[codex:893503] 4628 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV[\x7finvalid signatures\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV['
[codex:893503] 4669 b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV[\x7ftransaction failed\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x82\x01RPV['
[codex:893503]
[codex:893503] thinking
[codex:893503] **Mapping revert reason strings in disassembly**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503]
[codex:893503] # print ascii strings near each address
[codex:893503] for addr in [0x0e54,0x0e74,0x0e94,0x0eb4,0x0ed4,0x0ef4]:
[codex:893503] # find printable substring after addr
[codex:893503] snippet=code[addr:addr+80]
[codex:893503] # extract ascii letters
[codex:893503] s=''.join(chr(b) if 32<=b<127 else '.' for b in snippet)
[codex:893503] print(hex(addr), s)
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 28ms:
[codex:893503] 0xe54 [`.` ...P...`...Ra.m.a..V[.P..PV[`.` ...P...`...Ra...a..V[.P..PV[`.` ...P...`...
[codex:893503] 0xe74 [`.` ...P...`...Ra...a..V[.P..PV[`.` ...P...`...Ra...a..V[.P..PV[`.` ...P...`...
[codex:893503] 0xe94 [`.` ...P...`...Ra...a..V[.P..PV[`.` ...P...`...Ra...a.=V[.P..PV[`.` ...P...`...
[codex:893503] 0xeb4 [`.` ...P...`...Ra...a.=V[.P..PV[`.` ...P...`...Ra...a.`V[.P..PV[`.` ...P...`...
[codex:893503] 0xed4 [`.` ...P...`...Ra...a.`V[.P..PV[`.` ...P...`...Ra...a..V[.P..PV[`.` ...Pa.)`...
[codex:893503] 0xef4 [`.` ...P...`...Ra...a..V[.P..PV[`.` ...Pa.)`....a..V[..PPV[`.` ...Pa.D`....a..V
[codex:893503]
[codex:893503] thinking
[codex:893503] **Analyzing potential execute function risks**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503] # disassemble minimal to count ORIGIN usage
[codex:893503] origin_ops=[]
[codex:893503] for i,b in enumerate(code):
[codex:893503] if b==0x32:
[codex:893503] origin_ops.append(i)
[codex:893503] print('ORIGIN byte occurrences', origin_ops[:10], 'count', len(origin_ops))
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 28ms:
[codex:893503] ORIGIN byte occurrences [1537, 1615, 1679, 3372] count 4
[codex:893503]
[codex:893503] thinking
[codex:893503] **Locating ORIGIN opcode via disassembly**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] import re
[codex:893503] from pathlib import Path
[codex:893503] text=Path('BYTECODE_BUNDLE.txt').read_text()
[codex:893503] hexdata=re.search(r'0x[0-9a-fA-F]+', text).group(0)[2:]
[codex:893503] code=bytes.fromhex(hexdata)
[codex:893503]
[codex:893503] ops={i:f'OP_{i:02x}' for i in range(256)}
[codex:893503] # minimal names
[codex:893503] ops[0x32]='ORIGIN'
[codex:893503] ops[0x60]='PUSH1'
[codex:893503] ops[0x61]='PUSH2'
[codex:893503] ops[0x62]='PUSH3'
[codex:893503] ops[0x63]='PUSH4'
[codex:893503] ops[0x64]='PUSH5'
[codex:893503] ops[0x65]='PUSH6'
[codex:893503] ops[0x66]='PUSH7'
[codex:893503] ops[0x67]='PUSH8'
[codex:893503] ops[0x68]='PUSH9'
[codex:893503] ops[0x69]='PUSH10'
[codex:893503] ops[0x6a]='PUSH11'
[codex:893503] ops[0x6b]='PUSH12'
[codex:893503] ops[0x6c]='PUSH13'
[codex:893503] ops[0x6d]='PUSH14'
[codex:893503] ops[0x6e]='PUSH15'
[codex:893503] ops[0x6f]='PUSH16'
[codex:893503] ops[0x70]='PUSH17'
[codex:893503] ops[0x71]='PUSH18'
[codex:893503] ops[0x72]='PUSH19'
[codex:893503] ops[0x73]='PUSH20'
[codex:893503] ops[0x74]='PUSH21'
[codex:893503] ops[0x75]='PUSH22'
[codex:893503] ops[0x76]='PUSH23'
[codex:893503] ops[0x77]='PUSH24'
[codex:893503] ops[0x78]='PUSH25'
[codex:893503] ops[0x79]='PUSH26'
[codex:893503] ops[0x7a]='PUSH27'
[codex:893503] ops[0x7b]='PUSH28'
[codex:893503] ops[0x7c]='PUSH29'
[codex:893503] ops[0x7d]='PUSH30'
[codex:893503] ops[0x7e]='PUSH31'
[codex:893503] ops[0x7f]='PUSH32'
[codex:893503]
[codex:893503] # disassemble and find ORIGIN
[codex:893503] pc=0
[codex:893503] res=[]
[codex:893503] while pc<len(code):
[codex:893503] op=code[pc]
[codex:893503] name=ops.get(op, f'OP_{op:02x}')
[codex:893503] if 0x60<=op<=0x7f:
[codex:893503] n=op-0x5f
[codex:893503] pc += 1+n
[codex:893503] else:
[codex:893503] if name=='ORIGIN':
[codex:893503] res.append(pc)
[codex:893503] pc += 1
[codex:893503]
[codex:893503] print('ORIGIN opcodes at', res)
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 32ms:
[codex:893503] ORIGIN opcodes at []
[codex:893503]
[codex:893503] thinking
[codex:893503] **Analyzing contract call and signature verification**
[codex:893503] exec
[codex:893503] /bin/bash -lc "PYTHONDONTWRITEBYTECODE=1 python - <<'PY'
[codex:893503] stack=['ret','arg'] # top is rightmost
[codex:893503]
[codex:893503] def push(x):
[codex:893503] stack.append(x)
[codex:893503]
[codex:893503] def pop():
[codex:893503] return stack.pop()
[codex:893503]
[codex:893503] # instructions in 0x08df
[codex:893503] push('0')
[codex:893503] push('1')
[codex:893503] # SWAP1
[codex:893503] stack[-1],stack[-2]=stack[-2],stack[-1]
[codex:893503] # POP
[codex:893503] pop()
[codex:893503] # SWAP2
[codex:893503] stack[-1],stack[-3]=stack[-3],stack[-1]
[codex:893503] # SWAP1
[codex:893503] stack[-1],stack[-2]=stack[-2],stack[-1]
[codex:893503] # POP
[codex:893503] pop()
[codex:893503] print(stack)
[codex:893503] PY" in /tmp/codex-multi-xo09dn_7 succeeded in 19ms:
[codex:893503] ['1', 'ret']
[codex:893503]
[codex:893503] thinking
[codex:893503] **Analyzing function call structure and signature checks**
[codex:893503]
[codex:893503] I'm tracing the bytecode’s flow to understand which functions verify signatures, nonces, and gas prices, noting that 0x08df returns true unconditionally and likely isn’t a signature check. The main signature validation seems to occur in 0x4e2 with complex parameter comparisons and loops verifying signatures. I’m carefully inspecting code paths and conditions to confirm that authorized signature validation gates sensitive operations, looking for potential bypasses or exploits via caller or parameter manipulation.
[codex:893503] codex
[codex:893503] {"no_findings":true,"summary":"No concrete exploitable value-extraction path identified in the provided bytecode; value transfer is gated by signature/nonce checks and no delegatecall/selfdestruct paths are present.","findings":[]}
[codex:893503] tokens used
[codex:893503] 121,242
[codex:893503] {"no_findings":true,"summary":"No concrete exploitable value-extraction path identified in the provided bytecode; value transfer is gated by signature/nonce checks and no delegatecall/selfdestruct paths are present.","findings":[]}
{
"codex": {
"ran_at": "2026-01-01T18:23:32.098955+00:00",
"returncode": 0
},
"summary": "No concrete exploitable value-extraction path identified in the provided bytecode; value transfer is gated by signature/nonce checks and no delegatecall/selfdestruct paths are present.",
"raw_final": {
"summary": "No concrete exploitable value-extraction path identified in the provided bytecode; value transfer is gated by signature/nonce checks and no delegatecall/selfdestruct paths are present.",
"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 0x004e 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x2f54bf6e 00000019: EQ 0000001a: PUSH2 0x005a 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0x42cde4e8 00000024: EQ 00000025: PUSH2 0x0097 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0x5bebe4ee 0000002f: EQ 00000030: PUSH2 0x00c2 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0x7ecebe00 0000003a: EQ 0000003b: PUSH2 0x00eb 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xdaccfbb4 00000045: EQ 00000046: PUSH2 0x0128 00000049: JUMPI 0000004a: PUSH2 0x0055 0000004d: JUMP 0000004e: JUMPDEST 0000004f: CALLDATASIZE 00000050: PUSH2 0x0055 00000053: JUMPI 00000054: STOP 00000055: JUMPDEST 00000056: PUSH1 0x00 00000058: DUP1 00000059: REVERT 0000005a: JUMPDEST 0000005b: CALLVALUE 0000005c: DUP1 0000005d: ISZERO 0000005e: PUSH2 0x0066 00000061: JUMPI 00000062: PUSH1 0x00 00000064: DUP1 00000065: REVERT 00000066: JUMPDEST 00000067: POP 00000068: PUSH2 0x0081 0000006b: PUSH1 0x04 0000006d: DUP1 0000006e: CALLDATASIZE 0000006f: SUB 00000070: DUP2 00000071: ADD 00000072: SWAP1 00000073: PUSH2 0x007c 00000076: SWAP2 00000077: SWAP1 00000078: PUSH2 0x0b39 0000007b: JUMP 0000007c: JUMPDEST 0000007d: PUSH2 0x0165 00000080: JUMP 00000081: JUMPDEST 00000082: PUSH1 0x40 00000084: MLOAD 00000085: PUSH2 0x008e 00000088: SWAP2 00000089: SWAP1 0000008a: PUSH2 0x0df4 0000008d: JUMP 0000008e: JUMPDEST 0000008f: PUSH1 0x40 00000091: MLOAD 00000092: DUP1 00000093: SWAP2 00000094: SUB 00000095: SWAP1 00000096: RETURN 00000097: JUMPDEST 00000098: CALLVALUE 00000099: DUP1 0000009a: ISZERO 0000009b: PUSH2 0x00a3 0000009e: JUMPI 0000009f: PUSH1 0x00 000000a1: DUP1 000000a2: REVERT 000000a3: JUMPDEST 000000a4: POP 000000a5: PUSH2 0x00ac 000000a8: PUSH2 0x0185 000000ab: JUMP 000000ac: JUMPDEST 000000ad: PUSH1 0x40 000000af: MLOAD 000000b0: PUSH2 0x00b9 000000b3: SWAP2 000000b4: SWAP1 000000b5: PUSH2 0x0f2f 000000b8: JUMP 000000b9: JUMPDEST 000000ba: PUSH1 0x40 000000bc: MLOAD 000000bd: DUP1 000000be: SWAP2 000000bf: SUB 000000c0: SWAP1 000000c1: RETURN 000000c2: JUMPDEST 000000c3: CALLVALUE 000000c4: DUP1 000000c5: ISZERO 000000c6: PUSH2 0x00ce 000000c9: JUMPI 000000ca: PUSH1 0x00 000000cc: DUP1 000000cd: REVERT 000000ce: JUMPDEST 000000cf: POP 000000d0: PUSH2 0x00e9 000000d3: PUSH1 0x04 000000d5: DUP1 000000d6: CALLDATASIZE 000000d7: SUB 000000d8: DUP2 000000d9: ADD 000000da: SWAP1 000000db: PUSH2 0x00e4 000000de: SWAP2 000000df: SWAP1 000000e0: PUSH2 0x0b62 000000e3: JUMP 000000e4: JUMPDEST 000000e5: PUSH2 0x0198 000000e8: JUMP 000000e9: JUMPDEST 000000ea: STOP 000000eb: JUMPDEST 000000ec: CALLVALUE 000000ed: DUP1 000000ee: ISZERO 000000ef: PUSH2 0x00f7 000000f2: JUMPI 000000f3: PUSH1 0x00 000000f5: DUP1 000000f6: REVERT 000000f7: JUMPDEST 000000f8: POP 000000f9: PUSH2 0x0112 000000fc: PUSH1 0x04 000000fe: DUP1 000000ff: CALLDATASIZE 00000100: SUB 00000101: DUP2 00000102: ADD 00000103: SWAP1 00000104: PUSH2 0x010d 00000107: SWAP2 00000108: SWAP1 00000109: PUSH2 0x0b39 0000010c: JUMP 0000010d: JUMPDEST 0000010e: PUSH2 0x042f 00000111: JUMP 00000112: JUMPDEST 00000113: PUSH1 0x40 00000115: MLOAD 00000116: PUSH2 0x011f 00000119: SWAP2 0000011a: SWAP1 0000011b: PUSH2 0x0f14 0000011e: JUMP 0000011f: JUMPDEST 00000120: PUSH1 0x40 00000122: MLOAD 00000123: DUP1 00000124: SWAP2 00000125: SUB 00000126: SWAP1 00000127: RETURN 00000128: JUMPDEST 00000129: CALLVALUE 0000012a: DUP1 0000012b: ISZERO 0000012c: PUSH2 0x0134 0000012f: JUMPI 00000130: PUSH1 0x00 00000132: DUP1 00000133: REVERT 00000134: JUMPDEST 00000135: POP 00000136: PUSH2 0x014f 00000139: PUSH1 0x04 0000013b: DUP1 0000013c: CALLDATASIZE 0000013d: SUB 0000013e: DUP2 0000013f: ADD 00000140: SWAP1 00000141: PUSH2 0x014a 00000144: SWAP2 00000145: SWAP1 00000146: PUSH2 0x0b39 00000149: JUMP 0000014a: JUMPDEST 0000014b: PUSH2 0x0447 0000014e: JUMP 0000014f: JUMPDEST 00000150: PUSH1 0x40 00000152: MLOAD 00000153: PUSH2 0x015c 00000156: SWAP2 00000157: SWAP1 00000158: PUSH2 0x0f14 0000015b: JUMP 0000015c: JUMPDEST 0000015d: PUSH1 0x40 0000015f: MLOAD 00000160: DUP1 00000161: SWAP2 00000162: SUB 00000163: SWAP1 00000164: RETURN 00000165: JUMPDEST 00000166: PUSH1 0x00 00000168: PUSH1 0x20 0000016a: MSTORE 0000016b: DUP1 0000016c: PUSH1 0x00 0000016e: MSTORE 0000016f: PUSH1 0x40 00000171: PUSH1 0x00 00000173: KECCAK256 00000174: PUSH1 0x00 00000176: SWAP2 00000177: POP 00000178: SLOAD 00000179: SWAP1 0000017a: PUSH2 0x0100 0000017d: EXP 0000017e: SWAP1 0000017f: DIV 00000180: PUSH1 0xff 00000182: AND 00000183: DUP2 00000184: JUMP 00000185: JUMPDEST 00000186: PUSH1 0x01 00000188: PUSH1 0x00 0000018a: SWAP1 0000018b: SLOAD 0000018c: SWAP1 0000018d: PUSH2 0x0100 00000190: EXP 00000191: SWAP1 00000192: DIV 00000193: PUSH1 0xff 00000195: AND 00000196: DUP2 00000197: JUMP 00000198: JUMPDEST 00000199: PUSH2 0x01a8 0000019c: DUP9 0000019d: DUP9 0000019e: DUP9 0000019f: DUP9 000001a0: DUP9 000001a1: DUP9 000001a2: DUP9 000001a3: DUP9 000001a4: PUSH2 0x04e2 000001a7: JUMP 000001a8: JUMPDEST 000001a9: PUSH1 0x00 000001ab: DUP1 000001ac: PUSH1 0x00 000001ae: DUP1 000001af: PUSH1 0x00 000001b1: DUP1 000001b2: PUSH2 0x01fe 000001b5: DUP9 000001b6: DUP9 000001b7: DUP1 000001b8: DUP1 000001b9: PUSH1 0x1f 000001bb: ADD 000001bc: PUSH1 0x20 000001be: DUP1 000001bf: SWAP2 000001c0: DIV 000001c1: MUL 000001c2: PUSH1 0x20 000001c4: ADD 000001c5: PUSH1 0x40 000001c7: MLOAD 000001c8: SWAP1 000001c9: DUP2 000001ca: ADD 000001cb: PUSH1 0x40 000001cd: MSTORE 000001ce: DUP1 000001cf: SWAP4 000001d0: SWAP3 000001d1: SWAP2 000001d2: SWAP1 000001d3: DUP2 000001d4: DUP2 000001d5: MSTORE 000001d6: PUSH1 0x20 000001d8: ADD 000001d9: DUP4 000001da: DUP4 000001db: DUP1 000001dc: DUP3 000001dd: DUP5 000001de: CALLDATACOPY 000001df: PUSH1 0x00 000001e1: DUP2 000001e2: DUP5 000001e3: ADD 000001e4: MSTORE 000001e5: PUSH1 0x1f 000001e7: NOT 000001e8: PUSH1 0x1f 000001ea: DUP3 000001eb: ADD 000001ec: AND 000001ed: SWAP1 000001ee: POP 000001ef: DUP1 000001f0: DUP4 000001f1: ADD 000001f2: SWAP3 000001f3: POP 000001f4: POP 000001f5: POP 000001f6: POP 000001f7: POP 000001f8: POP 000001f9: POP 000001fa: PUSH2 0x079a 000001fd: JUMP 000001fe: JUMPDEST 000001ff: SWAP6 00000200: POP 00000201: SWAP6 00000202: POP 00000203: SWAP6 00000204: POP 00000205: SWAP6 00000206: POP 00000207: SWAP6 00000208: POP 00000209: SWAP6 0000020a: POP 0000020b: PUSH2 0x0213 0000020e: CALLER 0000020f: PUSH2 0x0447 00000212: JUMP 00000213: JUMPDEST 00000214: DUP7 00000215: EQ 00000216: PUSH2 0x0254 00000219: JUMPI 0000021a: PUSH1 0x40 0000021c: MLOAD 0000021d: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000023e: DUP2 0000023f: MSTORE 00000240: PUSH1 0x04 00000242: ADD 00000243: PUSH2 0x024b 00000246: SWAP1 00000247: PUSH2 0x0e94 0000024a: JUMP 0000024b: JUMPDEST 0000024c: PUSH1 0x40 0000024e: MLOAD 0000024f: DUP1 00000250: SWAP2 00000251: SUB 00000252: SWAP1 00000253: REVERT 00000254: JUMPDEST 00000255: GASPRICE 00000256: DUP6 00000257: LT 00000258: ISZERO 00000259: PUSH2 0x0297 0000025c: JUMPI 0000025d: PUSH1 0x40 0000025f: MLOAD 00000260: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000281: DUP2 00000282: MSTORE 00000283: PUSH1 0x04 00000285: ADD 00000286: PUSH2 0x028e 00000289: SWAP1 0000028a: PUSH2 0x0e54 0000028d: JUMP 0000028e: JUMPDEST 0000028f: PUSH1 0x40 00000291: MLOAD 00000292: DUP1 00000293: SWAP2 00000294: SUB 00000295: SWAP1 00000296: REVERT 00000297: JUMPDEST 00000298: PUSH2 0x02a0 0000029b: DUP4 0000029c: PUSH2 0x08df 0000029f: JUMP 000002a0: JUMPDEST 000002a1: PUSH2 0x02df 000002a4: JUMPI 000002a5: PUSH1 0x40 000002a7: MLOAD 000002a8: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000002c9: DUP2 000002ca: MSTORE 000002cb: PUSH1 0x04 000002cd: ADD 000002ce: PUSH2 0x02d6 000002d1: SWAP1 000002d2: PUSH2 0x0eb4 000002d5: JUMP 000002d6: JUMPDEST 000002d7: PUSH1 0x40 000002d9: MLOAD 000002da: DUP1 000002db: SWAP2 000002dc: SUB 000002dd: SWAP1 000002de: REVERT 000002df: JUMPDEST 000002e0: PUSH1 0x01 000002e2: PUSH1 0x02 000002e4: PUSH1 0x00 000002e6: CALLER 000002e7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000002fc: AND 000002fd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000312: AND 00000313: DUP2 00000314: MSTORE 00000315: PUSH1 0x20 00000317: ADD 00000318: SWAP1 00000319: DUP2 0000031a: MSTORE 0000031b: PUSH1 0x20 0000031d: ADD 0000031e: PUSH1 0x00 00000320: KECCAK256 00000321: SLOAD 00000322: PUSH2 0x032b 00000325: SWAP2 00000326: SWAP1 00000327: PUSH2 0x0f71 0000032a: JUMP 0000032b: JUMPDEST 0000032c: PUSH1 0x02 0000032e: PUSH1 0x00 00000330: CALLER 00000331: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000346: AND 00000347: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000035c: AND 0000035d: DUP2 0000035e: MSTORE 0000035f: PUSH1 0x20 00000361: ADD 00000362: SWAP1 00000363: DUP2 00000364: MSTORE 00000365: PUSH1 0x20 00000367: ADD 00000368: PUSH1 0x00 0000036a: KECCAK256 0000036b: DUP2 0000036c: SWAP1 0000036d: SSTORE 0000036e: POP 0000036f: PUSH1 0x00 00000371: DUP4 00000372: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000387: AND 00000388: DUP6 00000389: DUP5 0000038a: DUP5 0000038b: PUSH1 0x40 0000038d: MLOAD 0000038e: PUSH2 0x0397 00000391: SWAP2 00000392: SWAP1 00000393: PUSH2 0x0ddd 00000396: JUMP 00000397: JUMPDEST 00000398: PUSH1 0x00 0000039a: PUSH1 0x40 0000039c: MLOAD 0000039d: DUP1 0000039e: DUP4 0000039f: SUB 000003a0: DUP2 000003a1: DUP6 000003a2: DUP9 000003a3: DUP9 000003a4: CALL 000003a5: SWAP4 000003a6: POP 000003a7: POP 000003a8: POP 000003a9: POP 000003aa: RETURNDATASIZE 000003ab: DUP1 000003ac: PUSH1 0x00 000003ae: DUP2 000003af: EQ 000003b0: PUSH2 0x03d5 000003b3: JUMPI 000003b4: PUSH1 0x40 000003b6: MLOAD 000003b7: SWAP2 000003b8: POP 000003b9: PUSH1 0x1f 000003bb: NOT 000003bc: PUSH1 0x3f 000003be: RETURNDATASIZE 000003bf: ADD 000003c0: AND 000003c1: DUP3 000003c2: ADD 000003c3: PUSH1 0x40 000003c5: MSTORE 000003c6: RETURNDATASIZE 000003c7: DUP3 000003c8: MSTORE 000003c9: RETURNDATASIZE 000003ca: PUSH1 0x00 000003cc: PUSH1 0x20 000003ce: DUP5 000003cf: ADD 000003d0: RETURNDATACOPY 000003d1: PUSH2 0x03da 000003d4: JUMP 000003d5: JUMPDEST 000003d6: PUSH1 0x60 000003d8: SWAP2 000003d9: POP 000003da: JUMPDEST 000003db: POP 000003dc: POP 000003dd: SWAP1 000003de: POP 000003df: DUP1 000003e0: PUSH2 0x041e 000003e3: JUMPI 000003e4: PUSH1 0x40 000003e6: MLOAD 000003e7: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000408: DUP2 00000409: MSTORE 0000040a: PUSH1 0x04 0000040c: ADD 0000040d: PUSH2 0x0415 00000410: SWAP1 00000411: PUSH2 0x0ef4 00000414: JUMP 00000415: JUMPDEST 00000416: PUSH1 0x40 00000418: MLOAD 00000419: DUP1 0000041a: SWAP2 0000041b: SUB 0000041c: SWAP1 0000041d: REVERT 0000041e: JUMPDEST 0000041f: POP 00000420: POP 00000421: POP 00000422: POP 00000423: POP 00000424: POP 00000425: POP 00000426: POP 00000427: POP 00000428: POP 00000429: POP 0000042a: POP 0000042b: POP 0000042c: POP 0000042d: POP 0000042e: JUMP 0000042f: JUMPDEST 00000430: PUSH1 0x02 00000432: PUSH1 0x20 00000434: MSTORE 00000435: DUP1 00000436: PUSH1 0x00 00000438: MSTORE 00000439: PUSH1 0x40 0000043b: PUSH1 0x00 0000043d: KECCAK256 0000043e: PUSH1 0x00 00000440: SWAP2 00000441: POP 00000442: SWAP1 00000443: POP 00000444: SLOAD 00000445: DUP2 00000446: JUMP 00000447: JUMPDEST 00000448: PUSH1 0x00 0000044a: PUSH1 0x02 0000044c: PUSH1 0x00 0000044e: DUP4 0000044f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000464: AND 00000465: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000047a: AND 0000047b: DUP2 0000047c: MSTORE 0000047d: PUSH1 0x20 0000047f: ADD 00000480: SWAP1 00000481: DUP2 00000482: MSTORE 00000483: PUSH1 0x20 00000485: ADD 00000486: PUSH1 0x00 00000488: KECCAK256 00000489: SLOAD 0000048a: PUSH5 0x0100000000 00000490: DUP4 00000491: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000004a6: AND 000004a7: ADDRESS 000004a8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000004bd: AND 000004be: PUSH2 0x04c7 000004c1: SWAP2 000004c2: SWAP1 000004c3: PUSH2 0x0f71 000004c6: JUMP 000004c7: JUMPDEST 000004c8: PUSH2 0x04d1 000004cb: SWAP2 000004cc: SWAP1 000004cd: PUSH2 0x0fc7 000004d0: JUMP 000004d1: JUMPDEST 000004d2: PUSH2 0x04db 000004d5: SWAP2 000004d6: SWAP1 000004d7: PUSH2 0x0f71 000004da: JUMP 000004db: JUMPDEST 000004dc: SWAP1 000004dd: POP 000004de: SWAP2 000004df: SWAP1 000004e0: POP 000004e1: JUMP 000004e2: JUMPDEST 000004e3: PUSH1 0x01 000004e5: PUSH1 0x00 000004e7: SWAP1 000004e8: SLOAD 000004e9: SWAP1 000004ea: PUSH2 0x0100 000004ed: EXP 000004ee: SWAP1 000004ef: DIV 000004f0: PUSH1 0xff 000004f2: AND 000004f3: PUSH1 0xff 000004f5: AND 000004f6: DUP7 000004f7: DUP7 000004f8: SWAP1 000004f9: POP 000004fa: EQ 000004fb: PUSH2 0x0539 000004fe: JUMPI 000004ff: PUSH1 0x40 00000501: MLOAD 00000502: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000523: DUP2 00000524: MSTORE 00000525: PUSH1 0x04 00000527: ADD 00000528: PUSH2 0x0530 0000052b: SWAP1 0000052c: PUSH2 0x0e74 0000052f: JUMP 00000530: JUMPDEST 00000531: PUSH1 0x40 00000533: MLOAD 00000534: DUP1 00000535: SWAP2 00000536: SUB 00000537: SWAP1 00000538: REVERT 00000539: JUMPDEST 0000053a: DUP4 0000053b: DUP4 0000053c: SWAP1 0000053d: POP 0000053e: DUP7 0000053f: DUP7 00000540: SWAP1 00000541: POP 00000542: EQ 00000543: DUP1 00000544: ISZERO 00000545: PUSH2 0x0553 00000548: JUMPI 00000549: POP 0000054a: DUP8 0000054b: DUP8 0000054c: SWAP1 0000054d: POP 0000054e: DUP7 0000054f: DUP7 00000550: SWAP1 00000551: POP 00000552: EQ 00000553: JUMPDEST 00000554: PUSH2 0x0592 00000557: JUMPI 00000558: PUSH1 0x40 0000055a: MLOAD 0000055b: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000057c: DUP2 0000057d: MSTORE 0000057e: PUSH1 0x04 00000580: ADD 00000581: PUSH2 0x0589 00000584: SWAP1 00000585: PUSH2 0x0ed4 00000588: JUMP 00000589: JUMPDEST 0000058a: PUSH1 0x40 0000058c: MLOAD 0000058d: DUP1 0000058e: SWAP2 0000058f: SUB 00000590: SWAP1 00000591: REVERT 00000592: JUMPDEST 00000593: PUSH1 0x00 00000595: DUP3 00000596: DUP3 00000597: PUSH1 0x40 00000599: MLOAD 0000059a: PUSH2 0x05a4 0000059d: SWAP3 0000059e: SWAP2 0000059f: SWAP1 000005a0: PUSH2 0x0dc4 000005a3: JUMP 000005a4: JUMPDEST 000005a5: PUSH1 0x40 000005a7: MLOAD 000005a8: DUP1 000005a9: SWAP2 000005aa: SUB 000005ab: SWAP1 000005ac: KECCAK256 000005ad: SWAP1 000005ae: POP 000005af: PUSH1 0x00 000005b1: DUP1 000005b2: JUMPDEST 000005b3: PUSH1 0x01 000005b5: PUSH1 0x00 000005b7: SWAP1 000005b8: SLOAD 000005b9: SWAP1 000005ba: PUSH2 0x0100 000005bd: EXP 000005be: SWAP1 000005bf: DIV 000005c0: PUSH1 0xff 000005c2: AND 000005c3: PUSH1 0xff 000005c5: AND 000005c6: DUP2 000005c7: LT 000005c8: ISZERO 000005c9: PUSH2 0x078d 000005cc: JUMPI 000005cd: PUSH1 0x00 000005cf: PUSH1 0x01 000005d1: DUP5 000005d2: DUP14 000005d3: DUP14 000005d4: DUP6 000005d5: DUP2 000005d6: DUP2 000005d7: LT 000005d8: PUSH2 0x060a 000005db: JUMPI 000005dc: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 000005fd: PUSH1 0x00 000005ff: MSTORE 00000600: PUSH1 0x32 00000602: PUSH1 0x04 00000604: MSTORE 00000605: PUSH1 0x24 00000607: PUSH1 0x00 00000609: REVERT 0000060a: JUMPDEST 0000060b: SWAP1 0000060c: POP 0000060d: PUSH1 0x20 0000060f: MUL 00000610: ADD 00000611: PUSH1 0x20 00000613: DUP2 00000614: ADD 00000615: SWAP1 00000616: PUSH2 0x061f 00000619: SWAP2 0000061a: SWAP1 0000061b: PUSH2 0x0c37 0000061e: JUMP 0000061f: JUMPDEST 00000620: DUP13 00000621: DUP13 00000622: DUP7 00000623: DUP2 00000624: DUP2 00000625: LT 00000626: PUSH2 0x0658 00000629: JUMPI 0000062a: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 0000064b: PUSH1 0x00 0000064d: MSTORE 0000064e: PUSH1 0x32 00000650: PUSH1 0x04 00000652: MSTORE 00000653: PUSH1 0x24 00000655: PUSH1 0x00 00000657: REVERT 00000658: JUMPDEST 00000659: SWAP1 0000065a: POP 0000065b: PUSH1 0x20 0000065d: MUL 0000065e: ADD 0000065f: CALLDATALOAD 00000660: DUP12 00000661: DUP12 00000662: DUP8 00000663: DUP2 00000664: DUP2 00000665: LT 00000666: PUSH2 0x0698 00000669: JUMPI 0000066a: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 0000068b: PUSH1 0x00 0000068d: MSTORE 0000068e: PUSH1 0x32 00000690: PUSH1 0x04 00000692: MSTORE 00000693: PUSH1 0x24 00000695: PUSH1 0x00 00000697: REVERT 00000698: JUMPDEST 00000699: SWAP1 0000069a: POP 0000069b: PUSH1 0x20 0000069d: MUL 0000069e: ADD 0000069f: CALLDATALOAD 000006a0: PUSH1 0x40 000006a2: MLOAD 000006a3: PUSH1 0x00 000006a5: DUP2 000006a6: MSTORE 000006a7: PUSH1 0x20 000006a9: ADD 000006aa: PUSH1 0x40 000006ac: MSTORE 000006ad: PUSH1 0x40 000006af: MLOAD 000006b0: PUSH2 0x06bc 000006b3: SWAP5 000006b4: SWAP4 000006b5: SWAP3 000006b6: SWAP2 000006b7: SWAP1 000006b8: PUSH2 0x0e0f 000006bb: JUMP 000006bc: JUMPDEST 000006bd: PUSH1 0x20 000006bf: PUSH1 0x40 000006c1: MLOAD 000006c2: PUSH1 0x20 000006c4: DUP2 000006c5: SUB 000006c6: SWAP1 000006c7: DUP1 000006c8: DUP5 000006c9: SUB 000006ca: SWAP1 000006cb: DUP6 000006cc: GAS 000006cd: STATICCALL 000006ce: ISZERO 000006cf: DUP1 000006d0: ISZERO 000006d1: PUSH2 0x06de 000006d4: JUMPI 000006d5: RETURNDATASIZE 000006d6: PUSH1 0x00 000006d8: DUP1 000006d9: RETURNDATACOPY 000006da: RETURNDATASIZE 000006db: PUSH1 0x00 000006dd: REVERT 000006de: JUMPDEST 000006df: POP 000006e0: POP 000006e1: POP 000006e2: PUSH1 0x20 000006e4: PUSH1 0x40 000006e6: MLOAD 000006e7: SUB 000006e8: MLOAD 000006e9: SWAP1 000006ea: POP 000006eb: DUP3 000006ec: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000701: AND 00000702: DUP2 00000703: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000718: AND 00000719: GT 0000071a: DUP1 0000071b: ISZERO 0000071c: PUSH2 0x076d 0000071f: JUMPI 00000720: POP 00000721: PUSH1 0x00 00000723: DUP1 00000724: DUP3 00000725: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000073a: AND 0000073b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000750: AND 00000751: DUP2 00000752: MSTORE 00000753: PUSH1 0x20 00000755: ADD 00000756: SWAP1 00000757: DUP2 00000758: MSTORE 00000759: PUSH1 0x20 0000075b: ADD 0000075c: PUSH1 0x00 0000075e: KECCAK256 0000075f: PUSH1 0x00 00000761: SWAP1 00000762: SLOAD 00000763: SWAP1 00000764: PUSH2 0x0100 00000767: EXP 00000768: SWAP1 00000769: DIV 0000076a: PUSH1 0xff 0000076c: AND 0000076d: JUMPDEST 0000076e: PUSH2 0x0776 00000771: JUMPI 00000772: PUSH1 0x00 00000774: DUP1 00000775: REVERT 00000776: JUMPDEST 00000777: DUP1 00000778: SWAP3 00000779: POP 0000077a: POP 0000077b: DUP1 0000077c: DUP1 0000077d: PUSH2 0x0785 00000780: SWAP1 00000781: PUSH2 0x10f6 00000784: JUMP 00000785: JUMPDEST 00000786: SWAP2 00000787: POP 00000788: POP 00000789: PUSH2 0x05b2 0000078c: JUMP 0000078d: JUMPDEST 0000078e: POP 0000078f: POP 00000790: POP 00000791: POP 00000792: POP 00000793: POP 00000794: POP 00000795: POP 00000796: POP 00000797: POP 00000798: POP 00000799: JUMP 0000079a: JUMPDEST 0000079b: PUSH1 0x00 0000079d: DUP1 0000079e: PUSH1 0x00 000007a0: DUP1 000007a1: PUSH1 0x00 000007a3: PUSH1 0x60 000007a5: PUSH1 0x00 000007a7: DUP8 000007a8: MLOAD 000007a9: GT 000007aa: PUSH2 0x07b2 000007ad: JUMPI 000007ae: PUSH1 0x00 000007b0: DUP1 000007b1: REVERT 000007b2: JUMPDEST 000007b3: PUSH1 0x00 000007b5: DUP1 000007b6: PUSH1 0x00 000007b8: PUSH1 0x20 000007ba: DUP11 000007bb: ADD 000007bc: SWAP3 000007bd: POP 000007be: PUSH2 0x07c6 000007c1: DUP4 000007c2: PUSH2 0x08ea 000007c5: JUMP 000007c6: JUMPDEST 000007c7: DUP1 000007c8: SWAP3 000007c9: POP 000007ca: DUP2 000007cb: SWAP4 000007cc: POP 000007cd: POP 000007ce: POP 000007cf: DUP10 000007d0: MLOAD 000007d1: DUP2 000007d2: DUP5 000007d3: DUP5 000007d4: PUSH2 0x07dd 000007d7: SWAP2 000007d8: SWAP1 000007d9: PUSH2 0x1021 000007dc: JUMP 000007dd: JUMPDEST 000007de: PUSH2 0x07e7 000007e1: SWAP2 000007e2: SWAP1 000007e3: PUSH2 0x0f71 000007e6: JUMP 000007e7: JUMPDEST 000007e8: EQ 000007e9: PUSH2 0x07f1 000007ec: JUMPI 000007ed: PUSH1 0x00 000007ef: DUP1 000007f0: REVERT 000007f1: JUMPDEST 000007f2: PUSH2 0x07fa 000007f5: DUP3 000007f6: PUSH2 0x0957 000007f9: JUMP 000007fa: JUMPDEST 000007fb: DUP1 000007fc: SWAP3 000007fd: POP 000007fe: DUP2 000007ff: SWAP4 00000800: POP 00000801: POP 00000802: POP 00000803: PUSH2 0x080c 00000806: DUP3 00000807: DUP3 00000808: PUSH2 0x09dc 0000080b: JUMP 0000080c: JUMPDEST 0000080d: SWAP9 0000080e: POP 0000080f: PUSH2 0x0822 00000812: DUP2 00000813: DUP4 00000814: PUSH2 0x081d 00000817: SWAP2 00000818: SWAP1 00000819: PUSH2 0x0f71 0000081c: JUMP 0000081d: JUMPDEST 0000081e: PUSH2 0x0957 00000821: JUMP 00000822: JUMPDEST 00000823: DUP1 00000824: SWAP3 00000825: POP 00000826: DUP2 00000827: SWAP4 00000828: POP 00000829: POP 0000082a: POP 0000082b: PUSH2 0x0834 0000082e: DUP3 0000082f: DUP3 00000830: PUSH2 0x09dc 00000833: JUMP 00000834: JUMPDEST 00000835: SWAP8 00000836: POP 00000837: PUSH2 0x084a 0000083a: DUP2 0000083b: DUP4 0000083c: PUSH2 0x0845 0000083f: SWAP2 00000840: SWAP1 00000841: PUSH2 0x0f71 00000844: JUMP 00000845: JUMPDEST 00000846: PUSH2 0x0957 00000849: JUMP 0000084a: JUMPDEST 0000084b: DUP1 0000084c: SWAP3 0000084d: POP 0000084e: DUP2 0000084f: SWAP4 00000850: POP 00000851: POP 00000852: POP 00000853: PUSH2 0x085c 00000856: DUP3 00000857: DUP3 00000858: PUSH2 0x09dc 0000085b: JUMP 0000085c: JUMPDEST 0000085d: SWAP7 0000085e: POP 0000085f: PUSH2 0x0872 00000862: DUP2 00000863: DUP4 00000864: PUSH2 0x086d 00000867: SWAP2 00000868: SWAP1 00000869: PUSH2 0x0f71 0000086c: JUMP 0000086d: JUMPDEST 0000086e: PUSH2 0x0957 00000871: JUMP 00000872: JUMPDEST 00000873: DUP1 00000874: SWAP3 00000875: POP 00000876: DUP2 00000877: SWAP4 00000878: POP 00000879: POP 0000087a: POP 0000087b: PUSH2 0x0884 0000087e: DUP3 0000087f: DUP3 00000880: PUSH2 0x0a11 00000883: JUMP 00000884: JUMPDEST 00000885: SWAP6 00000886: POP 00000887: PUSH2 0x089a 0000088a: DUP2 0000088b: DUP4 0000088c: PUSH2 0x0895 0000088f: SWAP2 00000890: SWAP1 00000891: PUSH2 0x0f71 00000894: JUMP 00000895: JUMPDEST 00000896: PUSH2 0x0957 00000899: JUMP 0000089a: JUMPDEST 0000089b: DUP1 0000089c: SWAP3 0000089d: POP 0000089e: DUP2 0000089f: SWAP4 000008a0: POP 000008a1: POP 000008a2: POP 000008a3: PUSH2 0x08ac 000008a6: DUP3 000008a7: DUP3 000008a8: PUSH2 0x09dc 000008ab: JUMP 000008ac: JUMPDEST 000008ad: SWAP5 000008ae: POP 000008af: PUSH2 0x08c2 000008b2: DUP2 000008b3: DUP4 000008b4: PUSH2 0x08bd 000008b7: SWAP2 000008b8: SWAP1 000008b9: PUSH2 0x0f71 000008bc: JUMP 000008bd: JUMPDEST 000008be: PUSH2 0x0957 000008c1: JUMP 000008c2: JUMPDEST 000008c3: DUP1 000008c4: SWAP3 000008c5: POP 000008c6: DUP2 000008c7: SWAP4 000008c8: POP 000008c9: POP 000008ca: POP 000008cb: PUSH1 0x20 000008cd: DUP3 000008ce: SUB 000008cf: SWAP4 000008d0: POP 000008d1: DUP1 000008d2: DUP5 000008d3: MSTORE 000008d4: POP 000008d5: POP 000008d6: POP 000008d7: SWAP2 000008d8: SWAP4 000008d9: SWAP6 000008da: POP 000008db: SWAP2 000008dc: SWAP4 000008dd: SWAP6 000008de: JUMP 000008df: JUMPDEST 000008e0: PUSH1 0x00 000008e2: PUSH1 0x01 000008e4: SWAP1 000008e5: POP 000008e6: SWAP2 000008e7: SWAP1 000008e8: POP 000008e9: JUMP 000008ea: JUMPDEST 000008eb: PUSH1 0x00 000008ed: DUP1 000008ee: PUSH1 0x00 000008f0: DUP4 000008f1: MLOAD 000008f2: PUSH1 0x00 000008f4: BYTE 000008f5: SWAP1 000008f6: POP 000008f7: PUSH1 0xf8 000008f9: DUP2 000008fa: LT 000008fb: PUSH2 0x0920 000008fe: JUMPI 000008ff: PUSH1 0xf7 00000901: DUP2 00000902: SUB 00000903: DUP1 00000904: PUSH1 0x20 00000906: SUB 00000907: PUSH2 0x0100 0000090a: EXP 0000090b: PUSH1 0x01 0000090d: DUP7 0000090e: ADD 0000090f: MLOAD 00000910: DIV 00000911: SWAP3 00000912: POP 00000913: DUP1 00000914: DUP6 00000915: ADD 00000916: PUSH1 0x01 00000918: ADD 00000919: SWAP4 0000091a: POP 0000091b: POP 0000091c: PUSH2 0x0951 0000091f: JUMP 00000920: JUMPDEST 00000921: PUSH1 0xc0 00000923: DUP2 00000924: LT 00000925: PUSH2 0x094b 00000928: JUMPI 00000929: PUSH1 0xc0 0000092b: DUP2 0000092c: PUSH2 0x0935 0000092f: SWAP2 00000930: SWAP1 00000931: PUSH2 0x1021 00000934: JUMP 00000935: JUMPDEST 00000936: SWAP2 00000937: POP 00000938: PUSH1 0x01 0000093a: DUP5 0000093b: PUSH2 0x0944 0000093e: SWAP2 0000093f: SWAP1 00000940: PUSH2 0x0f71 00000943: JUMP 00000944: JUMPDEST 00000945: SWAP3 00000946: POP 00000947: PUSH2 0x0950 0000094a: JUMP 0000094b: JUMPDEST 0000094c: PUSH1 0x00 0000094e: DUP1 0000094f: REVERT 00000950: JUMPDEST 00000951: JUMPDEST 00000952: POP 00000953: SWAP2 00000954: POP 00000955: SWAP2 00000956: JUMP 00000957: JUMPDEST 00000958: PUSH1 0x00 0000095a: DUP1 0000095b: PUSH1 0x00 0000095d: DUP4 0000095e: MLOAD 0000095f: PUSH1 0x00 00000961: BYTE 00000962: SWAP1 00000963: POP 00000964: PUSH1 0x80 00000966: DUP2 00000967: LT 00000968: ISZERO 00000969: PUSH2 0x0978 0000096c: JUMPI 0000096d: PUSH1 0x01 0000096f: SWAP2 00000970: POP 00000971: DUP4 00000972: SWAP3 00000973: POP 00000974: PUSH2 0x09d6 00000977: JUMP 00000978: JUMPDEST 00000979: PUSH1 0xb8 0000097b: DUP2 0000097c: LT 0000097d: ISZERO 0000097e: PUSH2 0x09a4 00000981: JUMPI 00000982: PUSH1 0x80 00000984: DUP2 00000985: PUSH2 0x098e 00000988: SWAP2 00000989: SWAP1 0000098a: PUSH2 0x1021 0000098d: JUMP 0000098e: JUMPDEST 0000098f: SWAP2 00000990: POP 00000991: PUSH1 0x01 00000993: DUP5 00000994: PUSH2 0x099d 00000997: SWAP2 00000998: SWAP1 00000999: PUSH2 0x0f71 0000099c: JUMP 0000099d: JUMPDEST 0000099e: SWAP3 0000099f: POP 000009a0: PUSH2 0x09d5 000009a3: JUMP 000009a4: JUMPDEST 000009a5: PUSH1 0xc0 000009a7: DUP2 000009a8: LT 000009a9: ISZERO 000009aa: PUSH2 0x09cf 000009ad: JUMPI 000009ae: PUSH1 0xb7 000009b0: DUP2 000009b1: SUB 000009b2: DUP1 000009b3: PUSH1 0x20 000009b5: SUB 000009b6: PUSH2 0x0100 000009b9: EXP 000009ba: PUSH1 0x01 000009bc: DUP7 000009bd: ADD 000009be: MLOAD 000009bf: DIV 000009c0: SWAP3 000009c1: POP 000009c2: DUP1 000009c3: DUP6 000009c4: ADD 000009c5: PUSH1 0x01 000009c7: ADD 000009c8: SWAP4 000009c9: POP 000009ca: POP 000009cb: PUSH2 0x09d4 000009ce: JUMP 000009cf: JUMPDEST 000009d0: PUSH1 0x00 000009d2: DUP1 000009d3: REVERT 000009d4: JUMPDEST 000009d5: JUMPDEST 000009d6: JUMPDEST 000009d7: POP 000009d8: SWAP2 000009d9: POP 000009da: SWAP2 000009db: JUMP 000009dc: JUMPDEST 000009dd: PUSH1 0x00 000009df: DUP1 000009e0: DUP3 000009e1: EQ 000009e2: ISZERO 000009e3: PUSH2 0x09ef 000009e6: JUMPI 000009e7: PUSH1 0x00 000009e9: SWAP1 000009ea: POP 000009eb: PUSH2 0x0a0b 000009ee: JUMP 000009ef: JUMPDEST 000009f0: PUSH1 0x20 000009f2: DUP3 000009f3: GT 000009f4: ISZERO 000009f5: PUSH2 0x09fd 000009f8: JUMPI 000009f9: PUSH1 0x00 000009fb: DUP1 000009fc: REVERT 000009fd: JUMPDEST 000009fe: DUP2 000009ff: PUSH1 0x20 00000a01: SUB 00000a02: PUSH2 0x0100 00000a05: EXP 00000a06: DUP4 00000a07: MLOAD 00000a08: DIV 00000a09: SWAP1 00000a0a: POP 00000a0b: JUMPDEST 00000a0c: SWAP3 00000a0d: SWAP2 00000a0e: POP 00000a0f: POP 00000a10: JUMP 00000a11: JUMPDEST 00000a12: PUSH1 0x00 00000a14: PUSH1 0x14 00000a16: DUP3 00000a17: EQ 00000a18: PUSH2 0x0a20 00000a1b: JUMPI 00000a1c: PUSH1 0x00 00000a1e: DUP1 00000a1f: REVERT 00000a20: JUMPDEST 00000a21: PUSH1 0x0c 00000a23: PUSH2 0x0100 00000a26: EXP 00000a27: DUP4 00000a28: MLOAD 00000a29: DIV 00000a2a: SWAP1 00000a2b: POP 00000a2c: SWAP3 00000a2d: SWAP2 00000a2e: POP 00000a2f: POP 00000a30: JUMP 00000a31: JUMPDEST 00000a32: PUSH1 0x00 00000a34: DUP2 00000a35: CALLDATALOAD 00000a36: SWAP1 00000a37: POP 00000a38: PUSH2 0x0a40 00000a3b: DUP2 00000a3c: PUSH2 0x1264 00000a3f: JUMP 00000a40: JUMPDEST 00000a41: SWAP3 00000a42: SWAP2 00000a43: POP 00000a44: POP 00000a45: JUMP 00000a46: JUMPDEST 00000a47: PUSH1 0x00 00000a49: DUP1 00000a4a: DUP4 00000a4b: PUSH1 0x1f 00000a4d: DUP5 00000a4e: ADD 00000a4f: SLT 00000a50: PUSH2 0x0a58 00000a53: JUMPI 00000a54: PUSH1 0x00 00000a56: DUP1 00000a57: REVERT 00000a58: JUMPDEST 00000a59: DUP3 00000a5a: CALLDATALOAD 00000a5b: SWAP1 00000a5c: POP 00000a5d: PUSH8 0xffffffffffffffff 00000a66: DUP2 00000a67: GT 00000a68: ISZERO 00000a69: PUSH2 0x0a71 00000a6c: JUMPI 00000a6d: PUSH1 0x00 00000a6f: DUP1 00000a70: REVERT 00000a71: JUMPDEST 00000a72: PUSH1 0x20 00000a74: DUP4 00000a75: ADD 00000a76: SWAP2 00000a77: POP 00000a78: DUP4 00000a79: PUSH1 0x20 00000a7b: DUP3 00000a7c: MUL 00000a7d: DUP4 00000a7e: ADD 00000a7f: GT 00000a80: ISZERO 00000a81: PUSH2 0x0a89 00000a84: JUMPI 00000a85: PUSH1 0x00 00000a87: DUP1 00000a88: REVERT 00000a89: JUMPDEST 00000a8a: SWAP3 00000a8b: POP 00000a8c: SWAP3 00000a8d: SWAP1 00000a8e: POP 00000a8f: JUMP 00000a90: JUMPDEST 00000a91: PUSH1 0x00 00000a93: DUP1 00000a94: DUP4 00000a95: PUSH1 0x1f 00000a97: DUP5 00000a98: ADD 00000a99: SLT 00000a9a: PUSH2 0x0aa2 00000a9d: JUMPI 00000a9e: PUSH1 0x00 00000aa0: DUP1 00000aa1: REVERT 00000aa2: JUMPDEST 00000aa3: DUP3 00000aa4: CALLDATALOAD 00000aa5: SWAP1 00000aa6: POP 00000aa7: PUSH8 0xffffffffffffffff 00000ab0: DUP2 00000ab1: GT 00000ab2: ISZERO 00000ab3: PUSH2 0x0abb 00000ab6: JUMPI 00000ab7: PUSH1 0x00 00000ab9: DUP1 00000aba: REVERT 00000abb: JUMPDEST 00000abc: PUSH1 0x20 00000abe: DUP4 00000abf: ADD 00000ac0: SWAP2 00000ac1: POP 00000ac2: DUP4 00000ac3: PUSH1 0x20 00000ac5: DUP3 00000ac6: MUL 00000ac7: DUP4 00000ac8: ADD 00000ac9: GT 00000aca: ISZERO 00000acb: PUSH2 0x0ad3 00000ace: JUMPI 00000acf: PUSH1 0x00 00000ad1: DUP1 00000ad2: REVERT 00000ad3: JUMPDEST 00000ad4: SWAP3 00000ad5: POP 00000ad6: SWAP3 00000ad7: SWAP1 00000ad8: POP 00000ad9: JUMP 00000ada: JUMPDEST 00000adb: PUSH1 0x00 00000add: DUP1 00000ade: DUP4 00000adf: PUSH1 0x1f 00000ae1: DUP5 00000ae2: ADD 00000ae3: SLT 00000ae4: PUSH2 0x0aec 00000ae7: JUMPI 00000ae8: PUSH1 0x00 00000aea: DUP1 00000aeb: REVERT 00000aec: JUMPDEST 00000aed: DUP3 00000aee: CALLDATALOAD 00000aef: SWAP1 00000af0: POP 00000af1: PUSH8 0xffffffffffffffff 00000afa: DUP2 00000afb: GT 00000afc: ISZERO 00000afd: PUSH2 0x0b05 00000b00: JUMPI 00000b01: PUSH1 0x00 00000b03: DUP1 00000b04: REVERT 00000b05: JUMPDEST 00000b06: PUSH1 0x20 00000b08: DUP4 00000b09: ADD 00000b0a: SWAP2 00000b0b: POP 00000b0c: DUP4 00000b0d: PUSH1 0x01 00000b0f: DUP3 00000b10: MUL 00000b11: DUP4 00000b12: ADD 00000b13: GT 00000b14: ISZERO 00000b15: PUSH2 0x0b1d 00000b18: JUMPI 00000b19: PUSH1 0x00 00000b1b: DUP1 00000b1c: REVERT 00000b1d: JUMPDEST 00000b1e: SWAP3 00000b1f: POP 00000b20: SWAP3 00000b21: SWAP1 00000b22: POP 00000b23: JUMP 00000b24: JUMPDEST 00000b25: PUSH1 0x00 00000b27: DUP2 00000b28: CALLDATALOAD 00000b29: SWAP1 00000b2a: POP 00000b2b: PUSH2 0x0b33 00000b2e: DUP2 00000b2f: PUSH2 0x127b 00000b32: JUMP 00000b33: JUMPDEST 00000b34: SWAP3 00000b35: SWAP2 00000b36: POP 00000b37: POP 00000b38: JUMP 00000b39: JUMPDEST 00000b3a: PUSH1 0x00 00000b3c: PUSH1 0x20 00000b3e: DUP3 00000b3f: DUP5 00000b40: SUB 00000b41: SLT 00000b42: ISZERO 00000b43: PUSH2 0x0b4b 00000b46: JUMPI 00000b47: PUSH1 0x00 00000b49: DUP1 00000b4a: REVERT 00000b4b: JUMPDEST 00000b4c: PUSH1 0x00 00000b4e: PUSH2 0x0b59 00000b51: DUP5 00000b52: DUP3 00000b53: DUP6 00000b54: ADD 00000b55: PUSH2 0x0a31 00000b58: JUMP 00000b59: JUMPDEST 00000b5a: SWAP2 00000b5b: POP 00000b5c: POP 00000b5d: SWAP3 00000b5e: SWAP2 00000b5f: POP 00000b60: POP 00000b61: JUMP 00000b62: JUMPDEST 00000b63: PUSH1 0x00 00000b65: DUP1 00000b66: PUSH1 0x00 00000b68: DUP1 00000b69: PUSH1 0x00 00000b6b: DUP1 00000b6c: PUSH1 0x00 00000b6e: DUP1 00000b6f: PUSH1 0x80 00000b71: DUP10 00000b72: DUP12 00000b73: SUB 00000b74: SLT 00000b75: ISZERO 00000b76: PUSH2 0x0b7e 00000b79: JUMPI 00000b7a: PUSH1 0x00 00000b7c: DUP1 00000b7d: REVERT 00000b7e: JUMPDEST 00000b7f: PUSH1 0x00 00000b81: DUP10 00000b82: ADD 00000b83: CALLDATALOAD 00000b84: PUSH8 0xffffffffffffffff 00000b8d: DUP2 00000b8e: GT 00000b8f: ISZERO 00000b90: PUSH2 0x0b98 00000b93: JUMPI 00000b94: PUSH1 0x00 00000b96: DUP1 00000b97: REVERT 00000b98: JUMPDEST 00000b99: PUSH2 0x0ba4 00000b9c: DUP12 00000b9d: DUP3 00000b9e: DUP13 00000b9f: ADD 00000ba0: PUSH2 0x0a90 00000ba3: JUMP 00000ba4: JUMPDEST 00000ba5: SWAP9 00000ba6: POP 00000ba7: SWAP9 00000ba8: POP 00000ba9: POP 00000baa: PUSH1 0x20 00000bac: DUP10 00000bad: ADD 00000bae: CALLDATALOAD 00000baf: PUSH8 0xffffffffffffffff 00000bb8: DUP2 00000bb9: GT 00000bba: ISZERO 00000bbb: PUSH2 0x0bc3 00000bbe: JUMPI 00000bbf: PUSH1 0x00 00000bc1: DUP1 00000bc2: REVERT 00000bc3: JUMPDEST 00000bc4: PUSH2 0x0bcf 00000bc7: DUP12 00000bc8: DUP3 00000bc9: DUP13 00000bca: ADD 00000bcb: PUSH2 0x0a46 00000bce: JUMP 00000bcf: JUMPDEST 00000bd0: SWAP7 00000bd1: POP 00000bd2: SWAP7 00000bd3: POP 00000bd4: POP 00000bd5: PUSH1 0x40 00000bd7: DUP10 00000bd8: ADD 00000bd9: CALLDATALOAD 00000bda: PUSH8 0xffffffffffffffff 00000be3: DUP2 00000be4: GT 00000be5: ISZERO 00000be6: PUSH2 0x0bee 00000be9: JUMPI 00000bea: PUSH1 0x00 00000bec: DUP1 00000bed: REVERT 00000bee: JUMPDEST 00000bef: PUSH2 0x0bfa 00000bf2: DUP12 00000bf3: DUP3 00000bf4: DUP13 00000bf5: ADD 00000bf6: PUSH2 0x0a46 00000bf9: JUMP 00000bfa: JUMPDEST 00000bfb: SWAP5 00000bfc: POP 00000bfd: SWAP5 00000bfe: POP 00000bff: POP 00000c00: PUSH1 0x60 00000c02: DUP10 00000c03: ADD 00000c04: CALLDATALOAD 00000c05: PUSH8 0xffffffffffffffff 00000c0e: DUP2 00000c0f: GT 00000c10: ISZERO 00000c11: PUSH2 0x0c19 00000c14: JUMPI 00000c15: PUSH1 0x00 00000c17: DUP1 00000c18: REVERT 00000c19: JUMPDEST 00000c1a: PUSH2 0x0c25 00000c1d: DUP12 00000c1e: DUP3 00000c1f: DUP13 00000c20: ADD 00000c21: PUSH2 0x0ada 00000c24: JUMP 00000c25: JUMPDEST 00000c26: SWAP3 00000c27: POP 00000c28: SWAP3 00000c29: POP 00000c2a: POP 00000c2b: SWAP3 00000c2c: SWAP6 00000c2d: SWAP9 00000c2e: POP 00000c2f: SWAP3 00000c30: SWAP6 00000c31: SWAP9 00000c32: SWAP1 00000c33: SWAP4 00000c34: SWAP7 00000c35: POP 00000c36: JUMP 00000c37: JUMPDEST 00000c38: PUSH1 0x00 00000c3a: PUSH1 0x20 00000c3c: DUP3 00000c3d: DUP5 00000c3e: SUB 00000c3f: SLT 00000c40: ISZERO 00000c41: PUSH2 0x0c49 00000c44: JUMPI 00000c45: PUSH1 0x00 00000c47: DUP1 00000c48: REVERT 00000c49: JUMPDEST 00000c4a: PUSH1 0x00 00000c4c: PUSH2 0x0c57 00000c4f: DUP5 00000c50: DUP3 00000c51: DUP6 00000c52: ADD 00000c53: PUSH2 0x0b24 00000c56: JUMP 00000c57: JUMPDEST 00000c58: SWAP2 00000c59: POP 00000c5a: POP 00000c5b: SWAP3 00000c5c: SWAP2 00000c5d: POP 00000c5e: POP 00000c5f: JUMP 00000c60: JUMPDEST 00000c61: PUSH2 0x0c69 00000c64: DUP2 00000c65: PUSH2 0x1067 00000c68: JUMP 00000c69: JUMPDEST 00000c6a: DUP3 00000c6b: MSTORE 00000c6c: POP 00000c6d: POP 00000c6e: JUMP 00000c6f: JUMPDEST 00000c70: PUSH2 0x0c78 00000c73: DUP2 00000c74: PUSH2 0x1073 00000c77: JUMP 00000c78: JUMPDEST 00000c79: DUP3 00000c7a: MSTORE 00000c7b: POP 00000c7c: POP 00000c7d: JUMP 00000c7e: JUMPDEST 00000c7f: PUSH1 0x00 00000c81: PUSH2 0x0c8a 00000c84: DUP4 00000c85: DUP6 00000c86: PUSH2 0x0f55 00000c89: JUMP 00000c8a: JUMPDEST 00000c8b: SWAP4 00000c8c: POP 00000c8d: PUSH2 0x0c97 00000c90: DUP4 00000c91: DUP6 00000c92: DUP5 00000c93: PUSH2 0x10b4 00000c96: JUMP 00000c97: JUMPDEST 00000c98: DUP3 00000c99: DUP5 00000c9a: ADD 00000c9b: SWAP1 00000c9c: POP 00000c9d: SWAP4 00000c9e: SWAP3 00000c9f: POP 00000ca0: POP 00000ca1: POP 00000ca2: JUMP 00000ca3: JUMPDEST 00000ca4: PUSH1 0x00 00000ca6: PUSH2 0x0cae 00000ca9: DUP3 00000caa: PUSH2 0x0f4a 00000cad: JUMP 00000cae: JUMPDEST 00000caf: PUSH2 0x0cb8 00000cb2: DUP2 00000cb3: DUP6 00000cb4: PUSH2 0x0f55 00000cb7: JUMP 00000cb8: JUMPDEST 00000cb9: SWAP4 00000cba: POP 00000cbb: PUSH2 0x0cc8 00000cbe: DUP2 00000cbf: DUP6 00000cc0: PUSH1 0x20 00000cc2: DUP7 00000cc3: ADD 00000cc4: PUSH2 0x10c3 00000cc7: JUMP 00000cc8: JUMPDEST 00000cc9: DUP1 00000cca: DUP5 00000ccb: ADD 00000ccc: SWAP2 00000ccd: POP 00000cce: POP 00000ccf: SWAP3 00000cd0: SWAP2 00000cd1: POP 00000cd2: POP 00000cd3: JUMP 00000cd4: JUMPDEST 00000cd5: PUSH1 0x00 00000cd7: PUSH2 0x0ce1 00000cda: PUSH1 0x11 00000cdc: DUP4 00000cdd: PUSH2 0x0f60 00000ce0: JUMP 00000ce1: JUMPDEST 00000ce2: SWAP2 00000ce3: POP 00000ce4: PUSH2 0x0cec 00000ce7: DUP3 00000ce8: PUSH2 0x116e 00000ceb: JUMP 00000cec: JUMPDEST 00000ced: PUSH1 0x20 00000cef: DUP3 00000cf0: ADD 00000cf1: SWAP1 00000cf2: POP 00000cf3: SWAP2 00000cf4: SWAP1 00000cf5: POP 00000cf6: JUMP 00000cf7: JUMPDEST 00000cf8: PUSH1 0x00 00000cfa: PUSH2 0x0d04 00000cfd: PUSH1 0x15 00000cff: DUP4 00000d00: PUSH2 0x0f60 00000d03: JUMP 00000d04: JUMPDEST 00000d05: SWAP2 00000d06: POP 00000d07: PUSH2 0x0d0f 00000d0a: DUP3 00000d0b: PUSH2 0x1197 00000d0e: JUMP 00000d0f: JUMPDEST 00000d10: PUSH1 0x20 00000d12: DUP3 00000d13: ADD 00000d14: SWAP1 00000d15: POP 00000d16: SWAP2 00000d17: SWAP1 00000d18: POP 00000d19: JUMP 00000d1a: JUMPDEST 00000d1b: PUSH1 0x00 00000d1d: PUSH2 0x0d27 00000d20: PUSH1 0x0d 00000d22: DUP4 00000d23: PUSH2 0x0f60 00000d26: JUMP 00000d27: JUMPDEST 00000d28: SWAP2 00000d29: POP 00000d2a: PUSH2 0x0d32 00000d2d: DUP3 00000d2e: PUSH2 0x11c0 00000d31: JUMP 00000d32: JUMPDEST 00000d33: PUSH1 0x20 00000d35: DUP3 00000d36: ADD 00000d37: SWAP1 00000d38: POP 00000d39: SWAP2 00000d3a: SWAP1 00000d3b: POP 00000d3c: JUMP 00000d3d: JUMPDEST 00000d3e: PUSH1 0x00 00000d40: PUSH2 0x0d4a 00000d43: PUSH1 0x0e 00000d45: DUP4 00000d46: PUSH2 0x0f60 00000d49: JUMP 00000d4a: JUMPDEST 00000d4b: SWAP2 00000d4c: POP 00000d4d: PUSH2 0x0d55 00000d50: DUP3 00000d51: PUSH2 0x11e9 00000d54: JUMP 00000d55: JUMPDEST 00000d56: PUSH1 0x20 00000d58: DUP3 00000d59: ADD 00000d5a: SWAP1 00000d5b: POP 00000d5c: SWAP2 00000d5d: SWAP1 00000d5e: POP 00000d5f: JUMP 00000d60: JUMPDEST 00000d61: PUSH1 0x00 00000d63: PUSH2 0x0d6d 00000d66: PUSH1 0x12 00000d68: DUP4 00000d69: PUSH2 0x0f60 00000d6c: JUMP 00000d6d: JUMPDEST 00000d6e: SWAP2 00000d6f: POP 00000d70: PUSH2 0x0d78 00000d73: DUP3 00000d74: PUSH2 0x1212 00000d77: JUMP 00000d78: JUMPDEST 00000d79: PUSH1 0x20 00000d7b: DUP3 00000d7c: ADD 00000d7d: SWAP1 00000d7e: POP 00000d7f: SWAP2 00000d80: SWAP1 00000d81: POP 00000d82: JUMP 00000d83: JUMPDEST 00000d84: PUSH1 0x00 00000d86: PUSH2 0x0d90 00000d89: PUSH1 0x12 00000d8b: DUP4 00000d8c: PUSH2 0x0f60 00000d8f: JUMP 00000d90: JUMPDEST 00000d91: SWAP2 00000d92: POP 00000d93: PUSH2 0x0d9b 00000d96: DUP3 00000d97: PUSH2 0x123b 00000d9a: JUMP 00000d9b: JUMPDEST 00000d9c: PUSH1 0x20 00000d9e: DUP3 00000d9f: ADD 00000da0: SWAP1 00000da1: POP 00000da2: SWAP2 00000da3: SWAP1 00000da4: POP 00000da5: JUMP 00000da6: JUMPDEST 00000da7: PUSH2 0x0daf 00000daa: DUP2 00000dab: PUSH2 0x109d 00000dae: JUMP 00000daf: JUMPDEST 00000db0: DUP3 00000db1: MSTORE 00000db2: POP 00000db3: POP 00000db4: JUMP 00000db5: JUMPDEST 00000db6: PUSH2 0x0dbe 00000db9: DUP2 00000dba: PUSH2 0x10a7 00000dbd: JUMP 00000dbe: JUMPDEST 00000dbf: DUP3 00000dc0: MSTORE 00000dc1: POP 00000dc2: POP 00000dc3: JUMP 00000dc4: JUMPDEST 00000dc5: PUSH1 0x00 00000dc7: PUSH2 0x0dd1 00000dca: DUP3 00000dcb: DUP5 00000dcc: DUP7 00000dcd: PUSH2 0x0c7e 00000dd0: JUMP 00000dd1: JUMPDEST 00000dd2: SWAP2 00000dd3: POP 00000dd4: DUP2 00000dd5: SWAP1 00000dd6: POP 00000dd7: SWAP4 00000dd8: SWAP3 00000dd9: POP 00000dda: POP 00000ddb: POP 00000ddc: JUMP 00000ddd: JUMPDEST 00000dde: PUSH1 0x00 00000de0: PUSH2 0x0de9 00000de3: DUP3 00000de4: DUP5 00000de5: PUSH2 0x0ca3 00000de8: JUMP 00000de9: JUMPDEST 00000dea: SWAP2 00000deb: POP 00000dec: DUP2 00000ded: SWAP1 00000dee: POP 00000def: SWAP3 00000df0: SWAP2 00000df1: POP 00000df2: POP 00000df3: JUMP 00000df4: JUMPDEST 00000df5: PUSH1 0x00 00000df7: PUSH1 0x20 00000df9: DUP3 00000dfa: ADD 00000dfb: SWAP1 00000dfc: POP 00000dfd: PUSH2 0x0e09 00000e00: PUSH1 0x00 00000e02: DUP4 00000e03: ADD 00000e04: DUP5 00000e05: PUSH2 0x0c60 00000e08: JUMP 00000e09: JUMPDEST 00000e0a: SWAP3 00000e0b: SWAP2 00000e0c: POP 00000e0d: POP 00000e0e: JUMP 00000e0f: JUMPDEST 00000e10: PUSH1 0x00 00000e12: PUSH1 0x80 00000e14: DUP3 00000e15: ADD 00000e16: SWAP1 00000e17: POP 00000e18: PUSH2 0x0e24 00000e1b: PUSH1 0x00 00000e1d: DUP4 00000e1e: ADD 00000e1f: DUP8 00000e20: PUSH2 0x0c6f 00000e23: JUMP 00000e24: JUMPDEST 00000e25: PUSH2 0x0e31 00000e28: PUSH1 0x20 00000e2a: DUP4 00000e2b: ADD 00000e2c: DUP7 00000e2d: PUSH2 0x0db5 00000e30: JUMP 00000e31: JUMPDEST 00000e32: PUSH2 0x0e3e 00000e35: PUSH1 0x40 00000e37: DUP4 00000e38: ADD 00000e39: DUP6 00000e3a: PUSH2 0x0c6f 00000e3d: JUMP 00000e3e: JUMPDEST 00000e3f: PUSH2 0x0e4b 00000e42: PUSH1 0x60 00000e44: DUP4 00000e45: ADD 00000e46: DUP5 00000e47: PUSH2 0x0c6f 00000e4a: JUMP 00000e4b: JUMPDEST 00000e4c: SWAP6 00000e4d: SWAP5 00000e4e: POP 00000e4f: POP 00000e50: POP 00000e51: POP 00000e52: POP 00000e53: JUMP 00000e54: JUMPDEST 00000e55: PUSH1 0x00 00000e57: PUSH1 0x20 00000e59: DUP3 00000e5a: ADD 00000e5b: SWAP1 00000e5c: POP 00000e5d: DUP2 00000e5e: DUP2 00000e5f: SUB 00000e60: PUSH1 0x00 00000e62: DUP4 00000e63: ADD 00000e64: MSTORE 00000e65: PUSH2 0x0e6d 00000e68: DUP2 00000e69: PUSH2 0x0cd4 00000e6c: JUMP 00000e6d: JUMPDEST 00000e6e: SWAP1 00000e6f: POP 00000e70: SWAP2 00000e71: SWAP1 00000e72: POP 00000e73: JUMP 00000e74: JUMPDEST 00000e75: PUSH1 0x00 00000e77: PUSH1 0x20 00000e79: DUP3 00000e7a: ADD 00000e7b: SWAP1 00000e7c: POP 00000e7d: DUP2 00000e7e: DUP2 00000e7f: SUB 00000e80: PUSH1 0x00 00000e82: DUP4 00000e83: ADD 00000e84: MSTORE 00000e85: PUSH2 0x0e8d 00000e88: DUP2 00000e89: PUSH2 0x0cf7 00000e8c: JUMP 00000e8d: JUMPDEST 00000e8e: SWAP1 00000e8f: POP 00000e90: SWAP2 00000e91: SWAP1 00000e92: POP 00000e93: JUMP 00000e94: JUMPDEST 00000e95: PUSH1 0x00 00000e97: PUSH1 0x20 00000e99: DUP3 00000e9a: ADD 00000e9b: SWAP1 00000e9c: POP 00000e9d: DUP2 00000e9e: DUP2 00000e9f: SUB 00000ea0: PUSH1 0x00 00000ea2: DUP4 00000ea3: ADD 00000ea4: MSTORE 00000ea5: PUSH2 0x0ead 00000ea8: DUP2 00000ea9: PUSH2 0x0d1a 00000eac: JUMP 00000ead: JUMPDEST 00000eae: SWAP1 00000eaf: POP 00000eb0: SWAP2 00000eb1: SWAP1 00000eb2: POP 00000eb3: JUMP 00000eb4: JUMPDEST 00000eb5: PUSH1 0x00 00000eb7: PUSH1 0x20 00000eb9: DUP3 00000eba: ADD 00000ebb: SWAP1 00000ebc: POP 00000ebd: DUP2 00000ebe: DUP2 00000ebf: SUB 00000ec0: PUSH1 0x00 00000ec2: DUP4 00000ec3: ADD 00000ec4: MSTORE 00000ec5: PUSH2 0x0ecd 00000ec8: DUP2 00000ec9: PUSH2 0x0d3d 00000ecc: JUMP 00000ecd: JUMPDEST 00000ece: SWAP1 00000ecf: POP 00000ed0: SWAP2 00000ed1: SWAP1 00000ed2: POP 00000ed3: JUMP 00000ed4: JUMPDEST 00000ed5: PUSH1 0x00 00000ed7: PUSH1 0x20 00000ed9: DUP3 00000eda: ADD 00000edb: SWAP1 00000edc: POP 00000edd: DUP2 00000ede: DUP2 00000edf: SUB 00000ee0: PUSH1 0x00 00000ee2: DUP4 00000ee3: ADD 00000ee4: MSTORE 00000ee5: PUSH2 0x0eed 00000ee8: DUP2 00000ee9: PUSH2 0x0d60 00000eec: JUMP 00000eed: JUMPDEST 00000eee: SWAP1 00000eef: POP 00000ef0: SWAP2 00000ef1: SWAP1 00000ef2: POP 00000ef3: JUMP 00000ef4: JUMPDEST 00000ef5: PUSH1 0x00 00000ef7: PUSH1 0x20 00000ef9: DUP3 00000efa: ADD 00000efb: SWAP1 00000efc: POP 00000efd: DUP2 00000efe: DUP2 00000eff: SUB 00000f00: PUSH1 0x00 00000f02: DUP4 00000f03: ADD 00000f04: MSTORE 00000f05: PUSH2 0x0f0d 00000f08: DUP2 00000f09: PUSH2 0x0d83 00000f0c: JUMP 00000f0d: JUMPDEST 00000f0e: SWAP1 00000f0f: POP 00000f10: SWAP2 00000f11: SWAP1 00000f12: POP 00000f13: JUMP 00000f14: JUMPDEST 00000f15: PUSH1 0x00 00000f17: PUSH1 0x20 00000f19: DUP3 00000f1a: ADD 00000f1b: SWAP1 00000f1c: POP 00000f1d: PUSH2 0x0f29 00000f20: PUSH1 0x00 00000f22: DUP4 00000f23: ADD 00000f24: DUP5 00000f25: PUSH2 0x0da6 00000f28: JUMP 00000f29: JUMPDEST 00000f2a: SWAP3 00000f2b: SWAP2 00000f2c: POP 00000f2d: POP 00000f2e: JUMP 00000f2f: JUMPDEST 00000f30: PUSH1 0x00 00000f32: PUSH1 0x20 00000f34: DUP3 00000f35: ADD 00000f36: SWAP1 00000f37: POP 00000f38: PUSH2 0x0f44 00000f3b: PUSH1 0x00 00000f3d: DUP4 00000f3e: ADD 00000f3f: DUP5 00000f40: PUSH2 0x0db5 00000f43: JUMP 00000f44: JUMPDEST 00000f45: SWAP3 00000f46: SWAP2 00000f47: POP 00000f48: POP 00000f49: JUMP 00000f4a: JUMPDEST 00000f4b: PUSH1 0x00 00000f4d: DUP2 00000f4e: MLOAD 00000f4f: SWAP1 00000f50: POP 00000f51: SWAP2 00000f52: SWAP1 00000f53: POP 00000f54: JUMP 00000f55: JUMPDEST 00000f56: PUSH1 0x00 00000f58: DUP2 00000f59: SWAP1 00000f5a: POP 00000f5b: SWAP3 00000f5c: SWAP2 00000f5d: POP 00000f5e: POP 00000f5f: JUMP 00000f60: JUMPDEST 00000f61: PUSH1 0x00 00000f63: DUP3 00000f64: DUP3 00000f65: MSTORE 00000f66: PUSH1 0x20 00000f68: DUP3 00000f69: ADD 00000f6a: SWAP1 00000f6b: POP 00000f6c: SWAP3 00000f6d: SWAP2 00000f6e: POP 00000f6f: POP 00000f70: JUMP 00000f71: JUMPDEST 00000f72: PUSH1 0x00 00000f74: PUSH2 0x0f7c 00000f77: DUP3 00000f78: PUSH2 0x109d 00000f7b: JUMP 00000f7c: JUMPDEST 00000f7d: SWAP2 00000f7e: POP 00000f7f: PUSH2 0x0f87 00000f82: DUP4 00000f83: PUSH2 0x109d 00000f86: JUMP 00000f87: JUMPDEST 00000f88: SWAP3 00000f89: POP 00000f8a: DUP3 00000f8b: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00000fac: SUB 00000fad: DUP3 00000fae: GT 00000faf: ISZERO 00000fb0: PUSH2 0x0fbc 00000fb3: JUMPI 00000fb4: PUSH2 0x0fbb 00000fb7: PUSH2 0x113f 00000fba: JUMP 00000fbb: JUMPDEST 00000fbc: JUMPDEST 00000fbd: DUP3 00000fbe: DUP3 00000fbf: ADD 00000fc0: SWAP1 00000fc1: POP 00000fc2: SWAP3 00000fc3: SWAP2 00000fc4: POP 00000fc5: POP 00000fc6: JUMP 00000fc7: JUMPDEST 00000fc8: PUSH1 0x00 00000fca: PUSH2 0x0fd2 00000fcd: DUP3 00000fce: PUSH2 0x109d 00000fd1: JUMP 00000fd2: JUMPDEST 00000fd3: SWAP2 00000fd4: POP 00000fd5: PUSH2 0x0fdd 00000fd8: DUP4 00000fd9: PUSH2 0x109d 00000fdc: JUMP 00000fdd: JUMPDEST 00000fde: SWAP3 00000fdf: POP 00000fe0: DUP2 00000fe1: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00001002: DIV 00001003: DUP4 00001004: GT 00001005: DUP3 00001006: ISZERO 00001007: ISZERO 00001008: AND 00001009: ISZERO 0000100a: PUSH2 0x1016 0000100d: JUMPI 0000100e: PUSH2 0x1015 00001011: PUSH2 0x113f 00001014: JUMP 00001015: JUMPDEST 00001016: JUMPDEST 00001017: DUP3 00001018: DUP3 00001019: MUL 0000101a: SWAP1 0000101b: POP 0000101c: SWAP3 0000101d: SWAP2 0000101e: POP 0000101f: POP 00001020: JUMP 00001021: JUMPDEST 00001022: PUSH1 0x00 00001024: PUSH2 0x102c 00001027: DUP3 00001028: PUSH2 0x109d 0000102b: JUMP 0000102c: JUMPDEST 0000102d: SWAP2 0000102e: POP 0000102f: PUSH2 0x1037 00001032: DUP4 00001033: PUSH2 0x109d 00001036: JUMP 00001037: JUMPDEST 00001038: SWAP3 00001039: POP 0000103a: DUP3 0000103b: DUP3 0000103c: LT 0000103d: ISZERO 0000103e: PUSH2 0x104a 00001041: JUMPI 00001042: PUSH2 0x1049 00001045: PUSH2 0x113f 00001048: JUMP 00001049: JUMPDEST 0000104a: JUMPDEST 0000104b: DUP3 0000104c: DUP3 0000104d: SUB 0000104e: SWAP1 0000104f: POP 00001050: SWAP3 00001051: SWAP2 00001052: POP 00001053: POP 00001054: JUMP 00001055: JUMPDEST 00001056: PUSH1 0x00 00001058: PUSH2 0x1060 0000105b: DUP3 0000105c: PUSH2 0x107d 0000105f: JUMP 00001060: JUMPDEST 00001061: SWAP1 00001062: POP 00001063: SWAP2 00001064: SWAP1 00001065: POP 00001066: JUMP 00001067: JUMPDEST 00001068: PUSH1 0x00 0000106a: DUP2 0000106b: ISZERO 0000106c: ISZERO 0000106d: SWAP1 0000106e: POP 0000106f: SWAP2 00001070: SWAP1 00001071: POP 00001072: JUMP 00001073: JUMPDEST 00001074: PUSH1 0x00 00001076: DUP2 00001077: SWAP1 00001078: POP 00001079: SWAP2 0000107a: SWAP1 0000107b: POP 0000107c: JUMP 0000107d: JUMPDEST 0000107e: PUSH1 0x00 00001080: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001095: DUP3 00001096: AND 00001097: SWAP1 00001098: POP 00001099: SWAP2 0000109a: SWAP1 0000109b: POP 0000109c: JUMP 0000109d: JUMPDEST 0000109e: PUSH1 0x00 000010a0: DUP2 000010a1: SWAP1 000010a2: POP 000010a3: SWAP2 000010a4: SWAP1 000010a5: POP 000010a6: JUMP 000010a7: JUMPDEST 000010a8: PUSH1 0x00 000010aa: PUSH1 0xff 000010ac: DUP3 000010ad: AND 000010ae: SWAP1 000010af: POP 000010b0: SWAP2 000010b1: SWAP1 000010b2: POP 000010b3: JUMP 000010b4: JUMPDEST 000010b5: DUP3 000010b6: DUP2 000010b7: DUP4 000010b8: CALLDATACOPY 000010b9: PUSH1 0x00 000010bb: DUP4 000010bc: DUP4 000010bd: ADD 000010be: MSTORE 000010bf: POP 000010c0: POP 000010c1: POP 000010c2: JUMP 000010c3: JUMPDEST 000010c4: PUSH1 0x00 000010c6: JUMPDEST 000010c7: DUP4 000010c8: DUP2 000010c9: LT 000010ca: ISZERO 000010cb: PUSH2 0x10e1 000010ce: JUMPI 000010cf: DUP1 000010d0: DUP3 000010d1: ADD 000010d2: MLOAD 000010d3: DUP2 000010d4: DUP5 000010d5: ADD 000010d6: MSTORE 000010d7: PUSH1 0x20 000010d9: DUP2 000010da: ADD 000010db: SWAP1 000010dc: POP 000010dd: PUSH2 0x10c6 000010e0: JUMP 000010e1: JUMPDEST 000010e2: DUP4 000010e3: DUP2 000010e4: GT 000010e5: ISZERO 000010e6: PUSH2 0x10f0 000010e9: JUMPI 000010ea: PUSH1 0x00 000010ec: DUP5 000010ed: DUP5 000010ee: ADD 000010ef: MSTORE 000010f0: JUMPDEST 000010f1: POP 000010f2: POP 000010f3: POP 000010f4: POP 000010f5: JUMP 000010f6: JUMPDEST 000010f7: PUSH1 0x00 000010f9: PUSH2 0x1101 000010fc: DUP3 000010fd: PUSH2 0x109d 00001100: JUMP 00001101: JUMPDEST 00001102: SWAP2 00001103: POP 00001104: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00001125: DUP3 00001126: EQ 00001127: ISZERO 00001128: PUSH2 0x1134 0000112b: JUMPI 0000112c: PUSH2 0x1133 0000112f: PUSH2 0x113f 00001132: JUMP 00001133: JUMPDEST 00001134: JUMPDEST 00001135: PUSH1 0x01 00001137: DUP3 00001138: ADD 00001139: SWAP1 0000113a: POP 0000113b: SWAP2 0000113c: SWAP1 0000113d: POP 0000113e: JUMP 0000113f: JUMPDEST 00001140: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00001161: PUSH1 0x00 00001163: MSTORE 00001164: PUSH1 0x11 00001166: PUSH1 0x04 00001168: MSTORE 00001169: PUSH1 0x24 0000116b: PUSH1 0x00 0000116d: REVERT 0000116e: JUMPDEST 0000116f: PUSH32 0x696e76616c696420676173207072696365000000000000000000000000000000 00001190: PUSH1 0x00 00001192: DUP3 00001193: ADD 00001194: MSTORE 00001195: POP 00001196: JUMP 00001197: JUMPDEST 00001198: PUSH32 0x6e6f7420656e6f756768207369676e6174757265730000000000000000000000 000011b9: PUSH1 0x00 000011bb: DUP3 000011bc: ADD 000011bd: MSTORE 000011be: POP 000011bf: JUMP 000011c0: JUMPDEST 000011c1: PUSH32 0x696e76616c6964206e6f6e636500000000000000000000000000000000000000 000011e2: PUSH1 0x00 000011e4: DUP3 000011e5: ADD 000011e6: MSTORE 000011e7: POP 000011e8: JUMP 000011e9: JUMPDEST 000011ea: PUSH32 0x666f7262696464656e2063616c6c000000000000000000000000000000000000 0000120b: PUSH1 0x00 0000120d: DUP3 0000120e: ADD 0000120f: MSTORE 00001210: POP 00001211: JUMP 00001212: JUMPDEST 00001213: PUSH32 0x696e76616c6964207369676e6174757265730000000000000000000000000000 00001234: PUSH1 0x00 00001236: DUP3 00001237: ADD 00001238: MSTORE 00001239: POP 0000123a: JUMP 0000123b: JUMPDEST 0000123c: PUSH32 0x7472616e73616374696f6e206661696c65640000000000000000000000000000 0000125d: PUSH1 0x00 0000125f: DUP3 00001260: ADD 00001261: MSTORE 00001262: POP 00001263: JUMP 00001264: JUMPDEST 00001265: PUSH2 0x126d 00001268: DUP2 00001269: PUSH2 0x1055 0000126c: JUMP 0000126d: JUMPDEST 0000126e: DUP2 0000126f: EQ 00001270: PUSH2 0x1278 00001273: JUMPI 00001274: PUSH1 0x00 00001276: DUP1 00001277: REVERT 00001278: JUMPDEST 00001279: POP 0000127a: JUMP 0000127b: JUMPDEST 0000127c: PUSH2 0x1284 0000127f: DUP2 00001280: PUSH2 0x10a7 00001283: JUMP 00001284: JUMPDEST 00001285: DUP2 00001286: EQ 00001287: PUSH2 0x128f 0000128a: JUMPI 0000128b: PUSH1 0x00 0000128d: DUP1 0000128e: REVERT 0000128f: JUMPDEST 00001290: POP 00001291: JUMP 00001292: INVALID 00001293: LOG2 00001294: PUSH5 0x6970667358 0000129a: UNKNOWN(0x22) 0000129b: SLT 0000129c: KECCAK256 0000129d: BLOBBASEFEE 0000129e: PUSH32 0x120bb59664a117e9cff81052047e6388cc2463a615d4fe4867e5500589116473 000012bf: PUSH16
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0xb68b2b619e4aa4169398661f88a941221f8075c1dc7de56a26800bd0746d695d
call_targets:
0x8c33d309157553d69413d98ea853424689c0c2b1
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xb68b2b619e4aa4169398661f88a941221f8075c1dc7de56a26800bd0746d695d",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x8c33d309157553d69413d98ea853424689c0c2b1"
],
"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": "0x2f54bf6e",
"selector": "0x2f54bf6e",
"calldata_variants": [
"0x2f54bf6e",
"0x2f54bf6e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x42cde4e8",
"selector": "0x42cde4e8",
"calldata_variants": [
"0x42cde4e8",
"0x42cde4e80000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x5bebe4ee",
"selector": "0x5bebe4ee",
"calldata_variants": [
"0x5bebe4ee",
"0x5bebe4ee0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x7ecebe00",
"selector": "0x7ecebe00",
"calldata_variants": [
"0x7ecebe00",
"0x7ecebe000000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdaccfbb4",
"selector": "0xdaccfbb4",
"calldata_variants": [
"0xdaccfbb4",
"0xdaccfbb40000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 932,
"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: 0xb68b2b619e4aa4169398661f88a941221f8075c1dc7de56a26800bd0746d695d
call_targets:
0x8c33d309157553d69413d98ea853424689c0c2b1
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xb68b2b619e4aa4169398661f88a941221f8075c1dc7de56a26800bd0746d695d",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x8c33d309157553d69413d98ea853424689c0c2b1"
],
"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": "0x2f54bf6e",
"selector": "0x2f54bf6e",
"calldata_variants": [
"0x2f54bf6e",
"0x2f54bf6e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x42cde4e8",
"selector": "0x42cde4e8",
"calldata_variants": [
"0x42cde4e8",
"0x42cde4e80000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x5bebe4ee",
"selector": "0x5bebe4ee",
"calldata_variants": [
"0x5bebe4ee",
"0x5bebe4ee0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x7ecebe00",
"selector": "0x7ecebe00",
"calldata_variants": [
"0x7ecebe00",
"0x7ecebe000000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdaccfbb4",
"selector": "0xdaccfbb4",
"calldata_variants": [
"0xdaccfbb4",
"0xdaccfbb40000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 932,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 1,
"guards_detected": []
}
|