83748a80-3298-43de-8ee4-edc4a58c2247
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 31466 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 77422 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 77423 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 77424 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 77425 | capability.graph | complete | 1 / 3 | 1 week ago |
| 77426 | detector.run | complete | 1 / 3 | 1 week ago |
| 77427 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:486307] OpenAI Codex v0.77.0 (research preview)
[codex:486307] --------
[codex:486307] workdir: /tmp/codex-multi-1bg8j8hv
[codex:486307] model: gpt-5.2-codex
[codex:486307] provider: openai
[codex:486307] approval: never
[codex:486307] sandbox: read-only
[codex:486307] reasoning effort: xhigh
[codex:486307] reasoning summaries: auto
[codex:486307] session id: 019b85d2-6695-7040-9b7e-03937a4bbc8c
[codex:486307] --------
[codex:486307] user
[codex:486307] 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:486307]
[codex:486307] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:486307]
[codex:486307] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:486307] - Gas inefficiency, code quality, or best practices
[codex:486307] - Theoretical vulnerabilities without a clear extraction path
[codex:486307] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:486307] - Issues requiring social engineering or off-chain coordination
[codex:486307]
[codex:486307] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:486307] - CALL/DELEGATECALL with controllable destination or calldata
[codex:486307] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:486307] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:486307] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:486307] - External calls before state updates (reentrancy)
[codex:486307] - SELFDESTRUCT with controllable beneficiary
[codex:486307] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:486307]
[codex:486307] For each finding, you MUST explain:
[codex:486307] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:486307] 2. The concrete sequence of transactions to extract value
[codex:486307] 3. Why you believe this is exploitable (not just suspicious)
[codex:486307]
[codex:486307] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:486307] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:486307]
[codex:486307] Output MUST be valid JSON matching the provided schema.
[codex:486307] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:486307] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:486307] mcp startup: no servers
[codex:486307]
[codex:486307] thinking
[codex:486307] **Searching for BYTECODE_BUNDLE**
[codex:486307] exec
[codex:486307] /bin/bash -lc ls in /tmp/codex-multi-1bg8j8hv succeeded in 6ms:
[codex:486307] BYTECODE_BUNDLE.txt
[codex:486307] codex-output-schema.json
[codex:486307]
[codex:486307] thinking
[codex:486307] **Reading file contents**
[codex:486307] exec
[codex:486307] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-1bg8j8hv succeeded in 5ms:
[codex:486307] Runtime bytecode bundle for best-effort auditing.
[codex:486307] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:486307]
[codex:486307] FILE: runtime_bytecode.hex
[codex:486307] 0x6080604052600436106101485760003560e01c8063679aefce116100c0578063a457c2d711610074578063aa271e1a11610059578063aa271e1a1461055a578063dd62ed3e1461059a578063f05fcdf2146105e257610186565b8063a457c2d7146104ce578063a9059cbb1461051457610186565b8063903d8e77116100a5578063903d8e771461046057806395d89b41146104a45780639975038c146104b957610186565b8063679aefce146103dc57806370a082311461042057610186565b80632f13b60c1161011757806339509351116100fc578063395093511461032657806340c10f191461036c57806342966c68146103b257610186565b80632f13b60c146102e6578063313ce567146102fb57610186565b806306fdde031461018b578063095ea7b31461021557806318160ddd1461026f57806323b872dd1461029657610186565b3661018657604080513481529051309133917fdd4e7375a5084e0c4cc4e1bfc7ba67beb26a368120ea78d2e0948123910bbf7c9181900360200190a3005b600080fd5b34801561019757600080fd5b506101a0610628565b6040805160208082528351818301528351919283929083019185019080838360005b838110156101da5781810151838201526020016101c2565b50505050905090810190601f1680156102075780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561022157600080fd5b5061025b6004803603604081101561023857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356106dc565b604080519115158252519081900360200190f35b34801561027b57600080fd5b506102846106fa565b60408051918252519081900360200190f35b3480156102a257600080fd5b5061025b600480360360608110156102b957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610700565b3480156102f257600080fd5b5061025b610755565b34801561030757600080fd5b50610310610783565b6040805160ff9092168252519081900360200190f35b34801561033257600080fd5b5061025b6004803603604081101561034957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561078c565b34801561037857600080fd5b5061025b6004803603604081101561038f57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356107ed565b3480156103be57600080fd5b5061025b600480360360208110156103d557600080fd5b50356108cb565b3480156103e857600080fd5b506103f1610999565b604080516fffffffffffffffffffffffffffffffff938416815291909216602082015281519081900390910190f35b34801561042c57600080fd5b506102846004803603602081101561044357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166109ca565b34801561046c57600080fd5b5061025b6004803603604081101561048357600080fd5b506fffffffffffffffffffffffffffffffff813581169160200135166109f2565b3480156104b057600080fd5b506101a0610afe565b3480156104c557600080fd5b50610284610b7d565b3480156104da57600080fd5b5061025b600480360360408110156104f157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610ba5565b34801561052057600080fd5b5061025b6004803603604081101561053757600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610c20565b34801561056657600080fd5b5061025b6004803603602081101561057d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610c2d565b3480156105a657600080fd5b50610284600480360360408110156105bd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610c38565b3480156105ee57600080fd5b5061025b6004803603604081101561060557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610c70565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106d25780601f106106a7576101008083540402835291602001916106d2565b820191906000526020600020905b8154815290600101906020018083116106b557829003601f168201915b5050505050905090565b60006106f06106e9610cf2565b8484610cf6565b5060015b92915050565b60025490565b600061070d848484610e3d565b61074b843361074685604051806060016040528060288152602001611936602891396107398a33610c38565b919063ffffffff61101916565b610cf6565b5060019392505050565b60065470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16151590565b60055460ff1690565b60006106f0610799610cf2565b8461074685600160006107aa610cf2565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6110ca16565b60006107f833611145565b61084d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806118ac602e913960400191505060405180910390fd5b610855610755565b156108c157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f7468697320746f6b656e20636f6e747261637420686173206578706972656400604482015290519081900360640190fd5b6106f08383611184565b60006108d5610755565b6108e157506000610994565b6108eb33836112c1565b6006546fffffffffffffffffffffffffffffffff161561099057600654600090610969906fffffffffffffffffffffffffffffffff700100000000000000000000000000000000820481169161095d9116610951876402540be40063ffffffff61141716565b9063ffffffff61141716565b9063ffffffff61148a16565b905061098e338260405180606001604052806022815260200161188a602291396114cc565b505b5060015b919050565b6006546fffffffffffffffffffffffffffffffff808216927001000000000000000000000000000000009092041690565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b60006109fd33611145565b610a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806118ac602e913960400191505060405180910390fd5b610a5a610755565b1590508015610aa457610aa46040518060400160405280856fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff1681525061165d565b604080516fffffffffffffffffffffffffffffffff8086168252841660208201528215158183015290517fcdcd2e977c58a9c82d799c0986ab5c6fe48d43a9b96bbf60a654b46728c6f6679181900360600190a192915050565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106d25780601f106106a7576101008083540402835291602001916106d2565b6000610b88336109ca565b90506000610b95826108cb565b905080610ba157600091505b5090565b60006106f0610bb2610cf2565b84610746856040518060600160405280602581526020016119c86025913960016000610bdc610cf2565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61101916565b60006106f0338484610e3d565b60006106f482611145565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6000610c7b33611145565b610cd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001806118ac602e913960400191505060405180910390fd5b610cd9836109ca565b821115610ce8575060006106f4565b6106f083836112c1565b3390565b73ffffffffffffffffffffffffffffffffffffffff8316610d62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806119a46024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610dce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806118426022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610ea9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061197f6025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610f15576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806117fd6023913960400191505060405180910390fd5b610f2083838361172f565b610f70816040518060600160405280602681526020016118646026913973ffffffffffffffffffffffffffffffffffffffff8616600090815260208190526040902054919063ffffffff61101916565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610fb2908263ffffffff6110ca16565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561108757818101518382015260200161106f565b50505050905090810190601f1680156110b45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008282018381101561113e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b7f0000000000000000000000008b24f5c764ab741bc8a2426505bda458c30df01073ffffffffffffffffffffffffffffffffffffffff90811691161490565b73ffffffffffffffffffffffffffffffffffffffff821661120657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6112126000838361172f565b600254611225908263ffffffff6110ca16565b60025573ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205461125e908263ffffffff6110ca16565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff821661132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061195e6021913960400191505060405180910390fd5b6113398260008361172f565b611389816040518060600160405280602281526020016118206022913973ffffffffffffffffffffffffffffffffffffffff8516600090815260208190526040902054919063ffffffff61101916565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020556002546113c2908263ffffffff61173416565b60025560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b600082611426575060006106f4565b8282028284828161143357fe5b041461113e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806119156021913960400191505060405180910390fd5b600061113e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611776565b6114d5826117f5565b819061153c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815283516024840152835190928392604490910191908501908083836000831561108757818101518382015260200161106f565b5060405160009073ffffffffffffffffffffffffffffffffffffffff85169084908381818185875af1925050503d8060008114611595576040519150601f19603f3d011682016040523d82523d6000602084013e61159a565b606091505b505090508061160a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f7472616e7366657272696e67204574686572206661696c656400000000000000604482015290519081900360640190fd5b60408051848152905173ffffffffffffffffffffffffffffffffffffffff86169130917fdd4e7375a5084e0c4cc4e1bfc7ba67beb26a368120ea78d2e0948123910bbf7c9181900360200190a350505050565b60208101516fffffffffffffffffffffffffffffffff166116c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603b8152602001806118da603b913960400191505060405180910390fd5b8051600680546020909301516fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000029281167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941693909317909216179055565b505050565b600061113e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611019565b600081836117df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815283516024840152835190928392604490910191908501908083836000831561108757818101518382015260200161106f565b5060008385816117eb57fe5b0495945050505050565b303110159056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636573797374656d206572726f723a20696e73756666696369656e742062616c616e63656f6e6c79206465706c6f79657220697320616c6c6f77656420746f2063616c6c20746869732066756e6374696f6e73797374656d206572726f723a207468652065786368616e67652072617465206d757374206265206e6f6e2d6e65676174697665206e756d626572536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204d7f6c98e7947c587cb2cacbbd60112ff671feabdd34e2fe6aaa8e4e36045e5964736f6c63430006060033
[codex:486307]
[codex:486307] thinking
[codex:486307] **Analyzing bytecode for vulnerabilities**
[codex:486307]
[codex:486307] I'm digging into the contract's bytecode to identify key ERC20 functions and uncommon ones, looking for signs of minting, ETH handling, or suspicious calls like delegatecall. I'm parsing storage layout and opcodes to detect unprotected minting or fund-draining exploits, considering packed storage and event signatures to piece together contract behavior.
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] # remove non-hex? We'll keep hex chars only
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] print('len bytes',len(hexdata)//2)
[codex:486307] for opcode,name in [('f4','DELEGATECALL'),('f1','CALL'),('ff','SELFDESTRUCT'),('f2','CALLCODE')]:
[codex:486307] print(name, hexdata.lower().count(opcode))
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 25ms:
[codex:486307] len bytes 6690
[codex:486307] DELEGATECALL 4
[codex:486307] CALL 25
[codex:486307] SELFDESTRUCT 947
[codex:486307] CALLCODE 22
[codex:486307]
[codex:486307] thinking
[codex:486307] **Planning EVM disassembler implementation**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:486307] # get runtime hex after 'FILE: runtime_bytecode.hex'
[codex:486307] # naive: find first '0x'
[codex:486307] if '0x' in hexdata:
[codex:486307] hexdata=hexdata.split('0x',1)[1]
[codex:486307] # keep only hex chars
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] # decode bytes
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # opcode names
[codex:486307] opnames={}
[codex:486307] # build mapping
[codex:486307] for i in range(0x00,0x60):
[codex:486307] opnames[i]='STOP' if i==0x00 else ''
[codex:486307] # Fill base
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] opnames.update(base)
[codex:486307] # Push opcodes
[codex:486307] for i in range(0x60,0x80):
[codex:486307] opnames[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] opnames[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] opnames[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] opnames[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] # disassemble
[codex:486307] ops=[]
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=opnames.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] ops.append((pc,name,data))
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] ops.append((pc,name,None))
[codex:486307] pc+=1
[codex:486307] # find CALL/DELEGATECALL/SELFDESTRUCT positions
[codex:486307] for target in ('CALL','DELEGATECALL','SELFDESTRUCT','CALLCODE'):
[codex:486307] poss=[pc for pc,name,data in ops if name==target]
[codex:486307] print(target, len(poss), poss[:10])
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 34ms:
[codex:486307] CALL 1 [5477]
[codex:486307] DELEGATECALL 0 []
[codex:486307] SELFDESTRUCT 0 []
[codex:486307] CALLCODE 0 []
[codex:486307]
[codex:486307] thinking
[codex:486307] **Inspecting CALL opcode near pc 5477**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:486307] hexdata=hexdata.split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # disassemble near pc
[codex:486307] start=5400; end=5560
[codex:486307] # create op mapping
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] pc=0
[codex:486307] ops=[]
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] ops.append((pc,name,data))
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] ops.append((pc,name,None))
[codex:486307] pc+=1
[codex:486307]
[codex:486307] for pc,name,data in ops:
[codex:486307] if start<=pc<=end:
[codex:486307] if data is None:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] else:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 25ms:
[codex:486307] 1518: PUSH1 0x44
[codex:486307] 151a: SWAP1
[codex:486307] 151b: SWAP2
[codex:486307] 151c: ADD
[codex:486307] 151d: SWAP2
[codex:486307] 151e: SWAP1
[codex:486307] 151f: DUP6
[codex:486307] 1520: ADD
[codex:486307] 1521: SWAP1
[codex:486307] 1522: DUP1
[codex:486307] 1523: DUP4
[codex:486307] 1524: DUP4
[codex:486307] 1525: PUSH1 0x00
[codex:486307] 1527: DUP4
[codex:486307] 1528: ISZERO
[codex:486307] 1529: PUSH2 0x1087
[codex:486307] 152c: JUMPI
[codex:486307] 152d: DUP2
[codex:486307] 152e: DUP2
[codex:486307] 152f: ADD
[codex:486307]
[codex:486307] thinking
[codex:486307] **Examining CALL usage for Ether transfer**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read()
[codex:486307] hexdata=hexdata.split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # create op mapping
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] # disassemble region around 0x1460-0x1620
[codex:486307] start=0x1450; end=0x1620
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 27ms:
[codex:486307] 145e: DUP2
[codex:486307] 145f: MSTORE
[codex:486307] 1460: PUSH1 0x04
[codex:486307] 1462: ADD
[codex:486307] 1463: DUP1
[codex:486307] 1464: DUP1
[codex:486307] 1465: PUSH1 0x20
[codex:486307] 1467: ADD
[codex:486307] 1468: DUP3
[codex:486307] 1469: DUP2
[codex:486307] 146a: SUB
[codex:486307] 146b: DUP3
[codex:486307] 146c: MSTORE
[codex:486307] 146d: PUSH1 0x21
[codex:486307] 146f: DUP2
[codex:486307] 1470: MSTORE
[codex:486307] 1471: PUSH1 0x20
[codex:486307] 1473: ADD
[codex:486307] 1474: DUP1
[codex:486307] 1475: PUSH2 0x1915
[codex:486307]
[codex:486307] thinking
[codex:486307] **Analyzing CALL and dispatch logic**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] # disassemble first 0x1c0 bytes
[codex:486307] pc=0
[codex:486307] end=0x1c0
[codex:486307] while pc<end:
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 24ms:
[codex:486307] 0000: PUSH1 0x80
[codex:486307] 0002: PUSH1 0x40
[codex:486307] 0004: MSTORE
[codex:486307] 0005: PUSH1 0x04
[codex:486307] 0007: CALLDATASIZE
[codex:486307] 0008: LT
[codex:486307] 0009: PUSH2 0x0148
[codex:486307] 000c: JUMPI
[codex:486307] 000d: PUSH1 0x00
[codex:486307] 000f: CALLDATALOAD
[codex:486307] 0010: PUSH1 0xe0
[codex:486307] 0012: SHR
[codex:486307] 0013: DUP1
[codex:486307] 0014: PUSH4 0x679aefce
[codex:486307] 0019: GT
[codex:486307] 001a: PUSH2 0x00c0
[codex:486307] 001d: JUMPI
[codex:486307] 001e: DUP1
[codex:486307] 001f: PUSH4 0xa457c2d7
[codex:486307] 0024: GT
[codex:486307]
[codex:486307] thinking
[codex:486307] **Mapping function selectors**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import hashlib
[codex:486307] sigs=['burn(uint256)','burnFrom(address,uint256)','mint(address,uint256)','increaseAllowance(address,uint256)','decreaseAllowance(address,uint256)','transfer(address,uint256)','transferFrom(address,uint256)','name()','symbol()','decimals()','totalSupply()','allowance(address,address)','balanceOf(address)','owner()','renounceOwnership()','transferOwnership(address)','pause()','unpause()','permit(address,address,uint256,uint256,uint8,bytes32,bytes32)','DOMAIN_SEPARATOR()','nonces(address)','withdraw(uint256)','deposit()','sell(uint256)','buy()','setRate(uint256)','setExchangeRate(uint256)','setExchangeRate(int256)','getRate()','rate()','buyTokens()','sellTokens(uint256)','withdrawEther(uint256)','withdraw()','buy(uint256)']
[codex:486307] # compute selector
[codex:486307] for s in sigs:
[codex:486307] sel=hashlib.sha3_256(s.encode()).hexdigest()[:8]
[codex:486307] if sel in ['42966c68','39509351','2f13b60c','679aefce','903d8e77','9975038c','a457c2d7','aa271e1a','f05fcdf2']:
[codex:486307] print(s, sel)
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 31ms:
[codex:486307]
[codex:486307]
[codex:486307] thinking
[codex:486307] **Planning function and event analysis**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import hashlib
[codex:486307] cands=['Deposit(address,uint256)','Deposit(address,address,uint256)','Deposited(address,uint256)','Transfer(address,address,uint256)','Approval(address,address,uint256)','Withdraw(address,uint256)','Withdrawal(address,uint256)','Bought(address,uint256)','Sold(address,uint256)','Buy(address,uint256)','Sell(address,uint256)','Burn(address,uint256)','Mint(address,uint256)','Donation(address,uint256)','Received(address,uint256)','Payment(address,uint256)']
[codex:486307] for s in cands:
[codex:486307] sel=hashlib.sha3_256(s.encode()).hexdigest()
[codex:486307] if sel.startswith('dd4e7375a5084e0c4cc4e1bfc7ba67beb26a368120ea78d2e0948123910bbf7c'):
[codex:486307] print('match',s)
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 36ms:
[codex:486307]
[codex:486307]
[codex:486307] thinking
[codex:486307] **Analyzing function signatures and storage writes**
[codex:486307]
[codex:486307] I'm working through the function signatures to match known patterns and compiling instructions to locate where storage writes (SSTORE) happen, aiming to identify any unprotected critical state changes that could hint at vulnerabilities. I'll also consider using tooling or scripts to dissect calldata and access control around these writes.
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # disassemble into (pc, op, data)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] ops=[]
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] ops.append((pc,name,data))
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] ops.append((pc,name,None))
[codex:486307] pc+=1
[codex:486307]
[codex:486307] # find SSTOREs
[codex:486307] for i,(pc,name,data) in enumerate(ops):
[codex:486307] if name=='SSTORE':
[codex:486307] # show few ops around
[codex:486307] start=max(0,i-8); end=min(len(ops),i+6)
[codex:486307] print('--- SSTORE at',hex(pc),'---')
[codex:486307] for j in range(start,end):
[codex:486307] pc2,name2,data2=ops[j]
[codex:486307] if data2 is None:
[codex:486307] print(f\"{pc2:04x}: {name2}\")
[codex:486307] else:
[codex:486307] print(f\"{pc2:04x}: {name2} 0x{data2.hex()}\")
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 44ms:
[codex:486307] --- SSTORE at 0xe07 ---
[codex:486307] 0dff: DUP3
[codex:486307] 0e00: MSTORE
[codex:486307] 0e01: SWAP2
[codex:486307] 0e02: DUP3
[codex:486307] 0e03: SWAP1
[codex:486307] 0e04: SHA3
[codex:486307] 0e05: DUP6
[codex:486307] 0e06: SWAP1
[codex:486307] 0e07: SSTORE
[codex:486307] 0e08: DUP2
[codex:486307] 0e09: MLOAD
[codex:486307] 0e0a: DUP6
[codex:486307] 0e0b: DUP2
[codex:486307] 0e0c: MSTORE
[codex:486307] --- SSTORE at 0xf9b ---
[codex:486307] 0f92: MSTORE
[codex:486307] 0f93: PUSH1 0x40
[codex:486307] 0f95: DUP1
[codex:486307] 0f96: DUP3
[codex:486307]
[codex:486307] thinking
[codex:486307] **Mapping SSTOREs to functions**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] # parse into list
[codex:486307] ops=[]
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] ops.append((pc,name,data))
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] ops.append((pc,name,None))
[codex:486307] pc+=1
[codex:486307]
[codex:486307] entry_points=[0x018b,0x0215,0x026f,0x0296,0x02e6,0x02fb,0x0326,0x036c,0x03b2,0x03dc,0x0420,0x0460,0x04a4,0x04b9,0x04ce,0x0514,0x055a,0x059a,0x05e2]
[codex:486307]
[codex:486307] # build dict for quick access
[codex:486307] op_index={pc:i for i,(pc,_,_) in enumerate(ops)}
[codex:486307]
[codex:486307] def print_ops(start,count=40):
[codex:486307] if start not in op_index:
[codex:486307] print('start not found',hex(start));return
[codex:486307] i=op_index[start]
[codex:486307] print('--- entry',hex(start),'---')
[codex:486307] for pc,name,data in ops[i:i+count]:
[codex:486307] if data is None:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] else:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307]
[codex:486307] for ep in entry_points:
[codex:486307] print_ops(ep,45)
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 48ms:
[codex:486307] --- entry 0x18b ---
[codex:486307] 018b: JUMPDEST
[codex:486307] 018c: CALLVALUE
[codex:486307] 018d: DUP1
[codex:486307] 018e: ISZERO
[codex:486307] 018f: PUSH2 0x0197
[codex:486307] 0192: JUMPI
[codex:486307] 0193: PUSH1 0x00
[codex:486307] 0195: DUP1
[codex:486307] 0196: REVERT
[codex:486307] 0197: JUMPDEST
[codex:486307] 0198: POP
[codex:486307] 0199: PUSH2 0x01a0
[codex:486307] 019c: PUSH2 0x0628
[codex:486307] 019f: JUMP
[codex:486307] 01a0: JUMPDEST
[codex:486307] 01a1: PUSH1 0x40
[codex:486307] 01a3: DUP1
[codex:486307] 01a4: MLOAD
[codex:486307] 01a5: PUSH1 0x20
[codex:486307]
[codex:486307] thinking
[codex:486307] **Investigating function selectors**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] # disassemble into list
[codex:486307] ops=[]
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] ops.append((pc,name,data))
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] ops.append((pc,name,None))
[codex:486307] pc+=1
[codex:486307]
[codex:486307] op_index={pc:i for i,(pc,_,_) in enumerate(ops)}
[codex:486307]
[codex:486307] internal=[0x0628,0x06dc,0x06fa,0x0700,0x0755,0x0783,0x078c,0x07ed,0x08cb,0x0999,0x09ca,0x09f2,0x0afe,0x0b7d,0x0ba5,0x0c20,0x0c2d,0x0c38,0x0c70]
[codex:486307]
[codex:486307] for start in internal:
[codex:486307] if start not in op_index:
[codex:486307] print('missing',hex(start));
[codex:486307] continue
[codex:486307] print('\\n--- internal',hex(start),'---')
[codex:486307] i=op_index[start]
[codex:486307] for pc,name,data in ops[i:i+50]:
[codex:486307] if data is None:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] else:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 56ms:
[codex:486307]
[codex:486307] --- internal 0x628 ---
[codex:486307] 0628: JUMPDEST
[codex:486307] 0629: PUSH1 0x03
[codex:486307] 062b: DUP1
[codex:486307] 062c: SLOAD
[codex:486307] 062d: PUSH1 0x40
[codex:486307] 062f: DUP1
[codex:486307] 0630: MLOAD
[codex:486307] 0631: PUSH1 0x20
[codex:486307] 0633: PUSH1 0x1f
[codex:486307] 0635: PUSH1 0x02
[codex:486307] 0637: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
[codex:486307] 0658: PUSH2 0x0100
[codex:486307] 065b: PUSH1 0x01
[codex:486307] 065d: DUP9
[codex:486307] 065e: AND
[codex:486307] 065f: ISZERO
[codex:486307] 0660: MUL
[codex:486307] 0661: ADD
[codex:486307]
[codex:486307] thinking
[codex:486307] **Inspecting access control function**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # opcode mapping
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] start=0x1120; end=0x11b0
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 49ms:
[codex:486307] 112e: PUSH1 0x44
[codex:486307] 1130: DUP3
[codex:486307] 1131: ADD
[codex:486307] 1132: MSTORE
[codex:486307] 1133: SWAP1
[codex:486307] 1134: MLOAD
[codex:486307] 1135: SWAP1
[codex:486307] 1136: DUP2
[codex:486307] 1137: SWAP1
[codex:486307] 1138: SUB
[codex:486307] 1139: PUSH1 0x64
[codex:486307] 113b: ADD
[codex:486307] 113c: SWAP1
[codex:486307] 113d: REVERT
[codex:486307] 113e: JUMPDEST
[codex:486307] 113f: SWAP4
[codex:486307] 1140: SWAP3
[codex:486307] 1141: POP
[codex:486307] 1142: POP
[codex:486307] 1143: POP
[codex:486307]
[codex:486307] thinking
[codex:486307] **Analyzing access control and ETH transfer calls**
[codex:486307]
[codex:486307] I'm examining a hardcoded owner address check at 0x1145 that restricts functions like minting and setting exchange rates to the deployer. I want to identify which functions use this check and verify if any ETH transfer functions bypass caller verification or token burning, focusing on offsets 0x14d5 and 0x1565 to assess potential withdrawal vulnerabilities.
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # find references to 0x14d5 and 0x153c
[codex:486307] for target in [0x14d5,0x153c]:
[codex:486307] b=target.to_bytes(2,'big')
[codex:486307] # find push2 immediate occurrences
[codex:486307] pat=b\"\\x61\"+b
[codex:486307] idxs=[i for i in range(len(code)-3) if code[i]==0x61 and code[i+1:i+3]==b]
[codex:486307] print('target',hex(target),'refs',idxs[:10],'count',len(idxs))
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 40ms:
[codex:486307] target 0x14d5 refs [5325] count 1
[codex:486307] target 0x153c refs [5336] count 1
[codex:486307]
[codex:486307] thinking
[codex:486307] **Tracing function references**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # find all push2 targets in code
[codex:486307] refs={}
[codex:486307] for i in range(len(code)-2):
[codex:486307] if code[i]==0x61: # PUSH2
[codex:486307] target=(code[i+1]<<8)|code[i+2]
[codex:486307] refs.setdefault(target,[]).append(i)
[codex:486307] # print some references for targets around 0x14xx
[codex:486307] for t in sorted([k for k in refs if 0x1400<=k<=0x160a]):
[codex:486307] print(hex(t),len(refs[t]),refs[t][:5])
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 37ms:
[codex:486307] 0x1417 2 [2380, 2392]
[codex:486307] 0x1426 1 [5147]
[codex:486307] 0x1433 1 [5166]
[codex:486307] 0x148a 1 [2404]
[codex:486307] 0x14cc 1 [2442]
[codex:486307] 0x14d5 1 [5325]
[codex:486307] 0x153c 1 [5336]
[codex:486307] 0x1595 1 [5488]
[codex:486307] 0x159a 1 [5521]
[codex:486307] 0x160a 1 [5536]
[codex:486307]
[codex:486307] thinking
[codex:486307] **Examining memory address references**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] start=0x2360; end=0x2480
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 40ms:
[codex:486307]
[codex:486307]
[codex:486307] thinking
[codex:486307] **Clarifying code length and offsets**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] start=0x960; end=0x9c5
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 40ms:
[codex:486307] 0964: PUSH2 0x148a
[codex:486307] 0967: AND
[codex:486307] 0968: JUMP
[codex:486307] 0969: JUMPDEST
[codex:486307] 096a: SWAP1
[codex:486307] 096b: POP
[codex:486307] 096c: PUSH2 0x098e
[codex:486307] 096f: CALLER
[codex:486307] 0970: DUP3
[codex:486307] 0971: PUSH1 0x40
[codex:486307] 0973: MLOAD
[codex:486307] 0974: DUP1
[codex:486307] 0975: PUSH1 0x60
[codex:486307] 0977: ADD
[codex:486307] 0978: PUSH1 0x40
[codex:486307] 097a: MSTORE
[codex:486307] 097b: DUP1
[codex:486307] 097c: PUSH1 0x22
[codex:486307] 097e: DUP2
[codex:486307] 097f: MSTORE
[codex:486307]
[codex:486307] thinking
[codex:486307] **Analyzing internal function calls for vulnerabilities**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] start=0x08cb; end=0x0998
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 47ms:
[codex:486307] 08cb: JUMPDEST
[codex:486307] 08cc: PUSH1 0x00
[codex:486307] 08ce: PUSH2 0x08d5
[codex:486307] 08d1: PUSH2 0x0755
[codex:486307] 08d4: JUMP
[codex:486307] 08d5: JUMPDEST
[codex:486307] 08d6: PUSH2 0x08e1
[codex:486307] 08d9: JUMPI
[codex:486307] 08da: POP
[codex:486307] 08db: PUSH1 0x00
[codex:486307] 08dd: PUSH2 0x0994
[codex:486307] 08e0: JUMP
[codex:486307] 08e1: JUMPDEST
[codex:486307] 08e2: PUSH2 0x08eb
[codex:486307] 08e5: CALLER
[codex:486307] 08e6: DUP4
[codex:486307] 08e7: PUSH2 0x12c1
[codex:486307] 08ea: JUMP
[codex:486307] 08eb: JUMPDEST
[codex:486307] 08ec: PUSH1 0x06
[codex:486307]
[codex:486307] thinking
[codex:486307] **Analyzing storage layout and internal functions**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] start=0x12a0; end=0x1320
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 43ms:
[codex:486307] 12b5: SWAP3
[codex:486307] 12b6: DUP2
[codex:486307] 12b7: SWAP1
[codex:486307] 12b8: SUB
[codex:486307] 12b9: SWAP1
[codex:486307] 12ba: SWAP2
[codex:486307] 12bb: ADD
[codex:486307] 12bc: SWAP1
[codex:486307] 12bd: LOG4
[codex:486307] 12be: POP
[codex:486307] 12bf: POP
[codex:486307] 12c0: JUMP
[codex:486307] 12c1: JUMPDEST
[codex:486307] 12c2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:486307] 12d7: DUP3
[codex:486307] 12d8: AND
[codex:486307] 12d9: PUSH2 0x132d
[codex:486307] 12dc: JUMPI
[codex:486307] 12dd: PUSH1 0x40
[codex:486307] 12df: MLOAD
[codex:486307]
[codex:486307] thinking
[codex:486307] **Continuing to gather information**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] start=0x12c0; end=0x13e0
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 49ms:
[codex:486307] 12c0: JUMP
[codex:486307] 12c1: JUMPDEST
[codex:486307] 12c2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:486307] 12d7: DUP3
[codex:486307] 12d8: AND
[codex:486307] 12d9: PUSH2 0x132d
[codex:486307] 12dc: JUMPI
[codex:486307] 12dd: PUSH1 0x40
[codex:486307] 12df: MLOAD
[codex:486307] 12e0: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
[codex:486307] 1301: DUP2
[codex:486307] 1302: MSTORE
[codex:486307] 1303: PUSH1 0x04
[codex:486307] 1305: ADD
[codex:486307] 1306: DUP1
[codex:486307] 1307: DUP1
[codex:486307] 1308: PUSH1 0x20
[codex:486307] 130a: ADD
[codex:486307] 130b: DUP3
[codex:486307] 130c: DUP2
[codex:486307]
[codex:486307] thinking
[codex:486307] **Analyzing burn and sell functions**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] start=0x07ed; end=0x08b0
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 43ms:
[codex:486307] 07ed: JUMPDEST
[codex:486307] 07ee: PUSH1 0x00
[codex:486307] 07f0: PUSH2 0x07f8
[codex:486307] 07f3: CALLER
[codex:486307] 07f4: PUSH2 0x1145
[codex:486307] 07f7: JUMP
[codex:486307] 07f8: JUMPDEST
[codex:486307] 07f9: PUSH2 0x084d
[codex:486307] 07fc: JUMPI
[codex:486307] 07fd: PUSH1 0x40
[codex:486307] 07ff: MLOAD
[codex:486307] 0800: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
[codex:486307] 0821: DUP2
[codex:486307] 0822: MSTORE
[codex:486307] 0823: PUSH1 0x04
[codex:486307] 0825: ADD
[codex:486307] 0826: DUP1
[codex:486307] 0827: DUP1
[codex:486307] 0828: PUSH1 0x20
[codex:486307] 082a: ADD
[codex:486307]
[codex:486307] thinking
[codex:486307] **Continuing process**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] start=0x0880; end=0x08c8
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 50ms:
[codex:486307] 0880: DUP2
[codex:486307] 0881: MSTORE
[codex:486307] 0882: PUSH1 0x20
[codex:486307] 0884: PUSH1 0x04
[codex:486307] 0886: DUP3
[codex:486307] 0887: ADD
[codex:486307] 0888: MSTORE
[codex:486307] 0889: PUSH1 0x1f
[codex:486307] 088b: PUSH1 0x24
[codex:486307] 088d: DUP3
[codex:486307] 088e: ADD
[codex:486307] 088f: MSTORE
[codex:486307] 0890: PUSH32 0x7468697320746f6b656e20636f6e747261637420686173206578706972656400
[codex:486307] 08b1: PUSH1 0x44
[codex:486307] 08b3: DUP3
[codex:486307] 08b4: ADD
[codex:486307] 08b5: MSTORE
[codex:486307] 08b6: SWAP1
[codex:486307] 08b7: MLOAD
[codex:486307] 08b8: SWAP1
[codex:486307]
[codex:486307] thinking
[codex:486307] **Decoding contract functions and permissions**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import hashlib
[codex:486307] for s in ['increaseAllowance(address,uint256)','decreaseAllowance(address,uint256)','burn(uint256)','burnFrom(address,uint256)','sell(uint256)','buy()','buyTokens()','redeem(uint256)','sellTokens(uint256)','withdraw(uint256)','withdraw()','setRate(uint256)','setExchangeRate(uint256)','setExchangeRate(int256)','exchangeRate()','rate()','getExchangeRate()','expiry()','isExpired()','pause()','unpause()','setPaused(bool)','setPaused(uint256)','setExpiry(uint256)','setExpiration(uint256)','setExpiryTime(uint256)','getExpiry()','owner()','admin()','deployer()','symbol()','name()']:
[codex:486307] sel=hashlib.sha3_256(s.encode()).hexdigest()[:8]
[codex:486307] if sel in ['39509351','2f13b60c','679aefce','903d8e77','9975038c','a457c2d7','aa271e1a','f05fcdf2','42966c68']:
[codex:486307] print(s, sel)
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 31ms:
[codex:486307]
[codex:486307]
[codex:486307] thinking
[codex:486307] **Analyzing function selectors and vulnerabilities**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] start=0x16f0; end=0x1760
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 37ms:
[codex:486307] 16fc: MUL
[codex:486307] 16fd: SWAP3
[codex:486307] 16fe: DUP2
[codex:486307] 16ff: AND
[codex:486307] 1700: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000
[codex:486307] 1721: SWAP1
[codex:486307] 1722: SWAP5
[codex:486307] 1723: AND
[codex:486307] 1724: SWAP4
[codex:486307] 1725: SWAP1
[codex:486307] 1726: SWAP4
[codex:486307] 1727: OR
[codex:486307] 1728: SWAP1
[codex:486307] 1729: SWAP3
[codex:486307] 172a: AND
[codex:486307] 172b: OR
[codex:486307] 172c: SWAP1
[codex:486307] 172d: SSTORE
[codex:486307] 172e: JUMP
[codex:486307] 172f: JUMPDEST
[codex:486307]
[codex:486307] thinking
[codex:486307] **Investigating storage slot updates**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] refs={}
[codex:486307] for i in range(len(code)-2):
[codex:486307] if code[i]==0x61:
[codex:486307] target=(code[i+1]<<8)|code[i+2]
[codex:486307] refs.setdefault(target,[]).append(i)
[codex:486307] for t in sorted([k for k in refs if 0x1600<=k<=0x1730]):
[codex:486307] print(hex(t),len(refs[t]),refs[t][:5])
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 39ms:
[codex:486307] 0x160a 1 [5536]
[codex:486307] 0x165d 1 [2720]
[codex:486307] 0x16c9 1 [5749]
[codex:486307] 0x172f 3 [3868, 4622, 4917]
[codex:486307]
[codex:486307] thinking
[codex:486307] **Analyzing internal function references in bytecode**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] start=0x160a; end=0x16f5
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 34ms:
[codex:486307] 160a: JUMPDEST
[codex:486307] 160b: PUSH1 0x40
[codex:486307] 160d: DUP1
[codex:486307] 160e: MLOAD
[codex:486307] 160f: DUP5
[codex:486307] 1610: DUP2
[codex:486307] 1611: MSTORE
[codex:486307] 1612: SWAP1
[codex:486307] 1613: MLOAD
[codex:486307] 1614: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:486307] 1629: DUP7
[codex:486307] 162a: AND
[codex:486307] 162b: SWAP2
[codex:486307] 162c: ADDRESS
[codex:486307] 162d: SWAP2
[codex:486307] 162e: PUSH32 0xdd4e7375a5084e0c4cc4e1bfc7ba67beb26a368120ea78d2e0948123910bbf7c
[codex:486307] 164f: SWAP2
[codex:486307] 1650: DUP2
[codex:486307] 1651: SWAP1
[codex:486307] 1652: SUB
[codex:486307]
[codex:486307] thinking
[codex:486307] **Continuing to display output**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] start=0x16c9; end=0x1735
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 26ms:
[codex:486307] 16c9: JUMPDEST
[codex:486307] 16ca: DUP1
[codex:486307] 16cb: MLOAD
[codex:486307] 16cc: PUSH1 0x06
[codex:486307] 16ce: DUP1
[codex:486307] 16cf: SLOAD
[codex:486307] 16d0: PUSH1 0x20
[codex:486307] 16d2: SWAP1
[codex:486307] 16d3: SWAP4
[codex:486307] 16d4: ADD
[codex:486307] 16d5: MLOAD
[codex:486307] 16d6: PUSH16 0xffffffffffffffffffffffffffffffff
[codex:486307] 16e7: SWAP1
[codex:486307] 16e8: DUP2
[codex:486307] 16e9: AND
[codex:486307] 16ea: PUSH17 0x0100000000000000000000000000000000
[codex:486307] 16fc: MUL
[codex:486307] 16fd: SWAP3
[codex:486307] 16fe: DUP2
[codex:486307] 16ff: AND
[codex:486307]
[codex:486307] thinking
[codex:486307] **Analyzing internal function behavior**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] start=0x0a40; end=0x0ab0
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 25ms:
[codex:486307] 0a40: PUSH1 0x2e
[codex:486307] 0a42: SWAP2
[codex:486307] 0a43: CODECOPY
[codex:486307] 0a44: PUSH1 0x40
[codex:486307] 0a46: ADD
[codex:486307] 0a47: SWAP2
[codex:486307] 0a48: POP
[codex:486307] 0a49: POP
[codex:486307] 0a4a: PUSH1 0x40
[codex:486307] 0a4c: MLOAD
[codex:486307] 0a4d: DUP1
[codex:486307] 0a4e: SWAP2
[codex:486307] 0a4f: SUB
[codex:486307] 0a50: SWAP1
[codex:486307] 0a51: REVERT
[codex:486307] 0a52: JUMPDEST
[codex:486307] 0a53: PUSH2 0x0a5a
[codex:486307] 0a56: PUSH2 0x0755
[codex:486307] 0a59: JUMP
[codex:486307] 0a5a: JUMPDEST
[codex:486307]
[codex:486307] thinking
[codex:486307] **Analyzing internal token contract functions**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] start=0x0e3d; end=0x0f90
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 27ms:
[codex:486307] 0e3d: JUMPDEST
[codex:486307] 0e3e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:486307] 0e53: DUP4
[codex:486307] 0e54: AND
[codex:486307] 0e55: PUSH2 0x0ea9
[codex:486307] 0e58: JUMPI
[codex:486307] 0e59: PUSH1 0x40
[codex:486307] 0e5b: MLOAD
[codex:486307] 0e5c: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
[codex:486307] 0e7d: DUP2
[codex:486307] 0e7e: MSTORE
[codex:486307] 0e7f: PUSH1 0x04
[codex:486307] 0e81: ADD
[codex:486307] 0e82: DUP1
[codex:486307] 0e83: DUP1
[codex:486307] 0e84: PUSH1 0x20
[codex:486307] 0e86: ADD
[codex:486307] 0e87: DUP3
[codex:486307] 0e88: DUP2
[codex:486307] 0e89: SUB
[codex:486307]
[codex:486307] thinking
[codex:486307] **Analyzing allowance mapping and transferFrom logic**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # opcode mapping
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 0x20:'SHA3',
[codex:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] start=0x0d40; end=0x0e20
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 29ms:
[codex:486307] 0d40: DUP3
[codex:486307] 0d41: DUP2
[codex:486307] 0d42: SUB
[codex:486307] 0d43: DUP3
[codex:486307] 0d44: MSTORE
[codex:486307] 0d45: PUSH1 0x24
[codex:486307] 0d47: DUP2
[codex:486307] 0d48: MSTORE
[codex:486307] 0d49: PUSH1 0x20
[codex:486307] 0d4b: ADD
[codex:486307] 0d4c: DUP1
[codex:486307] 0d4d: PUSH2 0x19a4
[codex:486307] 0d50: PUSH1 0x24
[codex:486307] 0d52: SWAP2
[codex:486307] 0d53: CODECOPY
[codex:486307] 0d54: PUSH1 0x40
[codex:486307] 0d56: ADD
[codex:486307] 0d57: SWAP2
[codex:486307] 0d58: POP
[codex:486307] 0d59: POP
[codex:486307]
[codex:486307] thinking
[codex:486307] **Analyzing approval and transferFrom logic**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # find ORIGIN opcode 0x32 positions
[codex:486307] positions=[i for i,b in enumerate(code) if b==0x32]
[codex:486307] print('ORIGIN positions',positions[:10],'count',len(positions))
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 28ms:
[codex:486307] ORIGIN positions [812, 4569, 6144, 6179, 6213, 6247, 6457, 6497, 6530, 6567] count 11
[codex:486307]
[codex:486307] thinking
[codex:486307] **Verifying opcode occurrences**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # opcode map for ORIGIN
[codex:486307] base={0x32:'ORIGIN'}
[codex:486307] # disassemble quickly to find ORIGIN
[codex:486307] pc=0
[codex:486307] positions=[]
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] if op==0x32:
[codex:486307] positions.append(pc)
[codex:486307] pc+=1
[codex:486307] elif 0x60<=op<=0x7f:
[codex:486307] pc+=1+(op-0x5f)
[codex:486307] else:
[codex:486307] pc+=1
[codex:486307] print('ORIGIN op positions',positions)
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 24ms:
[codex:486307] ORIGIN op positions [6144, 6179, 6457, 6603]
[codex:486307]
[codex:486307] thinking
[codex:486307] **Examining ORIGIN opcodes near 0x1800**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # opcode mapping for disasm
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] start=0x17f0; end=0x1860
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 30ms:
[codex:486307] 17f0: POP
[codex:486307] 17f1: POP
[codex:486307] 17f2: POP
[codex:486307] 17f3: POP
[codex:486307] 17f4: JUMP
[codex:486307] 17f5: JUMPDEST
[codex:486307] 17f6: ADDRESS
[codex:486307] 17f7: BALANCE
[codex:486307] 17f8: LT
[codex:486307] 17f9: ISZERO
[codex:486307] 17fa: SWAP1
[codex:486307] 17fb: JUMP
[codex:486307] 17fc: INVALID
[codex:486307] 17fd: GASLIMIT
[codex:486307] 17fe: MSTORE
[codex:486307] 17ff: NUMBER
[codex:486307] 1800: ORIGIN
[codex:486307] 1801: ADDRESS
[codex:486307] 1802: GASPRICE
[codex:486307] 1803: SHA3
[codex:486307]
[codex:486307] thinking
[codex:486307] **Analyzing potential token transfer exploits**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] start=0x0cf0; end=0x0d30
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 29ms:
[codex:486307] 0cf1: JUMP
[codex:486307] 0cf2: JUMPDEST
[codex:486307] 0cf3: CALLER
[codex:486307] 0cf4: SWAP1
[codex:486307] 0cf5: JUMP
[codex:486307] 0cf6: JUMPDEST
[codex:486307] 0cf7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:486307] 0d0c: DUP4
[codex:486307] 0d0d: AND
[codex:486307] 0d0e: PUSH2 0x0d62
[codex:486307] 0d11: JUMPI
[codex:486307] 0d12: PUSH1 0x40
[codex:486307] 0d14: MLOAD
[codex:486307] 0d15: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
[codex:486307]
[codex:486307] thinking
[codex:486307] **Analyzing internal helper functions and selector computation**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] try:
[codex:486307] import sha3
[codex:486307] print('sha3 module available')
[codex:486307] k=sha3.keccak_256(b'')
[codex:486307] print(k.hexdigest())
[codex:486307] except Exception as e:
[codex:486307] print('no sha3',e)
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 16ms:
[codex:486307] no sha3 No module named 'sha3'
[codex:486307]
[codex:486307] thinking
[codex:486307] **Checking for keccak implementation**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] try:
[codex:486307] from Crypto.Hash import keccak
[codex:486307] k=keccak.new(digest_bits=256)
[codex:486307] k.update(b'')
[codex:486307] print('keccak',k.hexdigest())
[codex:486307] except Exception as e:
[codex:486307] print('no crypto',e)
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 44ms:
[codex:486307] keccak c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470
[codex:486307]
[codex:486307] thinking
[codex:486307] **Preparing to compute function selectors**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] from Crypto.Hash import keccak
[codex:486307]
[codex:486307] def selector(sig):
[codex:486307] k=keccak.new(digest_bits=256)
[codex:486307] k.update(sig.encode())
[codex:486307] return k.hexdigest()[:8]
[codex:486307]
[codex:486307] cands=[
[codex:486307] 'burn(uint256)','burnFrom(address,uint256)','mint(address,uint256)','increaseAllowance(address,uint256)','decreaseAllowance(address,uint256)',
[codex:486307] 'sell(uint256)','sellAll()','sellAllTokens()','buyTokens()','buy()','redeem(uint256)','withdraw(uint256)','withdraw()','exchangeRate()','getExchangeRate()','setExchangeRate(uint256)','setExchangeRate(int256)','setRate(uint256)','setRate(int256)','rate()','expiry()','setExpiry(uint256)','setExpiration(uint256)','isExpired()','paused()','pause()','unpause()','owner()','admin()','deployer()','tokenExpiry()','setTokenExpiry(uint256)','getTokenExpiry()','buyTokens(uint256)', 'sellTokens(uint256)','redeemTokens(uint256)','claim(uint256)','purchase(uint256)','cashout(uint256)','withdrawEther(uint256)','withdrawEther()','sellForETH(uint256)','redeemForETH(uint256)','exchange(uint256)'
[codex:486307] ]
[codex:486307] # known selectors in contract
[codex:486307] selectors={'39509351','2f13b60c','679aefce','903d8e77','9975038c','a457c2d7','aa271e1a','f05fcdf2','42966c68'}
[codex:486307] for s in cands:
[codex:486307] sel=selector(s)
[codex:486307] if sel in selectors:
[codex:486307] print(s,sel)
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 41ms:
[codex:486307] burn(uint256) 42966c68
[codex:486307] increaseAllowance(address,uint256) 39509351
[codex:486307] decreaseAllowance(address,uint256) a457c2d7
[codex:486307] isExpired() 2f13b60c
[codex:486307]
[codex:486307] thinking
[codex:486307] **Analyzing function selectors and behaviors**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] from Crypto.Hash import keccak
[codex:486307]
[codex:486307] def selector(sig):
[codex:486307] k=keccak.new(digest_bits=256)
[codex:486307] k.update(sig.encode())
[codex:486307] return k.hexdigest()[:8]
[codex:486307]
[codex:486307] # brute for some guesses
[codex:486307] cands=[
[codex:486307] 'getExchangeInfo()','exchangeInfo()','getExchangeRate()','exchangeRate()','getRate()','rate()','getRateAndExpiry()','rateAndExpiry()','exchangeRateAndExpiry()','exchangeRateExpiry()','getExchange()','exchange()','exchangeRateAndExpiry()','getExpiryAndRate()','expiryAndRate()',
[codex:486307] 'getPackedData()','packedData()','getConfig()','config()','getSettings()','settings()','getRateAndExpiration()','rateAndExpiration()','getExpirationAndRate()','expirationAndRate()',
[codex:486307] 'getRateAndExpire()','rateAndExpire()','getRateAndDeadline()','rateAndDeadline()','deadlineAndRate()',
[codex:486307] ]
[codex:486307] sel_target='679aefce'
[codex:486307] for s in cands:
[codex:486307] if selector(s)==sel_target:
[codex:486307] print('match',s)
[codex:486307] break
[codex:486307] else:
[codex:486307] print('no match')
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 42ms:
[codex:486307] match getRate()
[codex:486307]
[codex:486307] thinking
[codex:486307] **Analyzing getRate() return values**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] from Crypto.Hash import keccak
[codex:486307]
[codex:486307] def selector(sig):
[codex:486307] k=keccak.new(digest_bits=256)
[codex:486307] k.update(sig.encode())
[codex:486307] return k.hexdigest()[:8]
[codex:486307]
[codex:486307] selectors={'903d8e77','9975038c','aa271e1a','f05fcdf2'}
[codex:486307] # guess list for each
[codex:486307] cands=[
[codex:486307] 'setRate(uint256)','setRate(uint128,uint128)','setRate(uint256,uint256)','setRate(int256)','setRate(int128,int128)','setRate(uint128)','setRate(int128)','setRateAndExpiry(uint256,uint256)','setRateAndExpiry(uint128,uint128)','setRateAndExpiry(int128,int128)','setRateAndExpiry(int256,int256)',
[codex:486307] 'setExchangeRate(uint256)','setExchangeRate(uint256,uint256)','setExchangeRate(uint128,uint128)','setExchangeRate(int256)','setExchangeRate(int256,int256)','setExchangeRate(int128,int128)',
[codex:486307] 'setExpiry(uint256)','setExpiration(uint256)','setExpirationTime(uint256)','setExpiryTime(uint256)','setDeadline(uint256)','setMaturity(uint256)',
[codex:486307] 'expiry()','expiration()','expires()','getExpiry()','getExpiration()','getMaturity()','maturity()','deadline()',
[codex:486307] 'redeem(uint256)','redeemAll()','burnAll()','burnAndRedeem(uint256)','redeemForETH(uint256)','withdrawEther(uint256)','withdraw(uint256)','sell(uint256)','sellAll()','cashout(uint256)',
[codex:486307] 'buy(uint256)','buy()','buyTokens()','buyTokens(uint256)','purchase(uint256)','purchase()',
[codex:486307] 'getOwner()','owner()','deployer()', 'tokenOwner()',
[codex:486307] 'allowance(address,address)',
[codex:486307] 'exchangeRate()','rate()','rateNumerator()','rateDenominator()',
[codex:486307] 'getRateNumerator()','getRateDenominator()','getRateInfo()','getExchangeRateInfo()','getRateDetails()','getRateAndFee()','feeRate()','fee()',
[codex:486307] 'getSupplyCap()','cap()','totalSupplyCap()',
[codex:486307] ]
[codex:486307]
[codex:486307] for s in cands:
[codex:486307] sel=selector(s)
[codex:486307] if sel in selectors:
[codex:486307] print(s, sel)
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 40ms:
[codex:486307] burnAll() 9975038c
[codex:486307]
[codex:486307] thinking
[codex:486307] **Mapping remaining selectors**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] from Crypto.Hash import keccak
[codex:486307]
[codex:486307] def sel(sig):
[codex:486307] k=keccak.new(digest_bits=256); k.update(sig.encode()); return k.hexdigest()[:8]
[codex:486307]
[codex:486307] # candidate signatures for selector 0x903d8e77 and others
[codex:486307] selectors={'903d8e77','aa271e1a','f05fcdf2'}
[codex:486307]
[codex:486307] cands=set()
[codex:486307] # setRate variations
[codex:486307] names=['setRate','setExchangeRate','setRateAndExpiry','setRateAndExpiration','setRateAndExpirationTime','setRateAndExpiryTime','setRateInfo','setRateDetails','setRateParams','setRateAndMaturity','setRateAndDeadline','setRateAndExpiryTime','setRateData','setSaleParams','setSaleInfo','setConfig','setSettings','setParams','setConfigParams','setExchange','setExchangeInfo','setRedeemRate','setRedeemInfo']
[codex:486307] params=['uint256','uint128','uint64','int256','int128']
[codex:486307] # 2 params combos
[codex:486307] for name in names:
[codex:486307] for p1 in params:
[codex:486307] for p2 in params:
[codex:486307] cands.add(f\"{name}({p1},{p2})\")
[codex:486307] for p1 in params:
[codex:486307] cands.add(f\"{name}({p1})\")
[codex:486307]
[codex:486307] # expiry getters/setters
[codex:486307] names2=['expiry','expiration','expires','getExpiry','getExpiration','getMaturity','maturity','deadline','getDeadline','getExpiryTime','expiryTime','expirationTime','maturityTime']
[codex:486307] for n in names2:
[codex:486307] cands.add(f\"{n}()\")
[codex:486307]
[codex:486307] # burn/sell/redeem etc
[codex:486307] names3=['redeem','sell','cashout','withdraw','withdrawEther','sellTokens','redeemTokens','redeemForETH','sellForETH','burnForETH','burnRedeem','burnAndRedeem','exchange','swap','liquidate']
[codex:486307] for n in names3:
[codex:486307] cands.add(f\"{n}(uint256)\")
[codex:486307] cands.add(f\"{n}()\")
[codex:486307]
[codex:486307] # buy/purchase
[codex:486307] names4=['buy','buyTokens','purchase','mintForETH','deposit','swapIn','swapOut']
[codex:486307] for n in names4:
[codex:486307] cands.add(f\"{n}(uint256)\")
[codex:486307] cands.add(f\"{n}()\")
[codex:486307]
[codex:486307] # rate getters
[codex:486307] names5=['getRate','rate','exchangeRate','getExchangeRate','rateInfo','getRateInfo','getRateDetails','getRateParams','rateParams','rateNumerator','rateDenominator','exchangeRateNumerator','exchangeRateDenominator']
[codex:486307] for n in names5:
[codex:486307] cands.add(f\"{n}()\")
[codex:486307]
[codex:486307] # burnAll etc
[codex:486307] for n in ['burnAll','redeemAll','sellAll','withdrawAll','cashoutAll','burnAllTokens','redeemAllTokens']:
[codex:486307] cands.add(f\"{n}()\")
[codex:486307]
[codex:486307] # allowances etc
[codex:486307] for n in ['increaseAllowance','decreaseAllowance']:
[codex:486307] cands.add(f\"{n}(address,uint256)\")
[codex:486307]
[codex:486307] # owner/admin/deployer
[codex:486307] for n in ['owner','admin','deployer','getOwner','getAdmin','getDeployer','issuer','issuerAddress','ownerAddress']:
[codex:486307] cands.add(f\"{n}()\")
[codex:486307]
[codex:486307] # setOwner
[codex:486307] for n in ['setOwner','transferOwnership','changeOwner','setAdmin','setDeployer','setIssuer']:
[codex:486307] cands.add(f\"{n}(address)\")
[codex:486307]
[codex:486307] # permit
[codex:486307] cands.add('permit(address,address,uint256,uint256,uint8,bytes32,bytes32)')
[codex:486307]
[codex:486307] for sig in sorted(cands):
[codex:486307] s=sel(sig)
[codex:486307] if s in selectors:
[codex:486307] print(sig, s)
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 48ms:
[codex:486307]
[codex:486307]
[codex:486307] thinking
[codex:486307] **Analyzing unknown function selectors**
[codex:486307]
[codex:486307] I'm working through the code to deduce what the three unknown function selectors might be based on error strings, parameter types, and internal calls, especially focusing on deployer-only functions and their argument patterns. This involves tracing internal jumps and usage of caller checks to hypothesize possible function roles like `setRate`, ownership transfer, or minting.
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] base={
[codex:486307] 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:486307] 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:486307] 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:486307] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:486307] 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:486307] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:486307] }
[codex:486307] for i in range(0x60,0x80):
[codex:486307] base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90):
[codex:486307] base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0):
[codex:486307] base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5):
[codex:486307] base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] start=0x0c70; end=0x0d10
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 27ms:
[codex:486307] 0c70: JUMPDEST
[codex:486307] 0c71: PUSH1 0x00
[codex:486307] 0c73: PUSH2 0x0c7b
[codex:486307] 0c76: CALLER
[codex:486307] 0c77: PUSH2 0x1145
[codex:486307] 0c7a: JUMP
[codex:486307] 0c7b: JUMPDEST
[codex:486307] 0c7c: PUSH2 0x0cd0
[codex:486307] 0c7f: JUMPI
[codex:486307] 0c80: PUSH1 0x40
[codex:486307] 0c82: MLOAD
[codex:486307] 0c83: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000
[codex:486307] 0ca4: DUP2
[codex:486307] 0ca5: MSTORE
[codex:486307] 0ca6: PUSH1 0x04
[codex:486307] 0ca8: ADD
[codex:486307] 0ca9: DUP1
[codex:486307] 0caa: DUP1
[codex:486307] 0cab: PUSH1 0x20
[codex:486307] 0cad: ADD
[codex:486307]
[codex:486307] thinking
[codex:486307] **Analyzing deployer-restricted burn logic**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] import re
[codex:486307] hexdata=open('BYTECODE_BUNDLE.txt').read().split('0x',1)[1]
[codex:486307] hexdata=''.join(re.findall('[0-9a-fA-F]+',hexdata))
[codex:486307] code=bytes.fromhex(hexdata)
[codex:486307] # opcode mapping
[codex:486307] base={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
[codex:486307] for i in range(0x60,0x80): base[i]=f'PUSH{i-0x5f}'
[codex:486307] for i in range(0x80,0x90): base[i]=f'DUP{i-0x7f}'
[codex:486307] for i in range(0x90,0xa0): base[i]=f'SWAP{i-0x8f}'
[codex:486307] for i in range(0xa0,0xa5): base[i]=f'LOG{i-0x9f}'
[codex:486307]
[codex:486307] start=0x06e0; end=0x06f8
[codex:486307] pc=0
[codex:486307] while pc<len(code):
[codex:486307] op=code[pc]
[codex:486307] name=base.get(op,f'UNKNOWN_{op:02x}')
[codex:486307] if 0x60<=op<=0x7f:
[codex:486307] n=op-0x5f
[codex:486307] data=code[pc+1:pc+1+n]
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name} 0x{data.hex()}\")
[codex:486307] pc+=1+n
[codex:486307] else:
[codex:486307] if start<=pc<=end:
[codex:486307] print(f\"{pc:04x}: {name}\")
[codex:486307] pc+=1
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 25ms:
[codex:486307] 06e2: PUSH2 0x06e9
[codex:486307] 06e5: PUSH2 0x0cf2
[codex:486307] 06e8: JUMP
[codex:486307] 06e9: JUMPDEST
[codex:486307] 06ea: DUP5
[codex:486307] 06eb: DUP5
[codex:486307] 06ec: PUSH2 0x0cf6
[codex:486307] 06ef: JUMP
[codex:486307] 06f0: JUMPDEST
[codex:486307] 06f1: POP
[codex:486307] 06f2: PUSH1 0x01
[codex:486307] 06f4: JUMPDEST
[codex:486307] 06f5: SWAP3
[codex:486307] 06f6: SWAP2
[codex:486307] 06f7: POP
[codex:486307] 06f8: POP
[codex:486307]
[codex:486307] thinking
[codex:486307] **Analyzing EVM jump and return logic**
[codex:486307] exec
[codex:486307] /bin/bash -lc "python - <<'PY'
[codex:486307] from Crypto.Hash import keccak
[codex:486307]
[codex:486307] def sel(sig):
[codex:486307] k=keccak.new(digest_bits=256); k.update(sig.encode()); return k.hexdigest()[:8]
[codex:486307]
[codex:486307] print('burnFrom', sel('burnFrom(address,uint256)'))
[codex:486307] print('burnFrom', sel('burnFrom(address,uint256,uint256)'))
[codex:486307] print('burnFrom', sel('burnFrom(address)'))
[codex:486307] print('withdraw', sel('withdraw(address)'))
[codex:486307] print('redeem', sel('redeem(address)'))
[codex:486307] print('burnFrom', sel('burnFrom(address,uint256)'))
[codex:486307] PY" in /tmp/codex-multi-1bg8j8hv succeeded in 36ms:
[codex:486307] burnFrom 79cc6790
[codex:486307] burnFrom 124d91e5
[codex:486307] burnFrom 3506ac74
[codex:486307] withdraw 51cff8d9
[codex:486307] redeem 95a2251f
[codex:486307] burnFrom 79cc6790
[codex:486307]
[codex:486307] thinking
[codex:486307] **Analyzing potential burn function exploits**
[codex:486307] codex
[codex:486307] {"no_findings":true,"summary":"No concrete, exploitable profit paths identified from the provided runtime bytecode.","findings":[]}
[codex:486307] tokens used
[codex:486307] 196,447
[codex:486307] {"no_findings":true,"summary":"No concrete, exploitable profit paths identified from the provided runtime bytecode.","findings":[]}
{
"codex": {
"ran_at": "2026-01-03T21:59:36.492531+00:00",
"returncode": 0
},
"summary": "No concrete, exploitable profit paths identified from the provided runtime bytecode.",
"raw_final": {
"summary": "No concrete, exploitable profit paths identified from the provided runtime bytecode.",
"findings": [],
"no_findings": true
},
"no_findings": true,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x0148 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x679aefce 00000019: GT 0000001a: PUSH2 0x00c0 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0xa457c2d7 00000024: GT 00000025: PUSH2 0x0074 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0xaa271e1a 0000002f: GT 00000030: PUSH2 0x0059 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xaa271e1a 0000003a: EQ 0000003b: PUSH2 0x055a 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xdd62ed3e 00000045: EQ 00000046: PUSH2 0x059a 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xf05fcdf2 00000050: EQ 00000051: PUSH2 0x05e2 00000054: JUMPI 00000055: PUSH2 0x0186 00000058: JUMP 00000059: JUMPDEST 0000005a: DUP1 0000005b: PUSH4 0xa457c2d7 00000060: EQ 00000061: PUSH2 0x04ce 00000064: JUMPI 00000065: DUP1 00000066: PUSH4 0xa9059cbb 0000006b: EQ 0000006c: PUSH2 0x0514 0000006f: JUMPI 00000070: PUSH2 0x0186 00000073: JUMP 00000074: JUMPDEST 00000075: DUP1 00000076: PUSH4 0x903d8e77 0000007b: GT 0000007c: PUSH2 0x00a5 0000007f: JUMPI 00000080: DUP1 00000081: PUSH4 0x903d8e77 00000086: EQ 00000087: PUSH2 0x0460 0000008a: JUMPI 0000008b: DUP1 0000008c: PUSH4 0x95d89b41 00000091: EQ 00000092: PUSH2 0x04a4 00000095: JUMPI 00000096: DUP1 00000097: PUSH4 0x9975038c 0000009c: EQ 0000009d: PUSH2 0x04b9 000000a0: JUMPI 000000a1: PUSH2 0x0186 000000a4: JUMP 000000a5: JUMPDEST 000000a6: DUP1 000000a7: PUSH4 0x679aefce 000000ac: EQ 000000ad: PUSH2 0x03dc 000000b0: JUMPI 000000b1: DUP1 000000b2: PUSH4 0x70a08231 000000b7: EQ 000000b8: PUSH2 0x0420 000000bb: JUMPI 000000bc: PUSH2 0x0186 000000bf: JUMP 000000c0: JUMPDEST 000000c1: DUP1 000000c2: PUSH4 0x2f13b60c 000000c7: GT 000000c8: PUSH2 0x0117 000000cb: JUMPI 000000cc: DUP1 000000cd: PUSH4 0x39509351 000000d2: GT 000000d3: PUSH2 0x00fc 000000d6: JUMPI 000000d7: DUP1 000000d8: PUSH4 0x39509351 000000dd: EQ 000000de: PUSH2 0x0326 000000e1: JUMPI 000000e2: DUP1 000000e3: PUSH4 0x40c10f19 000000e8: EQ 000000e9: PUSH2 0x036c 000000ec: JUMPI 000000ed: DUP1 000000ee: PUSH4 0x42966c68 000000f3: EQ 000000f4: PUSH2 0x03b2 000000f7: JUMPI 000000f8: PUSH2 0x0186 000000fb: JUMP 000000fc: JUMPDEST 000000fd: DUP1 000000fe: PUSH4 0x2f13b60c 00000103: EQ 00000104: PUSH2 0x02e6 00000107: JUMPI 00000108: DUP1 00000109: PUSH4 0x313ce567 0000010e: EQ 0000010f: PUSH2 0x02fb 00000112: JUMPI 00000113: PUSH2 0x0186 00000116: JUMP 00000117: JUMPDEST 00000118: DUP1 00000119: PUSH4 0x06fdde03 0000011e: EQ 0000011f: PUSH2 0x018b 00000122: JUMPI 00000123: DUP1 00000124: PUSH4 0x095ea7b3 00000129: EQ 0000012a: PUSH2 0x0215 0000012d: JUMPI 0000012e: DUP1 0000012f: PUSH4 0x18160ddd 00000134: EQ 00000135: PUSH2 0x026f 00000138: JUMPI 00000139: DUP1 0000013a: PUSH4 0x23b872dd 0000013f: EQ 00000140: PUSH2 0x0296 00000143: JUMPI 00000144: PUSH2 0x0186 00000147: JUMP 00000148: JUMPDEST 00000149: CALLDATASIZE 0000014a: PUSH2 0x0186 0000014d: JUMPI 0000014e: PUSH1 0x40 00000150: DUP1 00000151: MLOAD 00000152: CALLVALUE 00000153: DUP2 00000154: MSTORE 00000155: SWAP1 00000156: MLOAD 00000157: ADDRESS 00000158: SWAP2 00000159: CALLER 0000015a: SWAP2 0000015b: PUSH32 0xdd4e7375a5084e0c4cc4e1bfc7ba67beb26a368120ea78d2e0948123910bbf7c 0000017c: SWAP2 0000017d: DUP2 0000017e: SWAP1 0000017f: SUB 00000180: PUSH1 0x20 00000182: ADD 00000183: SWAP1 00000184: LOG3 00000185: STOP 00000186: JUMPDEST 00000187: PUSH1 0x00 00000189: DUP1 0000018a: REVERT 0000018b: JUMPDEST 0000018c: CALLVALUE 0000018d: DUP1 0000018e: ISZERO 0000018f: PUSH2 0x0197 00000192: JUMPI 00000193: PUSH1 0x00 00000195: DUP1 00000196: REVERT 00000197: JUMPDEST 00000198: POP 00000199: PUSH2 0x01a0 0000019c: PUSH2 0x0628 0000019f: JUMP 000001a0: JUMPDEST 000001a1: PUSH1 0x40 000001a3: DUP1 000001a4: MLOAD 000001a5: PUSH1 0x20 000001a7: DUP1 000001a8: DUP3 000001a9: MSTORE 000001aa: DUP4 000001ab: MLOAD 000001ac: DUP2 000001ad: DUP4 000001ae: ADD 000001af: MSTORE 000001b0: DUP4 000001b1: MLOAD 000001b2: SWAP2 000001b3: SWAP3 000001b4: DUP4 000001b5: SWAP3 000001b6: SWAP1 000001b7: DUP4 000001b8: ADD 000001b9: SWAP2 000001ba: DUP6 000001bb: ADD 000001bc: SWAP1 000001bd: DUP1 000001be: DUP4 000001bf: DUP4 000001c0: PUSH1 0x00 000001c2: JUMPDEST 000001c3: DUP4 000001c4: DUP2 000001c5: LT 000001c6: ISZERO 000001c7: PUSH2 0x01da 000001ca: JUMPI 000001cb: DUP2 000001cc: DUP2 000001cd: ADD 000001ce: MLOAD 000001cf: DUP4 000001d0: DUP3 000001d1: ADD 000001d2: MSTORE 000001d3: PUSH1 0x20 000001d5: ADD 000001d6: PUSH2 0x01c2 000001d9: JUMP 000001da: JUMPDEST 000001db: POP 000001dc: POP 000001dd: POP 000001de: POP 000001df: SWAP1 000001e0: POP 000001e1: SWAP1 000001e2: DUP2 000001e3: ADD 000001e4: SWAP1 000001e5: PUSH1 0x1f 000001e7: AND 000001e8: DUP1 000001e9: ISZERO 000001ea: PUSH2 0x0207 000001ed: JUMPI 000001ee: DUP1 000001ef: DUP3 000001f0: SUB 000001f1: DUP1 000001f2: MLOAD 000001f3: PUSH1 0x01 000001f5: DUP4 000001f6: PUSH1 0x20 000001f8: SUB 000001f9: PUSH2 0x0100 000001fc: EXP 000001fd: SUB 000001fe: NOT 000001ff: AND 00000200: DUP2 00000201: MSTORE 00000202: PUSH1 0x20 00000204: ADD 00000205: SWAP2 00000206: POP 00000207: JUMPDEST 00000208: POP 00000209: SWAP3 0000020a: POP 0000020b: POP 0000020c: POP 0000020d: PUSH1 0x40 0000020f: MLOAD 00000210: DUP1 00000211: SWAP2 00000212: SUB 00000213: SWAP1 00000214: RETURN 00000215: JUMPDEST 00000216: CALLVALUE 00000217: DUP1 00000218: ISZERO 00000219: PUSH2 0x0221 0000021c: JUMPI 0000021d: PUSH1 0x00 0000021f: DUP1 00000220: REVERT 00000221: JUMPDEST 00000222: POP 00000223: PUSH2 0x025b 00000226: PUSH1 0x04 00000228: DUP1 00000229: CALLDATASIZE 0000022a: SUB 0000022b: PUSH1 0x40 0000022d: DUP2 0000022e: LT 0000022f: ISZERO 00000230: PUSH2 0x0238 00000233: JUMPI 00000234: PUSH1 0x00 00000236: DUP1 00000237: REVERT 00000238: JUMPDEST 00000239: POP 0000023a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000024f: DUP2 00000250: CALLDATALOAD 00000251: AND 00000252: SWAP1 00000253: PUSH1 0x20 00000255: ADD 00000256: CALLDATALOAD 00000257: PUSH2 0x06dc 0000025a: JUMP 0000025b: JUMPDEST 0000025c: PUSH1 0x40 0000025e: DUP1 0000025f: MLOAD 00000260: SWAP2 00000261: ISZERO 00000262: ISZERO 00000263: DUP3 00000264: MSTORE 00000265: MLOAD 00000266: SWAP1 00000267: DUP2 00000268: SWAP1 00000269: SUB 0000026a: PUSH1 0x20 0000026c: ADD 0000026d: SWAP1 0000026e: RETURN 0000026f: JUMPDEST 00000270: CALLVALUE 00000271: DUP1 00000272: ISZERO 00000273: PUSH2 0x027b 00000276: JUMPI 00000277: PUSH1 0x00 00000279: DUP1 0000027a: REVERT 0000027b: JUMPDEST 0000027c: POP 0000027d: PUSH2 0x0284 00000280: PUSH2 0x06fa 00000283: JUMP 00000284: JUMPDEST 00000285: PUSH1 0x40 00000287: DUP1 00000288: MLOAD 00000289: SWAP2 0000028a: DUP3 0000028b: MSTORE 0000028c: MLOAD 0000028d: SWAP1 0000028e: DUP2 0000028f: SWAP1 00000290: SUB 00000291: PUSH1 0x20 00000293: ADD 00000294: SWAP1 00000295: RETURN 00000296: JUMPDEST 00000297: CALLVALUE 00000298: DUP1 00000299: ISZERO 0000029a: PUSH2 0x02a2 0000029d: JUMPI 0000029e: PUSH1 0x00 000002a0: DUP1 000002a1: REVERT 000002a2: JUMPDEST 000002a3: POP 000002a4: PUSH2 0x025b 000002a7: PUSH1 0x04 000002a9: DUP1 000002aa: CALLDATASIZE 000002ab: SUB 000002ac: PUSH1 0x60 000002ae: DUP2 000002af: LT 000002b0: ISZERO 000002b1: PUSH2 0x02b9 000002b4: JUMPI 000002b5: PUSH1 0x00 000002b7: DUP1 000002b8: REVERT 000002b9: JUMPDEST 000002ba: POP 000002bb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000002d0: DUP2 000002d1: CALLDATALOAD 000002d2: DUP2 000002d3: AND 000002d4: SWAP2 000002d5: PUSH1 0x20 000002d7: DUP2 000002d8: ADD 000002d9: CALLDATALOAD 000002da: SWAP1 000002db: SWAP2 000002dc: AND 000002dd: SWAP1 000002de: PUSH1 0x40 000002e0: ADD 000002e1: CALLDATALOAD 000002e2: PUSH2 0x0700 000002e5: JUMP 000002e6: JUMPDEST 000002e7: CALLVALUE 000002e8: DUP1 000002e9: ISZERO 000002ea: PUSH2 0x02f2 000002ed: JUMPI 000002ee: PUSH1 0x00 000002f0: DUP1 000002f1: REVERT 000002f2: JUMPDEST 000002f3: POP 000002f4: PUSH2 0x025b 000002f7: PUSH2 0x0755 000002fa: JUMP 000002fb: JUMPDEST 000002fc: CALLVALUE 000002fd: DUP1 000002fe: ISZERO 000002ff: PUSH2 0x0307 00000302: JUMPI 00000303: PUSH1 0x00 00000305: DUP1 00000306: REVERT 00000307: JUMPDEST 00000308: POP 00000309: PUSH2 0x0310 0000030c: PUSH2 0x0783 0000030f: JUMP 00000310: JUMPDEST 00000311: PUSH1 0x40 00000313: DUP1 00000314: MLOAD 00000315: PUSH1 0xff 00000317: SWAP1 00000318: SWAP3 00000319: AND 0000031a: DUP3 0000031b: MSTORE 0000031c: MLOAD 0000031d: SWAP1 0000031e: DUP2 0000031f: SWAP1 00000320: SUB 00000321: PUSH1 0x20 00000323: ADD 00000324: SWAP1 00000325: RETURN 00000326: JUMPDEST 00000327: CALLVALUE 00000328: DUP1 00000329: ISZERO 0000032a: PUSH2 0x0332 0000032d: JUMPI 0000032e: PUSH1 0x00 00000330: DUP1 00000331: REVERT 00000332: JUMPDEST 00000333: POP 00000334: PUSH2 0x025b 00000337: PUSH1 0x04 00000339: DUP1 0000033a: CALLDATASIZE 0000033b: SUB 0000033c: PUSH1 0x40 0000033e: DUP2 0000033f: LT 00000340: ISZERO 00000341: PUSH2 0x0349 00000344: JUMPI 00000345: PUSH1 0x00 00000347: DUP1 00000348: REVERT 00000349: JUMPDEST 0000034a: POP 0000034b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000360: DUP2 00000361: CALLDATALOAD 00000362: AND 00000363: SWAP1 00000364: PUSH1 0x20 00000366: ADD 00000367: CALLDATALOAD 00000368: PUSH2 0x078c 0000036b: JUMP 0000036c: JUMPDEST 0000036d: CALLVALUE 0000036e: DUP1 0000036f: ISZERO 00000370: PUSH2 0x0378 00000373: JUMPI 00000374: PUSH1 0x00 00000376: DUP1 00000377: REVERT 00000378: JUMPDEST 00000379: POP 0000037a: PUSH2 0x025b 0000037d: PUSH1 0x04 0000037f: DUP1 00000380: CALLDATASIZE 00000381: SUB 00000382: PUSH1 0x40 00000384: DUP2 00000385: LT 00000386: ISZERO 00000387: PUSH2 0x038f 0000038a: JUMPI 0000038b: PUSH1 0x00 0000038d: DUP1 0000038e: REVERT 0000038f: JUMPDEST 00000390: POP 00000391: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000003a6: DUP2 000003a7: CALLDATALOAD 000003a8: AND 000003a9: SWAP1 000003aa: PUSH1 0x20 000003ac: ADD 000003ad: CALLDATALOAD 000003ae: PUSH2 0x07ed 000003b1: JUMP 000003b2: JUMPDEST 000003b3: CALLVALUE 000003b4: DUP1 000003b5: ISZERO 000003b6: PUSH2 0x03be 000003b9: JUMPI 000003ba: PUSH1 0x00 000003bc: DUP1 000003bd: REVERT 000003be: JUMPDEST 000003bf: POP 000003c0: PUSH2 0x025b 000003c3: PUSH1 0x04 000003c5: DUP1 000003c6: CALLDATASIZE 000003c7: SUB 000003c8: PUSH1 0x20 000003ca: DUP2 000003cb: LT 000003cc: ISZERO 000003cd: PUSH2 0x03d5 000003d0: JUMPI 000003d1: PUSH1 0x00 000003d3: DUP1 000003d4: REVERT 000003d5: JUMPDEST 000003d6: POP 000003d7: CALLDATALOAD 000003d8: PUSH2 0x08cb 000003db: JUMP 000003dc: JUMPDEST 000003dd: CALLVALUE 000003de: DUP1 000003df: ISZERO 000003e0: PUSH2 0x03e8 000003e3: JUMPI 000003e4: PUSH1 0x00 000003e6: DUP1 000003e7: REVERT 000003e8: JUMPDEST 000003e9: POP 000003ea: PUSH2 0x03f1 000003ed: PUSH2 0x0999 000003f0: JUMP 000003f1: JUMPDEST 000003f2: PUSH1 0x40 000003f4: DUP1 000003f5: MLOAD 000003f6: PUSH16 0xffffffffffffffffffffffffffffffff 00000407: SWAP4 00000408: DUP5 00000409: AND 0000040a: DUP2 0000040b: MSTORE 0000040c: SWAP2 0000040d: SWAP1 0000040e: SWAP3 0000040f: AND 00000410: PUSH1 0x20 00000412: DUP3 00000413: ADD 00000414: MSTORE 00000415: DUP2 00000416: MLOAD 00000417: SWAP1 00000418: DUP2 00000419: SWAP1 0000041a: SUB 0000041b: SWAP1 0000041c: SWAP2 0000041d: ADD 0000041e: SWAP1 0000041f: RETURN 00000420: JUMPDEST 00000421: CALLVALUE 00000422: DUP1 00000423: ISZERO 00000424: PUSH2 0x042c 00000427: JUMPI 00000428: PUSH1 0x00 0000042a: DUP1 0000042b: REVERT 0000042c: JUMPDEST 0000042d: POP 0000042e: PUSH2 0x0284 00000431: PUSH1 0x04 00000433: DUP1 00000434: CALLDATASIZE 00000435: SUB 00000436: PUSH1 0x20 00000438: DUP2 00000439: LT 0000043a: ISZERO 0000043b: PUSH2 0x0443 0000043e: JUMPI 0000043f: PUSH1 0x00 00000441: DUP1 00000442: REVERT 00000443: JUMPDEST 00000444: POP 00000445: CALLDATALOAD 00000446: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000045b: AND 0000045c: PUSH2 0x09ca 0000045f: JUMP 00000460: JUMPDEST 00000461: CALLVALUE 00000462: DUP1 00000463: ISZERO 00000464: PUSH2 0x046c 00000467: JUMPI 00000468: PUSH1 0x00 0000046a: DUP1 0000046b: REVERT 0000046c: JUMPDEST 0000046d: POP 0000046e: PUSH2 0x025b 00000471: PUSH1 0x04 00000473: DUP1 00000474: CALLDATASIZE 00000475: SUB 00000476: PUSH1 0x40 00000478: DUP2 00000479: LT 0000047a: ISZERO 0000047b: PUSH2 0x0483 0000047e: JUMPI 0000047f: PUSH1 0x00 00000481: DUP1 00000482: REVERT 00000483: JUMPDEST 00000484: POP 00000485: PUSH16 0xffffffffffffffffffffffffffffffff 00000496: DUP2 00000497: CALLDATALOAD 00000498: DUP2 00000499: AND 0000049a: SWAP2 0000049b: PUSH1 0x20 0000049d: ADD 0000049e: CALLDATALOAD 0000049f: AND 000004a0: PUSH2 0x09f2 000004a3: JUMP 000004a4: JUMPDEST 000004a5: CALLVALUE 000004a6: DUP1 000004a7: ISZERO 000004a8: PUSH2 0x04b0 000004ab: JUMPI 000004ac: PUSH1 0x00 000004ae: DUP1 000004af: REVERT 000004b0: JUMPDEST 000004b1: POP 000004b2: PUSH2 0x01a0 000004b5: PUSH2 0x0afe 000004b8: JUMP 000004b9: JUMPDEST 000004ba: CALLVALUE 000004bb: DUP1 000004bc: ISZERO 000004bd: PUSH2 0x04c5 000004c0: JUMPI 000004c1: PUSH1 0x00 000004c3: DUP1 000004c4: REVERT 000004c5: JUMPDEST 000004c6: POP 000004c7: PUSH2 0x0284 000004ca: PUSH2 0x0b7d 000004cd: JUMP 000004ce: JUMPDEST 000004cf: CALLVALUE 000004d0: DUP1 000004d1: ISZERO 000004d2: PUSH2 0x04da 000004d5: JUMPI 000004d6: PUSH1 0x00 000004d8: DUP1 000004d9: REVERT 000004da: JUMPDEST 000004db: POP 000004dc: PUSH2 0x025b 000004df: PUSH1 0x04 000004e1: DUP1 000004e2: CALLDATASIZE 000004e3: SUB 000004e4: PUSH1 0x40 000004e6: DUP2 000004e7: LT 000004e8: ISZERO 000004e9: PUSH2 0x04f1 000004ec: JUMPI 000004ed: PUSH1 0x00 000004ef: DUP1 000004f0: REVERT 000004f1: JUMPDEST 000004f2: POP 000004f3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000508: DUP2 00000509: CALLDATALOAD 0000050a: AND 0000050b: SWAP1 0000050c: PUSH1 0x20 0000050e: ADD 0000050f: CALLDATALOAD 00000510: PUSH2 0x0ba5 00000513: JUMP 00000514: JUMPDEST 00000515: CALLVALUE 00000516: DUP1 00000517: ISZERO 00000518: PUSH2 0x0520 0000051b: JUMPI 0000051c: PUSH1 0x00 0000051e: DUP1 0000051f: REVERT 00000520: JUMPDEST 00000521: POP 00000522: PUSH2 0x025b 00000525: PUSH1 0x04 00000527: DUP1 00000528: CALLDATASIZE 00000529: SUB 0000052a: PUSH1 0x40 0000052c: DUP2 0000052d: LT 0000052e: ISZERO 0000052f: PUSH2 0x0537 00000532: JUMPI 00000533: PUSH1 0x00 00000535: DUP1 00000536: REVERT 00000537: JUMPDEST 00000538: POP 00000539: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000054e: DUP2 0000054f: CALLDATALOAD 00000550: AND 00000551: SWAP1 00000552: PUSH1 0x20 00000554: ADD 00000555: CALLDATALOAD 00000556: PUSH2 0x0c20 00000559: JUMP 0000055a: JUMPDEST 0000055b: CALLVALUE 0000055c: DUP1 0000055d: ISZERO 0000055e: PUSH2 0x0566 00000561: JUMPI 00000562: PUSH1 0x00 00000564: DUP1 00000565: REVERT 00000566: JUMPDEST 00000567: POP 00000568: PUSH2 0x025b 0000056b: PUSH1 0x04 0000056d: DUP1 0000056e: CALLDATASIZE 0000056f: SUB 00000570: PUSH1 0x20 00000572: DUP2 00000573: LT 00000574: ISZERO 00000575: PUSH2 0x057d 00000578: JUMPI 00000579: PUSH1 0x00 0000057b: DUP1 0000057c: REVERT 0000057d: JUMPDEST 0000057e: POP 0000057f: CALLDATALOAD 00000580: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000595: AND 00000596: PUSH2 0x0c2d 00000599: JUMP 0000059a: JUMPDEST 0000059b: CALLVALUE 0000059c: DUP1 0000059d: ISZERO 0000059e: PUSH2 0x05a6 000005a1: JUMPI 000005a2: PUSH1 0x00 000005a4: DUP1 000005a5: REVERT 000005a6: JUMPDEST 000005a7: POP 000005a8: PUSH2 0x0284 000005ab: PUSH1 0x04 000005ad: DUP1 000005ae: CALLDATASIZE 000005af: SUB 000005b0: PUSH1 0x40 000005b2: DUP2 000005b3: LT 000005b4: ISZERO 000005b5: PUSH2 0x05bd 000005b8: JUMPI 000005b9: PUSH1 0x00 000005bb: DUP1 000005bc: REVERT 000005bd: JUMPDEST 000005be: POP 000005bf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000005d4: DUP2 000005d5: CALLDATALOAD 000005d6: DUP2 000005d7: AND 000005d8: SWAP2 000005d9: PUSH1 0x20 000005db: ADD 000005dc: CALLDATALOAD 000005dd: AND 000005de: PUSH2 0x0c38 000005e1: JUMP 000005e2: JUMPDEST 000005e3: CALLVALUE 000005e4: DUP1 000005e5: ISZERO 000005e6: PUSH2 0x05ee 000005e9: JUMPI 000005ea: PUSH1 0x00 000005ec: DUP1 000005ed: REVERT 000005ee: JUMPDEST 000005ef: POP 000005f0: PUSH2 0x025b 000005f3: PUSH1 0x04 000005f5: DUP1 000005f6: CALLDATASIZE 000005f7: SUB 000005f8: PUSH1 0x40 000005fa: DUP2 000005fb: LT 000005fc: ISZERO 000005fd: PUSH2 0x0605 00000600: JUMPI 00000601: PUSH1 0x00 00000603: DUP1 00000604: REVERT 00000605: JUMPDEST 00000606: POP 00000607: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000061c: DUP2 0000061d: CALLDATALOAD 0000061e: AND 0000061f: SWAP1 00000620: PUSH1 0x20 00000622: ADD 00000623: CALLDATALOAD 00000624: PUSH2 0x0c70 00000627: JUMP 00000628: JUMPDEST 00000629: PUSH1 0x03 0000062b: DUP1 0000062c: SLOAD 0000062d: PUSH1 0x40 0000062f: DUP1 00000630: MLOAD 00000631: PUSH1 0x20 00000633: PUSH1 0x1f 00000635: PUSH1 0x02 00000637: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00000658: PUSH2 0x0100 0000065b: PUSH1 0x01 0000065d: DUP9 0000065e: AND 0000065f: ISZERO 00000660: MUL 00000661: ADD 00000662: SWAP1 00000663: SWAP6 00000664: AND 00000665: SWAP5 00000666: SWAP1 00000667: SWAP5 00000668: DIV 00000669: SWAP4 0000066a: DUP5 0000066b: ADD 0000066c: DUP2 0000066d: SWAP1 0000066e: DIV 0000066f: DUP2 00000670: MUL 00000671: DUP3 00000672: ADD 00000673: DUP2 00000674: ADD 00000675: SWAP1 00000676: SWAP3 00000677: MSTORE 00000678: DUP3 00000679: DUP2 0000067a: MSTORE 0000067b: PUSH1 0x60 0000067d: SWAP4 0000067e: SWAP1 0000067f: SWAP3 00000680: SWAP1 00000681: SWAP2 00000682: DUP4 00000683: ADD 00000684: DUP3 00000685: DUP3 00000686: DUP1 00000687: ISZERO 00000688: PUSH2 0x06d2 0000068b: JUMPI 0000068c: DUP1 0000068d: PUSH1 0x1f 0000068f: LT 00000690: PUSH2 0x06a7 00000693: JUMPI 00000694: PUSH2 0x0100 00000697: DUP1 00000698: DUP4 00000699: SLOAD 0000069a: DIV 0000069b: MUL 0000069c: DUP4 0000069d: MSTORE 0000069e: SWAP2 0000069f: PUSH1 0x20 000006a1: ADD 000006a2: SWAP2 000006a3: PUSH2 0x06d2 000006a6: JUMP 000006a7: JUMPDEST 000006a8: DUP3 000006a9: ADD 000006aa: SWAP2 000006ab: SWAP1 000006ac: PUSH1 0x00 000006ae: MSTORE 000006af: PUSH1 0x20 000006b1: PUSH1 0x00 000006b3: KECCAK256 000006b4: SWAP1 000006b5: JUMPDEST 000006b6: DUP2 000006b7: SLOAD 000006b8: DUP2 000006b9: MSTORE 000006ba: SWAP1 000006bb: PUSH1 0x01 000006bd: ADD 000006be: SWAP1 000006bf: PUSH1 0x20 000006c1: ADD 000006c2: DUP1 000006c3: DUP4 000006c4: GT 000006c5: PUSH2 0x06b5 000006c8: JUMPI 000006c9: DUP3 000006ca: SWAP1 000006cb: SUB 000006cc: PUSH1 0x1f 000006ce: AND 000006cf: DUP3 000006d0: ADD 000006d1: SWAP2 000006d2: JUMPDEST 000006d3: POP 000006d4: POP 000006d5: POP 000006d6: POP 000006d7: POP 000006d8: SWAP1 000006d9: POP 000006da: SWAP1 000006db: JUMP 000006dc: JUMPDEST 000006dd: PUSH1 0x00 000006df: PUSH2 0x06f0 000006e2: PUSH2 0x06e9 000006e5: PUSH2 0x0cf2 000006e8: JUMP 000006e9: JUMPDEST 000006ea: DUP5 000006eb: DUP5 000006ec: PUSH2 0x0cf6 000006ef: JUMP 000006f0: JUMPDEST 000006f1: POP 000006f2: PUSH1 0x01 000006f4: JUMPDEST 000006f5: SWAP3 000006f6: SWAP2 000006f7: POP 000006f8: POP 000006f9: JUMP 000006fa: JUMPDEST 000006fb: PUSH1 0x02 000006fd: SLOAD 000006fe: SWAP1 000006ff: JUMP 00000700: JUMPDEST 00000701: PUSH1 0x00 00000703: PUSH2 0x070d 00000706: DUP5 00000707: DUP5 00000708: DUP5 00000709: PUSH2 0x0e3d 0000070c: JUMP 0000070d: JUMPDEST 0000070e: PUSH2 0x074b 00000711: DUP5 00000712: CALLER 00000713: PUSH2 0x0746 00000716: DUP6 00000717: PUSH1 0x40 00000719: MLOAD 0000071a: DUP1 0000071b: PUSH1 0x60 0000071d: ADD 0000071e: PUSH1 0x40 00000720: MSTORE 00000721: DUP1 00000722: PUSH1 0x28 00000724: DUP2 00000725: MSTORE 00000726: PUSH1 0x20 00000728: ADD 00000729: PUSH2 0x1936 0000072c: PUSH1 0x28 0000072e: SWAP2 0000072f: CODECOPY 00000730: PUSH2 0x0739 00000733: DUP11 00000734: CALLER 00000735: PUSH2 0x0c38 00000738: JUMP 00000739: JUMPDEST 0000073a: SWAP2 0000073b: SWAP1 0000073c: PUSH4 0xffffffff 00000741: PUSH2 0x1019 00000744: AND 00000745: JUMP 00000746: JUMPDEST 00000747: PUSH2 0x0cf6 0000074a: JUMP 0000074b: JUMPDEST 0000074c: POP 0000074d: PUSH1 0x01 0000074f: SWAP4 00000750: SWAP3 00000751: POP 00000752: POP 00000753: POP 00000754: JUMP 00000755: JUMPDEST 00000756: PUSH1 0x06 00000758: SLOAD 00000759: PUSH17 0x0100000000000000000000000000000000 0000076b: SWAP1 0000076c: DIV 0000076d: PUSH16 0xffffffffffffffffffffffffffffffff 0000077e: AND 0000077f: ISZERO 00000780: ISZERO 00000781: SWAP1 00000782: JUMP 00000783: JUMPDEST 00000784: PUSH1 0x05 00000786: SLOAD 00000787: PUSH1 0xff 00000789: AND 0000078a: SWAP1 0000078b: JUMP 0000078c: JUMPDEST 0000078d: PUSH1 0x00 0000078f: PUSH2 0x06f0 00000792: PUSH2 0x0799 00000795: PUSH2 0x0cf2 00000798: JUMP 00000799: JUMPDEST 0000079a: DUP5 0000079b: PUSH2 0x0746 0000079e: DUP6 0000079f: PUSH1 0x01 000007a1: PUSH1 0x00 000007a3: PUSH2 0x07aa 000007a6: PUSH2 0x0cf2 000007a9: JUMP 000007aa: JUMPDEST 000007ab: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007c0: SWAP1 000007c1: DUP2 000007c2: AND 000007c3: DUP3 000007c4: MSTORE 000007c5: PUSH1 0x20 000007c7: DUP1 000007c8: DUP4 000007c9: ADD 000007ca: SWAP4 000007cb: SWAP1 000007cc: SWAP4 000007cd: MSTORE 000007ce: PUSH1 0x40 000007d0: SWAP2 000007d1: DUP3 000007d2: ADD 000007d3: PUSH1 0x00 000007d5: SWAP1 000007d6: DUP2 000007d7: KECCAK256 000007d8: SWAP2 000007d9: DUP13 000007da: AND 000007db: DUP2 000007dc: MSTORE 000007dd: SWAP3 000007de: MSTORE 000007df: SWAP1 000007e0: KECCAK256 000007e1: SLOAD 000007e2: SWAP1 000007e3: PUSH4 0xffffffff 000007e8: PUSH2 0x10ca 000007eb: AND 000007ec: JUMP 000007ed: JUMPDEST 000007ee: PUSH1 0x00 000007f0: PUSH2 0x07f8 000007f3: CALLER 000007f4: PUSH2 0x1145 000007f7: JUMP 000007f8: JUMPDEST 000007f9: PUSH2 0x084d 000007fc: JUMPI 000007fd: PUSH1 0x40 000007ff: MLOAD 00000800: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000821: DUP2 00000822: MSTORE 00000823: PUSH1 0x04 00000825: ADD 00000826: DUP1 00000827: DUP1 00000828: PUSH1 0x20 0000082a: ADD 0000082b: DUP3 0000082c: DUP2 0000082d: SUB 0000082e: DUP3 0000082f: MSTORE 00000830: PUSH1 0x2e 00000832: DUP2 00000833: MSTORE 00000834: PUSH1 0x20 00000836: ADD 00000837: DUP1 00000838: PUSH2 0x18ac 0000083b: PUSH1 0x2e 0000083d: SWAP2 0000083e: CODECOPY 0000083f: PUSH1 0x40 00000841: ADD 00000842: SWAP2 00000843: POP 00000844: POP 00000845: PUSH1 0x40 00000847: MLOAD 00000848: DUP1 00000849: SWAP2 0000084a: SUB 0000084b: SWAP1 0000084c: REVERT 0000084d: JUMPDEST 0000084e: PUSH2 0x0855 00000851: PUSH2 0x0755 00000854: JUMP 00000855: JUMPDEST 00000856: ISZERO 00000857: PUSH2 0x08c1 0000085a: JUMPI 0000085b: PUSH1 0x40 0000085d: DUP1 0000085e: MLOAD 0000085f: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000880: DUP2 00000881: MSTORE 00000882: PUSH1 0x20 00000884: PUSH1 0x04 00000886: DUP3 00000887: ADD 00000888: MSTORE 00000889: PUSH1 0x1f 0000088b: PUSH1 0x24 0000088d: DUP3 0000088e: ADD 0000088f: MSTORE 00000890: PUSH32 0x7468697320746f6b656e20636f6e747261637420686173206578706972656400 000008b1: PUSH1 0x44 000008b3: DUP3 000008b4: ADD 000008b5: MSTORE 000008b6: SWAP1 000008b7: MLOAD 000008b8: SWAP1 000008b9: DUP2 000008ba: SWAP1 000008bb: SUB 000008bc: PUSH1 0x64 000008be: ADD 000008bf: SWAP1 000008c0: REVERT 000008c1: JUMPDEST 000008c2: PUSH2 0x06f0 000008c5: DUP4 000008c6: DUP4 000008c7: PUSH2 0x1184 000008ca: JUMP 000008cb: JUMPDEST 000008cc: PUSH1 0x00 000008ce: PUSH2 0x08d5 000008d1: PUSH2 0x0755 000008d4: JUMP 000008d5: JUMPDEST 000008d6: PUSH2 0x08e1 000008d9: JUMPI 000008da: POP 000008db: PUSH1 0x00 000008dd: PUSH2 0x0994 000008e0: JUMP 000008e1: JUMPDEST 000008e2: PUSH2 0x08eb 000008e5: CALLER 000008e6: DUP4 000008e7: PUSH2 0x12c1 000008ea: JUMP 000008eb: JUMPDEST 000008ec: PUSH1 0x06 000008ee: SLOAD 000008ef: PUSH16 0xffffffffffffffffffffffffffffffff 00000900: AND 00000901: ISZERO 00000902: PUSH2 0x0990 00000905: JUMPI 00000906: PUSH1 0x06 00000908: SLOAD 00000909: PUSH1 0x00 0000090b: SWAP1 0000090c: PUSH2 0x0969 0000090f: SWAP1 00000910: PUSH16 0xffffffffffffffffffffffffffffffff 00000921: PUSH17 0x0100000000000000000000000000000000 00000933: DUP3 00000934: DIV 00000935: DUP2 00000936: AND 00000937: SWAP2 00000938: PUSH2 0x095d 0000093b: SWAP2 0000093c: AND 0000093d: PUSH2 0x0951 00000940: DUP8 00000941: PUSH5 0x02540be400 00000947: PUSH4 0xffffffff 0000094c: PUSH2 0x1417 0000094f: AND 00000950: JUMP 00000951: JUMPDEST 00000952: SWAP1 00000953: PUSH4 0xffffffff 00000958: PUSH2 0x1417 0000095b: AND 0000095c: JUMP 0000095d: JUMPDEST 0000095e: SWAP1 0000095f: PUSH4 0xffffffff 00000964: PUSH2 0x148a 00000967: AND 00000968: JUMP 00000969: JUMPDEST 0000096a: SWAP1 0000096b: POP 0000096c: PUSH2 0x098e 0000096f: CALLER 00000970: DUP3 00000971: PUSH1 0x40 00000973: MLOAD 00000974: DUP1 00000975: PUSH1 0x60 00000977: ADD 00000978: PUSH1 0x40 0000097a: MSTORE 0000097b: DUP1 0000097c: PUSH1 0x22 0000097e: DUP2 0000097f: MSTORE 00000980: PUSH1 0x20 00000982: ADD 00000983: PUSH2 0x188a 00000986: PUSH1 0x22 00000988: SWAP2 00000989: CODECOPY 0000098a: PUSH2 0x14cc 0000098d: JUMP 0000098e: JUMPDEST 0000098f: POP 00000990: JUMPDEST 00000991: POP 00000992: PUSH1 0x01 00000994: JUMPDEST 00000995: SWAP2 00000996: SWAP1 00000997: POP 00000998: JUMP 00000999: JUMPDEST 0000099a: PUSH1 0x06 0000099c: SLOAD 0000099d: PUSH16 0xffffffffffffffffffffffffffffffff 000009ae: DUP1 000009af: DUP3 000009b0: AND 000009b1: SWAP3 000009b2: PUSH17 0x0100000000000000000000000000000000 000009c4: SWAP1 000009c5: SWAP3 000009c6: DIV 000009c7: AND 000009c8: SWAP1 000009c9: JUMP 000009ca: JUMPDEST 000009cb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000009e0: AND 000009e1: PUSH1 0x00 000009e3: SWAP1 000009e4: DUP2 000009e5: MSTORE 000009e6: PUSH1 0x20 000009e8: DUP2 000009e9: SWAP1 000009ea: MSTORE 000009eb: PUSH1 0x40 000009ed: SWAP1 000009ee: KECCAK256 000009ef: SLOAD 000009f0: SWAP1 000009f1: JUMP 000009f2: JUMPDEST 000009f3: PUSH1 0x00 000009f5: PUSH2 0x09fd 000009f8: CALLER 000009f9: PUSH2 0x1145 000009fc: JUMP 000009fd: JUMPDEST 000009fe: PUSH2 0x0a52 00000a01: JUMPI 00000a02: PUSH1 0x40 00000a04: MLOAD 00000a05: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000a26: DUP2 00000a27: MSTORE 00000a28: PUSH1 0x04 00000a2a: ADD 00000a2b: DUP1 00000a2c: DUP1 00000a2d: PUSH1 0x20 00000a2f: ADD 00000a30: DUP3 00000a31: DUP2 00000a32: SUB 00000a33: DUP3 00000a34: MSTORE 00000a35: PUSH1 0x2e 00000a37: DUP2 00000a38: MSTORE 00000a39: PUSH1 0x20 00000a3b: ADD 00000a3c: DUP1 00000a3d: PUSH2 0x18ac 00000a40: PUSH1 0x2e 00000a42: SWAP2 00000a43: CODECOPY 00000a44: PUSH1 0x40 00000a46: ADD 00000a47: SWAP2 00000a48: POP 00000a49: POP 00000a4a: PUSH1 0x40 00000a4c: MLOAD 00000a4d: DUP1 00000a4e: SWAP2 00000a4f: SUB 00000a50: SWAP1 00000a51: REVERT 00000a52: JUMPDEST 00000a53: PUSH2 0x0a5a 00000a56: PUSH2 0x0755 00000a59: JUMP 00000a5a: JUMPDEST 00000a5b: ISZERO 00000a5c: SWAP1 00000a5d: POP 00000a5e: DUP1 00000a5f: ISZERO 00000a60: PUSH2 0x0aa4 00000a63: JUMPI 00000a64: PUSH2 0x0aa4 00000a67: PUSH1 0x40 00000a69: MLOAD 00000a6a: DUP1 00000a6b: PUSH1 0x40 00000a6d: ADD 00000a6e: PUSH1 0x40 00000a70: MSTORE 00000a71: DUP1 00000a72: DUP6 00000a73: PUSH16 0xffffffffffffffffffffffffffffffff 00000a84: AND 00000a85: DUP2 00000a86: MSTORE 00000a87: PUSH1 0x20 00000a89: ADD 00000a8a: DUP5 00000a8b: PUSH16 0xffffffffffffffffffffffffffffffff 00000a9c: AND 00000a9d: DUP2 00000a9e: MSTORE 00000a9f: POP 00000aa0: PUSH2 0x165d 00000aa3: JUMP 00000aa4: JUMPDEST 00000aa5: PUSH1 0x40 00000aa7: DUP1 00000aa8: MLOAD 00000aa9: PUSH16 0xffffffffffffffffffffffffffffffff 00000aba: DUP1 00000abb: DUP7 00000abc: AND 00000abd: DUP3 00000abe: MSTORE 00000abf: DUP5 00000ac0: AND 00000ac1: PUSH1 0x20 00000ac3: DUP3 00000ac4: ADD 00000ac5: MSTORE 00000ac6: DUP3 00000ac7: ISZERO 00000ac8: ISZERO 00000ac9: DUP2 00000aca: DUP4 00000acb: ADD 00000acc: MSTORE 00000acd: SWAP1 00000ace: MLOAD 00000acf: PUSH32 0xcdcd2e977c58a9c82d799c0986ab5c6fe48d43a9b96bbf60a654b46728c6f667 00000af0: SWAP2 00000af1: DUP2 00000af2: SWAP1 00000af3: SUB 00000af4: PUSH1 0x60 00000af6: ADD 00000af7: SWAP1 00000af8: LOG1 00000af9: SWAP3 00000afa: SWAP2 00000afb: POP 00000afc: POP 00000afd: JUMP 00000afe: JUMPDEST 00000aff: PUSH1 0x04 00000b01: DUP1 00000b02: SLOAD 00000b03: PUSH1 0x40 00000b05: DUP1 00000b06: MLOAD 00000b07: PUSH1 0x20 00000b09: PUSH1 0x1f 00000b0b: PUSH1 0x02 00000b0d: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00000b2e: PUSH2 0x0100 00000b31: PUSH1 0x01 00000b33: DUP9 00000b34: AND 00000b35: ISZERO 00000b36: MUL 00000b37: ADD 00000b38: SWAP1 00000b39: SWAP6 00000b3a: AND 00000b3b: SWAP5 00000b3c: SWAP1 00000b3d: SWAP5 00000b3e: DIV 00000b3f: SWAP4 00000b40: DUP5 00000b41: ADD 00000b42: DUP2 00000b43: SWAP1 00000b44: DIV 00000b45: DUP2 00000b46: MUL 00000b47: DUP3 00000b48: ADD 00000b49: DUP2 00000b4a: ADD 00000b4b: SWAP1 00000b4c: SWAP3 00000b4d: MSTORE 00000b4e: DUP3 00000b4f: DUP2 00000b50: MSTORE 00000b51: PUSH1 0x60 00000b53: SWAP4 00000b54: SWAP1 00000b55: SWAP3 00000b56: SWAP1 00000b57: SWAP2 00000b58: DUP4 00000b59: ADD 00000b5a: DUP3 00000b5b: DUP3 00000b5c: DUP1 00000b5d: ISZERO 00000b5e: PUSH2 0x06d2 00000b61: JUMPI 00000b62: DUP1 00000b63: PUSH1 0x1f 00000b65: LT 00000b66: PUSH2 0x06a7 00000b69: JUMPI 00000b6a: PUSH2 0x0100 00000b6d: DUP1 00000b6e: DUP4 00000b6f: SLOAD 00000b70: DIV 00000b71: MUL 00000b72: DUP4 00000b73: MSTORE 00000b74: SWAP2 00000b75: PUSH1 0x20 00000b77: ADD 00000b78: SWAP2 00000b79: PUSH2 0x06d2 00000b7c: JUMP 00000b7d: JUMPDEST 00000b7e: PUSH1 0x00 00000b80: PUSH2 0x0b88 00000b83: CALLER 00000b84: PUSH2 0x09ca 00000b87: JUMP 00000b88: JUMPDEST 00000b89: SWAP1 00000b8a: POP 00000b8b: PUSH1 0x00 00000b8d: PUSH2 0x0b95 00000b90: DUP3 00000b91: PUSH2 0x08cb 00000b94: JUMP 00000b95: JUMPDEST 00000b96: SWAP1 00000b97: POP 00000b98: DUP1 00000b99: PUSH2 0x0ba1 00000b9c: JUMPI 00000b9d: PUSH1 0x00 00000b9f: SWAP2 00000ba0: POP 00000ba1: JUMPDEST 00000ba2: POP 00000ba3: SWAP1 00000ba4: JUMP 00000ba5: JUMPDEST 00000ba6: PUSH1 0x00 00000ba8: PUSH2 0x06f0 00000bab: PUSH2 0x0bb2 00000bae: PUSH2 0x0cf2 00000bb1: JUMP 00000bb2: JUMPDEST 00000bb3: DUP5 00000bb4: PUSH2 0x0746 00000bb7: DUP6 00000bb8: PUSH1 0x40 00000bba: MLOAD 00000bbb: DUP1 00000bbc: PUSH1 0x60 00000bbe: ADD 00000bbf: PUSH1 0x40 00000bc1: MSTORE 00000bc2: DUP1 00000bc3: PUSH1 0x25 00000bc5: DUP2 00000bc6: MSTORE 00000bc7: PUSH1 0x20 00000bc9: ADD 00000bca: PUSH2 0x19c8 00000bcd: PUSH1 0x25 00000bcf: SWAP2 00000bd0: CODECOPY 00000bd1: PUSH1 0x01 00000bd3: PUSH1 0x00 00000bd5: PUSH2 0x0bdc 00000bd8: PUSH2 0x0cf2 00000bdb: JUMP 00000bdc: JUMPDEST 00000bdd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000bf2: SWAP1 00000bf3: DUP2 00000bf4: AND 00000bf5: DUP3 00000bf6: MSTORE 00000bf7: PUSH1 0x20 00000bf9: DUP1 00000bfa: DUP4 00000bfb: ADD 00000bfc: SWAP4 00000bfd: SWAP1 00000bfe: SWAP4 00000bff: MSTORE 00000c00: PUSH1 0x40 00000c02: SWAP2 00000c03: DUP3 00000c04: ADD 00000c05: PUSH1 0x00 00000c07: SWAP1 00000c08: DUP2 00000c09: KECCAK256 00000c0a: SWAP2 00000c0b: DUP14 00000c0c: AND 00000c0d: DUP2 00000c0e: MSTORE 00000c0f: SWAP3 00000c10: MSTORE 00000c11: SWAP1 00000c12: KECCAK256 00000c13: SLOAD 00000c14: SWAP2 00000c15: SWAP1 00000c16: PUSH4 0xffffffff 00000c1b: PUSH2 0x1019 00000c1e: AND 00000c1f: JUMP 00000c20: JUMPDEST 00000c21: PUSH1 0x00 00000c23: PUSH2 0x06f0 00000c26: CALLER 00000c27: DUP5 00000c28: DUP5 00000c29: PUSH2 0x0e3d 00000c2c: JUMP 00000c2d: JUMPDEST 00000c2e: PUSH1 0x00 00000c30: PUSH2 0x06f4 00000c33: DUP3 00000c34: PUSH2 0x1145 00000c37: JUMP 00000c38: JUMPDEST 00000c39: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c4e: SWAP2 00000c4f: DUP3 00000c50: AND 00000c51: PUSH1 0x00 00000c53: SWAP1 00000c54: DUP2 00000c55: MSTORE 00000c56: PUSH1 0x01 00000c58: PUSH1 0x20 00000c5a: SWAP1 00000c5b: DUP2 00000c5c: MSTORE 00000c5d: PUSH1 0x40 00000c5f: DUP1 00000c60: DUP4 00000c61: KECCAK256 00000c62: SWAP4 00000c63: SWAP1 00000c64: SWAP5 00000c65: AND 00000c66: DUP3 00000c67: MSTORE 00000c68: SWAP2 00000c69: SWAP1 00000c6a: SWAP2 00000c6b: MSTORE 00000c6c: KECCAK256 00000c6d: SLOAD 00000c6e: SWAP1 00000c6f: JUMP 00000c70: JUMPDEST 00000c71: PUSH1 0x00 00000c73: PUSH2 0x0c7b 00000c76: CALLER 00000c77: PUSH2 0x1145 00000c7a: JUMP 00000c7b: JUMPDEST 00000c7c: PUSH2 0x0cd0 00000c7f: JUMPI 00000c80: PUSH1 0x40 00000c82: MLOAD 00000c83: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000ca4: DUP2 00000ca5: MSTORE 00000ca6: PUSH1 0x04 00000ca8: ADD 00000ca9: DUP1 00000caa: DUP1 00000cab: PUSH1 0x20 00000cad: ADD 00000cae: DUP3 00000caf: DUP2 00000cb0: SUB 00000cb1: DUP3 00000cb2: MSTORE 00000cb3: PUSH1 0x2e 00000cb5: DUP2 00000cb6: MSTORE 00000cb7: PUSH1 0x20 00000cb9: ADD 00000cba: DUP1 00000cbb: PUSH2 0x18ac 00000cbe: PUSH1 0x2e 00000cc0: SWAP2 00000cc1: CODECOPY 00000cc2: PUSH1 0x40 00000cc4: ADD 00000cc5: SWAP2 00000cc6: POP 00000cc7: POP 00000cc8: PUSH1 0x40 00000cca: MLOAD 00000ccb: DUP1 00000ccc: SWAP2 00000ccd: SUB 00000cce: SWAP1 00000ccf: REVERT 00000cd0: JUMPDEST 00000cd1: PUSH2 0x0cd9 00000cd4: DUP4 00000cd5: PUSH2 0x09ca 00000cd8: JUMP 00000cd9: JUMPDEST 00000cda: DUP3 00000cdb: GT 00000cdc: ISZERO 00000cdd: PUSH2 0x0ce8 00000ce0: JUMPI 00000ce1: POP 00000ce2: PUSH1 0x00 00000ce4: PUSH2 0x06f4 00000ce7: JUMP 00000ce8: JUMPDEST 00000ce9: PUSH2 0x06f0 00000cec: DUP4 00000ced: DUP4 00000cee: PUSH2 0x12c1 00000cf1: JUMP 00000cf2: JUMPDEST 00000cf3: CALLER 00000cf4: SWAP1 00000cf5: JUMP 00000cf6: JUMPDEST 00000cf7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d0c: DUP4 00000d0d: AND 00000d0e: PUSH2 0x0d62 00000d11: JUMPI 00000d12: PUSH1 0x40 00000d14: MLOAD 00000d15: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000d36: DUP2 00000d37: MSTORE 00000d38: PUSH1 0x04 00000d3a: ADD 00000d3b: DUP1 00000d3c: DUP1 00000d3d: PUSH1 0x20 00000d3f: ADD 00000d40: DUP3 00000d41: DUP2 00000d42: SUB 00000d43: DUP3 00000d44: MSTORE 00000d45: PUSH1 0x24 00000d47: DUP2 00000d48: MSTORE 00000d49: PUSH1 0x20 00000d4b: ADD 00000d4c: DUP1 00000d4d: PUSH2 0x19a4 00000d50: PUSH1 0x24 00000d52: SWAP2 00000d53: CODECOPY 00000d54: PUSH1 0x40 00000d56: ADD 00000d57: SWAP2 00000d58: POP 00000d59: POP 00000d5a: PUSH1 0x40 00000d5c: MLOAD 00000d5d: DUP1 00000d5e: SWAP2 00000d5f: SUB 00000d60: SWAP1 00000d61: REVERT 00000d62: JUMPDEST 00000d63: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d78: DUP3 00000d79: AND 00000d7a: PUSH2 0x0dce 00000d7d: JUMPI 00000d7e: PUSH1 0x40 00000d80: MLOAD 00000d81: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000da2: DUP2 00000da3: MSTORE 00000da4: PUSH1 0x04 00000da6: ADD 00000da7: DUP1 00000da8: DUP1 00000da9: PUSH1 0x20 00000dab: ADD 00000dac: DUP3 00000dad: DUP2 00000dae: SUB 00000daf: DUP3 00000db0: MSTORE 00000db1: PUSH1 0x22 00000db3: DUP2 00000db4: MSTORE 00000db5: PUSH1 0x20 00000db7: ADD 00000db8: DUP1 00000db9: PUSH2 0x1842 00000dbc: PUSH1 0x22 00000dbe: SWAP2 00000dbf: CODECOPY 00000dc0: PUSH1 0x40 00000dc2: ADD 00000dc3: SWAP2 00000dc4: POP 00000dc5: POP 00000dc6: PUSH1 0x40 00000dc8: MLOAD 00000dc9: DUP1 00000dca: SWAP2 00000dcb: SUB 00000dcc: SWAP1 00000dcd: REVERT 00000dce: JUMPDEST 00000dcf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000de4: DUP1 00000de5: DUP5 00000de6: AND 00000de7: PUSH1 0x00 00000de9: DUP2 00000dea: DUP2 00000deb: MSTORE 00000dec: PUSH1 0x01 00000dee: PUSH1 0x20 00000df0: SWAP1 00000df1: DUP2 00000df2: MSTORE 00000df3: PUSH1 0x40 00000df5: DUP1 00000df6: DUP4 00000df7: KECCAK256 00000df8: SWAP5 00000df9: DUP8 00000dfa: AND 00000dfb: DUP1 00000dfc: DUP5 00000dfd: MSTORE 00000dfe: SWAP5 00000dff: DUP3 00000e00: MSTORE 00000e01: SWAP2 00000e02: DUP3 00000e03: SWAP1 00000e04: KECCAK256 00000e05: DUP6 00000e06: SWAP1 00000e07: SSTORE 00000e08: DUP2 00000e09: MLOAD 00000e0a: DUP6 00000e0b: DUP2 00000e0c: MSTORE 00000e0d: SWAP2 00000e0e: MLOAD 00000e0f: PUSH32 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925 00000e30: SWAP3 00000e31: DUP2 00000e32: SWAP1 00000e33: SUB 00000e34: SWAP1 00000e35: SWAP2 00000e36: ADD 00000e37: SWAP1 00000e38: LOG3 00000e39: POP 00000e3a: POP 00000e3b: POP 00000e3c: JUMP 00000e3d: JUMPDEST 00000e3e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e53: DUP4 00000e54: AND 00000e55: PUSH2 0x0ea9 00000e58: JUMPI 00000e59: PUSH1 0x40 00000e5b: MLOAD 00000e5c: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000e7d: DUP2 00000e7e: MSTORE 00000e7f: PUSH1 0x04 00000e81: ADD 00000e82: DUP1 00000e83: DUP1 00000e84: PUSH1 0x20 00000e86: ADD 00000e87: DUP3 00000e88: DUP2 00000e89: SUB 00000e8a: DUP3 00000e8b: MSTORE 00000e8c: PUSH1 0x25 00000e8e: DUP2 00000e8f: MSTORE 00000e90: PUSH1 0x20 00000e92: ADD 00000e93: DUP1 00000e94: PUSH2 0x197f 00000e97: PUSH1 0x25 00000e99: SWAP2 00000e9a: CODECOPY 00000e9b: PUSH1 0x40 00000e9d: ADD 00000e9e: SWAP2 00000e9f: POP 00000ea0: POP 00000ea1: PUSH1 0x40 00000ea3: MLOAD 00000ea4: DUP1 00000ea5: SWAP2 00000ea6: SUB 00000ea7: SWAP1 00000ea8: REVERT 00000ea9: JUMPDEST 00000eaa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ebf: DUP3 00000ec0: AND 00000ec1: PUSH2 0x0f15 00000ec4: JUMPI 00000ec5: PUSH1 0x40 00000ec7: MLOAD 00000ec8: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000ee9: DUP2 00000eea: MSTORE 00000eeb: PUSH1 0x04 00000eed: ADD 00000eee: DUP1 00000eef: DUP1 00000ef0: PUSH1 0x20 00000ef2: ADD 00000ef3: DUP3 00000ef4: DUP2 00000ef5: SUB 00000ef6: DUP3 00000ef7: MSTORE 00000ef8: PUSH1 0x23 00000efa: DUP2 00000efb: MSTORE 00000efc: PUSH1 0x20 00000efe: ADD 00000eff: DUP1 00000f00: PUSH2 0x17fd 00000f03: PUSH1 0x23 00000f05: SWAP2 00000f06: CODECOPY 00000f07: PUSH1 0x40 00000f09: ADD 00000f0a: SWAP2 00000f0b: POP 00000f0c: POP 00000f0d: PUSH1 0x40 00000f0f: MLOAD 00000f10: DUP1 00000f11: SWAP2 00000f12: SUB 00000f13: SWAP1 00000f14: REVERT 00000f15: JUMPDEST 00000f16: PUSH2 0x0f20 00000f19: DUP4 00000f1a: DUP4 00000f1b: DUP4 00000f1c: PUSH2 0x172f 00000f1f: JUMP 00000f20: JUMPDEST 00000f21: PUSH2 0x0f70 00000f24: DUP2 00000f25: PUSH1 0x40 00000f27: MLOAD 00000f28: DUP1 00000f29: PUSH1 0x60 00000f2b: ADD 00000f2c: PUSH1 0x40 00000f2e: MSTORE 00000f2f: DUP1 00000f30: PUSH1 0x26 00000f32: DUP2 00000f33: MSTORE 00000f34: PUSH1 0x20 00000f36: ADD 00000f37: PUSH2 0x1864 00000f3a: PUSH1 0x26 00000f3c: SWAP2 00000f3d: CODECOPY 00000f3e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f53: DUP7 00000f54: AND 00000f55: PUSH1 0x00 00000f57: SWAP1 00000f58: DUP2 00000f59: MSTORE 00000f5a: PUSH1 0x20 00000f5c: DUP2 00000f5d: SWAP1 00000f5e: MSTORE 00000f5f: PUSH1 0x40 00000f61: SWAP1 00000f62: KECCAK256 00000f63: SLOAD 00000f64: SWAP2 00000f65: SWAP1 00000f66: PUSH4 0xffffffff 00000f6b: PUSH2 0x1019 00000f6e: AND 00000f6f: JUMP 00000f70: JUMPDEST 00000f71: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f86: DUP1 00000f87: DUP6 00000f88: AND 00000f89: PUSH1 0x00 00000f8b: SWAP1 00000f8c: DUP2 00000f8d: MSTORE 00000f8e: PUSH1 0x20 00000f90: DUP2 00000f91: SWAP1 00000f92: MSTORE 00000f93: PUSH1 0x40 00000f95: DUP1 00000f96: DUP3 00000f97: KECCAK256 00000f98: SWAP4 00000f99: SWAP1 00000f9a: SWAP4 00000f9b: SSTORE 00000f9c: SWAP1 00000f9d: DUP5 00000f9e: AND 00000f9f: DUP2 00000fa0: MSTORE 00000fa1: KECCAK256 00000fa2: SLOAD 00000fa3: PUSH2 0x0fb2 00000fa6: SWAP1 00000fa7: DUP3 00000fa8: PUSH4 0xffffffff 00000fad: PUSH2 0x10ca 00000fb0: AND 00000fb1: JUMP 00000fb2: JUMPDEST 00000fb3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000fc8: DUP1 00000fc9: DUP5 00000fca: AND 00000fcb: PUSH1 0x00 00000fcd: DUP2 00000fce: DUP2 00000fcf: MSTORE 00000fd0: PUSH1 0x20 00000fd2: DUP2 00000fd3: DUP2 00000fd4: MSTORE 00000fd5: PUSH1 0x40 00000fd7: SWAP2 00000fd8: DUP3 00000fd9: SWAP1 00000fda: KECCAK256 00000fdb: SWAP5 00000fdc: SWAP1 00000fdd: SWAP5 00000fde: SSTORE 00000fdf: DUP1 00000fe0: MLOAD 00000fe1: DUP6 00000fe2: DUP2 00000fe3: MSTORE 00000fe4: SWAP1 00000fe5: MLOAD 00000fe6: SWAP2 00000fe7: SWAP4 00000fe8: SWAP3 00000fe9: DUP8 00000fea: AND 00000feb: SWAP3 00000fec: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef 0000100d: SWAP3 0000100e: SWAP2 0000100f: DUP3 00001010: SWAP1 00001011: SUB 00001012: ADD 00001013: SWAP1 00001014: LOG3 00001015: POP 00001016: POP 00001017: POP 00001018: JUMP 00001019: JUMPDEST 0000101a: PUSH1 0x00 0000101c: DUP2 0000101d: DUP5 0000101e: DUP5 0000101f: GT 00001020: ISZERO 00001021: PUSH2 0x10c2 00001024: JUMPI 00001025: PUSH1 0x40 00001027: MLOAD 00001028: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001049: DUP2 0000104a: MSTORE 0000104b: PUSH1 0x04 0000104d: ADD 0000104e: DUP1 0000104f: DUP1 00001050: PUSH1 0x20 00001052: ADD 00001053: DUP3 00001054: DUP2 00001055: SUB 00001056: DUP3 00001057: MSTORE 00001058: DUP4 00001059: DUP2 0000105a: DUP2 0000105b: MLOAD 0000105c: DUP2 0000105d: MSTORE 0000105e: PUSH1 0x20 00001060: ADD 00001061: SWAP2 00001062: POP 00001063: DUP1 00001064: MLOAD 00001065: SWAP1 00001066: PUSH1 0x20 00001068: ADD 00001069: SWAP1 0000106a: DUP1 0000106b: DUP4 0000106c: DUP4 0000106d: PUSH1 0x00 0000106f: JUMPDEST 00001070: DUP4 00001071: DUP2 00001072: LT 00001073: ISZERO 00001074: PUSH2 0x1087 00001077: JUMPI 00001078: DUP2 00001079: DUP2 0000107a: ADD 0000107b: MLOAD 0000107c: DUP4 0000107d: DUP3 0000107e: ADD 0000107f: MSTORE 00001080: PUSH1 0x20 00001082: ADD 00001083: PUSH2 0x106f 00001086: JUMP 00001087: JUMPDEST 00001088: POP 00001089: POP 0000108a: POP 0000108b: POP 0000108c: SWAP1 0000108d: POP 0000108e: SWAP1 0000108f: DUP2 00001090: ADD 00001091: SWAP1 00001092: PUSH1 0x1f 00001094: AND 00001095: DUP1 00001096: ISZERO 00001097: PUSH2 0x10b4 0000109a: JUMPI 0000109b: DUP1 0000109c: DUP3 0000109d: SUB 0000109e: DUP1 0000109f: MLOAD 000010a0: PUSH1 0x01 000010a2: DUP4 000010a3: PUSH1 0x20 000010a5: SUB 000010a6: PUSH2 0x0100 000010a9: EXP 000010aa: SUB 000010ab: NOT 000010ac: AND 000010ad: DUP2 000010ae: MSTORE 000010af: PUSH1 0x20 000010b1: ADD 000010b2: SWAP2 000010b3: POP 000010b4: JUMPDEST 000010b5: POP 000010b6: SWAP3 000010b7: POP 000010b8: POP 000010b9: POP 000010ba: PUSH1 0x40 000010bc: MLOAD 000010bd: DUP1 000010be: SWAP2 000010bf: SUB 000010c0: SWAP1 000010c1: REVERT 000010c2: JUMPDEST 000010c3: POP 000010c4: POP 000010c5: POP 000010c6: SWAP1 000010c7: SUB 000010c8: SWAP1 000010c9: JUMP 000010ca: JUMPDEST 000010cb: PUSH1 0x00 000010cd: DUP3 000010ce: DUP3 000010cf: ADD 000010d0: DUP4 000010d1: DUP2 000010d2: LT 000010d3: ISZERO 000010d4: PUSH2 0x113e 000010d7: JUMPI 000010d8: PUSH1 0x40 000010da: DUP1 000010db: MLOAD 000010dc: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000010fd: DUP2 000010fe: MSTORE 000010ff: PUSH1 0x20 00001101: PUSH1 0x04 00001103: DUP3 00001104: ADD 00001105: MSTORE 00001106: PUSH1 0x1b 00001108: PUSH1 0x24 0000110a: DUP3 0000110b: ADD 0000110c: MSTORE 0000110d: PUSH32 0x536166654d6174683a206164646974696f6e206f766572666c6f770000000000 0000112e: PUSH1 0x44 00001130: DUP3 00001131: ADD 00001132: MSTORE 00001133: SWAP1 00001134: MLOAD 00001135: SWAP1 00001136: DUP2 00001137: SWAP1 00001138: SUB 00001139: PUSH1 0x64 0000113b: ADD 0000113c: SWAP1 0000113d: REVERT 0000113e: JUMPDEST 0000113f: SWAP4 00001140: SWAP3 00001141: POP 00001142: POP 00001143: POP 00001144: JUMP 00001145: JUMPDEST 00001146: PUSH32 0x0000000000000000000000008b24f5c764ab741bc8a2426505bda458c30df010 00001167: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000117c: SWAP1 0000117d: DUP2 0000117e: AND 0000117f: SWAP2 00001180: AND 00001181: EQ 00001182: SWAP1 00001183: JUMP 00001184: JUMPDEST 00001185: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000119a: DUP3 0000119b: AND 0000119c: PUSH2 0x1206 0000119f: JUMPI 000011a0: PUSH1 0x40 000011a2: DUP1 000011a3: MLOAD 000011a4: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000011c5: DUP2 000011c6: MSTORE 000011c7: PUSH1 0x20 000011c9: PUSH1 0x04 000011cb: DUP3 000011cc: ADD 000011cd: MSTORE 000011ce: PUSH1 0x1f 000011d0: PUSH1 0x24 000011d2: DUP3 000011d3: ADD 000011d4: MSTORE 000011d5: PUSH32 0x45524332303a206d696e7420746f20746865207a65726f206164647265737300 000011f6: PUSH1 0x44 000011f8: DUP3 000011f9: ADD 000011fa: MSTORE 000011fb: SWAP1 000011fc: MLOAD 000011fd: SWAP1 000011fe: DUP2 000011ff: SWAP1 00001200: SUB 00001201: PUSH1 0x64 00001203: ADD 00001204: SWAP1 00001205: REVERT 00001206: JUMPDEST 00001207: PUSH2 0x1212 0000120a: PUSH1 0x00 0000120c: DUP4 0000120d: DUP4 0000120e: PUSH2 0x172f 00001211: JUMP 00001212: JUMPDEST 00001213: PUSH1 0x02 00001215: SLOAD 00001216: PUSH2 0x1225 00001219: SWAP1 0000121a: DUP3 0000121b: PUSH4 0xffffffff 00001220: PUSH2 0x10ca 00001223: AND 00001224: JUMP 00001225: JUMPDEST 00001226: PUSH1 0x02 00001228: SSTORE 00001229: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000123e: DUP3 0000123f: AND 00001240: PUSH1 0x00 00001242: SWAP1 00001243: DUP2 00001244: MSTORE 00001245: PUSH1 0x20 00001247: DUP2 00001248: SWAP1 00001249: MSTORE 0000124a: PUSH1 0x40 0000124c: SWAP1 0000124d: KECCAK256 0000124e: SLOAD 0000124f: PUSH2 0x125e 00001252: SWAP1 00001253: DUP3 00001254: PUSH4 0xffffffff 00001259: PUSH2 0x10ca 0000125c: AND 0000125d: JUMP 0000125e: JUMPDEST 0000125f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001274: DUP4 00001275: AND 00001276: PUSH1 0x00 00001278: DUP2 00001279: DUP2 0000127a: MSTORE 0000127b: PUSH1 0x20 0000127d: DUP2 0000127e: DUP2 0000127f: MSTORE 00001280: PUSH1 0x40 00001282: DUP1 00001283: DUP4 00001284: KECCAK256 00001285: SWAP5 00001286: SWAP1 00001287: SWAP5 00001288: SSTORE 00001289: DUP4 0000128a: MLOAD 0000128b: DUP6 0000128c: DUP2 0000128d: MSTORE 0000128e: SWAP4 0000128f: MLOAD 00001290: SWAP3 00001291: SWAP4 00001292: SWAP2 00001293: SWAP3 00001294: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef 000012b5: SWAP3 000012b6: DUP2 000012b7: SWAP1 000012b8: SUB 000012b9: SWAP1 000012ba: SWAP2 000012bb: ADD 000012bc: SWAP1 000012bd: LOG3 000012be: POP 000012bf: POP 000012c0: JUMP 000012c1: JUMPDEST 000012c2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000012d7: DUP3 000012d8: AND 000012d9: PUSH2 0x132d 000012dc: JUMPI 000012dd: PUSH1 0x40 000012df: MLOAD 000012e0: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001301: DUP2 00001302: MSTORE 00001303: PUSH1 0x04 00001305: ADD 00001306: DUP1 00001307: DUP1 00001308: PUSH1 0x20 0000130a: ADD 0000130b: DUP3 0000130c: DUP2 0000130d: SUB 0000130e: DUP3 0000130f: MSTORE 00001310: PUSH1 0x21 00001312: DUP2 00001313: MSTORE 00001314: PUSH1 0x20 00001316: ADD 00001317: DUP1 00001318: PUSH2 0x195e 0000131b: PUSH1 0x21 0000131d: SWAP2 0000131e: CODECOPY 0000131f: PUSH1 0x40 00001321: ADD 00001322: SWAP2 00001323: POP 00001324: POP 00001325: PUSH1 0x40 00001327: MLOAD 00001328: DUP1 00001329: SWAP2 0000132a: SUB 0000132b: SWAP1 0000132c: REVERT 0000132d: JUMPDEST 0000132e: PUSH2 0x1339 00001331: DUP3 00001332: PUSH1 0x00 00001334: DUP4 00001335: PUSH2 0x172f 00001338: JUMP 00001339: JUMPDEST 0000133a: PUSH2 0x1389 0000133d: DUP2 0000133e: PUSH1 0x40 00001340: MLOAD 00001341: DUP1 00001342: PUSH1 0x60 00001344: ADD 00001345: PUSH1 0x40 00001347: MSTORE 00001348: DUP1 00001349: PUSH1 0x22 0000134b: DUP2 0000134c: MSTORE 0000134d: PUSH1 0x20 0000134f: ADD 00001350: PUSH2 0x1820 00001353: PUSH1 0x22 00001355: SWAP2 00001356: CODECOPY 00001357: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000136c: DUP6 0000136d: AND 0000136e: PUSH1 0x00 00001370: SWAP1 00001371: DUP2 00001372: MSTORE 00001373: PUSH1 0x20 00001375: DUP2 00001376: SWAP1 00001377: MSTORE 00001378: PUSH1 0x40 0000137a: SWAP1 0000137b: KECCAK256 0000137c: SLOAD 0000137d: SWAP2 0000137e: SWAP1 0000137f: PUSH4 0xffffffff 00001384: PUSH2 0x1019 00001387: AND 00001388: JUMP 00001389: JUMPDEST 0000138a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000139f: DUP4 000013a0: AND 000013a1: PUSH1 0x00 000013a3: SWAP1 000013a4: DUP2 000013a5: MSTORE 000013a6: PUSH1 0x20 000013a8: DUP2 000013a9: SWAP1 000013aa: MSTORE 000013ab: PUSH1 0x40 000013ad: SWAP1 000013ae: KECCAK256 000013af: SSTORE 000013b0: PUSH1 0x02 000013b2: SLOAD 000013b3: PUSH2 0x13c2 000013b6: SWAP1 000013b7: DUP3 000013b8: PUSH4 0xffffffff 000013bd: PUSH2 0x1734 000013c0: AND 000013c1: JUMP 000013c2: JUMPDEST 000013c3: PUSH1 0x02 000013c5: SSTORE 000013c6: PUSH1 0x40 000013c8: DUP1 000013c9: MLOAD 000013ca: DUP3 000013cb: DUP2 000013cc: MSTORE 000013cd: SWAP1 000013ce: MLOAD 000013cf: PUSH1 0x00 000013d1: SWAP2 000013d2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013e7: DUP6 000013e8: AND 000013e9: SWAP2 000013ea: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef 0000140b: SWAP2 0000140c: DUP2 0000140d: SWAP1 0000140e: SUB 0000140f: PUSH1 0x20 00001411: ADD 00001412: SWAP1 00001413: LOG3 00001414: POP 00001415: POP 00001416: JUMP 00001417: JUMPDEST 00001418: PUSH1 0x00 0000141a: DUP3 0000141b: PUSH2 0x1426 0000141e: JUMPI 0000141f: POP 00001420: PUSH1 0x00 00001422: PUSH2 0x06f4 00001425: JUMP 00001426: JUMPDEST 00001427: DUP3 00001428: DUP3 00001429: MUL 0000142a: DUP3 0000142b: DUP5 0000142c: DUP3 0000142d: DUP2 0000142e: PUSH2 0x1433 00001431: JUMPI 00001432: INVALID 00001433: JUMPDEST 00001434: DIV 00001435: EQ 00001436: PUSH2 0x113e 00001439: JUMPI 0000143a: PUSH1 0x40 0000143c: MLOAD 0000143d: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000145e: DUP2 0000145f: MSTORE 00001460: PUSH1 0x04 00001462: ADD 00001463: DUP1 00001464: DUP1 00001465: PUSH1 0x20 00001467: ADD 00001468: DUP3 00001469: DUP2 0000146a: SUB 0000146b: DUP3 0000146c: MSTORE 0000146d: PUSH1 0x21 0000146f: DUP2 00001470: MSTORE 00001471: PUSH1 0x20 00001473: ADD 00001474: DUP1 00001475: PUSH2 0x1915 00001478: PUSH1 0x21 0000147a: SWAP2 0000147b: CODECOPY 0000147c: PUSH1 0x40 0000147e: ADD 0000147f: SWAP2 00001480: POP 00001481: POP 00001482: PUSH1 0x40 00001484: MLOAD 00001485: DUP1 00001486: SWAP2 00001487: SUB 00001488: SWAP1 00001489: REVERT 0000148a: JUMPDEST 0000148b: PUSH1 0x00 0000148d: PUSH2 0x113e 00001490: DUP4 00001491: DUP4 00001492: PUSH1 0x40 00001494: MLOAD 00001495: DUP1 00001496: PUSH1 0x40 00001498: ADD 00001499: PUSH1 0x40 0000149b: MSTORE 0000149c: DUP1 0000149d: PUSH1 0x1a 0000149f: DUP2 000014a0: MSTORE 000014a1: PUSH1 0x20 000014a3: ADD 000014a4: PUSH32 0x536166654d6174683a206469766973696f6e206279207a65726f000000000000 000014c5: DUP2 000014c6: MSTORE 000014c7: POP 000014c8: PUSH2 0x1776 000014cb: JUMP 000014cc: JUMPDEST 000014cd: PUSH2 0x14d5 000014d0: DUP3 000014d1: PUSH2 0x17f5 000014d4: JUMP 000014d5: JUMPDEST 000014d6: DUP2 000014d7: SWAP1 000014d8: PUSH2 0x153c 000014db: JUMPI 000014dc: PUSH1 0x40 000014de: MLOAD 000014df: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001500: DUP2 00001501: MSTORE 00001502: PUSH1 0x20 00001504: PUSH1 0x04 00001506: DUP3 00001507: ADD 00001508: DUP2 00001509: DUP2 0000150a: MSTORE 0000150b: DUP4 0000150c: MLOAD 0000150d: PUSH1 0x24 0000150f: DUP5 00001510: ADD 00001511: MSTORE 00001512: DUP4 00001513: MLOAD 00001514: SWAP1 00001515: SWAP3 00001516: DUP4 00001517: SWAP3 00001518: PUSH1 0x44 0000151a: SWAP1 0000151b: SWAP2 0000151c: ADD 0000151d: SWAP2 0000151e: SWAP1 0000151f: DUP6 00001520: ADD 00001521: SWAP1 00001522: DUP1 00001523: DUP4 00001524: DUP4 00001525: PUSH1 0x00 00001527: DUP4 00001528: ISZERO 00001529: PUSH2 0x1087 0000152c: JUMPI 0000152d: DUP2 0000152e: DUP2 0000152f: ADD 00001530: MLOAD 00001531: DUP4 00001532: DUP3 00001533: ADD 00001534: MSTORE 00001535: PUSH1 0x20 00001537: ADD 00001538: PUSH2 0x106f 0000153b: JUMP 0000153c: JUMPDEST 0000153d: POP 0000153e: PUSH1 0x40 00001540: MLOAD 00001541: PUSH1 0x00 00001543: SWAP1 00001544: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001559: DUP6 0000155a: AND 0000155b: SWAP1 0000155c: DUP5 0000155d: SWAP1 0000155e: DUP4 0000155f: DUP2 00001560: DUP2 00001561: DUP2 00001562: DUP6 00001563: DUP8 00001564: GAS 00001565: CALL 00001566: SWAP3 00001567: POP 00001568: POP 00001569: POP 0000156a: RETURNDATASIZE 0000156b: DUP1 0000156c: PUSH1 0x00 0000156e: DUP2 0000156f: EQ 00001570: PUSH2 0x1595 00001573: JUMPI 00001574: PUSH1 0x40 00001576: MLOAD 00001577: SWAP2 00001578: POP 00001579: PUSH1 0x1f 0000157b: NOT 0000157c: PUSH1 0x3f 0000157e: RETURNDATASIZE 0000157f: ADD 00001580: AND 00001581: DUP3 00001582: ADD 00001583: PUSH1 0x40 00001585: MSTORE 00001586: RETURNDATASIZE 00001587: DUP3 00001588: MSTORE 00001589: RETURNDATASIZE 0000158a: PUSH1 0x00 0000158c: PUSH1 0x20 0000158e: DUP5 0000158f: ADD 00001590: RETURNDATACOPY 00001591: PUSH2 0x159a 00001594: JUMP 00001595: JUMPDEST 00001596: PUSH1 0x60 00001598: SWAP2 00001599: POP 0000159a: JUMPDEST 0000159b: POP 0000159c: POP 0000159d: SWAP1 0000159e: POP 0000159f: DUP1 000015a0: PUSH2 0x160a 000015a3: JUMPI 000015a4: PUSH1 0x40 000015a6: DUP1 000015a7: MLOAD 000015a8: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000015c9: DUP2 000015ca: MSTORE 000015cb: PUSH1 0x20 000015cd: PUSH1 0x04 000015cf: DUP3 000015d0: ADD 000015d1: MSTORE 000015d2: PUSH1 0x19 000015d4: PUSH1 0x24 000015d6: DUP3 000015d7: ADD 000015d8: MSTORE 000015d9: PUSH32 0x7472616e7366657272696e67204574686572206661696c656400000000000000 000015fa: PUSH1 0x44 000015fc: DUP3 000015fd: ADD 000015fe: MSTORE 000015ff: SWAP1 00001600: MLOAD 00001601: SWAP1 00001602: DUP2 00001603: SWAP1 00001604: SUB 00001605: PUSH1 0x64 00001607: ADD 00001608: SWAP1 00001609: REVERT 0000160a: JUMPDEST 0000160b: PUSH1 0x40 0000160d: DUP1 0000160e: MLOAD 0000160f: DUP5 00001610: DUP2 00001611: MSTORE 00001612: SWAP1 00001613: MLOAD 00001614: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001629: DUP7 0000162a: AND 0000162b: SWAP2 0000162c: ADDRESS 0000162d: SWAP2 0000162e: PUSH32 0xdd4e7375a5084e0c4cc4e1bfc7ba67beb26a368120ea78d2e0948123910bbf7c 0000164f: SWAP2 00001650: DUP2 00001651: SWAP1 00001652: SUB 00001653: PUSH1 0x20 00001655: ADD 00001656: SWAP1 00001657: LOG3 00001658: POP 00001659: POP 0000165a: POP 0000165b: POP 0000165c: JUMP 0000165d: JUMPDEST 0000165e: PUSH1 0x20 00001660: DUP2 00001661: ADD 00001662: MLOAD 00001663: PUSH16 0xffffffffffffffffffffffffffffffff 00001674: AND 00001675: PUSH2 0x16c9 00001678: JUMPI 00001679: PUSH1 0x40 0000167b: MLOAD 0000167c: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000169d: DUP2 0000169e: MSTORE 0000169f: PUSH1 0x04 000016a1: ADD 000016a2: DUP1 000016a3: DUP1 000016a4: PUSH1 0x20 000016a6: ADD 000016a7: DUP3 000016a8: DUP2 000016a9: SUB 000016aa: DUP3 000016ab: MSTORE 000016ac: PUSH1 0x3b 000016ae: DUP2 000016af: MSTORE 000016b0: PUSH1 0x20 000016b2: ADD 000016b3: DUP1 000016b4: PUSH2 0x18da 000016b7: PUSH1 0x3b 000016b9: SWAP2 000016ba: CODECOPY 000016bb: PUSH1 0x40 000016bd: ADD 000016be: SWAP2 000016bf: POP 000016c0: POP 000016c1: PUSH1 0x40 000016c3: MLOAD 000016c4: DUP1 000016c5: SWAP2 000016c6: SUB 000016c7: SWAP1 000016c8: REVERT 000016c9: JUMPDEST 000016ca: DUP1 000016cb: MLOAD 000016cc: PUSH1 0x06 000016ce: DUP1 000016cf: SLOAD 000016d0: PUSH1 0x20 000016d2: SWAP1 000016d3: SWAP4 000016d4: ADD 000016d5: MLOAD 000016d6: PUSH16 0xffffffffffffffffffffffffffffffff 000016e7: SWAP1 000016e8: DUP2 000016e9: AND 000016ea: PUSH17 0x0100000000000000000000000000000000 000016fc: MUL 000016fd: SWAP3 000016fe: DUP2 000016ff: AND 00001700: PUSH32 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000 00001721: SWAP1 00001722: SWAP5 00001723: AND 00001724: SWAP4 00001725: SWAP1 00001726: SWAP4 00001727: OR 00001728: SWAP1 00001729: SWAP3 0000172a: AND 0000172b: OR 0000172c: SWAP1 0000172d: SSTORE 0000172e: JUMP 0000172f: JUMPDEST 00001730: POP 00001731: POP 00001732: POP 00001733: JUMP 00001734: JUMPDEST 00001735: PUSH1 0x00 00001737: PUSH2 0x113e 0000173a: DUP4 0000173b: DUP4 0000173c: PUSH1 0x40 0000173e: MLOAD 0000173f: DUP1 00001740: PUSH1 0x40 00001742: ADD 00001743: PUSH1 0x40 00001745: MSTORE 00001746: DUP1 00001747: PUSH1 0x1e 00001749: DUP2 0000174a: MSTORE 0000174b: PUSH1 0x20 0000174d: ADD 0000174e: PUSH32 0x536166654d6174683a207375627472616374696f6e206f766572666c6f770000 0000176f: DUP2 00001770: MSTORE 00001771: POP 00001772: PUSH2 0x1019 00001775: JUMP 00001776: JUMPDEST 00001777: PUSH1 0x00 00001779: DUP2 0000177a: DUP4 0000177b: PUSH2 0x17df 0000177e: JUMPI 0000177f: PUSH1 0x40 00001781: MLOAD 00001782: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000017a3: DUP2 000017a4: MSTORE 000017a5: PUSH1 0x20 000017a7: PUSH1 0x04 000017a9: DUP3 000017aa: ADD 000017ab: DUP2 000017ac: DUP2 000017ad: MSTORE 000017ae: DUP4 000017af: MLOAD 000017b0: PUSH1 0x24 000017b2: DUP5 000017b3: ADD 000017b4: MSTORE 000017b5: DUP4 000017b6: MLOAD 000017b7: SWAP1 000017b8: SWAP3 000017b9: DUP4 000017ba: SWAP3 000017bb: PUSH1 0x44 000017bd: SWAP1 000017be: SWAP2 000017bf: ADD 000017c0: SWAP2 000017c1: SWAP1 000017c2: DUP6 000017c3: ADD 000017c4: SWAP1 000017c5: DUP1 000017c6: DUP4 000017c7: DUP4 000017c8: PUSH1 0x00 000017ca: DUP4 000017cb: ISZERO 000017cc: PUSH2 0x1087 000017cf: JUMPI 000017d0: DUP2 000017d1: DUP2 000017d2: ADD 000017d3: MLOAD 000017d4: DUP4 000017d5: DUP3 000017d6: ADD 000017d7: MSTORE 000017d8: PUSH1 0x20 000017da: ADD 000017db: PUSH2 0x106f 000017de: JUMP 000017df: JUMPDEST 000017e0: POP 000017e1: PUSH1 0x00 000017e3: DUP4 000017e4: DUP6 000017e5: DUP2 000017e6: PUSH2 0x17eb 000017e9: JUMPI 000017ea: INVALID 000017eb: JUMPDEST 000017ec: DIV 000017ed: SWAP6 000017ee: SWAP5 000017ef: POP 000017f0: POP 000017f1: POP 000017f2: POP 000017f3: POP 000017f4: JUMP 000017f5: JUMPDEST 000017f6: ADDRESS 000017f7: BALANCE 000017f8: LT 000017f9: ISZERO 000017fa: SWAP1 000017fb: JUMP 000017fc: INVALID 000017fd: GASLIMIT 000017fe: MSTORE 000017ff: NUMBER 00001800: ORIGIN 00001801: ADDRESS 00001802: GASPRICE 00001803: KECCAK256 00001804: PUSH21 0x72616e7366657220746f20746865207a65726f2061 0000181a: PUSH5 0x6472657373 00001820: GASLIMIT 00001821: MSTORE 00001822: NUMBER 00001823: ORIGIN 00001824: ADDRESS 00001825: GASPRICE 00001826: KECCAK256 00001827: PUSH3 0x75726e 0000182b: KECCAK256 0000182c: PUSH2 0x6d6f 0000182f: PUSH22 0x6e7420657863656564732062616c616e636545524332 00001846: ADDRESS 00001847: GASPRICE 00001848: KECCAK256 00001849: PUSH2 0x7070 0000184c: PUSH19 0x6f766520746f20746865207a65726f20616464 00001860: PUSH19 0x65737345524332303a207472616e7366657220 00001874: PUSH2 0x6d6f 00001877: PUSH22 0x6e7420657863656564732062616c616e636573797374 0000188e: PUSH6 0x6d206572726f 00001895: PUSH19 0x3a20696e73756666696369656e742062616c61 000018a9: PUSH15 0x63656f6e6c79206465706c6f796572 000018b9: KECCAK256 000018ba: PUSH10 0x7320616c6c6f77656420 000018c5: PUSH21 0x6f2063616c6c20746869732066756e6374696f6e73 000018db: PUSH26 0x7374656d206572726f723a207468652065786368616e67652072 000018f6: PUSH2 0x7465 000018f9: KECCAK256 000018fa: PUSH14 0x757374206265206e6f6e2d6e6567 00001909: PUSH2 0x7469 0000190c: PUSH23 0x65206e756d626572536166654d6174683a206d756c7469 00001924: PUSH17 0x6c69636174696f6e206f766572666c6f77 00001936: GASLIMIT 00001937: MSTORE 00001938: NUMBER 00001939: ORIGIN 0000193a: ADDRESS 0000193b: GASPRICE 0000193c: KECCAK256 0000193d: PUSH21 0x72616e7366657220616d6f756e7420657863656564 00001953: PUSH20 0x20616c6c6f77616e636545524332303a20627572 00001968: PUSH15 0x2066726f6d20746865207a65726f20 00001978: PUSH2 0x6464 0000197b: PUSH19 0x65737345524332303a207472616e7366657220 0000198f: PUSH7 0x726f6d20746865 00001997: KECCAK256 00001998: PUSH27 0x65726f206164647265737345524332303a20617070726f76652066 000019b4: PUSH19 0x6f6d20746865207a65726f2061646472657373 000019c8: GASLIMIT 000019c9: MSTORE 000019ca: NUMBER 000019cb: ORIGIN 000019cc: ADDRESS 000019cd: GASPRICE 000019ce: KECCAK256 000019cf: PUSH5 0x6563726561 000019d5: PUSH20 0x656420616c6c6f77616e63652062656c6f77207a 000019ea: PUSH6 0x726fa2646970 000019f1: PUSH7 0x73582212204d7f 000019f9: PUSH13 0x98e7947c587cb2cacbbd60112f 00001a07: UNKNOWN(0xF6) 00001a08: PUSH18 0xfeabdd34e2fe6aaa8e4e36045e5964736f6c 00001a1b: PUSH4 0x43000606 00001a20: STOP 00001a21: CALLER
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | auth | detector | Authorization based on tx.origin | 70 | no | — |
viewvalidation_json{
"reason": "missing sink mapping",
"status": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xaa271e1a",
"selector": "0xaa271e1a",
"calldata_variants": [
"0xaa271e1a",
"0xaa271e1a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdd62ed3e",
"selector": "0xdd62ed3e",
"calldata_variants": [
"0xdd62ed3e",
"0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf05fcdf2",
"selector": "0xf05fcdf2",
"calldata_variants": [
"0xf05fcdf2",
"0xf05fcdf20000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa457c2d7",
"selector": "0xa457c2d7",
"calldata_variants": [
"0xa457c2d7",
"0xa457c2d70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa9059cbb",
"selector": "0xa9059cbb",
"calldata_variants": [
"0xa9059cbb",
"0xa9059cbb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x903d8e77",
"selector": "0x903d8e77",
"calldata_variants": [
"0x903d8e77",
"0x903d8e770000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x95d89b41",
"selector": "0x95d89b41",
"calldata_variants": [
"0x95d89b41",
"0x95d89b410000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9975038c",
"selector": "0x9975038c",
"calldata_variants": [
"0x9975038c",
"0x9975038c0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 6144,
"type": "tx_origin_used"
},
{
"pc": 6179,
"type": "tx_origin_used"
},
{
"pc": 6457,
"type": "tx_origin_used"
},
{
"pc": 6603,
"type": "tx_origin_used"
}
]
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0x7a80b0dcccda52b55e14905fdfe60950e691c6b733bd10f944b77550bf9d4ff3
call_targets:
0x2f6ca23fef6dea7c887bea5684bc1773e708b058
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x7a80b0dcccda52b55e14905fdfe60950e691c6b733bd10f944b77550bf9d4ff3",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x2f6ca23fef6dea7c887bea5684bc1773e708b058"
],
"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": "0xaa271e1a",
"selector": "0xaa271e1a",
"calldata_variants": [
"0xaa271e1a",
"0xaa271e1a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdd62ed3e",
"selector": "0xdd62ed3e",
"calldata_variants": [
"0xdd62ed3e",
"0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf05fcdf2",
"selector": "0xf05fcdf2",
"calldata_variants": [
"0xf05fcdf2",
"0xf05fcdf20000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa457c2d7",
"selector": "0xa457c2d7",
"calldata_variants": [
"0xa457c2d7",
"0xa457c2d70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa9059cbb",
"selector": "0xa9059cbb",
"calldata_variants": [
"0xa9059cbb",
"0xa9059cbb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x903d8e77",
"selector": "0x903d8e77",
"calldata_variants": [
"0x903d8e77",
"0x903d8e770000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x95d89b41",
"selector": "0x95d89b41",
"calldata_variants": [
"0x95d89b41",
"0x95d89b410000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9975038c",
"selector": "0x9975038c",
"calldata_variants": [
"0x9975038c",
"0x9975038c0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 5477,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 1,
"guards_detected": [
{
"pc": 6144,
"type": "tx_origin_used"
},
{
"pc": 6179,
"type": "tx_origin_used"
},
{
"pc": 6457,
"type": "tx_origin_used"
},
{
"pc": 6603,
"type": "tx_origin_used"
}
],
"untrusted_call_count": 1
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0x7a80b0dcccda52b55e14905fdfe60950e691c6b733bd10f944b77550bf9d4ff3
call_targets:
0x2f6ca23fef6dea7c887bea5684bc1773e708b058
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x7a80b0dcccda52b55e14905fdfe60950e691c6b733bd10f944b77550bf9d4ff3",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x2f6ca23fef6dea7c887bea5684bc1773e708b058"
],
"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": "0xaa271e1a",
"selector": "0xaa271e1a",
"calldata_variants": [
"0xaa271e1a",
"0xaa271e1a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdd62ed3e",
"selector": "0xdd62ed3e",
"calldata_variants": [
"0xdd62ed3e",
"0xdd62ed3e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf05fcdf2",
"selector": "0xf05fcdf2",
"calldata_variants": [
"0xf05fcdf2",
"0xf05fcdf20000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa457c2d7",
"selector": "0xa457c2d7",
"calldata_variants": [
"0xa457c2d7",
"0xa457c2d70000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa9059cbb",
"selector": "0xa9059cbb",
"calldata_variants": [
"0xa9059cbb",
"0xa9059cbb0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x903d8e77",
"selector": "0x903d8e77",
"calldata_variants": [
"0x903d8e77",
"0x903d8e770000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x95d89b41",
"selector": "0x95d89b41",
"calldata_variants": [
"0x95d89b41",
"0x95d89b410000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9975038c",
"selector": "0x9975038c",
"calldata_variants": [
"0x9975038c",
"0x9975038c0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 5477,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 1,
"guards_detected": [
{
"pc": 6144,
"type": "tx_origin_used"
},
{
"pc": 6179,
"type": "tx_origin_used"
},
{
"pc": 6457,
"type": "tx_origin_used"
},
{
"pc": 6603,
"type": "tx_origin_used"
}
]
}
|