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

Analysis Run

e2895505-6287-4c4f-b321-6e8bfe6842cb

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

What survived the funnel

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

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

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
31744 report.consolidate complete 1 / 1 3 months ago
95887 artifact.fetch complete 1 / 3 1 week ago
95888 tool.cast_disasm complete 1 / 3 1 week ago
95889 analysis.bundle complete 1 / 3 1 week ago
95890 capability.graph complete 1 / 3 1 week ago
95891 detector.run complete 1 / 3 1 week ago
95892 validation.fork complete 1 / 3 1 week ago

Artifact

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

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 1
Findings
0
No findings?
yes
Summary
No concrete, exploitable path to extract ETH/tokens/NFTs was identified from the provided runtime bytecode alone.
View stderr
[codex:769072] OpenAI Codex v0.77.0 (research preview)
[codex:769072] --------
[codex:769072] workdir: /tmp/codex-multi-vl1qm5r6
[codex:769072] model: gpt-5.2-codex
[codex:769072] provider: openai
[codex:769072] approval: never
[codex:769072] sandbox: read-only
[codex:769072] reasoning effort: xhigh
[codex:769072] reasoning summaries: auto
[codex:769072] session id: 019b8f98-9d72-7501-aa51-b0a80bdfb001
[codex:769072] --------
[codex:769072] user
[codex:769072] 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:769072] 
[codex:769072] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:769072] 
[codex:769072] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:769072] - Gas inefficiency, code quality, or best practices
[codex:769072] - Theoretical vulnerabilities without a clear extraction path
[codex:769072] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:769072] - Issues requiring social engineering or off-chain coordination
[codex:769072] 
[codex:769072] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:769072] - CALL/DELEGATECALL with controllable destination or calldata
[codex:769072] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:769072] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:769072] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:769072] - External calls before state updates (reentrancy)
[codex:769072] - SELFDESTRUCT with controllable beneficiary
[codex:769072] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:769072] 
[codex:769072] For each finding, you MUST explain:
[codex:769072] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:769072] 2. The concrete sequence of transactions to extract value
[codex:769072] 3. Why you believe this is exploitable (not just suspicious)
[codex:769072] 
[codex:769072] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:769072] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:769072] 
[codex:769072] Output MUST be valid JSON matching the provided schema.
[codex:769072] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:769072] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:769072] mcp startup: no servers
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Gathering initial instructions**
[codex:769072] exec
[codex:769072] /bin/bash -lc ls in /tmp/codex-multi-vl1qm5r6 succeeded in 6ms:
[codex:769072] BYTECODE_BUNDLE.txt
[codex:769072] codex-output-schema.json
[codex:769072] exec
[codex:769072] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-vl1qm5r6 succeeded in 5ms:
[codex:769072] Runtime bytecode bundle for best-effort auditing.
[codex:769072] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:769072] 
[codex:769072] FILE: runtime_bytecode.hex
[codex:769072] 0x6080604052600436106100fe5760003560e01c80636dce6c5e11610095578063ebe7f76011610064578063ebe7f760146102ce578063f372872d146102e3578063f6d8414f146102f8578063f9d820d01461030d578063fb34222114610340576100fe565b80636dce6c5e1461025e5780636f9fb98a1461028f578063767c56a2146102a4578063e1c18d87146102b9576100fe565b806346965ef6116100d157806346965ef6146101e45780634faf28381461020b57806358af85fa146102345780635ee6a97c14610249576100fe565b8063034ea411146101035780631eb05b0f1461010d5780632012517614610172578063237297a4146101ab575b600080fd5b61010b610355565b005b34801561011957600080fd5b5061012261069c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561015e578181015183820152602001610146565b505050509050019250505060405180910390f35b34801561017e57600080fd5b5061010b6004803603604081101561019557600080fd5b50803590602001356001600160a01b03166106fe565b3480156101b757600080fd5b506101c0610a03565b604051808260028111156101d057fe5b60ff16815260200191505060405180910390f35b3480156101f057600080fd5b506101f9610a13565b60408051918252519081900360200190f35b34801561021757600080fd5b50610220610a19565b604080519115158252519081900360200190f35b34801561024057600080fd5b506101f9610a22565b34801561025557600080fd5b5061010b610a28565b34801561026a57600080fd5b50610273610bb0565b604080516001600160a01b039092168252519081900360200190f35b34801561029b57600080fd5b506101f9610bbf565b3480156102b057600080fd5b5061010b610bc3565b3480156102c557600080fd5b506101f9610cf0565b3480156102da57600080fd5b506101f9610cf6565b3480156102ef57600080fd5b50610273610d20565b34801561030457600080fd5b506101f9610d2f565b34801561031957600080fd5b506101f96004803603602081101561033057600080fd5b50356001600160a01b0316610d35565b34801561034c57600080fd5b506101f9610d50565b600154604080516370a0823160e01b815233600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156103a057600080fd5b505afa1580156103b4573d6000803e3d6000fd5b505050506040513d60208110156103ca57600080fd5b5051116104085760405162461bcd60e51b81526004018080602001828103825260308152602001806110996030913960400191505060405180910390fd5b600034116104475760405162461bcd60e51b815260040180806020018281038252602681526020018061112f6026913960400191505060405180910390fd5b6005546001600160a01b031661048e5760405162461bcd60e51b8152600401808060200182810382526034815260200180610fea6034913960400191505060405180910390fd5b6005546001600160a01b03163314156104d85760405162461bcd60e51b815260040180806020018281038252603a815260200180610f89603a913960400191505060405180910390fd5b60075460ff161561051a5760405162461bcd60e51b815260040180806020018281038252602c81526020018061101e602c913960400191505060405180910390fd5b600254421061055a5760405162461bcd60e51b81526004018080602001828103825260298152602001806110706029913960400191505060405180910390fd5b610562610cf6565b600854340111156105a45760405162461bcd60e51b81526004018080602001828103825260278152602001806111fd6027913960400191505060405180910390fd5b336000908152600a60205260409020546105fb57600980546001810182556000919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b031916331790555b336000908152600a602052604090205461061b903463ffffffff610d5616565b336000908152600a602052604090205560085461063e903463ffffffff610d5616565b600855604051349033907f80fbd07d70e0d7ac483b3c1a1b9fd0cbddda15c9263cf2b6cd169d1900af134690600090a3610676610cf6565b600854141561069a576001805460ff60a01b1916600160a11b17905561069a610bc3565b565b606060098054806020026020016040519081016040528092919081815260200182805480156106f457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116106d6575b5050505050905090565b6001546001600160a01b031633146107475760405162461bcd60e51b815260040180806020018281038252602c81526020018061118e602c913960400191505060405180910390fd5b60018054600160a01b900460ff16600281111561076057fe5b14801561077b57506005546001600160a01b03828116911614155b156108b95760006107af670de0b6b3a76400006107a385600454610db990919063ffffffff16565b9063ffffffff610e1216565b6001600160a01b0383166000908152600a60205260409020549091506107dc90829063ffffffff610d5616565b6001600160a01b0383166000818152600a6020526040808220829055519293509183908381818185875af1925050503d8060008114610837576040519150601f19603f3d011682016040523d82523d6000602084013e61083c565b606091505b505090508061087c5760405162461bcd60e51b8152600401808060200182810382526027815260200180610fc36027913960400191505060405180910390fd5b60405182906001600160a01b038516907fedfe54e758e6dae751369919bd3c260baddfe62c3f49793bdad36629cb5ecd2690600090a350506109ff565b6002600154600160a01b900460ff1660028111156108d357fe5b1480156108ed57506005546001600160a01b038281169116145b156109ff576000610917670de0b6b3a76400006107a3600654600454610db990919063ffffffff16565b905061092e60035482610d5690919063ffffffff16565b60006006819055604051919250906001600160a01b0384169083908381818185875af1925050503d8060008114610981576040519150601f19603f3d011682016040523d82523d6000602084013e610986565b606091505b50509050806109c65760405162461bcd60e51b8152600401808060200182810382526027815260200180610fc36027913960400191505060405180910390fd5b60405182906001600160a01b038516907fedfe54e758e6dae751369919bd3c260baddfe62c3f49793bdad36629cb5ecd2690600090a350505b5050565b600154600160a01b900460ff1690565b60085490565b60075460ff1690565b60045490565b60075460ff168015610a5157506002600154600160a01b900460ff166002811115610a4f57fe5b145b610a8c5760405162461bcd60e51b81526004018080602001828103825260458152602001806110c96045913960600191505060405180910390fd5b336000908152600a6020526040902054610ad75760405162461bcd60e51b81526004018080602001828103825260438152602001806111ba6043913960600191505060405180910390fd5b600854336000908152600a60205260408120549091610b08916107a390670de0b6b3a764000063ffffffff610db916565b336000908152600a6020526040812081905560065491925090610b4090670de0b6b3a7640000906107a390859063ffffffff610db916565b6000805460408051630f020c7760e31b81523360048201526024810185905290519394506001600160a01b039091169263781063b89260448084019391929182900301818387803b158015610b9457600080fd5b505af1158015610ba8573d6000803e3d6000fd5b505050505050565b6005546001600160a01b031690565b4790565b60075460ff1615610c055760405162461bcd60e51b815260040180806020018281038252602681526020018061104a6026913960400191505060405180910390fd5b6002600154600160a01b900460ff166002811115610c1f57fe5b1480610c4d575060018054600160a01b900460ff166002811115610c3f57fe5b148015610c4d575060025442115b610c885760405162461bcd60e51b81526004018080602001828103825260398152602001806111556039913960400191505060405180910390fd5b6007805460ff191660011790556000805460408051633b3e2b5160e11b815290516001600160a01b039092169263767c56a29260048084019382900301818387803b158015610cd657600080fd5b505af1158015610cea573d6000803e3d6000fd5b50505050565b60065490565b6000610d1b670de0b6b3a76400006107a3600654600454610db990919063ffffffff16565b905090565b6000546001600160a01b031690565b60025490565b6001600160a01b03166000908152600a602052604090205490565b60035490565b600082820183811015610db0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600082610dc857506000610db3565b82820282848281610dd557fe5b0414610db05760405162461bcd60e51b815260040180806020018281038252602181526020018061110e6021913960400191505060405180910390fd5b6000610db083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060008183610edb5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ea0578181015183820152602001610e88565b50505050905090810190601f168015610ecd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581610ee757fe5b0495945050505050565b6000610db083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525060008184841115610f805760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610ea0578181015183820152602001610e88565b50505090039056fe5b636f756e746572436f6d6d697445746865725d20496e697469616c20636c61696d616e742063616e6e6f7420636f756e746572636f6d6d69745b636f6c6c656374457468657250726f63656564735d205472616e73666572206661696c65642e5b636f756e746572436f6d6d697445746865725d20496e697469616c20636c61696d616e7420646f6573206e6f742065786973745b636f756e746572436f6d6d697445746865725d2053686f7467756e20616c726561647920656e61637465645b656e61637453686f7467756e5d2053686f7467756e20616c726561647920656e61637465645b636f756e746572436f6d6d697445746865725d20446561646c696e652068617320657870697265645b636f756e746572436f6d6d697445746865725d204163636f756e7420646f6573206e6f74206f776e205368617264735b636f6c6c656374536861726450726f63656564735d2053686f7467756e20686173206e6f74206265656e20656e6163746564206f7220696e76616c69642077696e6e6572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775b636f756e746572436f6d6d697445746865725d2045746865722069732072657175697265645b656e61637453686f7467756e5d20436f6e646974696f6e73206e6f74206d657420746f20656e6163742053686f7467756e20436c617573655b636f6c6c656374457468657250726f63656564735d2043616c6c6572206e6f7420617574686f72697a65645b636f6c6c656374536861726450726f63656564735d204163636f756e7420686173206e6f742070617274696369706174656420696e20636f756e746572636c61696d5b636f756e746572436f6d6d697445746865725d204574686572206578636565647320676f616ca265627a7a723158200c9c8ad7bae6c87a3874189bebef291cbfa4e531dab258c63ca351170526b52d64736f6c634300050f0032
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Analyzing bytecode for exploit patterns**
[codex:769072] 
[codex:769072] I’m carefully examining the contract bytecode to find any concrete exploit, focusing on external calls with value transfers and authorization checks. Using embedded error messages and function selectors, I’m mapping functions related to payments and withdrawals, checking for vulnerabilities like unauthorized access or reentrancy, and planning to run a Python disassembler in-memory to pinpoint risky opcodes such as CALL and SSTORE without writing files. If no clear exploit emerges, I’ll note that accordingly.
[codex:769072] exec
[codex:769072] /bin/bash -lc "python - <<'PY'
[codex:769072] import binascii
[codex:769072] hexdata=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[0]
[codex:769072] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:769072] code=bytes.fromhex(hexdata)
[codex:769072] # opcodes map
[codex:769072] opnames={
[codex:769072] 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:769072] 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:769072] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:769072] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:769072] 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:769072] 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:769072] 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:769072] 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:769072] 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:769072] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:769072] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:769072] }
[codex:769072] 
[codex:769072] calls=[]
[codex:769072] ops=[]
[codex:769072] 
[codex:769072] i=0
[codex:769072] while i<len(code):
[codex:769072]     op=code[i]
[codex:769072]     name=opnames.get(op, 'UNKNOWN')
[codex:769072]     start=i
[codex:769072]     if 0x60<=op<=0x7f:
[codex:769072]         n=op-0x5f
[codex:769072]         data=code[i+1:i+1+n]
[codex:769072]         ops.append((start,name,data))
[codex:769072]         i+=1+n
[codex:769072]     else:
[codex:769072]         ops.append((start,name,None))
[codex:769072]         i+=1
[codex:769072] 
[codex:769072] # print call-related ops with context
[codex:769072] call_ops={'CALL','DELEGATECALL','STATICCALL','SELFDESTRUCT'}
[codex:769072] for idx,(off,name,data) in enumerate(ops):
[codex:769072]     if name in call_ops:
[codex:769072]         # print surrounding ops
[codex:769072]         start=max(0,idx-8)
[codex:769072]         end=min(len(ops),idx+5)
[codex:769072]         print('\\n-- context at 0x%04x %s --'% (off,name))
[codex:769072]         for j in range(start,end):
[codex:769072]             o=ops[j]
[codex:769072]             d=''
[codex:769072]             if o[1].startswith('PUSH') and o[2] is not None:
[codex:769072]                 d=' 0x'+o[2].hex()
[codex:769072]             print('0x%04x %-12s%s' % (o[0], o[1], d))
[codex:769072] PY" in /tmp/codex-multi-vl1qm5r6 succeeded in 36ms:
[codex:769072] 
[codex:769072] -- context at 0x03a3 STATICCALL --
[codex:769072] 0x0398 PUSH2        0x03a0
[codex:769072] 0x039b JUMPI       
[codex:769072] 0x039c PUSH1        0x00
[codex:769072] 0x039e DUP1        
[codex:769072] 0x039f REVERT      
[codex:769072] 0x03a0 JUMPDEST    
[codex:769072] 0x03a1 POP         
[codex:769072] 0x03a2 GAS         
[codex:769072] 0x03a3 STATICCALL  
[codex:769072] 0x03a4 ISZERO      
[codex:769072] 0x03a5 DUP1        
[codex:769072] 0x03a6 ISZERO      
[codex:769072] 0x03a7 PUSH2        0x03b4
[codex:769072] 
[codex:769072] -- context at 0x0807 CALL --
[codex:769072] 0x07ff SWAP1       
[codex:769072] 0x0800 DUP4        
[codex:769072] 0x0801 DUP2        
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Analyzing call sites and reentrancy risk**
[codex:769072] exec
[codex:769072] /bin/bash -lc "python - <<'PY'
[codex:769072] import binascii
[codex:769072] hexdata=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[0]
[codex:769072] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:769072] code=bytes.fromhex(hexdata)
[codex:769072] # disassemble function
[codex:769072] opnames={
[codex:769072] 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:769072] 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:769072] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:769072] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:769072] 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:769072] 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:769072] 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:769072] 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:769072] 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:769072] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:769072] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:769072] }
[codex:769072] 
[codex:769072] # Build list
[codex:769072] ops=[]
[codex:769072] i=0
[codex:769072] while i<len(code):
[codex:769072]     op=code[i]
[codex:769072]     name=opnames.get(op, 'UNKNOWN')
[codex:769072]     if 0x60<=op<=0x7f:
[codex:769072]         n=op-0x5f
[codex:769072]         data=code[i+1:i+1+n]
[codex:769072]         ops.append((i,name,data))
[codex:769072]         i+=1+n
[codex:769072]     else:
[codex:769072]         ops.append((i,name,None))
[codex:769072]         i+=1
[codex:769072] 
[codex:769072] # function to print range
[codex:769072] 
[codex:769072] def print_range(start,end):
[codex:769072]     for off,name,data in ops:
[codex:769072]         if off<start: continue
[codex:769072]         if off>end: break
[codex:769072]         d=''
[codex:769072]         if name.startswith('PUSH') and data is not None:
[codex:769072]             d=' 0x'+data.hex()
[codex:769072]         print('0x%04x %-12s%s' % (off,name,d))
[codex:769072] 
[codex:769072] print('--- range 0x0700-0x0860 ---')
[codex:769072] print_range(0x0700,0x0860)
[codex:769072] print('--- range 0x0880-0x09f0 ---')
[codex:769072] print_range(0x0880,0x09f0)
[codex:769072] PY" in /tmp/codex-multi-vl1qm5r6 succeeded in 21ms:
[codex:769072] --- range 0x0700-0x0860 ---
[codex:769072] 0x0701 SLOAD       
[codex:769072] 0x0702 PUSH1        0x01
[codex:769072] 0x0704 PUSH1        0x01
[codex:769072] 0x0706 PUSH1        0xa0
[codex:769072] 0x0708 SHL         
[codex:769072] 0x0709 SUB         
[codex:769072] 0x070a AND         
[codex:769072] 0x070b CALLER      
[codex:769072] 0x070c EQ          
[codex:769072] 0x070d PUSH2        0x0747
[codex:769072] 0x0710 JUMPI       
[codex:769072] 0x0711 PUSH1        0x40
[codex:769072] 0x0713 MLOAD       
[codex:769072] 0x0714 PUSH3        0x461bcd
[codex:769072] 0x0718 PUSH1        0xe5
[codex:769072] 0x071a SHL         
[codex:769072] 0x071b DUP2        
[codex:769072] 0x071c MSTORE      
[codex:769072] 0x071d PUSH1        0x04
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Analyzing function dispatch and storage slots**
[codex:769072] exec
[codex:769072] /bin/bash -lc "python - <<'PY'
[codex:769072] import binascii
[codex:769072] hexdata=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[0]
[codex:769072] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:769072] code=bytes.fromhex(hexdata)
[codex:769072] # disassemble first 0x120 bytes
[codex:769072] opnames={
[codex:769072] 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:769072] 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:769072] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:769072] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:769072] 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:769072] 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:769072] 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:769072] 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:769072] 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:769072] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:769072] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:769072] }
[codex:769072] 
[codex:769072] # disassemble first 0x120 bytes
[codex:769072] ops=[]
[codex:769072] i=0
[codex:769072] while i<len(code):
[codex:769072]     op=code[i]
[codex:769072]     name=opnames.get(op,'UNKNOWN')
[codex:769072]     if 0x60<=op<=0x7f:
[codex:769072]         n=op-0x5f
[codex:769072]         data=code[i+1:i+1+n]
[codex:769072]         ops.append((i,name,data))
[codex:769072]         i+=1+n
[codex:769072]     else:
[codex:769072]         ops.append((i,name,None))
[codex:769072]         i+=1
[codex:769072]     if i>0x120: break
[codex:769072] 
[codex:769072] for off,name,data in ops:
[codex:769072]     d=''
[codex:769072]     if name.startswith('PUSH') and data is not None:
[codex:769072]         d=' 0x'+data.hex()
[codex:769072]     print('0x%04x %-12s%s' % (off,name,d))
[codex:769072] PY" in /tmp/codex-multi-vl1qm5r6 succeeded in 23ms:
[codex:769072] 0x0000 PUSH1        0x80
[codex:769072] 0x0002 PUSH1        0x40
[codex:769072] 0x0004 MSTORE      
[codex:769072] 0x0005 PUSH1        0x04
[codex:769072] 0x0007 CALLDATASIZE
[codex:769072] 0x0008 LT          
[codex:769072] 0x0009 PUSH2        0x00fe
[codex:769072] 0x000c JUMPI       
[codex:769072] 0x000d PUSH1        0x00
[codex:769072] 0x000f CALLDATALOAD
[codex:769072] 0x0010 PUSH1        0xe0
[codex:769072] 0x0012 SHR         
[codex:769072] 0x0013 DUP1        
[codex:769072] 0x0014 PUSH4        0x6dce6c5e
[codex:769072] 0x0019 GT          
[codex:769072] 0x001a PUSH2        0x0095
[codex:769072] 0x001d JUMPI       
[codex:769072] 0x001e DUP1        
[codex:769072] 0x001f PUSH4        0xebe7f760
[codex:769072] 0x0024 GT          
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Analyzing payable and nonpayable functions**
[codex:769072] exec
[codex:769072] /bin/bash -lc "python - <<'PY'
[codex:769072] import binascii
[codex:769072] text=open('BYTECODE_BUNDLE.txt').read()
[codex:769072] hexdata=text.split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[0]
[codex:769072] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:769072] code=bytes.fromhex(hexdata)
[codex:769072] # find readable strings in code
[codex:769072] import re
[codex:769072] # simple: find sequences of printable bytes length>=4
[codex:769072] strings=[]
[codex:769072] start=None
[codex:769072] for i,b in enumerate(code):
[codex:769072]     if 32<=b<127:
[codex:769072]         if start is None: start=i
[codex:769072]     else:
[codex:769072]         if start is not None and i-start>=4:
[codex:769072]             strings.append((start, code[start:i].decode('ascii',errors='ignore')))
[codex:769072]         start=None
[codex:769072] if start is not None and len(code)-start>=4:
[codex:769072]     strings.append((start, code[start:].decode('ascii',errors='ignore')))
[codex:769072] 
[codex:769072] for off,s in strings:
[codex:769072]     if ']' in s or 'SafeMath' in s:
[codex:769072]         print(hex(off), s)
[codex:769072] PY" in /tmp/codex-multi-vl1qm5r6 succeeded in 26ms:
[codex:769072] 0xd80 SafeMath: addition overflow
[codex:769072] 0xe2d SafeMath: division by zero
[codex:769072] 0xf0c SafeMath: subtraction overflow
[codex:769072] 0xf89 [counterCommitEther] Initial claimant cannot countercommit[collectEtherProceeds] Transfer failed.[counterCommitEther] Initial claimant does not exist[counterCommitEther] Shotgun already enacted[enactShotgun] Shotgun already enacted[counterCommitEther] Deadline has expired[counterCommitEther] Account does not own Shards[collectShardProceeds] Shotgun has not been enacted or invalid winnerSafeMath: multiplication overflow[counterCommitEther] Ether is required[enactShotgun] Conditions not met to enact Shotgun Clause[collectEtherProceeds] Caller not authorized[collectShardProceeds] Account has not participated in counterclaim[counterCommitEther] Ether exceeds goal
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Mapping error string offsets**
[codex:769072] exec
[codex:769072] /bin/bash -lc "python - <<'PY'
[codex:769072] import binascii
[codex:769072] hexdata=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[0]
[codex:769072] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:769072] code=bytes.fromhex(hexdata)
[codex:769072] msgs=[
[codex:769072] \"[counterCommitEther] Initial claimant cannot countercommit\",
[codex:769072] \"[collectEtherProceeds] Transfer failed.\",
[codex:769072] \"[counterCommitEther] Initial claimant does not exist\",
[codex:769072] \"[counterCommitEther] Shotgun already enacted\",
[codex:769072] \"[enactShotgun] Shotgun already enacted\",
[codex:769072] \"[counterCommitEther] Deadline has expired\",
[codex:769072] \"[counterCommitEther] Account does not own Shards\",
[codex:769072] \"[collectShardProceeds] Shotgun has not been enacted or invalid winner\",
[codex:769072] \"SafeMath: multiplication overflow\",
[codex:769072] \"[counterCommitEther] Ether is required\",
[codex:769072] \"[enactShotgun] Conditions not met to enact Shotgun Clause\",
[codex:769072] \"[collectEtherProceeds] Caller not authorized\",
[codex:769072] \"[collectShardProceeds] Account has not participated in counterclaim\",
[codex:769072] \"[counterCommitEther] Ether exceeds goal\"
[codex:769072] ]
[codex:769072] for m in msgs:
[codex:769072]     b=m.encode('ascii')
[codex:769072]     idx=code.find(b)
[codex:769072]     print(hex(idx) if idx"'!=-1 else '"'not found', m)
[codex:769072] PY" in /tmp/codex-multi-vl1qm5r6 succeeded in 22ms:
[codex:769072] 0xf89 [counterCommitEther] Initial claimant cannot countercommit
[codex:769072] 0xfc3 [collectEtherProceeds] Transfer failed.
[codex:769072] 0xfea [counterCommitEther] Initial claimant does not exist
[codex:769072] 0x101e [counterCommitEther] Shotgun already enacted
[codex:769072] 0x104a [enactShotgun] Shotgun already enacted
[codex:769072] 0x1070 [counterCommitEther] Deadline has expired
[codex:769072] 0x1099 [counterCommitEther] Account does not own Shards
[codex:769072] 0x10c9 [collectShardProceeds] Shotgun has not been enacted or invalid winner
[codex:769072] 0x110e SafeMath: multiplication overflow
[codex:769072] 0x112f [counterCommitEther] Ether is required
[codex:769072] 0x1155 [enactShotgun] Conditions not met to enact Shotgun Clause
[codex:769072] 0x118e [collectEtherProceeds] Caller not authorized
[codex:769072] 0x11ba [collectShardProceeds] Account has not participated in counterclaim
[codex:769072] 0x11fd [counterCommitEther] Ether exceeds goal
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Mapping revert strings to code functions**
[codex:769072] exec
[codex:769072] /bin/bash -lc "python - <<'PY'
[codex:769072] import binascii
[codex:769072] hexdata=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[0]
[codex:769072] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:769072] code=bytes.fromhex(hexdata)
[codex:769072] # find occurrences of PUSH2 imm
[codex:769072] # naive parse
[codex:769072] opnames={
[codex:769072] 0x60:1,0x61:2,0x62:3,0x63:4,0x64:5,0x65:6,0x66:7,0x67:8,0x68:9,0x69:10,0x6a:11,0x6b:12,0x6c:13,0x6d:14,0x6e:15,0x6f:16,
[codex:769072] 0x70:17,0x71:18,0x72:19,0x73:20,0x74:21,0x75:22,0x76:23,0x77:24,0x78:25,0x79:26,0x7a:27,0x7b:28,0x7c:29,0x7d:30,0x7e:31,0x7f:32,
[codex:769072] }
[codex:769072] 
[codex:769072] off=0
[codex:769072] push2_offsets={}
[codex:769072] while off<len(code):
[codex:769072]     op=code[off]
[codex:769072]     if op==0x61: # PUSH2
[codex:769072]         imm=int.from_bytes(code[off+1:off+3],'big')
[codex:769072]         push2_offsets.setdefault(imm,[]).append(off)
[codex:769072]         off+=3
[codex:769072]     elif 0x60<=op<=0x7f:
[codex:769072]         off+=1+op-0x5f
[codex:769072]     else:
[codex:769072]         off+=1
[codex:769072] 
[codex:769072] # offsets of interest
[codex:769072] strings={
[codex:769072] 0xf89:'Initial claimant cannot countercommit',
[codex:769072] 0xfc3:'Transfer failed',
[codex:769072] 0xfea:'Initial claimant does not exist',
[codex:769072] 0x101e:'Shotgun already enacted',
[codex:769072] 0x104a:'enact Shotgun already enacted',
[codex:769072] 0x1070:'Deadline has expired',
[codex:769072] 0x1099:'Account does not own Shards',
[codex:769072] 0x10c9:'Shotgun not enacted or invalid winner',
[codex:769072] 0x110e:'SafeMath mul overflow',
[codex:769072] 0x112f:'Ether is required',
[codex:769072] 0x1155:'Conditions not met',
[codex:769072] 0x118e:'Caller not authorized',
[codex:769072] 0x11ba:'Account not participated in counterclaim',
[codex:769072] 0x11fd:'Ether exceeds goal',
[codex:769072] }
[codex:769072] for imm, label in strings.items():
[codex:769072]     locs=push2_offsets.get(imm,[])
[codex:769072]     print(hex(imm), label, 'used at', [hex(l) for l in locs])
[codex:769072] PY" in /tmp/codex-multi-vl1qm5r6 succeeded in 22ms:
[codex:769072] 0xf89 Initial claimant cannot countercommit used at ['0x4c3']
[codex:769072] 0xfc3 Transfer failed used at ['0x867', '0x9b1']
[codex:769072] 0xfea Initial claimant does not exist used at ['0x479']
[codex:769072] 0x101e Shotgun already enacted used at ['0x505']
[codex:769072] 0x104a enact Shotgun already enacted used at ['0xbf0']
[codex:769072] 0x1070 Deadline has expired used at ['0x545']
[codex:769072] 0x1099 Account does not own Shards used at ['0x3f3']
[codex:769072] 0x10c9 Shotgun not enacted or invalid winner used at ['0xa77']
[codex:769072] 0x110e SafeMath mul overflow used at ['0xdfd']
[codex:769072] 0x112f Ether is required used at ['0x432']
[codex:769072] 0x1155 Conditions not met used at ['0xc73']
[codex:769072] 0x118e Caller not authorized used at ['0x732']
[codex:769072] 0x11ba Account not participated in counterclaim used at ['0xac2']
[codex:769072] 0x11fd Ether exceeds goal used at ['0x58f']
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Mapping error message offsets and analyzing reentrancy risks**
[codex:769072] 
[codex:769072] I’m pinpointing where error messages occur in the code and inspecting surrounding logic to understand function behavior, especially around fund withdrawal and authorization checks. I’m closely looking at state updates before external calls to assess reentrancy vulnerabilities, checking SafeMath use and verifying proper state changes before transfers to avoid double claims or unauthorized access.
[codex:769072] exec
[codex:769072] /bin/bash -lc "python - <<'PY'
[codex:769072] import binascii
[codex:769072] hexdata=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[0]
[codex:769072] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:769072] code=bytes.fromhex(hexdata)
[codex:769072] # find ORIGIN opcode 0x32
[codex:769072] indices=[i for i,b in enumerate(code) if b==0x32]
[codex:769072] print(indices[:10])
[codex:769072] print('count',len(indices))
[codex:769072] PY" in /tmp/codex-multi-vl1qm5r6 succeeded in 18ms:
[codex:769072] [4695]
[codex:769072] count 1
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Analyzing potential unauthorized storage writes**
[codex:769072] exec
[codex:769072] /bin/bash -lc "python - <<'PY'
[codex:769072] import binascii
[codex:769072] hexdata=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[0]
[codex:769072] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:769072] code=bytes.fromhex(hexdata)
[codex:769072] # disassemble with offsets
[codex:769072] opnames={
[codex:769072] 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:769072] 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:769072] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:769072] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:769072] 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:769072] 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:769072] 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:769072] 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:769072] 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:769072] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:769072] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:769072] }
[codex:769072] 
[codex:769072] ops=[]
[codex:769072] i=0
[codex:769072] while i<len(code):
[codex:769072]     op=code[i]
[codex:769072]     name=opnames.get(op,'UNKNOWN')
[codex:769072]     if 0x60<=op<=0x7f:
[codex:769072]         n=op-0x5f
[codex:769072]         data=code[i+1:i+1+n]
[codex:769072]         ops.append((i,name,data))
[codex:769072]         i+=1+n
[codex:769072]     else:
[codex:769072]         ops.append((i,name,None))
[codex:769072]         i+=1
[codex:769072] 
[codex:769072] # find SSTOREs
[codex:769072] sstore_idx=[idx for idx,(off,name,data) in enumerate(ops) if name=='SSTORE']
[codex:769072] print('SSTORE count', len(sstore_idx))
[codex:769072] for idx in sstore_idx:
[codex:769072]     off=ops[idx][0]
[codex:769072]     print('\\nSSTORE at',hex(off))
[codex:769072]     # print few instructions before
[codex:769072]     for j in range(max(0,idx-8), idx+2):
[codex:769072]         o=ops[j]; d=''
[codex:769072]         if o[1].startswith('PUSH') and o[2] is not None: d=' 0x'+o[2].hex()
[codex:769072]         print('0x%04x %-12s%s'% (o[0], o[1], d))
[codex:769072] PY" in /tmp/codex-multi-vl1qm5r6 succeeded in 24ms:
[codex:769072] SSTORE count 9
[codex:769072] 
[codex:769072] SSTORE at 0x5c2
[codex:769072] 0x05b8 JUMPI       
[codex:769072] 0x05b9 PUSH1        0x09
[codex:769072] 0x05bb DUP1        
[codex:769072] 0x05bc SLOAD       
[codex:769072] 0x05bd PUSH1        0x01
[codex:769072] 0x05bf DUP2        
[codex:769072] 0x05c0 ADD         
[codex:769072] 0x05c1 DUP3        
[codex:769072] 0x05c2 SSTORE      
[codex:769072] 0x05c3 PUSH1        0x00
[codex:769072] 
[codex:769072] SSTORE at 0x5fa
[codex:769072] 0x05f1 PUSH1        0xa0
[codex:769072] 0x05f3 SHL         
[codex:769072] 0x05f4 SUB         
[codex:769072] 0x05f5 NOT         
[codex:769072] 0x05f6 AND         
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Analyzing SSTORE operations in functions**
[codex:769072] exec
[codex:769072] /bin/bash -lc "python - <<'PY'
[codex:769072] import binascii
[codex:769072] hexdata=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[0]
[codex:769072] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:769072] code=bytes.fromhex(hexdata)
[codex:769072] # disassemble range
[codex:769072] opnames={
[codex:769072] 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:769072] 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:769072] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:769072] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:769072] 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:769072] 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:769072] 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:769072] 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:769072] 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:769072] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:769072] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:769072] }
[codex:769072] # disassemble range
[codex:769072] ops=[]
[codex:769072] i=0
[codex:769072] while i<len(code):
[codex:769072]     op=code[i]
[codex:769072]     name=opnames.get(op,'UNKNOWN')
[codex:769072]     if 0x60<=op<=0x7f:
[codex:769072]         n=op-0x5f
[codex:769072]         data=code[i+1:i+1+n]
[codex:769072]         ops.append((i,name,data))
[codex:769072]         i+=1+n
[codex:769072]     else:
[codex:769072]         ops.append((i,name,None))
[codex:769072]         i+=1
[codex:769072] 
[codex:769072] 
[codex:769072] def print_range(start,end):
[codex:769072]     for off in range(len(ops)):
[codex:769072]         o=ops[off]
[codex:769072]         if o[0]<start: continue
[codex:769072]         if o[0]>end: break
[codex:769072]         d=''
[codex:769072]         if o[1].startswith('PUSH') and o[2] is not None:
[codex:769072]             d=' 0x'+o[2].hex()
[codex:769072]         print('0x%04x %-12s%s'%(o[0],o[1],d))
[codex:769072] 
[codex:769072] print_range(0x0cf0,0x0d80)
[codex:769072] PY" in /tmp/codex-multi-vl1qm5r6 succeeded in 21ms:
[codex:769072] 0x0cf0 JUMPDEST    
[codex:769072] 0x0cf1 PUSH1        0x06
[codex:769072] 0x0cf3 SLOAD       
[codex:769072] 0x0cf4 SWAP1       
[codex:769072] 0x0cf5 JUMP        
[codex:769072] 0x0cf6 JUMPDEST    
[codex:769072] 0x0cf7 PUSH1        0x00
[codex:769072] 0x0cf9 PUSH2        0x0d1b
[codex:769072] 0x0cfc PUSH8        0x0de0b6b3a7640000
[codex:769072] 0x0d05 PUSH2        0x07a3
[codex:769072] 0x0d08 PUSH1        0x06
[codex:769072] 0x0d0a SLOAD       
[codex:769072] 0x0d0b PUSH1        0x04
[codex:769072] 0x0d0d SLOAD       
[codex:769072] 0x0d0e PUSH2        0x0db9
[codex:769072] 0x0d11 SWAP1       
[codex:769072] 0x0d12 SWAP2       
[codex:769072] 0x0d13 SWAP1       
[codex:769072] 0x0d14 PUSH4        0xffffffff
[codex:769072] 0x0d19 AND         
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Analyzing storage slot functions**
[codex:769072] exec
[codex:769072] /bin/bash -lc "python - <<'PY'
[codex:769072] import binascii
[codex:769072] hexdata=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[0]
[codex:769072] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:769072] code=bytes.fromhex(hexdata)
[codex:769072] # disassemble range 0x09f0-0x0b80
[codex:769072] opnames={
[codex:769072] 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:769072] 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:769072] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:769072] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:769072] 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:769072] 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:769072] 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:769072] 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:769072] 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:769072] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:769072] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:769072] }
[codex:769072] 
[codex:769072] # disassemble range
[codex:769072] ops=[]
[codex:769072] i=0
[codex:769072] while i<len(code):
[codex:769072]     op=code[i]
[codex:769072]     name=opnames.get(op,'UNKNOWN')
[codex:769072]     if 0x60<=op<=0x7f:
[codex:769072]         n=op-0x5f
[codex:769072]         data=code[i+1:i+1+n]
[codex:769072]         ops.append((i,name,data))
[codex:769072]         i+=1+n
[codex:769072]     else:
[codex:769072]         ops.append((i,name,None))
[codex:769072]         i+=1
[codex:769072] 
[codex:769072] 
[codex:769072] def print_range(start,end):
[codex:769072]     for off,name,data in ops:
[codex:769072]         if off<start: continue
[codex:769072]         if off>end: break
[codex:769072]         d=''
[codex:769072]         if name.startswith('PUSH') and data is not None:
[codex:769072]             d=' 0x'+data.hex()
[codex:769072]         print('0x%04x %-12s%s'%(off,name,d))
[codex:769072] 
[codex:769072] print_range(0x09f0,0x0b80)
[codex:769072] PY" in /tmp/codex-multi-vl1qm5r6 succeeded in 26ms:
[codex:769072] 0x09f8 SWAP1       
[codex:769072] 0x09f9 PUSH1        0x00
[codex:769072] 0x09fb SWAP1       
[codex:769072] 0x09fc LOG3        
[codex:769072] 0x09fd POP         
[codex:769072] 0x09fe POP         
[codex:769072] 0x09ff JUMPDEST    
[codex:769072] 0x0a00 POP         
[codex:769072] 0x0a01 POP         
[codex:769072] 0x0a02 JUMP        
[codex:769072] 0x0a03 JUMPDEST    
[codex:769072] 0x0a04 PUSH1        0x01
[codex:769072] 0x0a06 SLOAD       
[codex:769072] 0x0a07 PUSH1        0x01
[codex:769072] 0x0a09 PUSH1        0xa0
[codex:769072] 0x0a0b SHL         
[codex:769072] 0x0a0c SWAP1       
[codex:769072] 0x0a0d DIV         
[codex:769072] 0x0a0e PUSH1        0xff
[codex:769072] 0x0a10 AND         
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Examining call at address 0x0b97**
[codex:769072] exec
[codex:769072] /bin/bash -lc "python - <<'PY'
[codex:769072] import binascii
[codex:769072] hexdata=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[0]
[codex:769072] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:769072] code=bytes.fromhex(hexdata)
[codex:769072] # disassemble range
[codex:769072] opnames={
[codex:769072] 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:769072] 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:769072] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:769072] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:769072] 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:769072] 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:769072] 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:769072] 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:769072] 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:769072] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:769072] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:769072] }
[codex:769072] 
[codex:769072] ops=[]
[codex:769072] i=0
[codex:769072] while i<len(code):
[codex:769072]     op=code[i]
[codex:769072]     name=opnames.get(op,'UNKNOWN')
[codex:769072]     if 0x60<=op<=0x7f:
[codex:769072]         n=op-0x5f
[codex:769072]         data=code[i+1:i+1+n]
[codex:769072]         ops.append((i,name,data))
[codex:769072]         i+=1+n
[codex:769072]     else:
[codex:769072]         ops.append((i,name,None))
[codex:769072]         i+=1
[codex:769072] 
[codex:769072] 
[codex:769072] def print_range(start,end):
[codex:769072]     for off,name,data in ops:
[codex:769072]         if off<start: continue
[codex:769072]         if off>end: break
[codex:769072]         d=''
[codex:769072]         if name.startswith('PUSH') and data is not None:
[codex:769072]             d=' 0x'+data.hex()
[codex:769072]         print('0x%04x %-12s%s'%(off,name,d))
[codex:769072] 
[codex:769072] print_range(0x0b80,0x0c20)
[codex:769072] PY" in /tmp/codex-multi-vl1qm5r6 succeeded in 19ms:
[codex:769072] 0x0b80 DUP3        
[codex:769072] 0x0b81 SWAP1       
[codex:769072] 0x0b82 SUB         
[codex:769072] 0x0b83 ADD         
[codex:769072] 0x0b84 DUP2        
[codex:769072] 0x0b85 DUP4        
[codex:769072] 0x0b86 DUP8        
[codex:769072] 0x0b87 DUP1        
[codex:769072] 0x0b88 EXTCODESIZE 
[codex:769072] 0x0b89 ISZERO      
[codex:769072] 0x0b8a DUP1        
[codex:769072] 0x0b8b ISZERO      
[codex:769072] 0x0b8c PUSH2        0x0b94
[codex:769072] 0x0b8f JUMPI       
[codex:769072] 0x0b90 PUSH1        0x00
[codex:769072] 0x0b92 DUP1        
[codex:769072] 0x0b93 REVERT      
[codex:769072] 0x0b94 JUMPDEST    
[codex:769072] 0x0b95 POP         
[codex:769072] 0x0b96 GAS         
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Examining enactShotgun function location**
[codex:769072] exec
[codex:769072] /bin/bash -lc "python - <<'PY'
[codex:769072] import binascii
[codex:769072] hexdata=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[0]
[codex:769072] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:769072] code=bytes.fromhex(hexdata)
[codex:769072] # disassemble range
[codex:769072] opnames={
[codex:769072] 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:769072] 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:769072] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:769072] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:769072] 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:769072] 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:769072] 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:769072] 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:769072] 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:769072] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:769072] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:769072] }
[codex:769072] 
[codex:769072] # disassemble range
[codex:769072] ops=[]
[codex:769072] i=0
[codex:769072] while i<len(code):
[codex:769072]     op=code[i]
[codex:769072]     name=opnames.get(op,'UNKNOWN')
[codex:769072]     if 0x60<=op<=0x7f:
[codex:769072]         n=op-0x5f
[codex:769072]         data=code[i+1:i+1+n]
[codex:769072]         ops.append((i,name,data))
[codex:769072]         i+=1+n
[codex:769072]     else:
[codex:769072]         ops.append((i,name,None))
[codex:769072]         i+=1
[codex:769072] 
[codex:769072] 
[codex:769072] def print_range(start,end):
[codex:769072]     for off,name,data in ops:
[codex:769072]         if off<start: continue
[codex:769072]         if off>end: break
[codex:769072]         d=''
[codex:769072]         if name.startswith('PUSH') and data is not None:
[codex:769072]             d=' 0x'+data.hex()
[codex:769072]         print('0x%04x %-12s%s'%(off,name,d))
[codex:769072] 
[codex:769072] print_range(0x0c20,0x0d00)
[codex:769072] PY" in /tmp/codex-multi-vl1qm5r6 succeeded in 21ms:
[codex:769072] 0x0c20 EQ          
[codex:769072] 0x0c21 DUP1        
[codex:769072] 0x0c22 PUSH2        0x0c4d
[codex:769072] 0x0c25 JUMPI       
[codex:769072] 0x0c26 POP         
[codex:769072] 0x0c27 PUSH1        0x01
[codex:769072] 0x0c29 DUP1        
[codex:769072] 0x0c2a SLOAD       
[codex:769072] 0x0c2b PUSH1        0x01
[codex:769072] 0x0c2d PUSH1        0xa0
[codex:769072] 0x0c2f SHL         
[codex:769072] 0x0c30 SWAP1       
[codex:769072] 0x0c31 DIV         
[codex:769072] 0x0c32 PUSH1        0xff
[codex:769072] 0x0c34 AND         
[codex:769072] 0x0c35 PUSH1        0x02
[codex:769072] 0x0c37 DUP2        
[codex:769072] 0x0c38 GT          
[codex:769072] 0x0c39 ISZERO      
[codex:769072] 0x0c3a PUSH2        0x0c3f
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Mapping function selectors to entry points**
[codex:769072] exec
[codex:769072] /bin/bash -lc "python - <<'PY'
[codex:769072] import binascii
[codex:769072] hexdata=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[0]
[codex:769072] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:769072] code=bytes.fromhex(hexdata)
[codex:769072] # disassemble range 0x06d0-0x0705
[codex:769072] opnames={
[codex:769072] 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:769072] 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:769072] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:769072] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:769072] 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:769072] 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:769072] 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:769072] 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:769072] 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:769072] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:769072] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:769072] }
[codex:769072] 
[codex:769072] # disassemble range
[codex:769072] ops=[]
[codex:769072] i=0
[codex:769072] while i<len(code):
[codex:769072]     op=code[i]
[codex:769072]     name=opnames.get(op,'UNKNOWN')
[codex:769072]     if 0x60<=op<=0x7f:
[codex:769072]         n=op-0x5f
[codex:769072]         data=code[i+1:i+1+n]
[codex:769072]         ops.append((i,name,data))
[codex:769072]         i+=1+n
[codex:769072]     else:
[codex:769072]         ops.append((i,name,None))
[codex:769072]         i+=1
[codex:769072] 
[codex:769072] 
[codex:769072] def print_range(start,end):
[codex:769072]     for off,name,data in ops:
[codex:769072]         if off<start: continue
[codex:769072]         if off>end: break
[codex:769072]         d=''
[codex:769072]         if name.startswith('PUSH') and data is not None:
[codex:769072]             d=' 0x'+data.hex()
[codex:769072]         print('0x%04x %-12s%s'%(off,name,d))
[codex:769072] 
[codex:769072] print_range(0x0688,0x06ff)
[codex:769072] PY" in /tmp/codex-multi-vl1qm5r6 succeeded in 22ms:
[codex:769072] 0x0688 SHL         
[codex:769072] 0x0689 NOT         
[codex:769072] 0x068a AND         
[codex:769072] 0x068b PUSH1        0x01
[codex:769072] 0x068d PUSH1        0xa1
[codex:769072] 0x068f SHL         
[codex:769072] 0x0690 OR          
[codex:769072] 0x0691 SWAP1       
[codex:769072] 0x0692 SSTORE      
[codex:769072] 0x0693 PUSH2        0x069a
[codex:769072] 0x0696 PUSH2        0x0bc3
[codex:769072] 0x0699 JUMP        
[codex:769072] 0x069a JUMPDEST    
[codex:769072] 0x069b JUMP        
[codex:769072] 0x069c JUMPDEST    
[codex:769072] 0x069d PUSH1        0x60
[codex:769072] 0x069f PUSH1        0x09
[codex:769072] 0x06a1 DUP1        
[codex:769072] 0x06a2 SLOAD       
[codex:769072] 0x06a3 DUP1        
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Navigating to target function**
[codex:769072] exec
[codex:769072] /bin/bash -lc "python - <<'PY'
[codex:769072] import binascii
[codex:769072] hexdata=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[0]
[codex:769072] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:769072] code=bytes.fromhex(hexdata)
[codex:769072] # disassemble range
[codex:769072] opnames={
[codex:769072] 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:769072] 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:769072] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:769072] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:769072] 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:769072] 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:769072] 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:769072] 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:769072] 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:769072] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:769072] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:769072] }
[codex:769072] 
[codex:769072] ops=[]
[codex:769072] i=0
[codex:769072] while i<len(code):
[codex:769072]     op=code[i]
[codex:769072]     name=opnames.get(op,'UNKNOWN')
[codex:769072]     if 0x60<=op<=0x7f:
[codex:769072]         n=op-0x5f
[codex:769072]         data=code[i+1:i+1+n]
[codex:769072]         ops.append((i,name,data))
[codex:769072]         i+=1+n
[codex:769072]     else:
[codex:769072]         ops.append((i,name,None))
[codex:769072]         i+=1
[codex:769072] 
[codex:769072] 
[codex:769072] def print_range(start,end):
[codex:769072]     for off,name,data in ops:
[codex:769072]         if off<start: continue
[codex:769072]         if off>end: break
[codex:769072]         d=''
[codex:769072]         if name.startswith('PUSH') and data is not None:
[codex:769072]             d=' 0x'+data.hex()
[codex:769072]         print('0x%04x %-12s%s'%(off,name,d))
[codex:769072] 
[codex:769072] print_range(0x06fe,0x0705)
[codex:769072] PY" in /tmp/codex-multi-vl1qm5r6 succeeded in 20ms:
[codex:769072] 0x06fe JUMPDEST    
[codex:769072] 0x06ff PUSH1        0x01
[codex:769072] 0x0701 SLOAD       
[codex:769072] 0x0702 PUSH1        0x01
[codex:769072] 0x0704 PUSH1        0x01
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Analyzing function authorization and parameters**
[codex:769072] 
[codex:769072] I'm tracing the function at 0x06fe, which seems to implement `collectEtherProceeds(address)` with authorization based on a stored address compared to `CALLER`. The function takes an address parameter that might specify a payout recipient, but only an authorized caller can invoke it. I'm considering if an attacker could set the authorized address (slot1) improperly to exploit withdrawals, so I'll next dissect the deposit-related function at 0x0355 to verify slot setting and potential vulnerabilities.
[codex:769072] exec
[codex:769072] /bin/bash -lc "python - <<'PY'
[codex:769072] import binascii
[codex:769072] hexdata=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[0]
[codex:769072] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:769072] code=bytes.fromhex(hexdata)
[codex:769072] # disassemble range 0x0350-0x069a
[codex:769072] opnames={
[codex:769072] 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:769072] 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:769072] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:769072] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:769072] 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:769072] 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:769072] 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:769072] 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:769072] 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:769072] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:769072] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:769072] }
[codex:769072] 
[codex:769072] # disassemble range
[codex:769072] ops=[]
[codex:769072] i=0
[codex:769072] while i<len(code):
[codex:769072]     op=code[i]
[codex:769072]     name=opnames.get(op,'UNKNOWN')
[codex:769072]     if 0x60<=op<=0x7f:
[codex:769072]         n=op-0x5f
[codex:769072]         data=code[i+1:i+1+n]
[codex:769072]         ops.append((i,name,data))
[codex:769072]         i+=1+n
[codex:769072]     else:
[codex:769072]         ops.append((i,name,None))
[codex:769072]         i+=1
[codex:769072] 
[codex:769072] 
[codex:769072] def print_range(start,end):
[codex:769072]     for off,name,data in ops:
[codex:769072]         if off<start: continue
[codex:769072]         if off>end: break
[codex:769072]         d=''
[codex:769072]         if name.startswith('PUSH') and data is not None:
[codex:769072]             d=' 0x'+data.hex()
[codex:769072]         print('0x%04x %-12s%s'%(off,name,d))
[codex:769072] 
[codex:769072] print_range(0x0350,0x069a)
[codex:769072] PY" in /tmp/codex-multi-vl1qm5r6 succeeded in 21ms:
[codex:769072] 0x0351 PUSH2        0x0d50
[codex:769072] 0x0354 JUMP        
[codex:769072] 0x0355 JUMPDEST    
[codex:769072] 0x0356 PUSH1        0x01
[codex:769072] 0x0358 SLOAD       
[codex:769072] 0x0359 PUSH1        0x40
[codex:769072] 0x035b DUP1        
[codex:769072] 0x035c MLOAD       
[codex:769072] 0x035d PUSH4        0x70a08231
[codex:769072] 0x0362 PUSH1        0xe0
[codex:769072] 0x0364 SHL         
[codex:769072] 0x0365 DUP2        
[codex:769072] 0x0366 MSTORE      
[codex:769072] 0x0367 CALLER      
[codex:769072] 0x0368 PUSH1        0x04
[codex:769072] 0x036a DUP3        
[codex:769072] 0x036b ADD         
[codex:769072] 0x036c MSTORE      
[codex:769072] 0x036d SWAP1       
[codex:769072] 0x036e MLOAD       
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Analyzing counterCommitEther logic**
[codex:769072] exec
[codex:769072] /bin/bash -lc "python - <<'PY'
[codex:769072] import binascii
[codex:769072] hexdata=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[0]
[codex:769072] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:769072] code=bytes.fromhex(hexdata)
[codex:769072] const=bytes.fromhex('6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af')
[codex:769072] idx=code.find(const)
[codex:769072] print('found at', hex(idx))
[codex:769072] PY" in /tmp/codex-multi-vl1qm5r6 succeeded in 18ms:
[codex:769072] found at 0x5ca
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Analyzing constant as storage slot hash**
[codex:769072] exec
[codex:769072] /bin/bash -lc "python - <<'PY'
[codex:769072] import hashlib
[codex:769072] # compute keccak256 of slot 9
[codex:769072] slot=9
[codex:769072] val=slot.to_bytes(32,'big')
[codex:769072] print('keccak(slot9)=',hashlib.sha3_256(val).hexdigest())
[codex:769072] slot=10
[codex:769072] print('keccak(slot10)=',hashlib.sha3_256(slot.to_bytes(32,'big')).hexdigest())
[codex:769072] slot=7
[codex:769072] print('keccak(slot7)=',hashlib.sha3_256(slot.to_bytes(32,'big')).hexdigest())
[codex:769072] PY" in /tmp/codex-multi-vl1qm5r6 succeeded in 23ms:
[codex:769072] keccak(slot9)= bd033fb07dfd2cc39c9fd234ddf87743782cfd6acfae6380c2bcceb4b851d025
[codex:769072] keccak(slot10)= e09220cb32d5b55e6b7e17981a05ac76316dd0cee1d28dfb8865e20d6f62f00d
[codex:769072] keccak(slot7)= dbe60dcc616ee5f0b87859877ed8c3901212a760b3b773a3930bee32af6137ec
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Analyzing keccak and storage keys with symbolic evaluation**
[codex:769072] 
[codex:769072] I'm exploring the difference between SHA3-256 and Keccak-256, realizing EVM uses Keccak, so Python's hashlib.sha3_256 isn’t a direct match. To understand storage keys, I plan to implement a simple symbolic stack evaluator for a specific EVM instruction range to track how SSTORE keys are computed, which might clarify if there's a vulnerability or token address manipulation risk. This should help decode the storage operations better.
[codex:769072] exec
[codex:769072] /bin/bash -lc "python - <<'PY'
[codex:769072] import binascii
[codex:769072] hexdata=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[0]
[codex:769072] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:769072] code=bytes.fromhex(hexdata)
[codex:769072] # map opcodes to names and push sizes
[codex:769072] opnames={
[codex:769072] 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:769072] 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:769072] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:769072] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:769072] 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:769072] 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:769072] 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:769072] 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:769072] 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:769072] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:769072] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:769072] }
[codex:769072] 
[codex:769072] # build ops with offsets
[codex:769072] ops=[]
[codex:769072] i=0
[codex:769072] while i<len(code):
[codex:769072]     op=code[i]
[codex:769072]     name=opnames.get(op,'UNKNOWN')
[codex:769072]     if 0x60<=op<=0x7f:
[codex:769072]         n=op-0x5f
[codex:769072]         data=code[i+1:i+1+n]
[codex:769072]         ops.append((i,name,data))
[codex:769072]         i+=1+n
[codex:769072]     else:
[codex:769072]         ops.append((i,name,None))
[codex:769072]         i+=1
[codex:769072] 
[codex:769072] # create map from offset to index
[codex:769072] idx_by_off={off:i for i,(off,_,_) in enumerate(ops)}
[codex:769072] start=0x05a5; end=0x05fb
[codex:769072] # simulate stack from start (assume empty)
[codex:769072] stack=[]
[codex:769072] 
[codex:769072] # We'll implement only operations seen in region.
[codex:769072] 
[codex:769072] def pop(n=1):
[codex:769072]     out=[]
[codex:769072]     for _ in range(n):
[codex:769072]         if stack: out.append(stack.pop())
[codex:769072]         else: out.append('??')
[codex:769072]     return out
[codex:769072] 
[codex:769072] def push(x):
[codex:769072]     stack.append(x)
[codex:769072] 
[codex:769072] # simulate
[codex:769072] for off,name,data in ops:
[codex:769072]     if off<start: continue
[codex:769072]     if off> end: break
[codex:769072]     if name.startswith('PUSH'):
[codex:769072]         push('0x'+data.hex())
[codex:769072]     elif name=='CALLER':
[codex:769072]         push('CALLER')
[codex:769072]     elif name=='CALLVALUE':
[codex:769072]         push('CALLVALUE')
[codex:769072]     elif name=='SLOAD':
[codex:769072]         key=pop()[0]
[codex:769072]         push(f'SLOAD({key})')
[codex:769072]     elif name=='SSTORE':
[codex:769072]         val,key=pop(2) # note order: value then key? In EVM, stack: key, value? Actually SSTORE expects key and value on stack: key, value. Top-of-stack is value. So pop value then key.
[codex:769072]         push(f'SSTORE({key},{val})')
[codex:769072]     elif name=='MSTORE':
[codex:769072]         val,loc=pop(2)
[codex:769072]         # ignore
[codex:769072]     elif name=='SHA3':
[codex:769072]         a,b=pop(2)
[codex:769072]         push(f'KEC({a},{b})')
[codex:769072]     elif name=='ADD':
[codex:769072]         a,b=pop(2); push(f'({b}+{a})')
[codex:769072]     elif name=='SUB':
[codex:769072]         a,b=pop(2); push(f'({b}-{a})')
[codex:769072]     elif name=='AND':
[codex:769072]         a,b=pop(2); push(f'({b}&{a})')
[codex:769072]     elif name=='OR':
[codex:769072]         a,b=pop(2); push(f'({b}|{a})')
[codex:769072]     elif name=='NOT':
[codex:769072]         a=pop()[0]; push(f'~{a}')
[codex:769072]     elif name=='DUP1':
[codex:769072]         push(stack[-1] if stack else '??')
[codex:769072]     elif name=='DUP2':
[codex:769072]         push(stack[-2] if len(stack)>=2 else '??')
[codex:769072]     elif name=='DUP3':
[codex:769072]         push(stack[-3] if len(stack)>=3 else '??')
[codex:769072]     elif name=='DUP4':
[codex:769072]         push(stack[-4] if len(stack)>=4 else '??')
[codex:769072]     elif name=='SWAP1':
[codex:769072]         if len(stack)>=2: stack[-1],stack[-2]=stack[-2],stack[-1]
[codex:769072]     elif name=='SWAP2':
[codex:769072]         if len(stack)>=3: stack[-1],stack[-3]=stack[-3],stack[-1]
[codex:769072]     elif name=='SWAP3':
[codex:769072]         if len(stack)>=4: stack[-1],stack[-4]=stack[-4],stack[-1]
[codex:769072]     elif name=='JUMPI' or name=='JUMP' or name=='JUMPDEST' or name=='POP' or name=='ISZERO' or name=='EQ' or name=='LT' or name=='GT':
[codex:769072]         # simplify
[codex:769072]         if name=='POP':
[codex:769072]             pop()
[codex:769072]         elif name in ('ISZERO',):
[codex:769072]             a=pop()[0]; push(f'ISZERO({a})')
[codex:769072]         elif name in ('EQ','LT','GT'):
[codex:769072]             a,b=pop(2); push(f'{name}({b},{a})')
[codex:769072]         else:
[codex:769072]             pass
[codex:769072]     else:
[codex:769072]         # ignore others
[codex:769072]         pass
[codex:769072]     # print state
[codex:769072]     print(f'0x{off:04x} {name:10s} stack_top={stack[-3:]}')
[codex:769072] 
[codex:769072] # print remaining stack
[codex:769072] print('\\nFinal stack:', stack)
[codex:769072] PY" in /tmp/codex-multi-vl1qm5r6 succeeded in 24ms:
[codex:769072] 0x05a5 CALLER     stack_top=['CALLER']
[codex:769072] 0x05a6 PUSH1      stack_top=['CALLER', '0x00']
[codex:769072] 0x05a8 SWAP1      stack_top=['0x00', 'CALLER']
[codex:769072] 0x05a9 DUP2       stack_top=['0x00', 'CALLER', '0x00']
[codex:769072] 0x05aa MSTORE     stack_top=['0x00']
[codex:769072] 0x05ab PUSH1      stack_top=['0x00', '0x0a']
[codex:769072] 0x05ad PUSH1      stack_top=['0x00', '0x0a', '0x20']
[codex:769072] 0x05af MSTORE     stack_top=['0x00']
[codex:769072] 0x05b0 PUSH1      stack_top=['0x00', '0x40']
[codex:769072] 0x05b2 SWAP1      stack_top=['0x40', '0x00']
[codex:769072] 0x05b3 SHA3       stack_top=['KEC(0x00,0x40)']
[codex:769072] 0x05b4 SLOAD      stack_top=['SLOAD(KEC(0x00,0x40))']
[codex:769072] 0x05b5 PUSH2      stack_top=['SLOAD(KEC(0x00,0x40))', '0x05fb']
[codex:769072] 0x05b8 JUMPI      stack_top=['SLOAD(KEC(0x00,0x40))', '0x05fb']
[codex:769072] 0x05b9 PUSH1      stack_top=['SLOAD(KEC(0x00,0x40))', '0x05fb', '0x09']
[codex:769072] 0x05bb DUP1       stack_top=['0x05fb', '0x09', '0x09']
[codex:769072] 0x05bc SLOAD      stack_top=['0x05fb', '0x09', 'SLOAD(0x09)']
[codex:769072] 0x05bd PUSH1      stack_top=['0x09', 'SLOAD(0x09)', '0x01']
[codex:769072] 0x05bf DUP2       stack_top=['SLOAD(0x09)', '0x01', 'SLOAD(0x09)']
[codex:769072] 0x05c0 ADD        stack_top=['0x09', 'SLOAD(0x09)', '(0x01+SLOAD(0x09))']
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Correcting stack behavior for SSTORE**
[codex:769072] exec
[codex:769072] /bin/bash -lc "python - <<'PY'
[codex:769072] import binascii
[codex:769072] hexdata=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[0]
[codex:769072] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:769072] code=bytes.fromhex(hexdata)
[codex:769072] 
[codex:769072] opnames={
[codex:769072] 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:769072] 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:769072] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:769072] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:769072] 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:769072] 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:769072] 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:769072] 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:769072] 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:769072] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:769072] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:769072] }
[codex:769072] 
[codex:769072] # parse ops with offsets
[codex:769072] ops=[]
[codex:769072] i=0
[codex:769072] while i<len(code):
[codex:769072]     op=code[i]
[codex:769072]     name=opnames.get(op,'UNKNOWN')
[codex:769072]     if 0x60<=op<=0x7f:
[codex:769072]         n=op-0x5f
[codex:769072]         data=code[i+1:i+1+n]
[codex:769072]         ops.append((i,name,data))
[codex:769072]         i+=1+n
[codex:769072]     else:
[codex:769072]         ops.append((i,name,None))
[codex:769072]         i+=1
[codex:769072] 
[codex:769072] start=0x05a5; end=0x05fb
[codex:769072] stack=[]
[codex:769072] 
[codex:769072] def pop(n=1):
[codex:769072]     out=[]
[codex:769072]     for _ in range(n):
[codex:769072]         out.append(stack.pop() if stack else '??')
[codex:769072]     return out
[codex:769072] 
[codex:769072] def push(x):
[codex:769072]     stack.append(x)
[codex:769072] 
[codex:769072] for off,name,data in ops:
[codex:769072]     if off<start: continue
[codex:769072]     if off> end: break
[codex:769072]     if name.startswith('PUSH'):
[codex:769072]         push('0x'+data.hex())
[codex:769072]     elif name=='CALLER':
[codex:769072]         push('CALLER')
[codex:769072]     elif name=='CALLVALUE':
[codex:769072]         push('CALLVALUE')
[codex:769072]     elif name=='SLOAD':
[codex:769072]         key=pop()[0]
[codex:769072]         push(f'SLOAD({key})')
[codex:769072]     elif name=='SSTORE':
[codex:769072]         val,key=pop(2)  # pop value then key
[codex:769072]         # no push
[codex:769072]         # record maybe
[codex:769072]         push(f'[SSTORE key={key} val={val}]')  # to observe? but this alters stack; better print and not push
[codex:769072]         # Instead, pop so stack correctly. We'll print.
[codex:769072]         stack.pop()
[codex:769072]     elif name=='MSTORE':
[codex:769072]         val,loc=pop(2)
[codex:769072]     elif name=='SHA3':
[codex:769072]         a,b=pop(2); push(f'KEC({b},{a})')
[codex:769072]     elif name=='ADD':
[codex:769072]         a,b=pop(2); push(f'({b}+{a})')
[codex:769072]     elif name=='SUB':
[codex:769072]         a,b=pop(2); push(f'({b}-{a})')
[codex:769072]     elif name=='AND':
[codex:769072]         a,b=pop(2); push(f'({b}&{a})')
[codex:769072]     elif name=='OR':
[codex:769072]         a,b=pop(2); push(f'({b}|{a})')
[codex:769072]     elif name=='NOT':
[codex:769072]         a=pop()[0]; push(f'~{a}')
[codex:769072]     elif name=='DUP1':
[codex:769072]         push(stack[-1] if stack else '??')
[codex:769072]     elif name=='DUP2':
[codex:769072]         push(stack[-2] if len(stack)>=2 else '??')
[codex:769072]     elif name=='DUP3':
[codex:769072]         push(stack[-3] if len(stack)>=3 else '??')
[codex:769072]     elif name=='DUP4':
[codex:769072]         push(stack[-4] if len(stack)>=4 else '??')
[codex:769072]     elif name=='SWAP1':
[codex:769072]         if len(stack)>=2: stack[-1],stack[-2]=stack[-2],stack[-1]
[codex:769072]     elif name=='SWAP2':
[codex:769072]         if len(stack)>=3: stack[-1],stack[-3]=stack[-3],stack[-1]
[codex:769072]     elif name=='SWAP3':
[codex:769072]         if len(stack)>=4: stack[-1],stack[-4]=stack[-4],stack[-1]
[codex:769072]     elif name=='POP':
[codex:769072]         pop()
[codex:769072]     elif name=='ISZERO':
[codex:769072]         a=pop()[0]; push(f'ISZERO({a})')
[codex:769072]     elif name in ('EQ','LT','GT'):
[codex:769072]         a,b=pop(2); push(f'{name}({b},{a})')
[codex:769072]     elif name in ('JUMPI','JUMP','JUMPDEST'):
[codex:769072]         pass
[codex:769072]     else:
[codex:769072]         pass
[codex:769072]     print(f'0x{off:04x} {name:10s} stack={stack[-5:]}')
[codex:769072] PY" in /tmp/codex-multi-vl1qm5r6 succeeded in 23ms:
[codex:769072] 0x05a5 CALLER     stack=['CALLER']
[codex:769072] 0x05a6 PUSH1      stack=['CALLER', '0x00']
[codex:769072] 0x05a8 SWAP1      stack=['0x00', 'CALLER']
[codex:769072] 0x05a9 DUP2       stack=['0x00', 'CALLER', '0x00']
[codex:769072] 0x05aa MSTORE     stack=['0x00']
[codex:769072] 0x05ab PUSH1      stack=['0x00', '0x0a']
[codex:769072] 0x05ad PUSH1      stack=['0x00', '0x0a', '0x20']
[codex:769072] 0x05af MSTORE     stack=['0x00']
[codex:769072] 0x05b0 PUSH1      stack=['0x00', '0x40']
[codex:769072] 0x05b2 SWAP1      stack=['0x40', '0x00']
[codex:769072] 0x05b3 SHA3       stack=['KEC(0x40,0x00)']
[codex:769072] 0x05b4 SLOAD      stack=['SLOAD(KEC(0x40,0x00))']
[codex:769072] 0x05b5 PUSH2      stack=['SLOAD(KEC(0x40,0x00))', '0x05fb']
[codex:769072] 0x05b8 JUMPI      stack=['SLOAD(KEC(0x40,0x00))', '0x05fb']
[codex:769072] 0x05b9 PUSH1      stack=['SLOAD(KEC(0x40,0x00))', '0x05fb', '0x09']
[codex:769072] 0x05bb DUP1       stack=['SLOAD(KEC(0x40,0x00))', '0x05fb', '0x09', '0x09']
[codex:769072] 0x05bc SLOAD      stack=['SLOAD(KEC(0x40,0x00))', '0x05fb', '0x09', 'SLOAD(0x09)']
[codex:769072] 0x05bd PUSH1      stack=['SLOAD(KEC(0x40,0x00))', '0x05fb', '0x09', 'SLOAD(0x09)', '0x01']
[codex:769072] 0x05bf DUP2       stack=['0x05fb', '0x09', 'SLOAD(0x09)', '0x01', 'SLOAD(0x09)']
[codex:769072] 0x05c0 ADD        stack=['SLOAD(KEC(0x40,0x00))', '0x05fb', '0x09', 'SLOAD(0x09)', '(0x01+SLOAD(0x09))']
[codex:769072] 
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Analyzing complex storage and calls**
[codex:769072] 
[codex:769072] I'm breaking down intricate storage slot manipulations and external calls to understand variable roles, verify state changes, and check access controls, especially focusing on whether critical functions properly restrict who can trigger state changes or token transfers. This involves simulating stack states and tracing calldata construction for contract interactions.
[codex:769072] thinking
[codex:769072] **Planning memory simulation for calls**
[codex:769072] exec
[codex:769072] /bin/bash -lc "python - <<'PY'
[codex:769072] import binascii
[codex:769072] hexdata=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[0]
[codex:769072] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:769072] code=bytes.fromhex(hexdata)
[codex:769072] 
[codex:769072] # opcode tables
[codex:769072] opnames={
[codex:769072] 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:769072] 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:769072] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:769072] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:769072] 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:769072] 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:769072] 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:769072] 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:769072] 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:769072] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:769072] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:769072] }
[codex:769072] 
[codex:769072] # parse ops with offsets
[codex:769072] ops=[]
[codex:769072] i=0
[codex:769072] while i<len(code):
[codex:769072]     op=code[i]
[codex:769072]     name=opnames.get(op,'UNKNOWN')
[codex:769072]     if 0x60<=op<=0x7f:
[codex:769072]         n=op-0x5f
[codex:769072]         data=code[i+1:i+1+n]
[codex:769072]         ops.append((i,name,data))
[codex:769072]         i+=1+n
[codex:769072]     else:
[codex:769072]         ops.append((i,name,None))
[codex:769072]         i+=1
[codex:769072] 
[codex:769072] # simulate between start and end
[codex:769072] start=0x0355; end=0x03a3
[codex:769072] stack=[]
[codex:769072] mem={}
[codex:769072] 
[codex:769072] def pop():
[codex:769072]     return stack.pop() if stack else '??'
[codex:769072] 
[codex:769072] def push(x):
[codex:769072]     stack.append(x)
[codex:769072] 
[codex:769072] for off,name,data in ops:
[codex:769072]     if off<start: continue
[codex:769072]     if off> end: break
[codex:769072]     if name.startswith('PUSH'):
[codex:769072]         push(int.from_bytes(data,'big'))
[codex:769072]     elif name=='CALLER':
[codex:769072]         push('CALLER')
[codex:769072]     elif name=='SLOAD':
[codex:769072]         key=pop(); push(f'SLOAD({key})')
[codex:769072]     elif name=='MLOAD':
[codex:769072]         loc=pop(); push(mem.get(loc, f'MEM[{loc}]'))
[codex:769072]     elif name=='MSTORE':
[codex:769072]         loc=pop(); val=pop(); mem[loc]=val
[codex:769072]     elif name=='ADD':
[codex:769072]         a=pop(); b=pop(); push(f'({b}+{a})')
[codex:769072]     elif name=='SUB':
[codex:769072]         a=pop(); b=pop(); push(f'({b}-{a})')
[codex:769072]     elif name=='AND':
[codex:769072]         a=pop(); b=pop(); push(f'({b}&{a})')
[codex:769072]     elif name=='OR':
[codex:769072]         a=pop(); b=pop(); push(f'({b}|{a})')
[codex:769072]     elif name=='SHL':
[codex:769072]         a=pop(); b=pop(); push(f'({b}<<{a})')
[codex:769072]     elif name=='SHR':
[codex:769072]         a=pop(); b=pop(); push(f'({b}>>{a})')
[codex:769072]     elif name=='DIV':
[codex:769072]         a=pop(); b=pop(); push(f'({b}/{a})')
[codex:769072]     elif name=='DUP1':
[codex:769072]         push(stack[-1])
[codex:769072]     elif name=='DUP2':
[codex:769072]         push(stack[-2])
[codex:769072]     elif name=='DUP3':
[codex:769072]         push(stack[-3])
[codex:769072]     elif name=='DUP4':
[codex:769072]         push(stack[-4])
[codex:769072]     elif name=='SWAP1':
[codex:769072]         stack[-1],stack[-2]=stack[-2],stack[-1]
[codex:769072]     elif name=='SWAP2':
[codex:769072]         stack[-1],stack[-3]=stack[-3],stack[-1]
[codex:769072]     elif name=='SWAP3':
[codex:769072]         stack[-1],stack[-4]=stack[-4],stack[-1]
[codex:769072]     elif name=='EXTCODESIZE':
[codex:769072]         a=pop(); push(f'EXTCODESIZE({a})')
[codex:769072]     elif name=='GAS':
[codex:769072]         push('GAS')
[codex:769072]     elif name=='STATICCALL':
[codex:769072]         # print call stack
[codex:769072]         print('STATICCALL stack (top last):', stack)
[codex:769072]     elif name=='JUMPDEST' or name=='JUMPI' or name=='JUMP' or name=='ISZERO' or name=='GT' or name=='LT' or name=='EQ' or name=='RETURNDATASIZE' or name=='RETURNDATACOPY' or name=='REVERT' or name=='POP':
[codex:769072]         if name=='POP':
[codex:769072]             pop()
[codex:769072]         # ignore control flow for this snippet
[codex:769072]     else:
[codex:769072]         pass
[codex:769072] 
[codex:769072]     #print(f'0x{off:04x} {name} stack={stack}')
[codex:769072] 
[codex:769072] PY" in /tmp/codex-multi-vl1qm5r6 succeeded in 23ms:
[codex:769072] STATICCALL stack (top last): [0, '(SLOAD(1)&(1-(1<<160)))', 1889567281, '(36+MEM[64])', 32, 'MEM[64]', '(36+(MEM[64]-MEM[64]))', 'MEM[64]', 'EXTCODESIZE(MEM[64])', 'EXTCODESIZE(MEM[64])', 928, 0, 'GAS']
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Analyzing STATICCALL stack and storage interpretations**
[codex:769072] 
[codex:769072] I'm untangling the EVM stack just before a STATICCALL to pinpoint the call target address and reconcile storage slot uses for token, initial claimant, and authorization. There's a lot to unpack here! I’m carefully matching stack order to STATICCALL arguments and revisiting contract storage to better understand which slot holds the token contract versus initial claimant, as this affects access control and call authorization logic. This should clarify the function roles and who’s allowed to call what.
[codex:769072] exec
[codex:769072] /bin/bash -lc "python - <<'PY'
[codex:769072] import binascii
[codex:769072] hexdata=open('BYTECODE_BUNDLE.txt').read().split('FILE: runtime_bytecode.hex')[1].strip().split('\\n')[0]
[codex:769072] if hexdata.startswith('0x'): hexdata=hexdata[2:]
[codex:769072] code=bytes.fromhex(hexdata)
[codex:769072] 
[codex:769072] opnames={
[codex:769072] 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:769072] 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:769072] 0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
[codex:769072] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:769072] 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:769072] 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:769072] 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:769072] 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:769072] 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:769072] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:769072] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:769072] }
[codex:769072] 
[codex:769072] # parse ops
[codex:769072] ops=[]
[codex:769072] i=0
[codex:769072] while i<len(code):
[codex:769072]     op=code[i]
[codex:769072]     name=opnames.get(op,'UNKNOWN')
[codex:769072]     if 0x60<=op<=0x7f:
[codex:769072]         n=op-0x5f
[codex:769072]         data=code[i+1:i+1+n]
[codex:769072]         ops.append((i,name,int.from_bytes(data,'big')))
[codex:769072]         i+=1+n
[codex:769072]     else:
[codex:769072]         ops.append((i,name,None))
[codex:769072]         i+=1
[codex:769072] 
[codex:769072] start=0x0355; end=0x03a3
[codex:769072] stack=[]
[codex:769072] mem={}
[codex:769072] 
[codex:769072] def pop():
[codex:769072]     return stack.pop() if stack else '??'
[codex:769072] 
[codex:769072] def push(x):
[codex:769072]     stack.append(x)
[codex:769072] 
[codex:769072] for off,name,data in ops:
[codex:769072]     if off<start: continue
[codex:769072]     if off> end: break
[codex:769072]     if name.startswith('PUSH'):
[codex:769072]         push(data)
[codex:769072]     elif name=='CALLER':
[codex:769072]         push('CALLER')
[codex:769072]     elif name=='SLOAD':
[codex:769072]         key=pop(); push(f'SLOAD({key})')
[codex:769072]     elif name=='MLOAD':
[codex:769072]         loc=pop(); push(mem.get(loc, f'MEM[{loc}]'))
[codex:769072]     elif name=='MSTORE':
[codex:769072]         loc=pop(); val=pop(); mem[loc]=val
[codex:769072]     elif name=='ADD':
[codex:769072]         a=pop(); b=pop(); push(f'({b}+{a})')
[codex:769072]     elif name=='SUB':
[codex:769072]         a=pop(); b=pop(); push(f'({b}-{a})')
[codex:769072]     elif name=='AND':
[codex:769072]         a=pop(); b=pop(); push(f'({b}&{a})')
[codex:769072]     elif name=='OR':
[codex:769072]         a=pop(); b=pop(); push(f'({b}|{a})')
[codex:769072]     elif name=='SHL':
[codex:769072]         a=pop(); b=pop(); push(f'({b}<<{a})')
[codex:769072]     elif name=='DIV':
[codex:769072]         a=pop(); b=pop(); push(f'({b}/{a})')
[codex:769072]     elif name=='DUP1':
[codex:769072]         push(stack[-1])
[codex:769072]     elif name=='DUP2':
[codex:769072]         push(stack[-2])
[codex:769072]     elif name=='DUP3':
[codex:769072]         push(stack[-3])
[codex:769072]     elif name=='DUP4':
[codex:769072]         push(stack[-4])
[codex:769072]     elif name=='SWAP1':
[codex:769072]         stack[-1],stack[-2]=stack[-2],stack[-1]
[codex:769072]     elif name=='SWAP2':
[codex:769072]         stack[-1],stack[-3]=stack[-3],stack[-1]
[codex:769072]     elif name=='SWAP3':
[codex:769072]         stack[-1],stack[-4]=stack[-4],stack[-1]
[codex:769072]     elif name=='EXTCODESIZE':
[codex:769072]         a=pop(); push(f'EXTCODESIZE({a})')
[codex:769072]     elif name=='GAS':
[codex:769072]         push('GAS')
[codex:769072]     elif name=='STATICCALL':
[codex:769072]         # show last 6 items
[codex:769072]         print('Stack len', len(stack))
[codex:769072]         print('Stack (top last):', stack)
[codex:769072]         last6 = stack[-6:]
[codex:769072]         print('Last6 [gas,to,in_off,in_size,out_off,out_size]=', last6)
[codex:769072]     elif name=='POP':
[codex:769072]         pop()
[codex:769072]     else:
[codex:769072]         # ignore other ops
[codex:769072]         pass
[codex:769072] 
[codex:769072] PY" in /tmp/codex-multi-vl1qm5r6 succeeded in 25ms:
[codex:769072] Stack len 13
[codex:769072] Stack (top last): [0, '(SLOAD(1)&(1-(1<<160)))', 1889567281, '(36+MEM[64])', 32, 'MEM[64]', '(36+(MEM[64]-MEM[64]))', 'MEM[64]', 'EXTCODESIZE(MEM[64])', 'EXTCODESIZE(MEM[64])', 928, 0, 'GAS']
[codex:769072] Last6 [gas,to,in_off,in_size,out_off,out_size]= ['MEM[64]', 'EXTCODESIZE(MEM[64])', 'EXTCODESIZE(MEM[64])', 928, 0, 'GAS']
[codex:769072] 
[codex:769072] thinking
[codex:769072] **Summarizing exploit analysis and conclusions**
[codex:769072] 
[codex:769072] I've carefully analyzed the bytecode focusing on call patterns, authorization logic, reentrancy safety, and arithmetic protections. Despite some complexities like stack simulation challenges and intricate control flow, I find no concrete exploit path or serious vulnerability from this contract alone. I’m compiling a JSON summary that reports no findings while noting analysis limits strictly to the bytecode available.
[codex:769072] codex
[codex:769072] {"no_findings":true,"summary":"No concrete, exploitable path to extract ETH/tokens/NFTs was identified from the provided runtime bytecode alone.","findings":[]}
[codex:769072] tokens used
[codex:769072] 129,660
[codex:769072] {"no_findings":true,"summary":"No concrete, exploitable path to extract ETH/tokens/NFTs was identified from the provided runtime bytecode alone.","findings":[]}
Metadata
{
    "codex": {
        "ran_at": "2026-01-05T19:32:32.207274+00:00",
        "returncode": 0
    },
    "summary": "No concrete, exploitable path to extract ETH/tokens/NFTs was identified from the provided runtime bytecode alone.",
    "raw_final": {
        "summary": "No concrete, exploitable path to extract ETH/tokens/NFTs was identified from the provided runtime bytecode alone.",
        "findings": [],
        "no_findings": true
    },
    "no_findings": true,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
5
EXT*/BALANCE
3
Total opcodes
2754
Flags
No heuristic flags raised.
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0x04
00000007: CALLDATASIZE
00000008: LT
00000009: PUSH2 0x00fe
0000000c: JUMPI
0000000d: PUSH1 0x00
0000000f: CALLDATALOAD
00000010: PUSH1 0xe0
00000012: SHR
00000013: DUP1
00000014: PUSH4 0x6dce6c5e
00000019: GT
0000001a: PUSH2 0x0095
0000001d: JUMPI
0000001e: DUP1
0000001f: PUSH4 0xebe7f760
00000024: GT
00000025: PUSH2 0x0064
00000028: JUMPI
00000029: DUP1
0000002a: PUSH4 0xebe7f760
0000002f: EQ
00000030: PUSH2 0x02ce
00000033: JUMPI
00000034: DUP1
00000035: PUSH4 0xf372872d
0000003a: EQ
0000003b: PUSH2 0x02e3
0000003e: JUMPI
0000003f: DUP1
00000040: PUSH4 0xf6d8414f
00000045: EQ
00000046: PUSH2 0x02f8
00000049: JUMPI
0000004a: DUP1
0000004b: PUSH4 0xf9d820d0
00000050: EQ
00000051: PUSH2 0x030d
00000054: JUMPI
00000055: DUP1
00000056: PUSH4 0xfb342221
0000005b: EQ
0000005c: PUSH2 0x0340
0000005f: JUMPI
00000060: PUSH2 0x00fe
00000063: JUMP
00000064: JUMPDEST
00000065: DUP1
00000066: PUSH4 0x6dce6c5e
0000006b: EQ
0000006c: PUSH2 0x025e
0000006f: JUMPI
00000070: DUP1
00000071: PUSH4 0x6f9fb98a
00000076: EQ
00000077: PUSH2 0x028f
0000007a: JUMPI
0000007b: DUP1
0000007c: PUSH4 0x767c56a2
00000081: EQ
00000082: PUSH2 0x02a4
00000085: JUMPI
00000086: DUP1
00000087: PUSH4 0xe1c18d87
0000008c: EQ
0000008d: PUSH2 0x02b9
00000090: JUMPI
00000091: PUSH2 0x00fe
00000094: JUMP
00000095: JUMPDEST
00000096: DUP1
00000097: PUSH4 0x46965ef6
0000009c: GT
0000009d: PUSH2 0x00d1
000000a0: JUMPI
000000a1: DUP1
000000a2: PUSH4 0x46965ef6
000000a7: EQ
000000a8: PUSH2 0x01e4
000000ab: JUMPI
000000ac: DUP1
000000ad: PUSH4 0x4faf2838
000000b2: EQ
000000b3: PUSH2 0x020b
000000b6: JUMPI
000000b7: DUP1
000000b8: PUSH4 0x58af85fa
000000bd: EQ
000000be: PUSH2 0x0234
000000c1: JUMPI
000000c2: DUP1
000000c3: PUSH4 0x5ee6a97c
000000c8: EQ
000000c9: PUSH2 0x0249
000000cc: JUMPI
000000cd: PUSH2 0x00fe
000000d0: JUMP
000000d1: JUMPDEST
000000d2: DUP1
000000d3: PUSH4 0x034ea411
000000d8: EQ
000000d9: PUSH2 0x0103
000000dc: JUMPI
000000dd: DUP1
000000de: PUSH4 0x1eb05b0f
000000e3: EQ
000000e4: PUSH2 0x010d
000000e7: JUMPI
000000e8: DUP1
000000e9: PUSH4 0x20125176
000000ee: EQ
000000ef: PUSH2 0x0172
000000f2: JUMPI
000000f3: DUP1
000000f4: PUSH4 0x237297a4
000000f9: EQ
000000fa: PUSH2 0x01ab
000000fd: JUMPI
000000fe: JUMPDEST
000000ff: PUSH1 0x00
00000101: DUP1
00000102: REVERT
00000103: JUMPDEST
00000104: PUSH2 0x010b
00000107: PUSH2 0x0355
0000010a: JUMP
0000010b: JUMPDEST
0000010c: STOP
0000010d: JUMPDEST
0000010e: CALLVALUE
0000010f: DUP1
00000110: ISZERO
00000111: PUSH2 0x0119
00000114: JUMPI
00000115: PUSH1 0x00
00000117: DUP1
00000118: REVERT
00000119: JUMPDEST
0000011a: POP
0000011b: PUSH2 0x0122
0000011e: PUSH2 0x069c
00000121: JUMP
00000122: JUMPDEST
00000123: PUSH1 0x40
00000125: DUP1
00000126: MLOAD
00000127: PUSH1 0x20
00000129: DUP1
0000012a: DUP3
0000012b: MSTORE
0000012c: DUP4
0000012d: MLOAD
0000012e: DUP2
0000012f: DUP4
00000130: ADD
00000131: MSTORE
00000132: DUP4
00000133: MLOAD
00000134: SWAP2
00000135: SWAP3
00000136: DUP4
00000137: SWAP3
00000138: SWAP1
00000139: DUP4
0000013a: ADD
0000013b: SWAP2
0000013c: DUP6
0000013d: DUP2
0000013e: ADD
0000013f: SWAP2
00000140: MUL
00000141: DUP1
00000142: DUP4
00000143: DUP4
00000144: PUSH1 0x00
00000146: JUMPDEST
00000147: DUP4
00000148: DUP2
00000149: LT
0000014a: ISZERO
0000014b: PUSH2 0x015e
0000014e: JUMPI
0000014f: DUP2
00000150: DUP2
00000151: ADD
00000152: MLOAD
00000153: DUP4
00000154: DUP3
00000155: ADD
00000156: MSTORE
00000157: PUSH1 0x20
00000159: ADD
0000015a: PUSH2 0x0146
0000015d: JUMP
0000015e: JUMPDEST
0000015f: POP
00000160: POP
00000161: POP
00000162: POP
00000163: SWAP1
00000164: POP
00000165: ADD
00000166: SWAP3
00000167: POP
00000168: POP
00000169: POP
0000016a: PUSH1 0x40
0000016c: MLOAD
0000016d: DUP1
0000016e: SWAP2
0000016f: SUB
00000170: SWAP1
00000171: RETURN
00000172: JUMPDEST
00000173: CALLVALUE
00000174: DUP1
00000175: ISZERO
00000176: PUSH2 0x017e
00000179: JUMPI
0000017a: PUSH1 0x00
0000017c: DUP1
0000017d: REVERT
0000017e: JUMPDEST
0000017f: POP
00000180: PUSH2 0x010b
00000183: PUSH1 0x04
00000185: DUP1
00000186: CALLDATASIZE
00000187: SUB
00000188: PUSH1 0x40
0000018a: DUP2
0000018b: LT
0000018c: ISZERO
0000018d: PUSH2 0x0195
00000190: JUMPI
00000191: PUSH1 0x00
00000193: DUP1
00000194: REVERT
00000195: JUMPDEST
00000196: POP
00000197: DUP1
00000198: CALLDATALOAD
00000199: SWAP1
0000019a: PUSH1 0x20
0000019c: ADD
0000019d: CALLDATALOAD
0000019e: PUSH1 0x01
000001a0: PUSH1 0x01
000001a2: PUSH1 0xa0
000001a4: SHL
000001a5: SUB
000001a6: AND
000001a7: PUSH2 0x06fe
000001aa: JUMP
000001ab: JUMPDEST
000001ac: CALLVALUE
000001ad: DUP1
000001ae: ISZERO
000001af: PUSH2 0x01b7
000001b2: JUMPI
000001b3: PUSH1 0x00
000001b5: DUP1
000001b6: REVERT
000001b7: JUMPDEST
000001b8: POP
000001b9: PUSH2 0x01c0
000001bc: PUSH2 0x0a03
000001bf: JUMP
000001c0: JUMPDEST
000001c1: PUSH1 0x40
000001c3: MLOAD
000001c4: DUP1
000001c5: DUP3
000001c6: PUSH1 0x02
000001c8: DUP2
000001c9: GT
000001ca: ISZERO
000001cb: PUSH2 0x01d0
000001ce: JUMPI
000001cf: INVALID
000001d0: JUMPDEST
000001d1: PUSH1 0xff
000001d3: AND
000001d4: DUP2
000001d5: MSTORE
000001d6: PUSH1 0x20
000001d8: ADD
000001d9: SWAP2
000001da: POP
000001db: POP
000001dc: PUSH1 0x40
000001de: MLOAD
000001df: DUP1
000001e0: SWAP2
000001e1: SUB
000001e2: SWAP1
000001e3: RETURN
000001e4: JUMPDEST
000001e5: CALLVALUE
000001e6: DUP1
000001e7: ISZERO
000001e8: PUSH2 0x01f0
000001eb: JUMPI
000001ec: PUSH1 0x00
000001ee: DUP1
000001ef: REVERT
000001f0: JUMPDEST
000001f1: POP
000001f2: PUSH2 0x01f9
000001f5: PUSH2 0x0a13
000001f8: JUMP
000001f9: JUMPDEST
000001fa: PUSH1 0x40
000001fc: DUP1
000001fd: MLOAD
000001fe: SWAP2
000001ff: DUP3
00000200: MSTORE
00000201: MLOAD
00000202: SWAP1
00000203: DUP2
00000204: SWAP1
00000205: SUB
00000206: PUSH1 0x20
00000208: ADD
00000209: SWAP1
0000020a: RETURN
0000020b: JUMPDEST
0000020c: CALLVALUE
0000020d: DUP1
0000020e: ISZERO
0000020f: PUSH2 0x0217
00000212: JUMPI
00000213: PUSH1 0x00
00000215: DUP1
00000216: REVERT
00000217: JUMPDEST
00000218: POP
00000219: PUSH2 0x0220
0000021c: PUSH2 0x0a19
0000021f: JUMP
00000220: JUMPDEST
00000221: PUSH1 0x40
00000223: DUP1
00000224: MLOAD
00000225: SWAP2
00000226: ISZERO
00000227: ISZERO
00000228: DUP3
00000229: MSTORE
0000022a: MLOAD
0000022b: SWAP1
0000022c: DUP2
0000022d: SWAP1
0000022e: SUB
0000022f: PUSH1 0x20
00000231: ADD
00000232: SWAP1
00000233: RETURN
00000234: JUMPDEST
00000235: CALLVALUE
00000236: DUP1
00000237: ISZERO
00000238: PUSH2 0x0240
0000023b: JUMPI
0000023c: PUSH1 0x00
0000023e: DUP1
0000023f: REVERT
00000240: JUMPDEST
00000241: POP
00000242: PUSH2 0x01f9
00000245: PUSH2 0x0a22
00000248: JUMP
00000249: JUMPDEST
0000024a: CALLVALUE
0000024b: DUP1
0000024c: ISZERO
0000024d: PUSH2 0x0255
00000250: JUMPI
00000251: PUSH1 0x00
00000253: DUP1
00000254: REVERT
00000255: JUMPDEST
00000256: POP
00000257: PUSH2 0x010b
0000025a: PUSH2 0x0a28
0000025d: JUMP
0000025e: JUMPDEST
0000025f: CALLVALUE
00000260: DUP1
00000261: ISZERO
00000262: PUSH2 0x026a
00000265: JUMPI
00000266: PUSH1 0x00
00000268: DUP1
00000269: REVERT
0000026a: JUMPDEST
0000026b: POP
0000026c: PUSH2 0x0273
0000026f: PUSH2 0x0bb0
00000272: JUMP
00000273: JUMPDEST
00000274: PUSH1 0x40
00000276: DUP1
00000277: MLOAD
00000278: PUSH1 0x01
0000027a: PUSH1 0x01
0000027c: PUSH1 0xa0
0000027e: SHL
0000027f: SUB
00000280: SWAP1
00000281: SWAP3
00000282: AND
00000283: DUP3
00000284: MSTORE
00000285: MLOAD
00000286: SWAP1
00000287: DUP2
00000288: SWAP1
00000289: SUB
0000028a: PUSH1 0x20
0000028c: ADD
0000028d: SWAP1
0000028e: RETURN
0000028f: JUMPDEST
00000290: CALLVALUE
00000291: DUP1
00000292: ISZERO
00000293: PUSH2 0x029b
00000296: JUMPI
00000297: PUSH1 0x00
00000299: DUP1
0000029a: REVERT
0000029b: JUMPDEST
0000029c: POP
0000029d: PUSH2 0x01f9
000002a0: PUSH2 0x0bbf
000002a3: JUMP
000002a4: JUMPDEST
000002a5: CALLVALUE
000002a6: DUP1
000002a7: ISZERO
000002a8: PUSH2 0x02b0
000002ab: JUMPI
000002ac: PUSH1 0x00
000002ae: DUP1
000002af: REVERT
000002b0: JUMPDEST
000002b1: POP
000002b2: PUSH2 0x010b
000002b5: PUSH2 0x0bc3
000002b8: JUMP
000002b9: JUMPDEST
000002ba: CALLVALUE
000002bb: DUP1
000002bc: ISZERO
000002bd: PUSH2 0x02c5
000002c0: JUMPI
000002c1: PUSH1 0x00
000002c3: DUP1
000002c4: REVERT
000002c5: JUMPDEST
000002c6: POP
000002c7: PUSH2 0x01f9
000002ca: PUSH2 0x0cf0
000002cd: JUMP
000002ce: JUMPDEST
000002cf: CALLVALUE
000002d0: DUP1
000002d1: ISZERO
000002d2: PUSH2 0x02da
000002d5: JUMPI
000002d6: PUSH1 0x00
000002d8: DUP1
000002d9: REVERT
000002da: JUMPDEST
000002db: POP
000002dc: PUSH2 0x01f9
000002df: PUSH2 0x0cf6
000002e2: JUMP
000002e3: JUMPDEST
000002e4: CALLVALUE
000002e5: DUP1
000002e6: ISZERO
000002e7: PUSH2 0x02ef
000002ea: JUMPI
000002eb: PUSH1 0x00
000002ed: DUP1
000002ee: REVERT
000002ef: JUMPDEST
000002f0: POP
000002f1: PUSH2 0x0273
000002f4: PUSH2 0x0d20
000002f7: JUMP
000002f8: JUMPDEST
000002f9: CALLVALUE
000002fa: DUP1
000002fb: ISZERO
000002fc: PUSH2 0x0304
000002ff: JUMPI
00000300: PUSH1 0x00
00000302: DUP1
00000303: REVERT
00000304: JUMPDEST
00000305: POP
00000306: PUSH2 0x01f9
00000309: PUSH2 0x0d2f
0000030c: JUMP
0000030d: JUMPDEST
0000030e: CALLVALUE
0000030f: DUP1
00000310: ISZERO
00000311: PUSH2 0x0319
00000314: JUMPI
00000315: PUSH1 0x00
00000317: DUP1
00000318: REVERT
00000319: JUMPDEST
0000031a: POP
0000031b: PUSH2 0x01f9
0000031e: PUSH1 0x04
00000320: DUP1
00000321: CALLDATASIZE
00000322: SUB
00000323: PUSH1 0x20
00000325: DUP2
00000326: LT
00000327: ISZERO
00000328: PUSH2 0x0330
0000032b: JUMPI
0000032c: PUSH1 0x00
0000032e: DUP1
0000032f: REVERT
00000330: JUMPDEST
00000331: POP
00000332: CALLDATALOAD
00000333: PUSH1 0x01
00000335: PUSH1 0x01
00000337: PUSH1 0xa0
00000339: SHL
0000033a: SUB
0000033b: AND
0000033c: PUSH2 0x0d35
0000033f: JUMP
00000340: JUMPDEST
00000341: CALLVALUE
00000342: DUP1
00000343: ISZERO
00000344: PUSH2 0x034c
00000347: JUMPI
00000348: PUSH1 0x00
0000034a: DUP1
0000034b: REVERT
0000034c: JUMPDEST
0000034d: POP
0000034e: PUSH2 0x01f9
00000351: PUSH2 0x0d50
00000354: JUMP
00000355: JUMPDEST
00000356: PUSH1 0x01
00000358: SLOAD
00000359: PUSH1 0x40
0000035b: DUP1
0000035c: MLOAD
0000035d: PUSH4 0x70a08231
00000362: PUSH1 0xe0
00000364: SHL
00000365: DUP2
00000366: MSTORE
00000367: CALLER
00000368: PUSH1 0x04
0000036a: DUP3
0000036b: ADD
0000036c: MSTORE
0000036d: SWAP1
0000036e: MLOAD
0000036f: PUSH1 0x00
00000371: SWAP3
00000372: PUSH1 0x01
00000374: PUSH1 0x01
00000376: PUSH1 0xa0
00000378: SHL
00000379: SUB
0000037a: AND
0000037b: SWAP2
0000037c: PUSH4 0x70a08231
00000381: SWAP2
00000382: PUSH1 0x24
00000384: DUP1
00000385: DUP4
00000386: ADD
00000387: SWAP3
00000388: PUSH1 0x20
0000038a: SWAP3
0000038b: SWAP2
0000038c: SWAP1
0000038d: DUP3
0000038e: SWAP1
0000038f: SUB
00000390: ADD
00000391: DUP2
00000392: DUP7
00000393: DUP1
00000394: EXTCODESIZE
00000395: ISZERO
00000396: DUP1
00000397: ISZERO
00000398: PUSH2 0x03a0
0000039b: JUMPI
0000039c: PUSH1 0x00
0000039e: DUP1
0000039f: REVERT
000003a0: JUMPDEST
000003a1: POP
000003a2: GAS
000003a3: STATICCALL
000003a4: ISZERO
000003a5: DUP1
000003a6: ISZERO
000003a7: PUSH2 0x03b4
000003aa: JUMPI
000003ab: RETURNDATASIZE
000003ac: PUSH1 0x00
000003ae: DUP1
000003af: RETURNDATACOPY
000003b0: RETURNDATASIZE
000003b1: PUSH1 0x00
000003b3: REVERT
000003b4: JUMPDEST
000003b5: POP
000003b6: POP
000003b7: POP
000003b8: POP
000003b9: PUSH1 0x40
000003bb: MLOAD
000003bc: RETURNDATASIZE
000003bd: PUSH1 0x20
000003bf: DUP2
000003c0: LT
000003c1: ISZERO
000003c2: PUSH2 0x03ca
000003c5: JUMPI
000003c6: PUSH1 0x00
000003c8: DUP1
000003c9: REVERT
000003ca: JUMPDEST
000003cb: POP
000003cc: MLOAD
000003cd: GT
000003ce: PUSH2 0x0408
000003d1: JUMPI
000003d2: PUSH1 0x40
000003d4: MLOAD
000003d5: PUSH3 0x461bcd
000003d9: PUSH1 0xe5
000003db: SHL
000003dc: DUP2
000003dd: MSTORE
000003de: PUSH1 0x04
000003e0: ADD
000003e1: DUP1
000003e2: DUP1
000003e3: PUSH1 0x20
000003e5: ADD
000003e6: DUP3
000003e7: DUP2
000003e8: SUB
000003e9: DUP3
000003ea: MSTORE
000003eb: PUSH1 0x30
000003ed: DUP2
000003ee: MSTORE
000003ef: PUSH1 0x20
000003f1: ADD
000003f2: DUP1
000003f3: PUSH2 0x1099
000003f6: PUSH1 0x30
000003f8: SWAP2
000003f9: CODECOPY
000003fa: PUSH1 0x40
000003fc: ADD
000003fd: SWAP2
000003fe: POP
000003ff: POP
00000400: PUSH1 0x40
00000402: MLOAD
00000403: DUP1
00000404: SWAP2
00000405: SUB
00000406: SWAP1
00000407: REVERT
00000408: JUMPDEST
00000409: PUSH1 0x00
0000040b: CALLVALUE
0000040c: GT
0000040d: PUSH2 0x0447
00000410: JUMPI
00000411: PUSH1 0x40
00000413: MLOAD
00000414: PUSH3 0x461bcd
00000418: PUSH1 0xe5
0000041a: SHL
0000041b: DUP2
0000041c: MSTORE
0000041d: PUSH1 0x04
0000041f: ADD
00000420: DUP1
00000421: DUP1
00000422: PUSH1 0x20
00000424: ADD
00000425: DUP3
00000426: DUP2
00000427: SUB
00000428: DUP3
00000429: MSTORE
0000042a: PUSH1 0x26
0000042c: DUP2
0000042d: MSTORE
0000042e: PUSH1 0x20
00000430: ADD
00000431: DUP1
00000432: PUSH2 0x112f
00000435: PUSH1 0x26
00000437: SWAP2
00000438: CODECOPY
00000439: PUSH1 0x40
0000043b: ADD
0000043c: SWAP2
0000043d: POP
0000043e: POP
0000043f: PUSH1 0x40
00000441: MLOAD
00000442: DUP1
00000443: SWAP2
00000444: SUB
00000445: SWAP1
00000446: REVERT
00000447: JUMPDEST
00000448: PUSH1 0x05
0000044a: SLOAD
0000044b: PUSH1 0x01
0000044d: PUSH1 0x01
0000044f: PUSH1 0xa0
00000451: SHL
00000452: SUB
00000453: AND
00000454: PUSH2 0x048e
00000457: JUMPI
00000458: PUSH1 0x40
0000045a: MLOAD
0000045b: PUSH3 0x461bcd
0000045f: PUSH1 0xe5
00000461: SHL
00000462: DUP2
00000463: MSTORE
00000464: PUSH1 0x04
00000466: ADD
00000467: DUP1
00000468: DUP1
00000469: PUSH1 0x20
0000046b: ADD
0000046c: DUP3
0000046d: DUP2
0000046e: SUB
0000046f: DUP3
00000470: MSTORE
00000471: PUSH1 0x34
00000473: DUP2
00000474: MSTORE
00000475: PUSH1 0x20
00000477: ADD
00000478: DUP1
00000479: PUSH2 0x0fea
0000047c: PUSH1 0x34
0000047e: SWAP2
0000047f: CODECOPY
00000480: PUSH1 0x40
00000482: ADD
00000483: SWAP2
00000484: POP
00000485: POP
00000486: PUSH1 0x40
00000488: MLOAD
00000489: DUP1
0000048a: SWAP2
0000048b: SUB
0000048c: SWAP1
0000048d: REVERT
0000048e: JUMPDEST
0000048f: PUSH1 0x05
00000491: SLOAD
00000492: PUSH1 0x01
00000494: PUSH1 0x01
00000496: PUSH1 0xa0
00000498: SHL
00000499: SUB
0000049a: AND
0000049b: CALLER
0000049c: EQ
0000049d: ISZERO
0000049e: PUSH2 0x04d8
000004a1: JUMPI
000004a2: PUSH1 0x40
000004a4: MLOAD
000004a5: PUSH3 0x461bcd
000004a9: PUSH1 0xe5
000004ab: SHL
000004ac: DUP2
000004ad: MSTORE
000004ae: PUSH1 0x04
000004b0: ADD
000004b1: DUP1
000004b2: DUP1
000004b3: PUSH1 0x20
000004b5: ADD
000004b6: DUP3
000004b7: DUP2
000004b8: SUB
000004b9: DUP3
000004ba: MSTORE
000004bb: PUSH1 0x3a
000004bd: DUP2
000004be: MSTORE
000004bf: PUSH1 0x20
000004c1: ADD
000004c2: DUP1
000004c3: PUSH2 0x0f89
000004c6: PUSH1 0x3a
000004c8: SWAP2
000004c9: CODECOPY
000004ca: PUSH1 0x40
000004cc: ADD
000004cd: SWAP2
000004ce: POP
000004cf: POP
000004d0: PUSH1 0x40
000004d2: MLOAD
000004d3: DUP1
000004d4: SWAP2
000004d5: SUB
000004d6: SWAP1
000004d7: REVERT
000004d8: JUMPDEST
000004d9: PUSH1 0x07
000004db: SLOAD
000004dc: PUSH1 0xff
000004de: AND
000004df: ISZERO
000004e0: PUSH2 0x051a
000004e3: JUMPI
000004e4: PUSH1 0x40
000004e6: MLOAD
000004e7: PUSH3 0x461bcd
000004eb: PUSH1 0xe5
000004ed: SHL
000004ee: DUP2
000004ef: MSTORE
000004f0: PUSH1 0x04
000004f2: ADD
000004f3: DUP1
000004f4: DUP1
000004f5: PUSH1 0x20
000004f7: ADD
000004f8: DUP3
000004f9: DUP2
000004fa: SUB
000004fb: DUP3
000004fc: MSTORE
000004fd: PUSH1 0x2c
000004ff: DUP2
00000500: MSTORE
00000501: PUSH1 0x20
00000503: ADD
00000504: DUP1
00000505: PUSH2 0x101e
00000508: PUSH1 0x2c
0000050a: SWAP2
0000050b: CODECOPY
0000050c: PUSH1 0x40
0000050e: ADD
0000050f: SWAP2
00000510: POP
00000511: POP
00000512: PUSH1 0x40
00000514: MLOAD
00000515: DUP1
00000516: SWAP2
00000517: SUB
00000518: SWAP1
00000519: REVERT
0000051a: JUMPDEST
0000051b: PUSH1 0x02
0000051d: SLOAD
0000051e: TIMESTAMP
0000051f: LT
00000520: PUSH2 0x055a
00000523: JUMPI
00000524: PUSH1 0x40
00000526: MLOAD
00000527: PUSH3 0x461bcd
0000052b: PUSH1 0xe5
0000052d: SHL
0000052e: DUP2
0000052f: MSTORE
00000530: PUSH1 0x04
00000532: ADD
00000533: DUP1
00000534: DUP1
00000535: PUSH1 0x20
00000537: ADD
00000538: DUP3
00000539: DUP2
0000053a: SUB
0000053b: DUP3
0000053c: MSTORE
0000053d: PUSH1 0x29
0000053f: DUP2
00000540: MSTORE
00000541: PUSH1 0x20
00000543: ADD
00000544: DUP1
00000545: PUSH2 0x1070
00000548: PUSH1 0x29
0000054a: SWAP2
0000054b: CODECOPY
0000054c: PUSH1 0x40
0000054e: ADD
0000054f: SWAP2
00000550: POP
00000551: POP
00000552: PUSH1 0x40
00000554: MLOAD
00000555: DUP1
00000556: SWAP2
00000557: SUB
00000558: SWAP1
00000559: REVERT
0000055a: JUMPDEST
0000055b: PUSH2 0x0562
0000055e: PUSH2 0x0cf6
00000561: JUMP
00000562: JUMPDEST
00000563: PUSH1 0x08
00000565: SLOAD
00000566: CALLVALUE
00000567: ADD
00000568: GT
00000569: ISZERO
0000056a: PUSH2 0x05a4
0000056d: JUMPI
0000056e: PUSH1 0x40
00000570: MLOAD
00000571: PUSH3 0x461bcd
00000575: PUSH1 0xe5
00000577: SHL
00000578: DUP2
00000579: MSTORE
0000057a: PUSH1 0x04
0000057c: ADD
0000057d: DUP1
0000057e: DUP1
0000057f: PUSH1 0x20
00000581: ADD
00000582: DUP3
00000583: DUP2
00000584: SUB
00000585: DUP3
00000586: MSTORE
00000587: PUSH1 0x27
00000589: DUP2
0000058a: MSTORE
0000058b: PUSH1 0x20
0000058d: ADD
0000058e: DUP1
0000058f: PUSH2 0x11fd
00000592: PUSH1 0x27
00000594: SWAP2
00000595: CODECOPY
00000596: PUSH1 0x40
00000598: ADD
00000599: SWAP2
0000059a: POP
0000059b: POP
0000059c: PUSH1 0x40
0000059e: MLOAD
0000059f: DUP1
000005a0: SWAP2
000005a1: SUB
000005a2: SWAP1
000005a3: REVERT
000005a4: JUMPDEST
000005a5: CALLER
000005a6: PUSH1 0x00
000005a8: SWAP1
000005a9: DUP2
000005aa: MSTORE
000005ab: PUSH1 0x0a
000005ad: PUSH1 0x20
000005af: MSTORE
000005b0: PUSH1 0x40
000005b2: SWAP1
000005b3: KECCAK256
000005b4: SLOAD
000005b5: PUSH2 0x05fb
000005b8: JUMPI
000005b9: PUSH1 0x09
000005bb: DUP1
000005bc: SLOAD
000005bd: PUSH1 0x01
000005bf: DUP2
000005c0: ADD
000005c1: DUP3
000005c2: SSTORE
000005c3: PUSH1 0x00
000005c5: SWAP2
000005c6: SWAP1
000005c7: SWAP2
000005c8: MSTORE
000005c9: PUSH32 0x6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af
000005ea: ADD
000005eb: DUP1
000005ec: SLOAD
000005ed: PUSH1 0x01
000005ef: PUSH1 0x01
000005f1: PUSH1 0xa0
000005f3: SHL
000005f4: SUB
000005f5: NOT
000005f6: AND
000005f7: CALLER
000005f8: OR
000005f9: SWAP1
000005fa: SSTORE
000005fb: JUMPDEST
000005fc: CALLER
000005fd: PUSH1 0x00
000005ff: SWAP1
00000600: DUP2
00000601: MSTORE
00000602: PUSH1 0x0a
00000604: PUSH1 0x20
00000606: MSTORE
00000607: PUSH1 0x40
00000609: SWAP1
0000060a: KECCAK256
0000060b: SLOAD
0000060c: PUSH2 0x061b
0000060f: SWAP1
00000610: CALLVALUE
00000611: PUSH4 0xffffffff
00000616: PUSH2 0x0d56
00000619: AND
0000061a: JUMP
0000061b: JUMPDEST
0000061c: CALLER
0000061d: PUSH1 0x00
0000061f: SWAP1
00000620: DUP2
00000621: MSTORE
00000622: PUSH1 0x0a
00000624: PUSH1 0x20
00000626: MSTORE
00000627: PUSH1 0x40
00000629: SWAP1
0000062a: KECCAK256
0000062b: SSTORE
0000062c: PUSH1 0x08
0000062e: SLOAD
0000062f: PUSH2 0x063e
00000632: SWAP1
00000633: CALLVALUE
00000634: PUSH4 0xffffffff
00000639: PUSH2 0x0d56
0000063c: AND
0000063d: JUMP
0000063e: JUMPDEST
0000063f: PUSH1 0x08
00000641: SSTORE
00000642: PUSH1 0x40
00000644: MLOAD
00000645: CALLVALUE
00000646: SWAP1
00000647: CALLER
00000648: SWAP1
00000649: PUSH32 0x80fbd07d70e0d7ac483b3c1a1b9fd0cbddda15c9263cf2b6cd169d1900af1346
0000066a: SWAP1
0000066b: PUSH1 0x00
0000066d: SWAP1
0000066e: LOG3
0000066f: PUSH2 0x0676
00000672: PUSH2 0x0cf6
00000675: JUMP
00000676: JUMPDEST
00000677: PUSH1 0x08
00000679: SLOAD
0000067a: EQ
0000067b: ISZERO
0000067c: PUSH2 0x069a
0000067f: JUMPI
00000680: PUSH1 0x01
00000682: DUP1
00000683: SLOAD
00000684: PUSH1 0xff
00000686: PUSH1 0xa0
00000688: SHL
00000689: NOT
0000068a: AND
0000068b: PUSH1 0x01
0000068d: PUSH1 0xa1
0000068f: SHL
00000690: OR
00000691: SWAP1
00000692: SSTORE
00000693: PUSH2 0x069a
00000696: PUSH2 0x0bc3
00000699: JUMP
0000069a: JUMPDEST
0000069b: JUMP
0000069c: JUMPDEST
0000069d: PUSH1 0x60
0000069f: PUSH1 0x09
000006a1: DUP1
000006a2: SLOAD
000006a3: DUP1
000006a4: PUSH1 0x20
000006a6: MUL
000006a7: PUSH1 0x20
000006a9: ADD
000006aa: PUSH1 0x40
000006ac: MLOAD
000006ad: SWAP1
000006ae: DUP2
000006af: ADD
000006b0: PUSH1 0x40
000006b2: MSTORE
000006b3: DUP1
000006b4: SWAP3
000006b5: SWAP2
000006b6: SWAP1
000006b7: DUP2
000006b8: DUP2
000006b9: MSTORE
000006ba: PUSH1 0x20
000006bc: ADD
000006bd: DUP3
000006be: DUP1
000006bf: SLOAD
000006c0: DUP1
000006c1: ISZERO
000006c2: PUSH2 0x06f4
000006c5: JUMPI
000006c6: PUSH1 0x20
000006c8: MUL
000006c9: DUP3
000006ca: ADD
000006cb: SWAP2
000006cc: SWAP1
000006cd: PUSH1 0x00
000006cf: MSTORE
000006d0: PUSH1 0x20
000006d2: PUSH1 0x00
000006d4: KECCAK256
000006d5: SWAP1
000006d6: JUMPDEST
000006d7: DUP2
000006d8: SLOAD
000006d9: PUSH1 0x01
000006db: PUSH1 0x01
000006dd: PUSH1 0xa0
000006df: SHL
000006e0: SUB
000006e1: AND
000006e2: DUP2
000006e3: MSTORE
000006e4: PUSH1 0x01
000006e6: SWAP1
000006e7: SWAP2
000006e8: ADD
000006e9: SWAP1
000006ea: PUSH1 0x20
000006ec: ADD
000006ed: DUP1
000006ee: DUP4
000006ef: GT
000006f0: PUSH2 0x06d6
000006f3: JUMPI
000006f4: JUMPDEST
000006f5: POP
000006f6: POP
000006f7: POP
000006f8: POP
000006f9: POP
000006fa: SWAP1
000006fb: POP
000006fc: SWAP1
000006fd: JUMP
000006fe: JUMPDEST
000006ff: PUSH1 0x01
00000701: SLOAD
00000702: PUSH1 0x01
00000704: PUSH1 0x01
00000706: PUSH1 0xa0
00000708: SHL
00000709: SUB
0000070a: AND
0000070b: CALLER
0000070c: EQ
0000070d: PUSH2 0x0747
00000710: JUMPI
00000711: PUSH1 0x40
00000713: MLOAD
00000714: PUSH3 0x461bcd
00000718: PUSH1 0xe5
0000071a: SHL
0000071b: DUP2
0000071c: MSTORE
0000071d: PUSH1 0x04
0000071f: ADD
00000720: DUP1
00000721: DUP1
00000722: PUSH1 0x20
00000724: ADD
00000725: DUP3
00000726: DUP2
00000727: SUB
00000728: DUP3
00000729: MSTORE
0000072a: PUSH1 0x2c
0000072c: DUP2
0000072d: MSTORE
0000072e: PUSH1 0x20
00000730: ADD
00000731: DUP1
00000732: PUSH2 0x118e
00000735: PUSH1 0x2c
00000737: SWAP2
00000738: CODECOPY
00000739: PUSH1 0x40
0000073b: ADD
0000073c: SWAP2
0000073d: POP
0000073e: POP
0000073f: PUSH1 0x40
00000741: MLOAD
00000742: DUP1
00000743: SWAP2
00000744: SUB
00000745: SWAP1
00000746: REVERT
00000747: JUMPDEST
00000748: PUSH1 0x01
0000074a: DUP1
0000074b: SLOAD
0000074c: PUSH1 0x01
0000074e: PUSH1 0xa0
00000750: SHL
00000751: SWAP1
00000752: DIV
00000753: PUSH1 0xff
00000755: AND
00000756: PUSH1 0x02
00000758: DUP2
00000759: GT
0000075a: ISZERO
0000075b: PUSH2 0x0760
0000075e: JUMPI
0000075f: INVALID
00000760: JUMPDEST
00000761: EQ
00000762: DUP1
00000763: ISZERO
00000764: PUSH2 0x077b
00000767: JUMPI
00000768: POP
00000769: PUSH1 0x05
0000076b: SLOAD
0000076c: PUSH1 0x01
0000076e: PUSH1 0x01
00000770: PUSH1 0xa0
00000772: SHL
00000773: SUB
00000774: DUP3
00000775: DUP2
00000776: AND
00000777: SWAP2
00000778: AND
00000779: EQ
0000077a: ISZERO
0000077b: JUMPDEST
0000077c: ISZERO
0000077d: PUSH2 0x08b9
00000780: JUMPI
00000781: PUSH1 0x00
00000783: PUSH2 0x07af
00000786: PUSH8 0x0de0b6b3a7640000
0000078f: PUSH2 0x07a3
00000792: DUP6
00000793: PUSH1 0x04
00000795: SLOAD
00000796: PUSH2 0x0db9
00000799: SWAP1
0000079a: SWAP2
0000079b: SWAP1
0000079c: PUSH4 0xffffffff
000007a1: AND
000007a2: JUMP
000007a3: JUMPDEST
000007a4: SWAP1
000007a5: PUSH4 0xffffffff
000007aa: PUSH2 0x0e12
000007ad: AND
000007ae: JUMP
000007af: JUMPDEST
000007b0: PUSH1 0x01
000007b2: PUSH1 0x01
000007b4: PUSH1 0xa0
000007b6: SHL
000007b7: SUB
000007b8: DUP4
000007b9: AND
000007ba: PUSH1 0x00
000007bc: SWAP1
000007bd: DUP2
000007be: MSTORE
000007bf: PUSH1 0x0a
000007c1: PUSH1 0x20
000007c3: MSTORE
000007c4: PUSH1 0x40
000007c6: SWAP1
000007c7: KECCAK256
000007c8: SLOAD
000007c9: SWAP1
000007ca: SWAP2
000007cb: POP
000007cc: PUSH2 0x07dc
000007cf: SWAP1
000007d0: DUP3
000007d1: SWAP1
000007d2: PUSH4 0xffffffff
000007d7: PUSH2 0x0d56
000007da: AND
000007db: JUMP
000007dc: JUMPDEST
000007dd: PUSH1 0x01
000007df: PUSH1 0x01
000007e1: PUSH1 0xa0
000007e3: SHL
000007e4: SUB
000007e5: DUP4
000007e6: AND
000007e7: PUSH1 0x00
000007e9: DUP2
000007ea: DUP2
000007eb: MSTORE
000007ec: PUSH1 0x0a
000007ee: PUSH1 0x20
000007f0: MSTORE
000007f1: PUSH1 0x40
000007f3: DUP1
000007f4: DUP3
000007f5: KECCAK256
000007f6: DUP3
000007f7: SWAP1
000007f8: SSTORE
000007f9: MLOAD
000007fa: SWAP3
000007fb: SWAP4
000007fc: POP
000007fd: SWAP2
000007fe: DUP4
000007ff: SWAP1
00000800: DUP4
00000801: DUP2
00000802: DUP2
00000803: DUP2
00000804: DUP6
00000805: DUP8
00000806: GAS
00000807: CALL
00000808: SWAP3
00000809: POP
0000080a: POP
0000080b: POP
0000080c: RETURNDATASIZE
0000080d: DUP1
0000080e: PUSH1 0x00
00000810: DUP2
00000811: EQ
00000812: PUSH2 0x0837
00000815: JUMPI
00000816: PUSH1 0x40
00000818: MLOAD
00000819: SWAP2
0000081a: POP
0000081b: PUSH1 0x1f
0000081d: NOT
0000081e: PUSH1 0x3f
00000820: RETURNDATASIZE
00000821: ADD
00000822: AND
00000823: DUP3
00000824: ADD
00000825: PUSH1 0x40
00000827: MSTORE
00000828: RETURNDATASIZE
00000829: DUP3
0000082a: MSTORE
0000082b: RETURNDATASIZE
0000082c: PUSH1 0x00
0000082e: PUSH1 0x20
00000830: DUP5
00000831: ADD
00000832: RETURNDATACOPY
00000833: PUSH2 0x083c
00000836: JUMP
00000837: JUMPDEST
00000838: PUSH1 0x60
0000083a: SWAP2
0000083b: POP
0000083c: JUMPDEST
0000083d: POP
0000083e: POP
0000083f: SWAP1
00000840: POP
00000841: DUP1
00000842: PUSH2 0x087c
00000845: JUMPI
00000846: PUSH1 0x40
00000848: MLOAD
00000849: PUSH3 0x461bcd
0000084d: PUSH1 0xe5
0000084f: SHL
00000850: DUP2
00000851: MSTORE
00000852: PUSH1 0x04
00000854: ADD
00000855: DUP1
00000856: DUP1
00000857: PUSH1 0x20
00000859: ADD
0000085a: DUP3
0000085b: DUP2
0000085c: SUB
0000085d: DUP3
0000085e: MSTORE
0000085f: PUSH1 0x27
00000861: DUP2
00000862: MSTORE
00000863: PUSH1 0x20
00000865: ADD
00000866: DUP1
00000867: PUSH2 0x0fc3
0000086a: PUSH1 0x27
0000086c: SWAP2
0000086d: CODECOPY
0000086e: PUSH1 0x40
00000870: ADD
00000871: SWAP2
00000872: POP
00000873: POP
00000874: PUSH1 0x40
00000876: MLOAD
00000877: DUP1
00000878: SWAP2
00000879: SUB
0000087a: SWAP1
0000087b: REVERT
0000087c: JUMPDEST
0000087d: PUSH1 0x40
0000087f: MLOAD
00000880: DUP3
00000881: SWAP1
00000882: PUSH1 0x01
00000884: PUSH1 0x01
00000886: PUSH1 0xa0
00000888: SHL
00000889: SUB
0000088a: DUP6
0000088b: AND
0000088c: SWAP1
0000088d: PUSH32 0xedfe54e758e6dae751369919bd3c260baddfe62c3f49793bdad36629cb5ecd26
000008ae: SWAP1
000008af: PUSH1 0x00
000008b1: SWAP1
000008b2: LOG3
000008b3: POP
000008b4: POP
000008b5: PUSH2 0x09ff
000008b8: JUMP
000008b9: JUMPDEST
000008ba: PUSH1 0x02
000008bc: PUSH1 0x01
000008be: SLOAD
000008bf: PUSH1 0x01
000008c1: PUSH1 0xa0
000008c3: SHL
000008c4: SWAP1
000008c5: DIV
000008c6: PUSH1 0xff
000008c8: AND
000008c9: PUSH1 0x02
000008cb: DUP2
000008cc: GT
000008cd: ISZERO
000008ce: PUSH2 0x08d3
000008d1: JUMPI
000008d2: INVALID
000008d3: JUMPDEST
000008d4: EQ
000008d5: DUP1
000008d6: ISZERO
000008d7: PUSH2 0x08ed
000008da: JUMPI
000008db: POP
000008dc: PUSH1 0x05
000008de: SLOAD
000008df: PUSH1 0x01
000008e1: PUSH1 0x01
000008e3: PUSH1 0xa0
000008e5: SHL
000008e6: SUB
000008e7: DUP3
000008e8: DUP2
000008e9: AND
000008ea: SWAP2
000008eb: AND
000008ec: EQ
000008ed: JUMPDEST
000008ee: ISZERO
000008ef: PUSH2 0x09ff
000008f2: JUMPI
000008f3: PUSH1 0x00
000008f5: PUSH2 0x0917
000008f8: PUSH8 0x0de0b6b3a7640000
00000901: PUSH2 0x07a3
00000904: PUSH1 0x06
00000906: SLOAD
00000907: PUSH1 0x04
00000909: SLOAD
0000090a: PUSH2 0x0db9
0000090d: SWAP1
0000090e: SWAP2
0000090f: SWAP1
00000910: PUSH4 0xffffffff
00000915: AND
00000916: JUMP
00000917: JUMPDEST
00000918: SWAP1
00000919: POP
0000091a: PUSH2 0x092e
0000091d: PUSH1 0x03
0000091f: SLOAD
00000920: DUP3
00000921: PUSH2 0x0d56
00000924: SWAP1
00000925: SWAP2
00000926: SWAP1
00000927: PUSH4 0xffffffff
0000092c: AND
0000092d: JUMP
0000092e: JUMPDEST
0000092f: PUSH1 0x00
00000931: PUSH1 0x06
00000933: DUP2
00000934: SWAP1
00000935: SSTORE
00000936: PUSH1 0x40
00000938: MLOAD
00000939: SWAP2
0000093a: SWAP3
0000093b: POP
0000093c: SWAP1
0000093d: PUSH1 0x01
0000093f: PUSH1 0x01
00000941: PUSH1 0xa0
00000943: SHL
00000944: SUB
00000945: DUP5
00000946: AND
00000947: SWAP1
00000948: DUP4
00000949: SWAP1
0000094a: DUP4
0000094b: DUP2
0000094c: DUP2
0000094d: DUP2
0000094e: DUP6
0000094f: DUP8
00000950: GAS
00000951: CALL
00000952: SWAP3
00000953: POP
00000954: POP
00000955: POP
00000956: RETURNDATASIZE
00000957: DUP1
00000958: PUSH1 0x00
0000095a: DUP2
0000095b: EQ
0000095c: PUSH2 0x0981
0000095f: JUMPI
00000960: PUSH1 0x40
00000962: MLOAD
00000963: SWAP2
00000964: POP
00000965: PUSH1 0x1f
00000967: NOT
00000968: PUSH1 0x3f
0000096a: RETURNDATASIZE
0000096b: ADD
0000096c: AND
0000096d: DUP3
0000096e: ADD
0000096f: PUSH1 0x40
00000971: MSTORE
00000972: RETURNDATASIZE
00000973: DUP3
00000974: MSTORE
00000975: RETURNDATASIZE
00000976: PUSH1 0x00
00000978: PUSH1 0x20
0000097a: DUP5
0000097b: ADD
0000097c: RETURNDATACOPY
0000097d: PUSH2 0x0986
00000980: JUMP
00000981: JUMPDEST
00000982: PUSH1 0x60
00000984: SWAP2
00000985: POP
00000986: JUMPDEST
00000987: POP
00000988: POP
00000989: SWAP1
0000098a: POP
0000098b: DUP1
0000098c: PUSH2 0x09c6
0000098f: JUMPI
00000990: PUSH1 0x40
00000992: MLOAD
00000993: PUSH3 0x461bcd
00000997: PUSH1 0xe5
00000999: SHL
0000099a: DUP2
0000099b: MSTORE
0000099c: PUSH1 0x04
0000099e: ADD
0000099f: DUP1
000009a0: DUP1
000009a1: PUSH1 0x20
000009a3: ADD
000009a4: DUP3
000009a5: DUP2
000009a6: SUB
000009a7: DUP3
000009a8: MSTORE
000009a9: PUSH1 0x27
000009ab: DUP2
000009ac: MSTORE
000009ad: PUSH1 0x20
000009af: ADD
000009b0: DUP1
000009b1: PUSH2 0x0fc3
000009b4: PUSH1 0x27
000009b6: SWAP2
000009b7: CODECOPY
000009b8: PUSH1 0x40
000009ba: ADD
000009bb: SWAP2
000009bc: POP
000009bd: POP
000009be: PUSH1 0x40
000009c0: MLOAD
000009c1: DUP1
000009c2: SWAP2
000009c3: SUB
000009c4: SWAP1
000009c5: REVERT
000009c6: JUMPDEST
000009c7: PUSH1 0x40
000009c9: MLOAD
000009ca: DUP3
000009cb: SWAP1
000009cc: PUSH1 0x01
000009ce: PUSH1 0x01
000009d0: PUSH1 0xa0
000009d2: SHL
000009d3: SUB
000009d4: DUP6
000009d5: AND
000009d6: SWAP1
000009d7: PUSH32 0xedfe54e758e6dae751369919bd3c260baddfe62c3f49793bdad36629cb5ecd26
000009f8: SWAP1
000009f9: PUSH1 0x00
000009fb: SWAP1
000009fc: LOG3
000009fd: POP
000009fe: POP
000009ff: JUMPDEST
00000a00: POP
00000a01: POP
00000a02: JUMP
00000a03: JUMPDEST
00000a04: PUSH1 0x01
00000a06: SLOAD
00000a07: PUSH1 0x01
00000a09: PUSH1 0xa0
00000a0b: SHL
00000a0c: SWAP1
00000a0d: DIV
00000a0e: PUSH1 0xff
00000a10: AND
00000a11: SWAP1
00000a12: JUMP
00000a13: JUMPDEST
00000a14: PUSH1 0x08
00000a16: SLOAD
00000a17: SWAP1
00000a18: JUMP
00000a19: JUMPDEST
00000a1a: PUSH1 0x07
00000a1c: SLOAD
00000a1d: PUSH1 0xff
00000a1f: AND
00000a20: SWAP1
00000a21: JUMP
00000a22: JUMPDEST
00000a23: PUSH1 0x04
00000a25: SLOAD
00000a26: SWAP1
00000a27: JUMP
00000a28: JUMPDEST
00000a29: PUSH1 0x07
00000a2b: SLOAD
00000a2c: PUSH1 0xff
00000a2e: AND
00000a2f: DUP1
00000a30: ISZERO
00000a31: PUSH2 0x0a51
00000a34: JUMPI
00000a35: POP
00000a36: PUSH1 0x02
00000a38: PUSH1 0x01
00000a3a: SLOAD
00000a3b: PUSH1 0x01
00000a3d: PUSH1 0xa0
00000a3f: SHL
00000a40: SWAP1
00000a41: DIV
00000a42: PUSH1 0xff
00000a44: AND
00000a45: PUSH1 0x02
00000a47: DUP2
00000a48: GT
00000a49: ISZERO
00000a4a: PUSH2 0x0a4f
00000a4d: JUMPI
00000a4e: INVALID
00000a4f: JUMPDEST
00000a50: EQ
00000a51: JUMPDEST
00000a52: PUSH2 0x0a8c
00000a55: JUMPI
00000a56: PUSH1 0x40
00000a58: MLOAD
00000a59: PUSH3 0x461bcd
00000a5d: PUSH1 0xe5
00000a5f: SHL
00000a60: DUP2
00000a61: MSTORE
00000a62: PUSH1 0x04
00000a64: ADD
00000a65: DUP1
00000a66: DUP1
00000a67: PUSH1 0x20
00000a69: ADD
00000a6a: DUP3
00000a6b: DUP2
00000a6c: SUB
00000a6d: DUP3
00000a6e: MSTORE
00000a6f: PUSH1 0x45
00000a71: DUP2
00000a72: MSTORE
00000a73: PUSH1 0x20
00000a75: ADD
00000a76: DUP1
00000a77: PUSH2 0x10c9
00000a7a: PUSH1 0x45
00000a7c: SWAP2
00000a7d: CODECOPY
00000a7e: PUSH1 0x60
00000a80: ADD
00000a81: SWAP2
00000a82: POP
00000a83: POP
00000a84: PUSH1 0x40
00000a86: MLOAD
00000a87: DUP1
00000a88: SWAP2
00000a89: SUB
00000a8a: SWAP1
00000a8b: REVERT
00000a8c: JUMPDEST
00000a8d: CALLER
00000a8e: PUSH1 0x00
00000a90: SWAP1
00000a91: DUP2
00000a92: MSTORE
00000a93: PUSH1 0x0a
00000a95: PUSH1 0x20
00000a97: MSTORE
00000a98: PUSH1 0x40
00000a9a: SWAP1
00000a9b: KECCAK256
00000a9c: SLOAD
00000a9d: PUSH2 0x0ad7
00000aa0: JUMPI
00000aa1: PUSH1 0x40
00000aa3: MLOAD
00000aa4: PUSH3 0x461bcd
00000aa8: PUSH1 0xe5
00000aaa: SHL
00000aab: DUP2
00000aac: MSTORE
00000aad: PUSH1 0x04
00000aaf: ADD
00000ab0: DUP1
00000ab1: DUP1
00000ab2: PUSH1 0x20
00000ab4: ADD
00000ab5: DUP3
00000ab6: DUP2
00000ab7: SUB
00000ab8: DUP3
00000ab9: MSTORE
00000aba: PUSH1 0x43
00000abc: DUP2
00000abd: MSTORE
00000abe: PUSH1 0x20
00000ac0: ADD
00000ac1: DUP1
00000ac2: PUSH2 0x11ba
00000ac5: PUSH1 0x43
00000ac7: SWAP2
00000ac8: CODECOPY
00000ac9: PUSH1 0x60
00000acb: ADD
00000acc: SWAP2
00000acd: POP
00000ace: POP
00000acf: PUSH1 0x40
00000ad1: MLOAD
00000ad2: DUP1
00000ad3: SWAP2
00000ad4: SUB
00000ad5: SWAP1
00000ad6: REVERT
00000ad7: JUMPDEST
00000ad8: PUSH1 0x08
00000ada: SLOAD
00000adb: CALLER
00000adc: PUSH1 0x00
00000ade: SWAP1
00000adf: DUP2
00000ae0: MSTORE
00000ae1: PUSH1 0x0a
00000ae3: PUSH1 0x20
00000ae5: MSTORE
00000ae6: PUSH1 0x40
00000ae8: DUP2
00000ae9: KECCAK256
00000aea: SLOAD
00000aeb: SWAP1
00000aec: SWAP2
00000aed: PUSH2 0x0b08
00000af0: SWAP2
00000af1: PUSH2 0x07a3
00000af4: SWAP1
00000af5: PUSH8 0x0de0b6b3a7640000
00000afe: PUSH4 0xffffffff
00000b03: PUSH2 0x0db9
00000b06: AND
00000b07: JUMP
00000b08: JUMPDEST
00000b09: CALLER
00000b0a: PUSH1 0x00
00000b0c: SWAP1
00000b0d: DUP2
00000b0e: MSTORE
00000b0f: PUSH1 0x0a
00000b11: PUSH1 0x20
00000b13: MSTORE
00000b14: PUSH1 0x40
00000b16: DUP2
00000b17: KECCAK256
00000b18: DUP2
00000b19: SWAP1
00000b1a: SSTORE
00000b1b: PUSH1 0x06
00000b1d: SLOAD
00000b1e: SWAP2
00000b1f: SWAP3
00000b20: POP
00000b21: SWAP1
00000b22: PUSH2 0x0b40
00000b25: SWAP1
00000b26: PUSH8 0x0de0b6b3a7640000
00000b2f: SWAP1
00000b30: PUSH2 0x07a3
00000b33: SWAP1
00000b34: DUP6
00000b35: SWAP1
00000b36: PUSH4 0xffffffff
00000b3b: PUSH2 0x0db9
00000b3e: AND
00000b3f: JUMP
00000b40: JUMPDEST
00000b41: PUSH1 0x00
00000b43: DUP1
00000b44: SLOAD
00000b45: PUSH1 0x40
00000b47: DUP1
00000b48: MLOAD
00000b49: PUSH4 0x0f020c77
00000b4e: PUSH1 0xe3
00000b50: SHL
00000b51: DUP2
00000b52: MSTORE
00000b53: CALLER
00000b54: PUSH1 0x04
00000b56: DUP3
00000b57: ADD
00000b58: MSTORE
00000b59: PUSH1 0x24
00000b5b: DUP2
00000b5c: ADD
00000b5d: DUP6
00000b5e: SWAP1
00000b5f: MSTORE
00000b60: SWAP1
00000b61: MLOAD
00000b62: SWAP4
00000b63: SWAP5
00000b64: POP
00000b65: PUSH1 0x01
00000b67: PUSH1 0x01
00000b69: PUSH1 0xa0
00000b6b: SHL
00000b6c: SUB
00000b6d: SWAP1
00000b6e: SWAP2
00000b6f: AND
00000b70: SWAP3
00000b71: PUSH4 0x781063b8
00000b76: SWAP3
00000b77: PUSH1 0x44
00000b79: DUP1
00000b7a: DUP5
00000b7b: ADD
00000b7c: SWAP4
00000b7d: SWAP2
00000b7e: SWAP3
00000b7f: SWAP2
00000b80: DUP3
00000b81: SWAP1
00000b82: SUB
00000b83: ADD
00000b84: DUP2
00000b85: DUP4
00000b86: DUP8
00000b87: DUP1
00000b88: EXTCODESIZE
00000b89: ISZERO
00000b8a: DUP1
00000b8b: ISZERO
00000b8c: PUSH2 0x0b94
00000b8f: JUMPI
00000b90: PUSH1 0x00
00000b92: DUP1
00000b93: REVERT
00000b94: JUMPDEST
00000b95: POP
00000b96: GAS
00000b97: CALL
00000b98: ISZERO
00000b99: DUP1
00000b9a: ISZERO
00000b9b: PUSH2 0x0ba8
00000b9e: JUMPI
00000b9f: RETURNDATASIZE
00000ba0: PUSH1 0x00
00000ba2: DUP1
00000ba3: RETURNDATACOPY
00000ba4: RETURNDATASIZE
00000ba5: PUSH1 0x00
00000ba7: REVERT
00000ba8: JUMPDEST
00000ba9: POP
00000baa: POP
00000bab: POP
00000bac: POP
00000bad: POP
00000bae: POP
00000baf: JUMP
00000bb0: JUMPDEST
00000bb1: PUSH1 0x05
00000bb3: SLOAD
00000bb4: PUSH1 0x01
00000bb6: PUSH1 0x01
00000bb8: PUSH1 0xa0
00000bba: SHL
00000bbb: SUB
00000bbc: AND
00000bbd: SWAP1
00000bbe: JUMP
00000bbf: JUMPDEST
00000bc0: SELFBALANCE
00000bc1: SWAP1
00000bc2: JUMP
00000bc3: JUMPDEST
00000bc4: PUSH1 0x07
00000bc6: SLOAD
00000bc7: PUSH1 0xff
00000bc9: AND
00000bca: ISZERO
00000bcb: PUSH2 0x0c05
00000bce: JUMPI
00000bcf: PUSH1 0x40
00000bd1: MLOAD
00000bd2: PUSH3 0x461bcd
00000bd6: PUSH1 0xe5
00000bd8: SHL
00000bd9: DUP2
00000bda: MSTORE
00000bdb: PUSH1 0x04
00000bdd: ADD
00000bde: DUP1
00000bdf: DUP1
00000be0: PUSH1 0x20
00000be2: ADD
00000be3: DUP3
00000be4: DUP2
00000be5: SUB
00000be6: DUP3
00000be7: MSTORE
00000be8: PUSH1 0x26
00000bea: DUP2
00000beb: MSTORE
00000bec: PUSH1 0x20
00000bee: ADD
00000bef: DUP1
00000bf0: PUSH2 0x104a
00000bf3: PUSH1 0x26
00000bf5: SWAP2
00000bf6: CODECOPY
00000bf7: PUSH1 0x40
00000bf9: ADD
00000bfa: SWAP2
00000bfb: POP
00000bfc: POP
00000bfd: PUSH1 0x40
00000bff: MLOAD
00000c00: DUP1
00000c01: SWAP2
00000c02: SUB
00000c03: SWAP1
00000c04: REVERT
00000c05: JUMPDEST
00000c06: PUSH1 0x02
00000c08: PUSH1 0x01
00000c0a: SLOAD
00000c0b: PUSH1 0x01
00000c0d: PUSH1 0xa0
00000c0f: SHL
00000c10: SWAP1
00000c11: DIV
00000c12: PUSH1 0xff
00000c14: AND
00000c15: PUSH1 0x02
00000c17: DUP2
00000c18: GT
00000c19: ISZERO
00000c1a: PUSH2 0x0c1f
00000c1d: JUMPI
00000c1e: INVALID
00000c1f: JUMPDEST
00000c20: EQ
00000c21: DUP1
00000c22: PUSH2 0x0c4d
00000c25: JUMPI
00000c26: POP
00000c27: PUSH1 0x01
00000c29: DUP1
00000c2a: SLOAD
00000c2b: PUSH1 0x01
00000c2d: PUSH1 0xa0
00000c2f: SHL
00000c30: SWAP1
00000c31: DIV
00000c32: PUSH1 0xff
00000c34: AND
00000c35: PUSH1 0x02
00000c37: DUP2
00000c38: GT
00000c39: ISZERO
00000c3a: PUSH2 0x0c3f
00000c3d: JUMPI
00000c3e: INVALID
00000c3f: JUMPDEST
00000c40: EQ
00000c41: DUP1
00000c42: ISZERO
00000c43: PUSH2 0x0c4d
00000c46: JUMPI
00000c47: POP
00000c48: PUSH1 0x02
00000c4a: SLOAD
00000c4b: TIMESTAMP
00000c4c: GT
00000c4d: JUMPDEST
00000c4e: PUSH2 0x0c88
00000c51: JUMPI
00000c52: PUSH1 0x40
00000c54: MLOAD
00000c55: PUSH3 0x461bcd
00000c59: PUSH1 0xe5
00000c5b: SHL
00000c5c: DUP2
00000c5d: MSTORE
00000c5e: PUSH1 0x04
00000c60: ADD
00000c61: DUP1
00000c62: DUP1
00000c63: PUSH1 0x20
00000c65: ADD
00000c66: DUP3
00000c67: DUP2
00000c68: SUB
00000c69: DUP3
00000c6a: MSTORE
00000c6b: PUSH1 0x39
00000c6d: DUP2
00000c6e: MSTORE
00000c6f: PUSH1 0x20
00000c71: ADD
00000c72: DUP1
00000c73: PUSH2 0x1155
00000c76: PUSH1 0x39
00000c78: SWAP2
00000c79: CODECOPY
00000c7a: PUSH1 0x40
00000c7c: ADD
00000c7d: SWAP2
00000c7e: POP
00000c7f: POP
00000c80: PUSH1 0x40
00000c82: MLOAD
00000c83: DUP1
00000c84: SWAP2
00000c85: SUB
00000c86: SWAP1
00000c87: REVERT
00000c88: JUMPDEST
00000c89: PUSH1 0x07
00000c8b: DUP1
00000c8c: SLOAD
00000c8d: PUSH1 0xff
00000c8f: NOT
00000c90: AND
00000c91: PUSH1 0x01
00000c93: OR
00000c94: SWAP1
00000c95: SSTORE
00000c96: PUSH1 0x00
00000c98: DUP1
00000c99: SLOAD
00000c9a: PUSH1 0x40
00000c9c: DUP1
00000c9d: MLOAD
00000c9e: PUSH4 0x3b3e2b51
00000ca3: PUSH1 0xe1
00000ca5: SHL
00000ca6: DUP2
00000ca7: MSTORE
00000ca8: SWAP1
00000ca9: MLOAD
00000caa: PUSH1 0x01
00000cac: PUSH1 0x01
00000cae: PUSH1 0xa0
00000cb0: SHL
00000cb1: SUB
00000cb2: SWAP1
00000cb3: SWAP3
00000cb4: AND
00000cb5: SWAP3
00000cb6: PUSH4 0x767c56a2
00000cbb: SWAP3
00000cbc: PUSH1 0x04
00000cbe: DUP1
00000cbf: DUP5
00000cc0: ADD
00000cc1: SWAP4
00000cc2: DUP3
00000cc3: SWAP1
00000cc4: SUB
00000cc5: ADD
00000cc6: DUP2
00000cc7: DUP4
00000cc8: DUP8
00000cc9: DUP1
00000cca: EXTCODESIZE
00000ccb: ISZERO
00000ccc: DUP1
00000ccd: ISZERO
00000cce: PUSH2 0x0cd6
00000cd1: JUMPI
00000cd2: PUSH1 0x00
00000cd4: DUP1
00000cd5: REVERT
00000cd6: JUMPDEST
00000cd7: POP
00000cd8: GAS
00000cd9: CALL
00000cda: ISZERO
00000cdb: DUP1
00000cdc: ISZERO
00000cdd: PUSH2 0x0cea
00000ce0: JUMPI
00000ce1: RETURNDATASIZE
00000ce2: PUSH1 0x00
00000ce4: DUP1
00000ce5: RETURNDATACOPY
00000ce6: RETURNDATASIZE
00000ce7: PUSH1 0x00
00000ce9: REVERT
00000cea: JUMPDEST
00000ceb: POP
00000cec: POP
00000ced: POP
00000cee: POP
00000cef: JUMP
00000cf0: JUMPDEST
00000cf1: PUSH1 0x06
00000cf3: SLOAD
00000cf4: SWAP1
00000cf5: JUMP
00000cf6: JUMPDEST
00000cf7: PUSH1 0x00
00000cf9: PUSH2 0x0d1b
00000cfc: PUSH8 0x0de0b6b3a7640000
00000d05: PUSH2 0x07a3
00000d08: PUSH1 0x06
00000d0a: SLOAD
00000d0b: PUSH1 0x04
00000d0d: SLOAD
00000d0e: PUSH2 0x0db9
00000d11: SWAP1
00000d12: SWAP2
00000d13: SWAP1
00000d14: PUSH4 0xffffffff
00000d19: AND
00000d1a: JUMP
00000d1b: JUMPDEST
00000d1c: SWAP1
00000d1d: POP
00000d1e: SWAP1
00000d1f: JUMP
00000d20: JUMPDEST
00000d21: PUSH1 0x00
00000d23: SLOAD
00000d24: PUSH1 0x01
00000d26: PUSH1 0x01
00000d28: PUSH1 0xa0
00000d2a: SHL
00000d2b: SUB
00000d2c: AND
00000d2d: SWAP1
00000d2e: JUMP
00000d2f: JUMPDEST
00000d30: PUSH1 0x02
00000d32: SLOAD
00000d33: SWAP1
00000d34: JUMP
00000d35: JUMPDEST
00000d36: PUSH1 0x01
00000d38: PUSH1 0x01
00000d3a: PUSH1 0xa0
00000d3c: SHL
00000d3d: SUB
00000d3e: AND
00000d3f: PUSH1 0x00
00000d41: SWAP1
00000d42: DUP2
00000d43: MSTORE
00000d44: PUSH1 0x0a
00000d46: PUSH1 0x20
00000d48: MSTORE
00000d49: PUSH1 0x40
00000d4b: SWAP1
00000d4c: KECCAK256
00000d4d: SLOAD
00000d4e: SWAP1
00000d4f: JUMP
00000d50: JUMPDEST
00000d51: PUSH1 0x03
00000d53: SLOAD
00000d54: SWAP1
00000d55: JUMP
00000d56: JUMPDEST
00000d57: PUSH1 0x00
00000d59: DUP3
00000d5a: DUP3
00000d5b: ADD
00000d5c: DUP4
00000d5d: DUP2
00000d5e: LT
00000d5f: ISZERO
00000d60: PUSH2 0x0db0
00000d63: JUMPI
00000d64: PUSH1 0x40
00000d66: DUP1
00000d67: MLOAD
00000d68: PUSH3 0x461bcd
00000d6c: PUSH1 0xe5
00000d6e: SHL
00000d6f: DUP2
00000d70: MSTORE
00000d71: PUSH1 0x20
00000d73: PUSH1 0x04
00000d75: DUP3
00000d76: ADD
00000d77: MSTORE
00000d78: PUSH1 0x1b
00000d7a: PUSH1 0x24
00000d7c: DUP3
00000d7d: ADD
00000d7e: MSTORE
00000d7f: PUSH32 0x536166654d6174683a206164646974696f6e206f766572666c6f770000000000
00000da0: PUSH1 0x44
00000da2: DUP3
00000da3: ADD
00000da4: MSTORE
00000da5: SWAP1
00000da6: MLOAD
00000da7: SWAP1
00000da8: DUP2
00000da9: SWAP1
00000daa: SUB
00000dab: PUSH1 0x64
00000dad: ADD
00000dae: SWAP1
00000daf: REVERT
00000db0: JUMPDEST
00000db1: SWAP1
00000db2: POP
00000db3: JUMPDEST
00000db4: SWAP3
00000db5: SWAP2
00000db6: POP
00000db7: POP
00000db8: JUMP
00000db9: JUMPDEST
00000dba: PUSH1 0x00
00000dbc: DUP3
00000dbd: PUSH2 0x0dc8
00000dc0: JUMPI
00000dc1: POP
00000dc2: PUSH1 0x00
00000dc4: PUSH2 0x0db3
00000dc7: JUMP
00000dc8: JUMPDEST
00000dc9: DUP3
00000dca: DUP3
00000dcb: MUL
00000dcc: DUP3
00000dcd: DUP5
00000dce: DUP3
00000dcf: DUP2
00000dd0: PUSH2 0x0dd5
00000dd3: JUMPI
00000dd4: INVALID
00000dd5: JUMPDEST
00000dd6: DIV
00000dd7: EQ
00000dd8: PUSH2 0x0db0
00000ddb: JUMPI
00000ddc: PUSH1 0x40
00000dde: MLOAD
00000ddf: PUSH3 0x461bcd
00000de3: PUSH1 0xe5
00000de5: SHL
00000de6: DUP2
00000de7: MSTORE
00000de8: PUSH1 0x04
00000dea: ADD
00000deb: DUP1
00000dec: DUP1
00000ded: PUSH1 0x20
00000def: ADD
00000df0: DUP3
00000df1: DUP2
00000df2: SUB
00000df3: DUP3
00000df4: MSTORE
00000df5: PUSH1 0x21
00000df7: DUP2
00000df8: MSTORE
00000df9: PUSH1 0x20
00000dfb: ADD
00000dfc: DUP1
00000dfd: PUSH2 0x110e
00000e00: PUSH1 0x21
00000e02: SWAP2
00000e03: CODECOPY
00000e04: PUSH1 0x40
00000e06: ADD
00000e07: SWAP2
00000e08: POP
00000e09: POP
00000e0a: PUSH1 0x40
00000e0c: MLOAD
00000e0d: DUP1
00000e0e: SWAP2
00000e0f: SUB
00000e10: SWAP1
00000e11: REVERT
00000e12: JUMPDEST
00000e13: PUSH1 0x00
00000e15: PUSH2 0x0db0
00000e18: DUP4
00000e19: DUP4
00000e1a: PUSH1 0x40
00000e1c: MLOAD
00000e1d: DUP1
00000e1e: PUSH1 0x40
00000e20: ADD
00000e21: PUSH1 0x40
00000e23: MSTORE
00000e24: DUP1
00000e25: PUSH1 0x1a
00000e27: DUP2
00000e28: MSTORE
00000e29: PUSH1 0x20
00000e2b: ADD
00000e2c: PUSH32 0x536166654d6174683a206469766973696f6e206279207a65726f000000000000
00000e4d: DUP2
00000e4e: MSTORE
00000e4f: POP
00000e50: PUSH1 0x00
00000e52: DUP2
00000e53: DUP4
00000e54: PUSH2 0x0edb
00000e57: JUMPI
00000e58: PUSH1 0x40
00000e5a: MLOAD
00000e5b: PUSH3 0x461bcd
00000e5f: PUSH1 0xe5
00000e61: SHL
00000e62: DUP2
00000e63: MSTORE
00000e64: PUSH1 0x04
00000e66: ADD
00000e67: DUP1
00000e68: DUP1
00000e69: PUSH1 0x20
00000e6b: ADD
00000e6c: DUP3
00000e6d: DUP2
00000e6e: SUB
00000e6f: DUP3
00000e70: MSTORE
00000e71: DUP4
00000e72: DUP2
00000e73: DUP2
00000e74: MLOAD
00000e75: DUP2
00000e76: MSTORE
00000e77: PUSH1 0x20
00000e79: ADD
00000e7a: SWAP2
00000e7b: POP
00000e7c: DUP1
00000e7d: MLOAD
00000e7e: SWAP1
00000e7f: PUSH1 0x20
00000e81: ADD
00000e82: SWAP1
00000e83: DUP1
00000e84: DUP4
00000e85: DUP4
00000e86: PUSH1 0x00
00000e88: JUMPDEST
00000e89: DUP4
00000e8a: DUP2
00000e8b: LT
00000e8c: ISZERO
00000e8d: PUSH2 0x0ea0
00000e90: JUMPI
00000e91: DUP2
00000e92: DUP2
00000e93: ADD
00000e94: MLOAD
00000e95: DUP4
00000e96: DUP3
00000e97: ADD
00000e98: MSTORE
00000e99: PUSH1 0x20
00000e9b: ADD
00000e9c: PUSH2 0x0e88
00000e9f: JUMP
00000ea0: JUMPDEST
00000ea1: POP
00000ea2: POP
00000ea3: POP
00000ea4: POP
00000ea5: SWAP1
00000ea6: POP
00000ea7: SWAP1
00000ea8: DUP2
00000ea9: ADD
00000eaa: SWAP1
00000eab: PUSH1 0x1f
00000ead: AND
00000eae: DUP1
00000eaf: ISZERO
00000eb0: PUSH2 0x0ecd
00000eb3: JUMPI
00000eb4: DUP1
00000eb5: DUP3
00000eb6: SUB
00000eb7: DUP1
00000eb8: MLOAD
00000eb9: PUSH1 0x01
00000ebb: DUP4
00000ebc: PUSH1 0x20
00000ebe: SUB
00000ebf: PUSH2 0x0100
00000ec2: EXP
00000ec3: SUB
00000ec4: NOT
00000ec5: AND
00000ec6: DUP2
00000ec7: MSTORE
00000ec8: PUSH1 0x20
00000eca: ADD
00000ecb: SWAP2
00000ecc: POP
00000ecd: JUMPDEST
00000ece: POP
00000ecf: SWAP3
00000ed0: POP
00000ed1: POP
00000ed2: POP
00000ed3: PUSH1 0x40
00000ed5: MLOAD
00000ed6: DUP1
00000ed7: SWAP2
00000ed8: SUB
00000ed9: SWAP1
00000eda: REVERT
00000edb: JUMPDEST
00000edc: POP
00000edd: PUSH1 0x00
00000edf: DUP4
00000ee0: DUP6
00000ee1: DUP2
00000ee2: PUSH2 0x0ee7
00000ee5: JUMPI
00000ee6: INVALID
00000ee7: JUMPDEST
00000ee8: DIV
00000ee9: SWAP6
00000eea: SWAP5
00000eeb: POP
00000eec: POP
00000eed: POP
00000eee: POP
00000eef: POP
00000ef0: JUMP
00000ef1: JUMPDEST
00000ef2: PUSH1 0x00
00000ef4: PUSH2 0x0db0
00000ef7: DUP4
00000ef8: DUP4
00000ef9: PUSH1 0x40
00000efb: MLOAD
00000efc: DUP1
00000efd: PUSH1 0x40
00000eff: ADD
00000f00: PUSH1 0x40
00000f02: MSTORE
00000f03: DUP1
00000f04: PUSH1 0x1e
00000f06: DUP2
00000f07: MSTORE
00000f08: PUSH1 0x20
00000f0a: ADD
00000f0b: PUSH32 0x536166654d6174683a207375627472616374696f6e206f766572666c6f770000
00000f2c: DUP2
00000f2d: MSTORE
00000f2e: POP
00000f2f: PUSH1 0x00
00000f31: DUP2
00000f32: DUP5
00000f33: DUP5
00000f34: GT
00000f35: ISZERO
00000f36: PUSH2 0x0f80
00000f39: JUMPI
00000f3a: PUSH1 0x40
00000f3c: MLOAD
00000f3d: PUSH3 0x461bcd
00000f41: PUSH1 0xe5
00000f43: SHL
00000f44: DUP2
00000f45: MSTORE
00000f46: PUSH1 0x20
00000f48: PUSH1 0x04
00000f4a: DUP3
00000f4b: ADD
00000f4c: DUP2
00000f4d: DUP2
00000f4e: MSTORE
00000f4f: DUP4
00000f50: MLOAD
00000f51: PUSH1 0x24
00000f53: DUP5
00000f54: ADD
00000f55: MSTORE
00000f56: DUP4
00000f57: MLOAD
00000f58: SWAP1
00000f59: SWAP3
00000f5a: DUP4
00000f5b: SWAP3
00000f5c: PUSH1 0x44
00000f5e: SWAP1
00000f5f: SWAP2
00000f60: ADD
00000f61: SWAP2
00000f62: SWAP1
00000f63: DUP6
00000f64: ADD
00000f65: SWAP1
00000f66: DUP1
00000f67: DUP4
00000f68: DUP4
00000f69: PUSH1 0x00
00000f6b: DUP4
00000f6c: ISZERO
00000f6d: PUSH2 0x0ea0
00000f70: JUMPI
00000f71: DUP2
00000f72: DUP2
00000f73: ADD
00000f74: MLOAD
00000f75: DUP4
00000f76: DUP3
00000f77: ADD
00000f78: MSTORE
00000f79: PUSH1 0x20
00000f7b: ADD
00000f7c: PUSH2 0x0e88
00000f7f: JUMP
00000f80: JUMPDEST
00000f81: POP
00000f82: POP
00000f83: POP
00000f84: SWAP1
00000f85: SUB
00000f86: SWAP1
00000f87: JUMP
00000f88: INVALID
00000f89: JUMPDEST
00000f8a: PUSH4 0x6f756e74
00000f8f: PUSH6 0x72436f6d6d69
00000f96: PUSH21 0x45746865725d20496e697469616c20636c61696d61
00000fac: PUSH15 0x742063616e6e6f7420636f756e7465
00000fbc: PUSH19 0x636f6d6d69745b636f6c6c6563744574686572
00000fd0: POP
00000fd1: PUSH19 0x6f63656564735d205472616e73666572206661
00000fe5: PUSH10 0x6c65642e5b636f756e74
00000ff0: PUSH6 0x72436f6d6d69
00000ff7: PUSH21 0x45746865725d20496e697469616c20636c61696d61
0000100d: PUSH15 0x7420646f6573206e6f742065786973
0000101d: PUSH21 0x5b636f756e746572436f6d6d697445746865725d20
00001033: MSTORE8
00001034: PUSH9 0x6f7467756e20616c72
0000103e: PUSH6 0x61647920656e
00001045: PUSH2 0x6374
00001048: PUSH6 0x645b656e6163
0000104f: PUSH21 0x53686f7467756e5d2053686f7467756e20616c7265
00001065: PUSH2 0x6479
00001068: KECCAK256
00001069: PUSH6 0x6e6163746564
00001070: JUMPDEST
00001071: PUSH4 0x6f756e74
00001076: PUSH6 0x72436f6d6d69
0000107d: PUSH21 0x45746865725d20446561646c696e65206861732065
00001093: PUSH25 0x70697265645b636f756e746572436f6d6d697445746865725d
000010ad: KECCAK256
000010ae: COINBASE
000010af: PUSH4 0x636f756e
000010b4: PUSH21 0x20646f6573206e6f74206f776e205368617264735b
000010ca: PUSH4 0x6f6c6c65
000010cf: PUSH4 0x74536861
000010d4: PUSH19 0x6450726f63656564735d2053686f7467756e20
000010e8: PUSH9 0x6173206e6f74206265
000010f2: PUSH6 0x6e20656e6163
000010f9: PUSH21 0x6564206f7220696e76616c69642077696e6e657253
0000110f: PUSH2 0x6665
00001112: UNKNOWN(0x4D)
00001113: PUSH2 0x7468
00001116: GASPRICE
00001117: KECCAK256
00001118: PUSH14 0x756c7469706c69636174696f6e20
00001127: PUSH16 0x766572666c6f775b636f756e74657243
00001138: PUSH16 0x6d6d697445746865725d204574686572
00001149: KECCAK256
0000114a: PUSH10 0x73207265717569726564
00001155: JUMPDEST
00001156: PUSH6 0x6e6163745368
0000115d: PUSH16 0x7467756e5d20436f6e646974696f6e73
0000116e: KECCAK256
0000116f: PUSH15 0x6f74206d657420746f20656e616374
0000117f: KECCAK256
00001180: MSTORE8
00001181: PUSH9 0x6f7467756e20436c61
0000118b: PUSH22 0x73655b636f6c6c656374457468657250726f63656564
000011a2: PUSH20 0x5d2043616c6c6572206e6f7420617574686f7269
000011b7: PUSH27 0x65645b636f6c6c656374536861726450726f63656564735d204163
000011d3: PUSH4 0x6f756e74
000011d8: KECCAK256
000011d9: PUSH9 0x6173206e6f74207061
000011e3: PUSH19 0x74696369706174656420696e20636f756e7465
000011f7: PUSH19 0x636c61696d5b636f756e746572436f6d6d6974
0000120b: GASLIMIT
0000120c: PUSH21 0x6865725d204574686572206578636565647320676f
00001222: PUSH2 0x6ca2
00001225: PUSH6 0x627a7a723158
0000122c: KECCAK256
0000122d: UNKNOWN(0x0C)
0000122e: SWAP13
0000122f: DUP11
00001230: UNKNOWN(0xD7)
00001231: UNKNOWN(0xBA)
00001232: UNKNOWN(0xE6)
00001233: UNKNOWN(0xC8)
00001234: PUSH27 0x3874189bebef291cbfa4e531dab258c63ca351170526b52d64736f
00001250: PUSH13

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high other detector Untrusted CALL target/value reachable 60 no no
view
trace_id: 0x169afc541819133a73b3225de15361b791a1a30e72663c220b05da30b4de81d4
call_targets: 0xa1113cf31c5e9ba31fd7c698b2e77478cadb0d79
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x169afc541819133a73b3225de15361b791a1a30e72663c220b05da30b4de81d4",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xa1113cf31c5e9ba31fd7c698b2e77478cadb0d79"
    ],
    "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": "0xebe7f760",
            "selector": "0xebe7f760",
            "calldata_variants": [
                "0xebe7f760",
                "0xebe7f7600000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf372872d",
            "selector": "0xf372872d",
            "calldata_variants": [
                "0xf372872d",
                "0xf372872d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf6d8414f",
            "selector": "0xf6d8414f",
            "calldata_variants": [
                "0xf6d8414f",
                "0xf6d8414f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf9d820d0",
            "selector": "0xf9d820d0",
            "calldata_variants": [
                "0xf9d820d0",
                "0xf9d820d00000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfb342221",
            "selector": "0xfb342221",
            "calldata_variants": [
                "0xfb342221",
                "0xfb3422210000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x6dce6c5e",
            "selector": "0x6dce6c5e",
            "calldata_variants": [
                "0x6dce6c5e",
                "0x6dce6c5e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x6f9fb98a",
            "selector": "0x6f9fb98a",
            "calldata_variants": [
                "0x6f9fb98a",
                "0x6f9fb98a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x767c56a2",
            "selector": "0x767c56a2",
            "calldata_variants": [
                "0x767c56a2",
                "0x767c56a20000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 2055,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 2385,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 2967,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 4,
    "guards_detected": [],
    "untrusted_call_count": 4
}
high other detector ETH value transfer possible 55 no no
view
trace_id: 0x169afc541819133a73b3225de15361b791a1a30e72663c220b05da30b4de81d4
call_targets: 0xa1113cf31c5e9ba31fd7c698b2e77478cadb0d79
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x169afc541819133a73b3225de15361b791a1a30e72663c220b05da30b4de81d4",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0xa1113cf31c5e9ba31fd7c698b2e77478cadb0d79"
    ],
    "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": "0xebe7f760",
            "selector": "0xebe7f760",
            "calldata_variants": [
                "0xebe7f760",
                "0xebe7f7600000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf372872d",
            "selector": "0xf372872d",
            "calldata_variants": [
                "0xf372872d",
                "0xf372872d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf6d8414f",
            "selector": "0xf6d8414f",
            "calldata_variants": [
                "0xf6d8414f",
                "0xf6d8414f0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf9d820d0",
            "selector": "0xf9d820d0",
            "calldata_variants": [
                "0xf9d820d0",
                "0xf9d820d00000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfb342221",
            "selector": "0xfb342221",
            "calldata_variants": [
                "0xfb342221",
                "0xfb3422210000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x6dce6c5e",
            "selector": "0x6dce6c5e",
            "calldata_variants": [
                "0x6dce6c5e",
                "0x6dce6c5e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x6f9fb98a",
            "selector": "0x6f9fb98a",
            "calldata_variants": [
                "0x6f9fb98a",
                "0x6f9fb98a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x767c56a2",
            "selector": "0x767c56a2",
            "calldata_variants": [
                "0x767c56a2",
                "0x767c56a20000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 2055,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 2385,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 2967,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 4,
    "guards_detected": []
}