cfc80ec3-a89d-448e-9672-645ce283a8b4
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 |
|---|---|---|---|---|
| 31682 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 95515 | artifact.fetch | complete | 1 / 3 | 2 weeks ago |
| 95516 | tool.cast_disasm | complete | 1 / 3 | 2 weeks ago |
| 95517 | analysis.bundle | complete | 1 / 3 | 2 weeks ago |
| 95518 | capability.graph | complete | 1 / 3 | 2 weeks ago |
| 95519 | detector.run | complete | 1 / 3 | 2 weeks ago |
| 95520 | validation.fork | complete | 1 / 3 | 2 weeks ago |
No slither job recorded yet.
[codex:212594] OpenAI Codex v0.77.0 (research preview)
[codex:212594] --------
[codex:212594] workdir: /tmp/codex-multi-oue7fqnv
[codex:212594] model: gpt-5.2-codex
[codex:212594] provider: openai
[codex:212594] approval: never
[codex:212594] sandbox: read-only
[codex:212594] reasoning effort: xhigh
[codex:212594] reasoning summaries: auto
[codex:212594] session id: 019b8c5e-bb03-7210-b3b5-b78e8333cfcf
[codex:212594] --------
[codex:212594] user
[codex:212594] 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:212594]
[codex:212594] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:212594]
[codex:212594] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:212594] - Gas inefficiency, code quality, or best practices
[codex:212594] - Theoretical vulnerabilities without a clear extraction path
[codex:212594] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:212594] - Issues requiring social engineering or off-chain coordination
[codex:212594]
[codex:212594] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:212594] - CALL/DELEGATECALL with controllable destination or calldata
[codex:212594] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:212594] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:212594] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:212594] - External calls before state updates (reentrancy)
[codex:212594] - SELFDESTRUCT with controllable beneficiary
[codex:212594] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:212594]
[codex:212594] For each finding, you MUST explain:
[codex:212594] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:212594] 2. The concrete sequence of transactions to extract value
[codex:212594] 3. Why you believe this is exploitable (not just suspicious)
[codex:212594]
[codex:212594] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:212594] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:212594]
[codex:212594] Output MUST be valid JSON matching the provided schema.
[codex:212594] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:212594] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:212594] mcp startup: no servers
[codex:212594]
[codex:212594] thinking
[codex:212594] **Reading BYTECODE_BUNDLE.txt**
[codex:212594] exec
[codex:212594] /bin/bash -lc ls in /tmp/codex-multi-oue7fqnv succeeded in 6ms:
[codex:212594] BYTECODE_BUNDLE.txt
[codex:212594] codex-output-schema.json
[codex:212594] exec
[codex:212594] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-oue7fqnv succeeded in 5ms:
[codex:212594] Runtime bytecode bundle for best-effort auditing.
[codex:212594] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:212594]
[codex:212594] FILE: runtime_bytecode.hex
[codex:212594] 0x6060604052600436106101ee576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146101f357806318160ddd146102815780631fd9f187146102aa578063210fe93b146102cd578063313ce567146103305780633ccfd60b1461035f5780633eaaf86b1461037457806340c558b21461039d57806342a4af66146103d4578063442890d5146104065780634da2b48e1461045b57806351605d801461047357806351ecfd161461050157806353e9dcae1461053857806355bdd4ac146105d45780635a3b7e421461061f57806361718141146106ad57806368d89792146106da57806370a08231146107495780637b2c514814610796578063861dd0a5146107d357806393fffddc1461086557806395d89b41146108ba5780639c9cc12a146109485780639d773a1b1461098b5780639e3e687814610a3a578063a0a8e46014610a67578063a2093e1b14610a96578063a7e1a8ee14610ac2578063a9059cbb14610b28578063ab179e9f14610b82578063b3c6487b14610bab578063b936483514610bd7578063d72503ba14610c3a578063dddf33cc14610c52578063e3acc49a14610c7e578063ea34130914610cb5578063ebeb0f4814610cde578063f3f4370314610cf3578063f7e2367714610d40575b600080fd5b34156101fe57600080fd5b610206610de5565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561024657808201518184015260208101905061022b565b50505050905090810190601f1680156102735780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561028c57600080fd5b610294610e83565b6040518082815260200191505060405180910390f35b34156102b557600080fd5b6102cb6004808035906020019091905050610e8d565b005b34156102d857600080fd5b6102ee600480803590602001909190505061106b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561033b57600080fd5b61034361109e565b604051808260ff1660ff16815260200191505060405180910390f35b341561036a57600080fd5b6103726110b1565b005b341561037f57600080fd5b61038761117d565b6040518082815260200191505060405180910390f35b34156103a857600080fd5b6103be6004808035906020019091905050611183565b6040518082815260200191505060405180910390f35b34156103df57600080fd5b610404600480803563ffffffff169060200190919080359060200190919050506111a7565b005b341561041157600080fd5b610419611290565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61047160048080359060200190919050506112ba565b005b341561047e57600080fd5b61048661147c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104c65780820151818401526020810190506104ab565b50505050905090810190601f1680156104f35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561050c57600080fd5b610522600480803590602001909190505061151a565b6040518082815260200191505060405180910390f35b341561054357600080fd5b6105596004808035906020019091905050611599565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561059957808201518184015260208101905061057e565b50505050905090810190601f1680156105c65780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156105df57600080fd5b61061d600480803590602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611649565b005b341561062a57600080fd5b610632611849565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610672578082015181840152602081019050610657565b50505050905090810190601f16801561069f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156106b857600080fd5b6106c06118e7565b604051808215151515815260200191505060405180910390f35b34156106e557600080fd5b610747600480803590602001909190803590602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506118fa565b005b341561075457600080fd5b610780600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a96565b6040518082815260200191505060405180910390f35b34156107a157600080fd5b6107bd600480803563ffffffff16906020019091905050611b2d565b6040518082815260200191505060405180910390f35b34156107de57600080fd5b61084f600480803563ffffffff1690602001909190803590602001909190803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050611b45565b6040518082815260200191505060405180910390f35b341561087057600080fd5b610878611d18565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156108c557600080fd5b6108cd611d3e565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561090d5780820151818401526020810190506108f2565b50505050905090810190601f16801561093a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561095357600080fd5b6109696004808035906020019091905050611ddc565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b341561099657600080fd5b6109ac6004808035906020019091905050611e3b565b60405180861515151581526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019550505050505060405180910390f35b3415610a4557600080fd5b610a4d611ebe565b604051808215151515815260200191505060405180910390f35b3415610a7257600080fd5b610a7a611ed1565b604051808260ff1660ff16815260200191505060405180910390f35b3415610aa157600080fd5b610ac06004808035906020019091908035906020019091905050611ee4565b005b3415610acd57600080fd5b610b26600480803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050612227565b005b3415610b3357600080fd5b610b68600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506122cd565b604051808215151515815260200191505060405180910390f35b3415610b8d57600080fd5b610b956124fb565b6040518082815260200191505060405180910390f35b3415610bb657600080fd5b610bd56004808035906020019091908035906020019091905050612501565b005b3415610be257600080fd5b610bf8600480803590602001909190505061259a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610c50600480803590602001909190505061262f565b005b3415610c5d57600080fd5b610c7c6004808035906020019091908035906020019091905050612a1e565b005b3415610c8957600080fd5b610c9f6004808035906020019091905050612c09565b6040518082815260200191505060405180910390f35b3415610cc057600080fd5b610cc8612c21565b6040518082815260200191505060405180910390f35b3415610ce957600080fd5b610cf1612c27565b005b3415610cfe57600080fd5b610d2a600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612cfe565b6040518082815260200191505060405180910390f35b3415610d4b57600080fd5b610d6a6004808035906020019091908035906020019091905050612d16565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610daa578082015181840152602081019050610d8f565b50505050905090810190601f168015610dd75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e7b5780601f10610e5057610100808354040283529160200191610e7b565b820191906000526020600020905b815481529060010190602001808311610e5e57829003601f168201915b505050505081565b6000600654905090565b3373ffffffffffffffffffffffffffffffffffffffff16600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515610efa57600080fd5b60065481101515610f0a57600080fd5b60a0604051908101604052806000151581526020018281526020013373ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152506011600083815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050807f7d5dcd38c1855f2d3253f06fbd995a7b03b1bd0d20277c21ffcb093862ccb0df60405160405180910390a250565b600a6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900460ff1681565b6000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561117a57600080fd5b50565b60065481565b60108181548110151561119257fe5b90600052602060002090016000915090505481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561120357600080fd5b6010805490508263ffffffff161115151561121d57600080fd5b80600b60008463ffffffff1663ffffffff168152602001908152602001600020819055507f0d18952b49d796ef682b17341dc9347e1cbd53ede7fa0529048f9d1c2c485fd48282604051808363ffffffff1663ffffffff1681526020018281526020019250505060405180910390a15050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760169054906101000a900460ff161515156112d657600080fd5b6000600854141515156112e857600080fd5b6000600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561134057600080fd5b6006548110151561135057600080fd5b6009548110151561136057600080fd5b3461136a8261151a565b1115151561137757600080fd5b33600a600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550600860008154809291906001900391905055503373ffffffffffffffffffffffffffffffffffffffff167f8a0e37b73a0d9c82e205d4d1a3ff3d0b57ce5f4d7bccf6bac03336dc101cb7ba826040518082815260200191505060405180910390a250565b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115125780601f106114e757610100808354040283529160200191611512565b820191906000526020600020905b8154815290600101906020018083116114f557829003601f168201915b505050505081565b6000806006548310151561152d57600080fd5b6000600c60008581526020019081526020016000205414151561156557600c6000848152602001908152602001600020549150611593565b61156e83611ddc565b9050600b60008263ffffffff1663ffffffff1681526020019081526020016000205491505b50919050565b600e6020528060005260406000206000915090508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116415780601f1061161657610100808354040283529160200191611641565b820191906000526020600020905b81548152906001019060200180831161162457829003601f168201915b505050505081565b3373ffffffffffffffffffffffffffffffffffffffff16600a600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156116b657600080fd5b600654831015156116c657600080fd5b60a0604051908101604052806001151581526020018481526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152506011600085815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050508073ffffffffffffffffffffffffffffffffffffffff16837f76eaef99642f3e716e9cfa6e3047136d4087a9fc18673cb754c35f522fa6f61f846040518082815260200191505060405180910390a3505050565b60028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118df5780601f106118b4576101008083540402835291602001916118df565b820191906000526020600020905b8154815290600101906020018083116118c257829003601f168201915b505050505081565b600760159054906101000a900460ff1681565b611902612dd5565b6006548410151561191257600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16600a600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561197f57600080fd5b600083101580156119905750600683105b151561199b57600080fd5b600e60008481526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a425780601f10611a1757610100808354040283529160200191611a42565b820191906000526020600020905b815481529060010190602001808311611a2557829003601f168201915b505050505090506000815114151515611a5a57600080fd5b81600f600086815260200190815260200160002084600681101515611a7b57fe5b019080519060200190611a8f929190612de9565b5050505050565b600080600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414151515611ae657600080fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600b6020528060005260406000206000915090505481565b600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ba457600080fd5b600760159054906101000a900460ff16151515611bc057600080fd5b600085111515611bcf57600080fd5b84600954016009819055506006549050846006540160068190555084600854016008819055508260009080519060200190611c0b929190612de9565b5083600b60008863ffffffff1663ffffffff1681526020019081526020016000208190555060108054806001018281611c449190612e69565b9160005260206000209001600060065490919091505550847f76edb1b512062ed2fa9a21753f6906d5806f2522b48caf004f8b78eac6418ee560065486866040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611cce578082015181840152602081019050611cb3565b50505050905090810190601f168015611cfb5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a2600654915050949350505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611dd45780601f10611da957610100808354040283529160200191611dd4565b820191906000526020600020905b815481529060010190602001808311611db757829003601f168201915b505050505081565b600080600090505b6010805490508163ffffffff161015611e34578260108263ffffffff16815481101515611e0d57fe5b9060005260206000209001541115611e2757809150611e35565b8080600101915050611de4565b5b50919050565b60116020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154908060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905085565b600760169054906101000a900460ff1681565b600760149054906101000a900460ff1681565b600080600080600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611f4757600080fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1694508693505b8584111515612191578473ffffffffffffffffffffffffffffffffffffffff1663210fe93b856000604051602001526040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1515611ff057600080fd5b6102c65a03f1151561200157600080fd5b50505060405180519050925060008373ffffffffffffffffffffffffffffffffffffffff161415156121845782600a600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508473ffffffffffffffffffffffffffffffffffffffff166370a08231846000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561212257600080fd5b6102c65a03f1151561213357600080fd5b50505060405180519050915081600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8380600101945050611f70565b8473ffffffffffffffffffffffffffffffffffffffff1663ea3413096000604051602001526040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15156121fd57600080fd5b6102c65a03f1151561220e57600080fd5b5050506040518051905060088190555050505050505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561228457600080fd5b600083101580156122955750600683105b15156122a057600080fd5b81600e600085815260200190815260200160002090805190602001906122c7929190612de9565b50505050565b60006006548210801561233e57503373ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b801561238957506000600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156124ed57600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060019003919050555082600a600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190506124f2565b600090505b80905092915050565b60095481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561255e57600080fd5b6006548310151561256e57600080fd5b60008211151561257d57600080fd5b81600c600085815260200190815260200160002081905550505050565b600080600a600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156125f457600080fd5b600a600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000806006548310151561264257600080fd5b6011600084815260200190815260200160002091508160000160009054906101000a900460ff16151561267457600080fd5b8160030154341015151561268757600080fd5b600a600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561271857600080fd5b60008260040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156127bb573373ffffffffffffffffffffffffffffffffffffffff168260040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156127ba57600080fd5b5b8160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905033600a600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600190039190505550600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919060010191905055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60016040518082815260200191505060405180910390a3827f7d5dcd38c1855f2d3253f06fbd995a7b03b1bd0d20277c21ffcb093862ccb0df60405160405180910390a234601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16847f6bd7e7dd1046023e899374de62f095782f09a5ad4633e535375a11724bafed74346040518082815260200191505060405180910390a4505050565b3373ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515612a8b57600080fd5b60065482101515612a9b57600080fd5b60a0604051908101604052806001151581526020018381526020013373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001600073ffffffffffffffffffffffffffffffffffffffff168152506011600084815260200190815260200160002060008201518160000160006101000a81548160ff0219169083151502179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050506000827f76eaef99642f3e716e9cfa6e3047136d4087a9fc18673cb754c35f522fa6f61f836040518082815260200191505060405180910390a35050565b600c6020528060005260406000206000915090505481565b60085481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612c8457600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612ce057600080fd5b6001600760156101000a81548160ff02191690831515021790555050565b60126020528060005260406000206000915090505481565b600f60205281600052604060002081600681101515612d3157fe5b01600091509150508054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612dcd5780601f10612da257610100808354040283529160200191612dcd565b820191906000526020600020905b815481529060010190602001808311612db057829003601f168201915b505050505081565b602060405190810160405280600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612e2a57805160ff1916838001178555612e58565b82800160010185558215612e58579182015b82811115612e57578251825591602001919060010190612e3c565b5b509050612e659190612e95565b5090565b815481835581811511612e9057818360005260206000209182019101612e8f9190612e95565b5b505050565b612eb791905b80821115612eb3576000816000905550600101612e9b565b5090565b905600a165627a7a7230582064d7be1bcfd74d2391c2da3ea96662a2ef6143b56175c95f2cebc40d28868d460029
[codex:212594]
[codex:212594] thinking
[codex:212594] **Planning bytecode static analysis**
[codex:212594] exec
[codex:212594] /bin/bash -lc "python - <<'PY'
[codex:212594] from pathlib import Path
[codex:212594] import re
[codex:212594] code = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:212594] # extract hex after '0x'
[codex:212594] m = re.search(r'0x([0-9a-fA-F]+)', code)
[codex:212594] hexstr = m.group(1)
[codex:212594] # convert to bytes
[codex:212594] b = bytes.fromhex(hexstr)
[codex:212594] # opcode mapping
[codex:212594] opcodes = {}
[codex:212594] for i in range(0x00, 0x60):
[codex:212594] # default
[codex:212594] pass
[codex:212594] # fill known opcodes
[codex:212594] opcodes.update({
[codex:212594] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',
[codex:212594] 0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:212594] 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:212594] 0x20:'SHA3',
[codex:212594] 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:212594] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:212594] 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:212594] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:212594] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:212594] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:212594] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:212594] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:212594] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:212594]
[codex:212594] # disassemble and capture call-like opcodes with offsets
[codex:212594] calls = []
[codex:212594] selfdestructs = []
[codex:212594] delegates = []
[codex:212594] ops = []
[codex:212594]
[codex:212594] i = 0
[codex:212594] while i < len(b):
[codex:212594] op = b[i]
[codex:212594] name = opcodes.get(op, f'OP{op:02x}')
[codex:212594] if 0x60 <= op <= 0x7f:
[codex:212594] n = op - 0x5f
[codex:212594] data = b[i+1:i+1+n]
[codex:212594] ops.append((i, name, data))
[codex:212594] i += 1 + n
[codex:212594] continue
[codex:212594] ops.append((i, name, None))
[codex:212594] if name in ('CALL','CALLCODE','STATICCALL'):
[codex:212594] calls.append(i)
[codex:212594] if name == 'DELEGATECALL':
[codex:212594] delegates.append(i)
[codex:212594] if name == 'SELFDESTRUCT':
[codex:212594] selfdestructs.append(i)
[codex:212594] i += 1
[codex:212594]
[codex:212594] print('bytecode length', len(b))
[codex:212594] print('CALL-like offsets', calls[:20], '... total', len(calls))
[codex:212594] print('DELEGATECALL offsets', delegates)
[codex:212594] print('SELFDESTRUCT offsets', selfdestructs)
[codex:212594]
[codex:212594] # Show surrounding opcodes for CALL/DELEGATECALL/SELFDESTRUCT (few)
[codex:212594] from itertools import islice
[codex:212594]
[codex:212594] index_by_offset = {off: idx for idx,(off,_,_) in enumerate(ops)}
[codex:212594]
[codex:212594] def show_context(off, window=8):
[codex:212594] idx = index_by_offset[off]
[codex:212594] for j in range(max(0, idx-window), min(len(ops), idx+window+1)):
[codex:212594] o_off, o_name, o_data = ops[j]
[codex:212594] if o_data is not None:
[codex:212594] print(f\"{o_off:04x}: {o_name} 0x{o_data.hex()}\")
[codex:212594] else:
[codex:212594] print(f\"{o_off:04x}: {o_name}\")
[codex:212594] print('---')
[codex:212594]
[codex:212594] print('\\nContexts around DELEGATECALL')
[codex:212594] for off in delegates:
[codex:212594] show_context(off)
[codex:212594]
[codex:212594] print('Contexts around SELFDESTRUCT')
[codex:212594] for off in selfdestructs:
[codex:212594] show_context(off)
[codex:212594]
[codex:212594] # print context for first 10 CALLs
[codex:212594] print('Contexts around first 8 CALLs')
[codex:212594] for off in calls[:8]:
[codex:212594] show_context(off)
[codex:212594] PY" in /tmp/codex-multi-oue7fqnv succeeded in 37ms:
[codex:212594] bytecode length 12006
[codex:212594] CALL-like offsets [4458, 8182, 8488, 8707] ... total 4
[codex:212594] DELEGATECALL offsets []
[codex:212594] SELFDESTRUCT offsets []
[codex:212594]
[codex:212594] Contexts around DELEGATECALL
[codex:212594] Contexts around SELFDESTRUCT
[codex:212594] Contexts around first 8 CALLs
[codex:212594] 1162: MLOAD
[codex:212594] 1163: DUP1
[codex:212594] 1164: DUP4
[codex:212594] 1165: SUB
[codex:212594] 1166: DUP2
[codex:212594] 1167: DUP6
[codex:212594] 1168: DUP9
[codex:212594] 1169: DUP9
[codex:212594] 116a: CALL
[codex:212594] 116b: SWAP4
[codex:212594] 116c: POP
[codex:212594] 116d: POP
[codex:212594]
[codex:212594] thinking
[codex:212594] **Examining CALL instructions in detail**
[codex:212594]
[codex:212594] I'm focusing on the four CALL opcodes found, aiming to understand their arguments and whether they're involved in ETH or token transfers. Since their stack arguments are intricate, I plan to generate disassembly around each call with ample context and try a partial stack evaluation to decode gas, to-address, and value parameters. Given the small number of calls, a manual deep dive seems feasible.
[codex:212594] exec
[codex:212594] /bin/bash -lc "python - <<'PY'
[codex:212594] from pathlib import Path
[codex:212594] import re
[codex:212594] code = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:212594] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:212594] bytecode = bytes.fromhex(hexstr)
[codex:212594] # opcode map
[codex:212594] opnames = {}
[codex:212594] # create map
[codex:212594] for i in range(0x00,0x100):
[codex:212594] opnames[i]=f'OP{i:02x}'
[codex:212594] # fill
[codex:212594] opnames.update({
[codex:212594] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',
[codex:212594] 0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:212594] 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:212594] 0x20:'SHA3',
[codex:212594] 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:212594] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:212594] 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:212594] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:212594] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:212594] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:212594] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:212594] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:212594] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:212594]
[codex:212594] # build disassembly list
[codex:212594] ops = []
[codex:212594] i=0
[codex:212594] while i < len(bytecode):
[codex:212594] op = bytecode[i]
[codex:212594] name = opnames[op]
[codex:212594] if 0x60 <= op <= 0x7f:
[codex:212594] n = op-0x5f
[codex:212594] data = bytecode[i+1:i+1+n]
[codex:212594] ops.append((i, name, data))
[codex:212594] i += 1+n
[codex:212594] else:
[codex:212594] ops.append((i, name, None))
[codex:212594] i += 1
[codex:212594]
[codex:212594] # find CALL offsets
[codex:212594] call_offsets = [off for off,name,data in ops if name=='CALL']
[codex:212594] print('CALL offsets', [hex(o) for o in call_offsets])
[codex:212594]
[codex:212594] index_by_off = {off: idx for idx,(off,_,_) in enumerate(ops)}
[codex:212594]
[codex:212594] def dump(off, window=25):
[codex:212594] idx = index_by_off[off]
[codex:212594] start = max(0, idx-window)
[codex:212594] end = min(len(ops), idx+window+1)
[codex:212594] for j in range(start,end):
[codex:212594] o_off, o_name, o_data = ops[j]
[codex:212594] if o_data is not None:
[codex:212594] print(f\"{o_off:04x}: {o_name} 0x{o_data.hex()}\")
[codex:212594] else:
[codex:212594] print(f\"{o_off:04x}: {o_name}\")
[codex:212594] print('---')
[codex:212594]
[codex:212594] for off in call_offsets:
[codex:212594] dump(off, window=30)
[codex:212594]
[codex:212594] PY" in /tmp/codex-multi-oue7fqnv succeeded in 34ms:
[codex:212594] CALL offsets ['0x116a', '0x1ff6', '0x2128', '0x2203']
[codex:212594] 1131: PUSH1 0x20
[codex:212594] 1133: ADD
[codex:212594] 1134: PUSH1 0x00
[codex:212594] 1136: SHA3
[codex:212594] 1137: DUP2
[codex:212594] 1138: SWAP1
[codex:212594] 1139: SSTORE
[codex:212594] 113a: POP
[codex:212594] 113b: CALLER
[codex:212594] 113c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:212594] 1151: AND
[codex:212594] 1152: PUSH2 0x08fc
[codex:212594] 1155: DUP3
[codex:212594] 1156: SWAP1
[codex:212594] 1157: DUP2
[codex:212594] 1158: ISZERO
[codex:212594] 1159: MUL
[codex:212594] 115a: SWAP1
[codex:212594] 115b: PUSH1 0x40
[codex:212594]
[codex:212594] thinking
[codex:212594] **Analyzing EVM call instructions**
[codex:212594] exec
[codex:212594] /bin/bash -lc "python - <<'PY'
[codex:212594] from pathlib import Path
[codex:212594] import re
[codex:212594] code = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:212594] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:212594] bytecode = bytes.fromhex(hexstr)
[codex:212594] # parse opcodes and find JUMPDEST offsets
[codex:212594] jumps = []
[codex:212594] ops=[]
[codex:212594] # opcode names for 0x5b
[codex:212594]
[codex:212594] opnames = {0x5b:'JUMPDEST'}
[codex:212594]
[codex:212594] i=0
[codex:212594] while i < len(bytecode):
[codex:212594] op = bytecode[i]
[codex:212594] if op==0x5b:
[codex:212594] jumps.append(i)
[codex:212594] if 0x60 <= op <= 0x7f:
[codex:212594] i += 1 + (op-0x5f)
[codex:212594] else:
[codex:212594] i += 1
[codex:212594]
[codex:212594] # show jumpdest near 0x116a
[codex:212594] near = [j for j in jumps if 0x1100 <= j <= 0x11c0]
[codex:212594] print([hex(j) for j in near])
[codex:212594] PY" in /tmp/codex-multi-oue7fqnv succeeded in 29ms:
[codex:212594] ['0x117a', '0x117d', '0x1183', '0x1192', '0x11a7']
[codex:212594]
[codex:212594] thinking
[codex:212594] **Planning function selector mapping**
[codex:212594] exec
[codex:212594] /bin/bash -lc "python - <<'PY'
[codex:212594] from pathlib import Path
[codex:212594] import re
[codex:212594] code = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:212594] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:212594] bytecode = bytes.fromhex(hexstr)
[codex:212594] # disassemble
[codex:212594] opnames = {}
[codex:212594] for i in range(0x100): opnames[i]=f'OP{i:02x}'
[codex:212594] # fill
[codex:212594] opnames.update({
[codex:212594] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',
[codex:212594] 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',
[codex:212594] 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',
[codex:212594] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:212594] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:212594] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:212594] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:212594] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:212594] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:212594]
[codex:212594] ops=[]
[codex:212594] i=0
[codex:212594] while i < len(bytecode):
[codex:212594] op = bytecode[i]
[codex:212594] name = opnames[op]
[codex:212594] if 0x60 <= op <= 0x7f:
[codex:212594] n = op-0x5f
[codex:212594] data = bytecode[i+1:i+1+n]
[codex:212594] ops.append((i, name, data))
[codex:212594] i += 1+n
[codex:212594] else:
[codex:212594] ops.append((i, name, None))
[codex:212594] i += 1
[codex:212594]
[codex:212594] # find dispatcher region: from start until first JUMPDEST after initial code? We'll just scan first 500 ops for PUSH4 patterns followed by EQ and JUMPI to get mapping.
[codex:212594]
[codex:212594] mapping = []
[codex:212594] for idx,(off,name,data) in enumerate(ops[:400]):
[codex:212594] if name == 'PUSH4':
[codex:212594] selector = data.hex()
[codex:212594] # look ahead for EQ, PUSH2, JUMPI pattern in next few ops
[codex:212594] for j in range(idx+1, min(idx+8, len(ops))):
[codex:212594] if ops[j][1] == 'EQ':
[codex:212594] # look for PUSH2 then JUMPI after
[codex:212594] for k in range(j+1, min(j+6, len(ops))):
[codex:212594] if ops[k][1] == 'PUSH2' and ops[k+1][1] == 'JUMPI':
[codex:212594] dest = int.from_bytes(ops[k][2], 'big')
[codex:212594] mapping.append((selector, dest, off))
[codex:212594] break
[codex:212594] break
[codex:212594]
[codex:212594] print('selectors mapped', len(mapping))
[codex:212594] # show unique selectors mapping
[codex:212594] seen = set()
[codex:212594] for selector, dest, off in mapping:
[codex:212594] if selector in seen:
[codex:212594] continue
[codex:212594] seen.add(selector)
[codex:212594] print(selector, hex(dest))
[codex:212594] PY" in /tmp/codex-multi-oue7fqnv succeeded in 35ms:
[codex:212594] selectors mapped 41
[codex:212594] ffffffff 0x1f3
[codex:212594] 06fdde03 0x1f3
[codex:212594] 18160ddd 0x281
[codex:212594] 1fd9f187 0x2aa
[codex:212594] 210fe93b 0x2cd
[codex:212594] 313ce567 0x330
[codex:212594] 3ccfd60b 0x35f
[codex:212594] 3eaaf86b 0x374
[codex:212594] 40c558b2 0x39d
[codex:212594] 42a4af66 0x3d4
[codex:212594] 442890d5 0x406
[codex:212594] 4da2b48e 0x45b
[codex:212594] 51605d80 0x473
[codex:212594] 51ecfd16 0x501
[codex:212594] 53e9dcae 0x538
[codex:212594] 55bdd4ac 0x5d4
[codex:212594] 5a3b7e42 0x61f
[codex:212594] 61718141 0x6ad
[codex:212594] 68d89792 0x6da
[codex:212594]
[codex:212594] thinking
[codex:212594] **Analyzing function call locations in bytecode**
[codex:212594]
[codex:212594] I'm mapping call instruction offsets to their containing functions by comparing offsets to known function entry points, trying to figure out which external functions invoke internal code segments. This helps me identify that a call near 0x116a is likely part of an internal withdraw-like function handling ETH refunds safely by setting balances to zero before transferring ETH with limited gas. I'm parsing opcode snippets to verify the logic and confirm proper sequence to prevent reentrancy.
[codex:212594] exec
[codex:212594] /bin/bash -lc "python - <<'PY'
[codex:212594] from pathlib import Path
[codex:212594] import re
[codex:212594] code = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:212594] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:212594] bytecode = bytes.fromhex(hexstr)
[codex:212594]
[codex:212594] # disassemble into list
[codex:212594] opnames = {}
[codex:212594] for i in range(0x100): opnames[i]=f'OP{i:02x}'
[codex:212594] # fill
[codex:212594] opnames.update({
[codex:212594] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',
[codex:212594] 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',
[codex:212594] 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',
[codex:212594] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:212594] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:212594] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:212594] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:212594] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:212594] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:212594]
[codex:212594] ops=[]
[codex:212594] i=0
[codex:212594] while i < len(bytecode):
[codex:212594] op = bytecode[i]
[codex:212594] name = opnames[op]
[codex:212594] if 0x60 <= op <= 0x7f:
[codex:212594] n = op-0x5f
[codex:212594] data = bytecode[i+1:i+1+n]
[codex:212594] ops.append((i, name, data))
[codex:212594] i += 1+n
[codex:212594] else:
[codex:212594] ops.append((i, name, None))
[codex:212594] i += 1
[codex:212594]
[codex:212594] # print disasm between offsets
[codex:212594] start=0x10d0
[codex:212594] end=0x1190
[codex:212594] for off,name,data in ops:
[codex:212594] if off < start: continue
[codex:212594] if off > end: break
[codex:212594] if data is not None:
[codex:212594] print(f\"{off:04x}: {name} 0x{data.hex()}\")
[codex:212594] else:
[codex:212594] print(f\"{off:04x}: {name}\")
[codex:212594] PY" in /tmp/codex-multi-oue7fqnv succeeded in 49ms:
[codex:212594] 10e4: AND
[codex:212594] 10e5: DUP2
[codex:212594] 10e6: MSTORE
[codex:212594] 10e7: PUSH1 0x20
[codex:212594] 10e9: ADD
[codex:212594] 10ea: SWAP1
[codex:212594] 10eb: DUP2
[codex:212594] 10ec: MSTORE
[codex:212594] 10ed: PUSH1 0x20
[codex:212594] 10ef: ADD
[codex:212594] 10f0: PUSH1 0x00
[codex:212594] 10f2: SHA3
[codex:212594] 10f3: SLOAD
[codex:212594] 10f4: SWAP1
[codex:212594] 10f5: POP
[codex:212594] 10f6: PUSH1 0x00
[codex:212594] 10f8: PUSH1 0x12
[codex:212594] 10fa: PUSH1 0x00
[codex:212594] 10fc: CALLER
[codex:212594] 10fd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:212594]
[codex:212594] thinking
[codex:212594] **Analyzing EVM mapping and storage access**
[codex:212594] exec
[codex:212594] /bin/bash -lc "python - <<'PY'
[codex:212594] from pathlib import Path
[codex:212594] import re
[codex:212594] code = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:212594] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:212594] bytecode = bytes.fromhex(hexstr)
[codex:212594] # disassemble
[codex:212594] opnames = {i:f'OP{i:02x}' for i in range(0x100)}
[codex:212594] opnames.update({
[codex:212594] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',
[codex:212594] 0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:212594] 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:212594] 0x20:'SHA3',
[codex:212594] 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:212594] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:212594] 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:212594] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:212594] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:212594] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:212594] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:212594] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:212594] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:212594]
[codex:212594] ops=[]
[codex:212594] i=0
[codex:212594] while i < len(bytecode):
[codex:212594] op = bytecode[i]
[codex:212594] name = opnames[op]
[codex:212594] if 0x60 <= op <= 0x7f:
[codex:212594] n = op-0x5f
[codex:212594] data = bytecode[i+1:i+1+n]
[codex:212594] ops.append((i, name, data))
[codex:212594] i += 1+n
[codex:212594] else:
[codex:212594] ops.append((i, name, None))
[codex:212594] i += 1
[codex:212594]
[codex:212594] start=0x1080
[codex:212594] end=0x10f8
[codex:212594] for off,name,data in ops:
[codex:212594] if off < start: continue
[codex:212594] if off > end: break
[codex:212594] if data is not None:
[codex:212594] print(f\"{off:04x}: {name} 0x{data.hex()}\")
[codex:212594] else:
[codex:212594] print(f\"{off:04x}: {name}\")
[codex:212594] PY" in /tmp/codex-multi-oue7fqnv succeeded in 31ms:
[codex:212594] 1080: PUSH2 0x0100
[codex:212594] 1083: EXP
[codex:212594] 1084: SWAP1
[codex:212594] 1085: DIV
[codex:212594] 1086: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:212594] 109b: AND
[codex:212594] 109c: DUP2
[codex:212594] 109d: JUMP
[codex:212594] 109e: JUMPDEST
[codex:212594] 109f: PUSH1 0x05
[codex:212594] 10a1: PUSH1 0x00
[codex:212594] 10a3: SWAP1
[codex:212594] 10a4: SLOAD
[codex:212594] 10a5: SWAP1
[codex:212594] 10a6: PUSH2 0x0100
[codex:212594] 10a9: EXP
[codex:212594] 10aa: SWAP1
[codex:212594] 10ab: DIV
[codex:212594] 10ac: PUSH1 0xff
[codex:212594] 10ae: AND
[codex:212594]
[codex:212594] thinking
[codex:212594] **Analyzing function entry and storage operations**
[codex:212594] exec
[codex:212594] /bin/bash -lc "python - <<'PY'
[codex:212594] from pathlib import Path
[codex:212594] import re
[codex:212594] code = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:212594] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:212594] bytecode = bytes.fromhex(hexstr)
[codex:212594]
[codex:212594] # disassemble with ops
[codex:212594] opnames = {i:f'OP{i:02x}' for i in range(0x100)}
[codex:212594] # fill minimal
[codex:212594] opnames.update({
[codex:212594] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',
[codex:212594] 0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:212594] 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:212594] 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',
[codex:212594] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:212594] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:212594] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:212594] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:212594] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:212594] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:212594]
[codex:212594] # Build opcode list
[codex:212594] ops=[]
[codex:212594] i=0
[codex:212594] while i < len(bytecode):
[codex:212594] op = bytecode[i]
[codex:212594] name = opnames[op]
[codex:212594] if 0x60 <= op <= 0x7f:
[codex:212594] n = op-0x5f
[codex:212594] data = bytecode[i+1:i+1+n]
[codex:212594] ops.append((i,name,data))
[codex:212594] i+=1+n
[codex:212594] else:
[codex:212594] ops.append((i,name,None))
[codex:212594] i+=1
[codex:212594]
[codex:212594] # map offset to index
[codex:212594] idx_by_off = {off: idx for idx,(off,_,_) in enumerate(ops)}
[codex:212594]
[codex:212594] start_off = 0x10b1
[codex:212594] end_off = 0x1172
[codex:212594]
[codex:212594] # symbolic stack
[codex:212594] stack = []
[codex:212594] # helper to name new symbols
[codex:212594] sym_id = 0
[codex:212594]
[codex:212594] def sym(name):
[codex:212594] global sym_id
[codex:212594] sym_id +=1
[codex:212594] return f\"{name}{sym_id}\"
[codex:212594]
[codex:212594] # simple memory map for MLOAD/MSTORE
[codex:212594] mem = {}
[codex:212594]
[codex:212594] # iterate ops in range
[codex:212594] start_idx = idx_by_off[start_off]
[codex:212594] end_idx = idx_by_off[end_off]
[codex:212594]
[codex:212594] for idx in range(start_idx, end_idx+1):
[codex:212594] off,name,data = ops[idx]
[codex:212594] # print state near CALL maybe
[codex:212594] if name == 'CALL':
[codex:212594] print(f\"Before CALL at {off:x} stack(top->bottom):\", list(reversed(stack)))
[codex:212594] # simulate
[codex:212594] if name.startswith('PUSH'):
[codex:212594] val = int.from_bytes(data, 'big')
[codex:212594] stack.append(hex(val))
[codex:212594] elif name.startswith('DUP'):
[codex:212594] n = int(name[3:])
[codex:212594] stack.append(stack[-n])
[codex:212594] elif name.startswith('SWAP'):
[codex:212594] n = int(name[4:])
[codex:212594] stack[-1], stack[-1-n] = stack[-1-n], stack[-1]
[codex:212594] elif name in ('POP',):
[codex:212594] if stack: stack.pop()
[codex:212594] elif name in ('ADD','SUB','MUL','DIV','AND','OR','XOR','EQ','LT','GT','ISZERO'):
[codex:212594] # binary ops (except ISZERO unary)
[codex:212594] if name == 'ISZERO':
[codex:212594] a = stack.pop(); stack.append(f\"iszero({a})\")
[codex:212594] else:
[codex:212594] b = stack.pop(); a = stack.pop();
[codex:212594] stack.append(f\"({a} {name.lower()} {b})\")
[codex:212594] elif name == 'SHA3':
[codex:212594] offset = stack.pop(); size = stack.pop();
[codex:212594] stack.append(f\"keccak({offset},{size})\")
[codex:212594] elif name == 'SLOAD':
[codex:212594] slot = stack.pop(); stack.append(f\"sload({slot})\")
[codex:212594] elif name == 'SSTORE':
[codex:212594] val = stack.pop(); slot = stack.pop();
[codex:212594] # ignore effect
[codex:212594] elif name == 'MSTORE':
[codex:212594] val = stack.pop(); offset = stack.pop(); mem[offset]=val
[codex:212594] elif name == 'MLOAD':
[codex:212594] offset = stack.pop(); stack.append(f\"mload({offset})\")
[codex:212594] elif name == 'CALLER':
[codex:212594] stack.append('caller')
[codex:212594] elif name == 'CALLVALUE':
[codex:212594] stack.append('callvalue')
[codex:212594] elif name == 'GAS':
[codex:212594] stack.append('gas')
[codex:212594] elif name == 'CALL':
[codex:212594] # pop 7 args
[codex:212594] if len(stack) >= 7:
[codex:212594] out_size = stack.pop(); out_off = stack.pop(); in_size = stack.pop(); in_off = stack.pop(); value = stack.pop(); to = stack.pop(); gasv = stack.pop();
[codex:212594] stack.append(f\"callret\")
[codex:212594] print('CALL args gas,to,value,in_off,in_size,out_off,out_size:', gasv,to,value,in_off,in_size,out_off,out_size)
[codex:212594] elif name == 'JUMP' or name == 'JUMPI' or name=='JUMPDEST':
[codex:212594] pass
[codex:212594] elif name in ('RETURN','REVERT'):
[codex:212594] pass
[codex:212594] else:
[codex:212594] # unknown or unhandled
[codex:212594] pass
[codex:212594]
[codex:212594] # print final stack
[codex:212594] print('Final stack', stack[-10:])
[codex:212594] PY" in /tmp/codex-multi-oue7fqnv succeeded in 32ms:
[codex:212594] Before CALL at 116a stack(top->bottom): ['(0x8fc mul iszero(sload(keccak(0x0,((0x0 add 0x20) add 0x20)))))', '(caller and 0xffffffffffffffffffffffffffffffffffffffff)', 'sload(keccak(0x0,((0x0 add 0x20) add 0x20)))', 'mload(0x40)', '(mload(0x40) sub mload(0x40))', 'mload(0x40)', '0x0', 'mload(0x40)', 'sload(keccak(0x0,((0x0 add 0x20) add 0x20)))', '(0x8fc mul iszero(sload(keccak(0x0,((0x0 add 0x20) add 0x20)))))', '(caller and 0xffffffffffffffffffffffffffffffffffffffff)', 'sload(keccak(0x0,((0x0 add 0x20) add 0x20)))']
[codex:212594] CALL args gas,to,value,in_off,in_size,out_off,out_size: 0x0 mload(0x40) (mload(0x40) sub mload(0x40)) mload(0x40) sload(keccak(0x0,((0x0 add 0x20) add 0x20))) (caller and 0xffffffffffffffffffffffffffffffffffffffff) (0x8fc mul iszero(sload(keccak(0x0,((0x0 add 0x20) add 0x20)))))
[codex:212594] Final stack ['sload(keccak(0x0,((0x0 add 0x20) add 0x20)))', 'iszero(iszero(callret))', '0x117a']
[codex:212594]
[codex:212594] thinking
[codex:212594] **Analyzing stack mis-simulation causes**
[codex:212594]
[codex:212594] The symbolic execution is off because we started simulating at an internal function entry with an empty stack, missing prior context that fills the stack. I’ll focus on finding the true function entry by locating JUMP instructions targeting 0x10b1 to understand what arguments get passed on the stack, so I can build a more accurate simulation starting point.
[codex:212594] exec
[codex:212594] /bin/bash -lc "python - <<'PY'
[codex:212594] from pathlib import Path
[codex:212594] import re
[codex:212594] code = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:212594] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:212594] bytecode = bytes.fromhex(hexstr)
[codex:212594] # disassemble
[codex:212594] opnames = {i:f'OP{i:02x}' for i in range(0x100)}
[codex:212594] opnames.update({0x56:'JUMP',0x57:'JUMPI',0x61:'PUSH2',0x60:'PUSH1',0x5b:'JUMPDEST'})
[codex:212594]
[codex:212594] ops=[]
[codex:212594] i=0
[codex:212594] while i < len(bytecode):
[codex:212594] op = bytecode[i]
[codex:212594] name = opnames.get(op,f'OP{op:02x}')
[codex:212594] if 0x60 <= op <= 0x7f:
[codex:212594] n = op-0x5f
[codex:212594] data = bytecode[i+1:i+1+n]
[codex:212594] ops.append((i,name,data))
[codex:212594] i += 1+n
[codex:212594] else:
[codex:212594] ops.append((i,name,None))
[codex:212594] i += 1
[codex:212594]
[codex:212594] # find push2 0x10b1 followed by jump
[codex:212594] for idx,(off,name,data) in enumerate(ops):
[codex:212594] if name == 'PUSH2' and data == bytes.fromhex('10b1'):
[codex:212594] # look ahead for JUMP
[codex:212594] if idx+1 < len(ops) and ops[idx+1][1] == 'JUMP':
[codex:212594] print('direct jump at', hex(off))
[codex:212594] # look ahead for JUMPI
[codex:212594] if idx+1 < len(ops) and ops[idx+1][1] == 'JUMPI':
[codex:212594] print('conditional jump at', hex(off))
[codex:212594] PY" in /tmp/codex-multi-oue7fqnv succeeded in 33ms:
[codex:212594] direct jump at 0x36e
[codex:212594]
[codex:212594] thinking
[codex:212594] **Analyzing function jumps and selectors**
[codex:212594] exec
[codex:212594] /bin/bash -lc "python - <<'PY'
[codex:212594] from pathlib import Path
[codex:212594] import re
[codex:212594] code = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:212594] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:212594] bytecode = bytes.fromhex(hexstr)
[codex:212594] # disassemble
[codex:212594] opnames = {i:f'OP{i:02x}' for i in range(0x100)}
[codex:212594] opnames.update({
[codex:212594] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',
[codex:212594] 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',
[codex:212594] 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:212594] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:212594] 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:212594] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:212594] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:212594] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:212594] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:212594] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:212594] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:212594]
[codex:212594] ops=[]
[codex:212594] i=0
[codex:212594] while i < len(bytecode):
[codex:212594] op = bytecode[i]
[codex:212594] name = opnames[op]
[codex:212594] if 0x60 <= op <= 0x7f:
[codex:212594] n = op-0x5f
[codex:212594] data = bytecode[i+1:i+1+n]
[codex:212594] ops.append((i,name,data))
[codex:212594] i+=1+n
[codex:212594] else:
[codex:212594] ops.append((i,name,None))
[codex:212594] i+=1
[codex:212594]
[codex:212594] start=0x35a
[codex:212594] end=0x380
[codex:212594] for off,name,data in ops:
[codex:212594] if off < start: continue
[codex:212594] if off > end: break
[codex:212594] if data is not None:
[codex:212594] print(f\"{off:04x}: {name} 0x{data.hex()}\")
[codex:212594] else:
[codex:212594] print(f\"{off:04x}: {name}\")
[codex:212594] PY" in /tmp/codex-multi-oue7fqnv succeeded in 39ms:
[codex:212594] 035a: DUP1
[codex:212594] 035b: SWAP2
[codex:212594] 035c: SUB
[codex:212594] 035d: SWAP1
[codex:212594] 035e: RETURN
[codex:212594] 035f: JUMPDEST
[codex:212594] 0360: CALLVALUE
[codex:212594] 0361: ISZERO
[codex:212594] 0362: PUSH2 0x036a
[codex:212594] 0365: JUMPI
[codex:212594] 0366: PUSH1 0x00
[codex:212594] 0368: DUP1
[codex:212594] 0369: REVERT
[codex:212594] 036a: JUMPDEST
[codex:212594] 036b: PUSH2 0x0372
[codex:212594] 036e: PUSH2 0x10b1
[codex:212594] 0371: JUMP
[codex:212594] 0372: JUMPDEST
[codex:212594] 0373: STOP
[codex:212594] 0374: JUMPDEST
[codex:212594]
[codex:212594] thinking
[codex:212594] **Analyzing external call patterns**
[codex:212594]
[codex:212594] I'm examining the withdraw-like function’s safety by checking its balance updates and call order to confirm no reentrancy issues. Now, I’m turning to inspect suspicious external token calls around 0x1ff6 that might allow arbitrary token transfers if unprotected, focusing on decoding the low-level call setup and calldata construction nearby.
[codex:212594] exec
[codex:212594] /bin/bash -lc "python - <<'PY'
[codex:212594] from pathlib import Path
[codex:212594] import re
[codex:212594] code = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:212594] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:212594] bytecode = bytes.fromhex(hexstr)
[codex:212594] # disassemble
[codex:212594] opnames = {i:f'OP{i:02x}' for i in range(0x100)}
[codex:212594] opnames.update({
[codex:212594] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',
[codex:212594] 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',
[codex:212594] 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:212594] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:212594] 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:212594] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:212594] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:212594] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:212594] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:212594] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:212594] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:212594]
[codex:212594] ops=[]
[codex:212594] i=0
[codex:212594] while i < len(bytecode):
[codex:212594] op = bytecode[i]
[codex:212594] name = opnames[op]
[codex:212594] if 0x60 <= op <= 0x7f:
[codex:212594] n = op-0x5f
[codex:212594] data = bytecode[i+1:i+1+n]
[codex:212594] ops.append((i,name,data))
[codex:212594] i+=1+n
[codex:212594] else:
[codex:212594] ops.append((i,name,None))
[codex:212594] i+=1
[codex:212594]
[codex:212594] start=0x1f80
[codex:212594] end=0x2050
[codex:212594] for off,name,data in ops:
[codex:212594] if off < start: continue
[codex:212594] if off > end: break
[codex:212594] if data is not None:
[codex:212594] print(f\"{off:04x}: {name} 0x{data.hex()}\")
[codex:212594] else:
[codex:212594] print(f\"{off:04x}: {name}\")
[codex:212594] PY" in /tmp/codex-multi-oue7fqnv succeeded in 32ms:
[codex:212594] 1f90: AND
[codex:212594] 1f91: PUSH4 0x210fe93b
[codex:212594] 1f96: DUP6
[codex:212594] 1f97: PUSH1 0x00
[codex:212594] 1f99: PUSH1 0x40
[codex:212594] 1f9b: MLOAD
[codex:212594] 1f9c: PUSH1 0x20
[codex:212594] 1f9e: ADD
[codex:212594] 1f9f: MSTORE
[codex:212594] 1fa0: PUSH1 0x40
[codex:212594] 1fa2: MLOAD
[codex:212594] 1fa3: DUP3
[codex:212594] 1fa4: PUSH4 0xffffffff
[codex:212594] 1fa9: AND
[codex:212594] 1faa: PUSH29 0x0100000000000000000000000000000000000000000000000000000000
[codex:212594] 1fc8: MUL
[codex:212594] 1fc9: DUP2
[codex:212594] 1fca: MSTORE
[codex:212594] 1fcb: PUSH1 0x04
[codex:212594] 1fcd: ADD
[codex:212594]
[codex:212594] thinking
[codex:212594] **Analyzing external call with selector 0x210fe93b**
[codex:212594] exec
[codex:212594] /bin/bash -lc "python - <<'PY'
[codex:212594] from pathlib import Path
[codex:212594] import re
[codex:212594] code = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:212594] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:212594] bytecode = bytes.fromhex(hexstr)
[codex:212594] # find JUMPDESTs
[codex:212594] jumps=[]
[codex:212594] i=0
[codex:212594] while i<len(bytecode):
[codex:212594] op=bytecode[i]
[codex:212594] if op==0x5b:
[codex:212594] jumps.append(i)
[codex:212594] if 0x60<=op<=0x7f:
[codex:212594] i+=1+(op-0x5f)
[codex:212594] else:
[codex:212594] i+=1
[codex:212594]
[codex:212594] near=[j for j in jumps if 0x1f00<=j<=0x2220]
[codex:212594] print([hex(j) for j in near])
[codex:212594] PY" in /tmp/codex-multi-oue7fqnv succeeded in 31ms:
[codex:212594] ['0x1f47', '0x1f70', '0x1ff0', '0x2001', '0x2122', '0x2133', '0x2184', '0x2191', '0x21fd', '0x220e']
[codex:212594]
[codex:212594] thinking
[codex:212594] **Analyzing jump destinations and call sequences**
[codex:212594] exec
[codex:212594] /bin/bash -lc "python - <<'PY'
[codex:212594] from pathlib import Path
[codex:212594] import re
[codex:212594] code = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:212594] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:212594] bytecode = bytes.fromhex(hexstr)
[codex:212594]
[codex:212594] ops=[]
[codex:212594] i=0
[codex:212594] while i<len(bytecode):
[codex:212594] op=bytecode[i]
[codex:212594] name=op
[codex:212594] if 0x60<=op<=0x7f:
[codex:212594] n=op-0x5f
[codex:212594] data=bytecode[i+1:i+1+n]
[codex:212594] ops.append((i,op,data))
[codex:212594] i+=1+n
[codex:212594] else:
[codex:212594] ops.append((i,op,None))
[codex:212594] i+=1
[codex:212594]
[codex:212594] # search for PUSH2 0x1f47 and following JUMP
[codex:212594] for idx,(off,op,data) in enumerate(ops):
[codex:212594] if op==0x61 and data==bytes.fromhex('1f47'):
[codex:212594] if idx+1<len(ops) and ops[idx+1][1]==0x56:
[codex:212594] print('direct jump at', hex(off))
[codex:212594] if idx+1<len(ops) and ops[idx+1][1]==0x57:
[codex:212594] print('conditional jump at', hex(off))
[codex:212594] PY" in /tmp/codex-multi-oue7fqnv succeeded in 34ms:
[codex:212594] conditional jump at 0x1f3f
[codex:212594]
[codex:212594] thinking
[codex:212594] **Analyzing internal function usage**
[codex:212594] exec
[codex:212594] /bin/bash -lc "python - <<'PY'
[codex:212594] from pathlib import Path
[codex:212594] import re
[codex:212594] code = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:212594] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:212594] bytecode = bytes.fromhex(hexstr)
[codex:212594]
[codex:212594] ops=[]
[codex:212594] i=0
[codex:212594] while i<len(bytecode):
[codex:212594] op=bytecode[i]
[codex:212594] if 0x60<=op<=0x7f:
[codex:212594] n=op-0x5f
[codex:212594] data=bytecode[i+1:i+1+n]
[codex:212594] ops.append((i,op,data))
[codex:212594] i+=1+n
[codex:212594] else:
[codex:212594] ops.append((i,op,None))
[codex:212594] i+=1
[codex:212594]
[codex:212594] for target in ['1f70','1f47','1f90','1fbd']:
[codex:212594] t=bytes.fromhex(target)
[codex:212594] print('target',target)
[codex:212594] for idx,(off,op,data) in enumerate(ops):
[codex:212594] if op==0x61 and data==t:
[codex:212594] nxt = ops[idx+1][1] if idx+1<len(ops) else None
[codex:212594] if nxt==0x56:
[codex:212594] print(' direct jump at', hex(off))
[codex:212594] elif nxt==0x57:
[codex:212594] print(' conditional jump at', hex(off))
[codex:212594] PY" in /tmp/codex-multi-oue7fqnv succeeded in 38ms:
[codex:212594] target 1f70
[codex:212594] direct jump at 0x218d
[codex:212594] target 1f47
[codex:212594] conditional jump at 0x1f3f
[codex:212594] target 1f90
[codex:212594] target 1fbd
[codex:212594]
[codex:212594] thinking
[codex:212594] **Mapping internal and external function boundaries**
[codex:212594] exec
[codex:212594] /bin/bash -lc "python - <<'PY'
[codex:212594] from pathlib import Path
[codex:212594] import re
[codex:212594] code = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:212594] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:212594] bytecode = bytes.fromhex(hexstr)
[codex:212594]
[codex:212594] ops=[]
[codex:212594] i=0
[codex:212594] while i<len(bytecode):
[codex:212594] op=bytecode[i]
[codex:212594] if 0x60<=op<=0x7f:
[codex:212594] n=op-0x5f
[codex:212594] data=bytecode[i+1:i+1+n]
[codex:212594] ops.append((i,op,data))
[codex:212594] i+=1+n
[codex:212594] else:
[codex:212594] ops.append((i,op,None))
[codex:212594] i+=1
[codex:212594]
[codex:212594] # gather jumps (push2 + jump)
[codex:212594] for idx,(off,op,data) in enumerate(ops):
[codex:212594] if op==0x61 and data is not None:
[codex:212594] target=int.from_bytes(data,'big')
[codex:212594] if 0x1f00 <= target <= 0x2220:
[codex:212594] # check next opcode
[codex:212594] if idx+1<len(ops) and ops[idx+1][1] in (0x56,0x57):
[codex:212594] jop = 'JUMP' if ops[idx+1][1]==0x56 else 'JUMPI'
[codex:212594] print(f\"callsite {hex(off)} -> {hex(target)} {jop}\")
[codex:212594] PY" in /tmp/codex-multi-oue7fqnv succeeded in 32ms:
[codex:212594] callsite 0x1f3f -> 0x1f47 JUMPI
[codex:212594] callsite 0x1f76 -> 0x2191 JUMPI
[codex:212594] callsite 0x1fe8 -> 0x1ff0 JUMPI
[codex:212594] callsite 0x1ff9 -> 0x2001 JUMPI
[codex:212594] callsite 0x202a -> 0x2184 JUMPI
[codex:212594] callsite 0x211a -> 0x2122 JUMPI
[codex:212594] callsite 0x212b -> 0x2133 JUMPI
[codex:212594] callsite 0x218d -> 0x1f70 JUMP
[codex:212594] callsite 0x21f5 -> 0x21fd JUMPI
[codex:212594] callsite 0x2206 -> 0x220e JUMPI
[codex:212594]
[codex:212594] thinking
[codex:212594] **Analyzing function boundaries and selectors**
[codex:212594] exec
[codex:212594] /bin/bash -lc "python - <<'PY'
[codex:212594] from pathlib import Path
[codex:212594] import re
[codex:212594] code = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:212594] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:212594] bytecode = bytes.fromhex(hexstr)
[codex:212594]
[codex:212594] # disassemble
[codex:212594] opnames = {i:f'OP{i:02x}' for i in range(0x100)}
[codex:212594] opnames.update({
[codex:212594] 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:212594] 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:212594] 0x20:'SHA3',
[codex:212594] 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:212594] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:212594] 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:212594] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:212594] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:212594] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:212594] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:212594] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:212594] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:212594]
[codex:212594] ops=[]
[codex:212594] i=0
[codex:212594] while i < len(bytecode):
[codex:212594] op = bytecode[i]
[codex:212594] name = opnames[op]
[codex:212594] if 0x60 <= op <= 0x7f:
[codex:212594] n = op-0x5f
[codex:212594] data = bytecode[i+1:i+1+n]
[codex:212594] ops.append((i,name,data))
[codex:212594] i+=1+n
[codex:212594] else:
[codex:212594] ops.append((i,name,None))
[codex:212594] i+=1
[codex:212594]
[codex:212594] start=0x1f00
[codex:212594] end=0x2250
[codex:212594] for off,name,data in ops:
[codex:212594] if off < start: continue
[codex:212594] if off > end: break
[codex:212594] if data is not None:
[codex:212594] print(f\"{off:04x}: {name} 0x{data.hex()}\")
[codex:212594] else:
[codex:212594] print(f\"{off:04x}: {name}\")
[codex:212594] PY" in /tmp/codex-multi-oue7fqnv succeeded in 38ms:
[codex:212594] 1f0d: AND
[codex:212594] 1f0e: DUP1
[codex:212594] 1f0f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:212594] 1f24: AND
[codex:212594] 1f25: CALLER
[codex:212594] 1f26: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:212594] 1f3b: AND
[codex:212594] 1f3c: EQ
[codex:212594] 1f3d: ISZERO
[codex:212594] 1f3e: ISZERO
[codex:212594] 1f3f: PUSH2 0x1f47
[codex:212594] 1f42: JUMPI
[codex:212594] 1f43: PUSH1 0x00
[codex:212594] 1f45: DUP1
[codex:212594] 1f46: REVERT
[codex:212594] 1f47: JUMPDEST
[codex:212594] 1f48: PUSH1 0x07
[codex:212594] 1f4a: PUSH1 0x00
[codex:212594] 1f4c: SWAP1
[codex:212594] 1f4d: SLOAD
[codex:212594]
[codex:212594]
[codex:212594] thinking
[codex:212594] **Analyzing bytecode for profit exploits**
[codex:212594] thinking
[codex:212594] **Evaluating storage writes and access control**
[codex:212594]
[codex:212594] I'm checking if storage writes to critical low slots have proper caller checks to rule out unprotected admin functions. I'll look for patterns like `CALLER` compared to stored owner before any SSTORE to slots 0-10 to verify access control around privileged updates.
[codex:212594] exec
[codex:212594] /bin/bash -lc "python - <<'PY'
[codex:212594] from pathlib import Path
[codex:212594] import re
[codex:212594] code = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:212594] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:212594] bytecode = bytes.fromhex(hexstr)
[codex:212594]
[codex:212594] # disassemble
[codex:212594] opnames = {i:f'OP{i:02x}' for i in range(0x100)}
[codex:212594] opnames.update({
[codex:212594] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',
[codex:212594] 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',
[codex:212594] 0x20:'SHA3',
[codex:212594] 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:212594] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:212594] 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:212594] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:212594] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:212594] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:212594] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:212594] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:212594] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:212594]
[codex:212594] ops=[]
[codex:212594] i=0
[codex:212594] while i < len(bytecode):
[codex:212594] op = bytecode[i]
[codex:212594] name = opnames[op]
[codex:212594] if 0x60 <= op <= 0x7f:
[codex:212594] n = op-0x5f
[codex:212594] data = bytecode[i+1:i+1+n]
[codex:212594] ops.append((i,name,data))
[codex:212594] i+=1+n
[codex:212594] else:
[codex:212594] ops.append((i,name,None))
[codex:212594] i+=1
[codex:212594]
[codex:212594] # find SSTORE contexts
[codex:212594] sstore_indices = [idx for idx,(off,name,data) in enumerate(ops) if name=='SSTORE']
[codex:212594]
[codex:212594] # print contexts where immediately before SSTORE is PUSH1 small slot maybe (heuristic)
[codex:212594] for idx in sstore_indices:
[codex:212594] off,name,data = ops[idx]
[codex:212594] # look back 4 ops for push1
[codex:212594] for back in range(1,6):
[codex:212594] if idx-back < 0: continue
[codex:212594] o_off, o_name, o_data = ops[idx-back]
[codex:212594] if o_name == 'PUSH1' and o_data is not None and o_data[0] <= 0x0a:
[codex:212594] print('SSTORE at', hex(off), 'near PUSH1', hex(o_data[0]), 'at', hex(o_off))
[codex:212594] # print context
[codex:212594] start = max(0, idx-6)
[codex:212594] end = min(len(ops), idx+3)
[codex:212594] for j in range(start,end):
[codex:212594] oo, nn, dd = ops[j]
[codex:212594] if dd is not None:
[codex:212594] print(f\" {oo:04x}: {nn} 0x{dd.hex()}\")
[codex:212594] else:
[codex:212594] print(f\" {oo:04x}: {nn}\")
[codex:212594] print('---')
[codex:212594] break
[codex:212594] PY" in /tmp/codex-multi-oue7fqnv succeeded in 36ms:
[codex:212594] SSTORE at 0xfa0 near PUSH1 0x1 at 0xf9d
[codex:212594] 0f99: DUP3
[codex:212594] 0f9a: ADD
[codex:212594] 0f9b: MLOAD
[codex:212594] 0f9c: DUP2
[codex:212594] 0f9d: PUSH1 0x01
[codex:212594] 0f9f: ADD
[codex:212594] 0fa0: SSTORE
[codex:212594] 0fa1: PUSH1 0x40
[codex:212594] 0fa3: DUP3
[codex:212594] ---
[codex:212594] SSTORE at 0xff1 near PUSH1 0x3 at 0xfee
[codex:212594] 0fea: DUP3
[codex:212594] 0feb: ADD
[codex:212594] 0fec: MLOAD
[codex:212594] 0fed: DUP2
[codex:212594] 0fee: PUSH1 0x03
[codex:212594] 0ff0: ADD
[codex:212594] 0ff1: SSTORE
[codex:212594] 0ff2: PUSH1 0x80
[codex:212594]
[codex:212594] thinking
[codex:212594] **Analyzing potential mint function access**
[codex:212594] exec
[codex:212594] /bin/bash -lc "python - <<'PY'
[codex:212594] from pathlib import Path
[codex:212594] import re
[codex:212594] code = Path('BYTECODE_BUNDLE.txt').read_text()
[codex:212594] hexstr = re.search(r'0x([0-9a-fA-F]+)', code).group(1)
[codex:212594] bytecode = bytes.fromhex(hexstr)
[codex:212594]
[codex:212594] # disassemble
[codex:212594] opnames = {i:f'OP{i:02x}' for i in range(0x100)}
[codex:212594] opnames.update({
[codex:212594] 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:212594] 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:212594] 0x20:'SHA3',
[codex:212594] 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:212594] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:212594] 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:212594] 0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',
[codex:212594] 0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
[codex:212594] 0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
[codex:212594] 0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
[codex:212594] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:212594] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'})
[codex:212594]
[codex:212594] ops=[]
[codex:212594] i=0
[codex:212594] while i < len(bytecode):
[codex:212594] op=bytecode[i]
[codex:212594] name=opnames[op]
[codex:212594] if 0x60<=op<=0x7f:
[codex:212594] n=op-0x5f
[codex:212594] data=bytecode[i+1:i+1+n]
[codex:212594] ops.append((i,name,data))
[codex:212594] i+=1+n
[codex:212594] else:
[codex:212594] ops.append((i,name,None))
[codex:212594] i+=1
[codex:212594]
[codex:212594] start=0x1b70
[codex:212594] end=0x1c10
[codex:212594] for off,name,data in ops:
[codex:212594] if off<start: continue
[codex:212594] if off>end: break
[codex:212594] if data is not None:
[codex:212594] print(f\"{off:04x}: {name} 0x{data.hex()}\")
[codex:212594] else:
[codex:212594] print(f\"{off:04x}: {name}\")
[codex:212594] PY" in /tmp/codex-multi-oue7fqnv succeeded in 36ms:
[codex:212594] 1b81: AND
[codex:212594] 1b82: CALLER
[codex:212594] 1b83: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
[codex:212594] 1b98: AND
[codex:212594] 1b99: EQ
[codex:212594] 1b9a: ISZERO
[codex:212594] 1b9b: ISZERO
[codex:212594] 1b9c: PUSH2 0x1ba4
[codex:212594] 1b9f: JUMPI
[codex:212594] 1ba0: PUSH1 0x00
[codex:212594] 1ba2: DUP1
[codex:212594] 1ba3: REVERT
[codex:212594] 1ba4: JUMPDEST
[codex:212594] 1ba5: PUSH1 0x07
[codex:212594] 1ba7: PUSH1 0x15
[codex:212594] 1ba9: SWAP1
[codex:212594] 1baa: SLOAD
[codex:212594] 1bab: SWAP1
[codex:212594] 1bac: PUSH2 0x0100
[codex:212594] 1baf: EXP
[codex:212594]
[codex:212594] thinking
[codex:212594] **Concluding no unprotected mint found**
[codex:212594] codex
[codex:212594] {"no_findings":true,"summary":"Reviewed BYTECODE_BUNDLE.txt for concrete value-extraction paths. The only value-transferring CALL is a per-caller withdrawal from a stored balance, and the other CALLs are external contract interactions with revert-on-failure checks; no unprotected ETH/token/NFT drain or upgrade/delegatecall/selfdestruct path is evident from bytecode alone.","findings":[]}
[codex:212594] tokens used
[codex:212594] 92,774
[codex:212594] {"no_findings":true,"summary":"Reviewed BYTECODE_BUNDLE.txt for concrete value-extraction paths. The only value-transferring CALL is a per-caller withdrawal from a stored balance, and the other CALLs are external contract interactions with revert-on-failure checks; no unprotected ETH/token/NFT drain or upgrade/delegatecall/selfdestruct path is evident from bytecode alone.","findings":[]}
{
"codex": {
"ran_at": "2026-01-05T04:26:13.356477+00:00",
"returncode": 0
},
"summary": "Reviewed BYTECODE_BUNDLE.txt for concrete value-extraction paths. The only value-transferring CALL is a per-caller withdrawal from a stored balance, and the other CALLs are external contract interactions with revert-on-failure checks; no unprotected ETH/token/NFT drain or upgrade/delegatecall/selfdestruct path is evident from bytecode alone.",
"raw_final": {
"summary": "Reviewed BYTECODE_BUNDLE.txt for concrete value-extraction paths. The only value-transferring CALL is a per-caller withdrawal from a stored balance, and the other CALLs are external contract interactions with revert-on-failure checks; no unprotected ETH/token/NFT drain or upgrade/delegatecall/selfdestruct path is evident from bytecode alone.",
"findings": [],
"no_findings": true
},
"no_findings": true,
"schema_version": 1
}
00000000: PUSH1 0x60 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x01ee 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 0000002e: SWAP1 0000002f: DIV 00000030: PUSH4 0xffffffff 00000035: AND 00000036: DUP1 00000037: PUSH4 0x06fdde03 0000003c: EQ 0000003d: PUSH2 0x01f3 00000040: JUMPI 00000041: DUP1 00000042: PUSH4 0x18160ddd 00000047: EQ 00000048: PUSH2 0x0281 0000004b: JUMPI 0000004c: DUP1 0000004d: PUSH4 0x1fd9f187 00000052: EQ 00000053: PUSH2 0x02aa 00000056: JUMPI 00000057: DUP1 00000058: PUSH4 0x210fe93b 0000005d: EQ 0000005e: PUSH2 0x02cd 00000061: JUMPI 00000062: DUP1 00000063: PUSH4 0x313ce567 00000068: EQ 00000069: PUSH2 0x0330 0000006c: JUMPI 0000006d: DUP1 0000006e: PUSH4 0x3ccfd60b 00000073: EQ 00000074: PUSH2 0x035f 00000077: JUMPI 00000078: DUP1 00000079: PUSH4 0x3eaaf86b 0000007e: EQ 0000007f: PUSH2 0x0374 00000082: JUMPI 00000083: DUP1 00000084: PUSH4 0x40c558b2 00000089: EQ 0000008a: PUSH2 0x039d 0000008d: JUMPI 0000008e: DUP1 0000008f: PUSH4 0x42a4af66 00000094: EQ 00000095: PUSH2 0x03d4 00000098: JUMPI 00000099: DUP1 0000009a: PUSH4 0x442890d5 0000009f: EQ 000000a0: PUSH2 0x0406 000000a3: JUMPI 000000a4: DUP1 000000a5: PUSH4 0x4da2b48e 000000aa: EQ 000000ab: PUSH2 0x045b 000000ae: JUMPI 000000af: DUP1 000000b0: PUSH4 0x51605d80 000000b5: EQ 000000b6: PUSH2 0x0473 000000b9: JUMPI 000000ba: DUP1 000000bb: PUSH4 0x51ecfd16 000000c0: EQ 000000c1: PUSH2 0x0501 000000c4: JUMPI 000000c5: DUP1 000000c6: PUSH4 0x53e9dcae 000000cb: EQ 000000cc: PUSH2 0x0538 000000cf: JUMPI 000000d0: DUP1 000000d1: PUSH4 0x55bdd4ac 000000d6: EQ 000000d7: PUSH2 0x05d4 000000da: JUMPI 000000db: DUP1 000000dc: PUSH4 0x5a3b7e42 000000e1: EQ 000000e2: PUSH2 0x061f 000000e5: JUMPI 000000e6: DUP1 000000e7: PUSH4 0x61718141 000000ec: EQ 000000ed: PUSH2 0x06ad 000000f0: JUMPI 000000f1: DUP1 000000f2: PUSH4 0x68d89792 000000f7: EQ 000000f8: PUSH2 0x06da 000000fb: JUMPI 000000fc: DUP1 000000fd: PUSH4 0x70a08231 00000102: EQ 00000103: PUSH2 0x0749 00000106: JUMPI 00000107: DUP1 00000108: PUSH4 0x7b2c5148 0000010d: EQ 0000010e: PUSH2 0x0796 00000111: JUMPI 00000112: DUP1 00000113: PUSH4 0x861dd0a5 00000118: EQ 00000119: PUSH2 0x07d3 0000011c: JUMPI 0000011d: DUP1 0000011e: PUSH4 0x93fffddc 00000123: EQ 00000124: PUSH2 0x0865 00000127: JUMPI 00000128: DUP1 00000129: PUSH4 0x95d89b41 0000012e: EQ 0000012f: PUSH2 0x08ba 00000132: JUMPI 00000133: DUP1 00000134: PUSH4 0x9c9cc12a 00000139: EQ 0000013a: PUSH2 0x0948 0000013d: JUMPI 0000013e: DUP1 0000013f: PUSH4 0x9d773a1b 00000144: EQ 00000145: PUSH2 0x098b 00000148: JUMPI 00000149: DUP1 0000014a: PUSH4 0x9e3e6878 0000014f: EQ 00000150: PUSH2 0x0a3a 00000153: JUMPI 00000154: DUP1 00000155: PUSH4 0xa0a8e460 0000015a: EQ 0000015b: PUSH2 0x0a67 0000015e: JUMPI 0000015f: DUP1 00000160: PUSH4 0xa2093e1b 00000165: EQ 00000166: PUSH2 0x0a96 00000169: JUMPI 0000016a: DUP1 0000016b: PUSH4 0xa7e1a8ee 00000170: EQ 00000171: PUSH2 0x0ac2 00000174: JUMPI 00000175: DUP1 00000176: PUSH4 0xa9059cbb 0000017b: EQ 0000017c: PUSH2 0x0b28 0000017f: JUMPI 00000180: DUP1 00000181: PUSH4 0xab179e9f 00000186: EQ 00000187: PUSH2 0x0b82 0000018a: JUMPI 0000018b: DUP1 0000018c: PUSH4 0xb3c6487b 00000191: EQ 00000192: PUSH2 0x0bab 00000195: JUMPI 00000196: DUP1 00000197: PUSH4 0xb9364835 0000019c: EQ 0000019d: PUSH2 0x0bd7 000001a0: JUMPI 000001a1: DUP1 000001a2: PUSH4 0xd72503ba 000001a7: EQ 000001a8: PUSH2 0x0c3a 000001ab: JUMPI 000001ac: DUP1 000001ad: PUSH4 0xdddf33cc 000001b2: EQ 000001b3: PUSH2 0x0c52 000001b6: JUMPI 000001b7: DUP1 000001b8: PUSH4 0xe3acc49a 000001bd: EQ 000001be: PUSH2 0x0c7e 000001c1: JUMPI 000001c2: DUP1 000001c3: PUSH4 0xea341309 000001c8: EQ 000001c9: PUSH2 0x0cb5 000001cc: JUMPI 000001cd: DUP1 000001ce: PUSH4 0xebeb0f48 000001d3: EQ 000001d4: PUSH2 0x0cde 000001d7: JUMPI 000001d8: DUP1 000001d9: PUSH4 0xf3f43703 000001de: EQ 000001df: PUSH2 0x0cf3 000001e2: JUMPI 000001e3: DUP1 000001e4: PUSH4 0xf7e23677 000001e9: EQ 000001ea: PUSH2 0x0d40 000001ed: JUMPI 000001ee: JUMPDEST 000001ef: PUSH1 0x00 000001f1: DUP1 000001f2: REVERT 000001f3: JUMPDEST 000001f4: CALLVALUE 000001f5: ISZERO 000001f6: PUSH2 0x01fe 000001f9: JUMPI 000001fa: PUSH1 0x00 000001fc: DUP1 000001fd: REVERT 000001fe: JUMPDEST 000001ff: PUSH2 0x0206 00000202: PUSH2 0x0de5 00000205: JUMP 00000206: JUMPDEST 00000207: PUSH1 0x40 00000209: MLOAD 0000020a: DUP1 0000020b: DUP1 0000020c: PUSH1 0x20 0000020e: ADD 0000020f: DUP3 00000210: DUP2 00000211: SUB 00000212: DUP3 00000213: MSTORE 00000214: DUP4 00000215: DUP2 00000216: DUP2 00000217: MLOAD 00000218: DUP2 00000219: MSTORE 0000021a: PUSH1 0x20 0000021c: ADD 0000021d: SWAP2 0000021e: POP 0000021f: DUP1 00000220: MLOAD 00000221: SWAP1 00000222: PUSH1 0x20 00000224: ADD 00000225: SWAP1 00000226: DUP1 00000227: DUP4 00000228: DUP4 00000229: PUSH1 0x00 0000022b: JUMPDEST 0000022c: DUP4 0000022d: DUP2 0000022e: LT 0000022f: ISZERO 00000230: PUSH2 0x0246 00000233: JUMPI 00000234: DUP1 00000235: DUP3 00000236: ADD 00000237: MLOAD 00000238: DUP2 00000239: DUP5 0000023a: ADD 0000023b: MSTORE 0000023c: PUSH1 0x20 0000023e: DUP2 0000023f: ADD 00000240: SWAP1 00000241: POP 00000242: PUSH2 0x022b 00000245: JUMP 00000246: JUMPDEST 00000247: POP 00000248: POP 00000249: POP 0000024a: POP 0000024b: SWAP1 0000024c: POP 0000024d: SWAP1 0000024e: DUP2 0000024f: ADD 00000250: SWAP1 00000251: PUSH1 0x1f 00000253: AND 00000254: DUP1 00000255: ISZERO 00000256: PUSH2 0x0273 00000259: JUMPI 0000025a: DUP1 0000025b: DUP3 0000025c: SUB 0000025d: DUP1 0000025e: MLOAD 0000025f: PUSH1 0x01 00000261: DUP4 00000262: PUSH1 0x20 00000264: SUB 00000265: PUSH2 0x0100 00000268: EXP 00000269: SUB 0000026a: NOT 0000026b: AND 0000026c: DUP2 0000026d: MSTORE 0000026e: PUSH1 0x20 00000270: ADD 00000271: SWAP2 00000272: POP 00000273: JUMPDEST 00000274: POP 00000275: SWAP3 00000276: POP 00000277: POP 00000278: POP 00000279: PUSH1 0x40 0000027b: MLOAD 0000027c: DUP1 0000027d: SWAP2 0000027e: SUB 0000027f: SWAP1 00000280: RETURN 00000281: JUMPDEST 00000282: CALLVALUE 00000283: ISZERO 00000284: PUSH2 0x028c 00000287: JUMPI 00000288: PUSH1 0x00 0000028a: DUP1 0000028b: REVERT 0000028c: JUMPDEST 0000028d: PUSH2 0x0294 00000290: PUSH2 0x0e83 00000293: JUMP 00000294: JUMPDEST 00000295: PUSH1 0x40 00000297: MLOAD 00000298: DUP1 00000299: DUP3 0000029a: DUP2 0000029b: MSTORE 0000029c: PUSH1 0x20 0000029e: ADD 0000029f: SWAP2 000002a0: POP 000002a1: POP 000002a2: PUSH1 0x40 000002a4: MLOAD 000002a5: DUP1 000002a6: SWAP2 000002a7: SUB 000002a8: SWAP1 000002a9: RETURN 000002aa: JUMPDEST 000002ab: CALLVALUE 000002ac: ISZERO 000002ad: PUSH2 0x02b5 000002b0: JUMPI 000002b1: PUSH1 0x00 000002b3: DUP1 000002b4: REVERT 000002b5: JUMPDEST 000002b6: PUSH2 0x02cb 000002b9: PUSH1 0x04 000002bb: DUP1 000002bc: DUP1 000002bd: CALLDATALOAD 000002be: SWAP1 000002bf: PUSH1 0x20 000002c1: ADD 000002c2: SWAP1 000002c3: SWAP2 000002c4: SWAP1 000002c5: POP 000002c6: POP 000002c7: PUSH2 0x0e8d 000002ca: JUMP 000002cb: JUMPDEST 000002cc: STOP 000002cd: JUMPDEST 000002ce: CALLVALUE 000002cf: ISZERO 000002d0: PUSH2 0x02d8 000002d3: JUMPI 000002d4: PUSH1 0x00 000002d6: DUP1 000002d7: REVERT 000002d8: JUMPDEST 000002d9: PUSH2 0x02ee 000002dc: PUSH1 0x04 000002de: DUP1 000002df: DUP1 000002e0: CALLDATALOAD 000002e1: SWAP1 000002e2: PUSH1 0x20 000002e4: ADD 000002e5: SWAP1 000002e6: SWAP2 000002e7: SWAP1 000002e8: POP 000002e9: POP 000002ea: PUSH2 0x106b 000002ed: JUMP 000002ee: JUMPDEST 000002ef: PUSH1 0x40 000002f1: MLOAD 000002f2: DUP1 000002f3: DUP3 000002f4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000309: AND 0000030a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000031f: AND 00000320: DUP2 00000321: MSTORE 00000322: PUSH1 0x20 00000324: ADD 00000325: SWAP2 00000326: POP 00000327: POP 00000328: PUSH1 0x40 0000032a: MLOAD 0000032b: DUP1 0000032c: SWAP2 0000032d: SUB 0000032e: SWAP1 0000032f: RETURN 00000330: JUMPDEST 00000331: CALLVALUE 00000332: ISZERO 00000333: PUSH2 0x033b 00000336: JUMPI 00000337: PUSH1 0x00 00000339: DUP1 0000033a: REVERT 0000033b: JUMPDEST 0000033c: PUSH2 0x0343 0000033f: PUSH2 0x109e 00000342: JUMP 00000343: JUMPDEST 00000344: PUSH1 0x40 00000346: MLOAD 00000347: DUP1 00000348: DUP3 00000349: PUSH1 0xff 0000034b: AND 0000034c: PUSH1 0xff 0000034e: AND 0000034f: DUP2 00000350: MSTORE 00000351: PUSH1 0x20 00000353: ADD 00000354: SWAP2 00000355: POP 00000356: POP 00000357: PUSH1 0x40 00000359: MLOAD 0000035a: DUP1 0000035b: SWAP2 0000035c: SUB 0000035d: SWAP1 0000035e: RETURN 0000035f: JUMPDEST 00000360: CALLVALUE 00000361: ISZERO 00000362: PUSH2 0x036a 00000365: JUMPI 00000366: PUSH1 0x00 00000368: DUP1 00000369: REVERT 0000036a: JUMPDEST 0000036b: PUSH2 0x0372 0000036e: PUSH2 0x10b1 00000371: JUMP 00000372: JUMPDEST 00000373: STOP 00000374: JUMPDEST 00000375: CALLVALUE 00000376: ISZERO 00000377: PUSH2 0x037f 0000037a: JUMPI 0000037b: PUSH1 0x00 0000037d: DUP1 0000037e: REVERT 0000037f: JUMPDEST 00000380: PUSH2 0x0387 00000383: PUSH2 0x117d 00000386: JUMP 00000387: JUMPDEST 00000388: PUSH1 0x40 0000038a: MLOAD 0000038b: DUP1 0000038c: DUP3 0000038d: DUP2 0000038e: MSTORE 0000038f: PUSH1 0x20 00000391: ADD 00000392: SWAP2 00000393: POP 00000394: POP 00000395: PUSH1 0x40 00000397: MLOAD 00000398: DUP1 00000399: SWAP2 0000039a: SUB 0000039b: SWAP1 0000039c: RETURN 0000039d: JUMPDEST 0000039e: CALLVALUE 0000039f: ISZERO 000003a0: PUSH2 0x03a8 000003a3: JUMPI 000003a4: PUSH1 0x00 000003a6: DUP1 000003a7: REVERT 000003a8: JUMPDEST 000003a9: PUSH2 0x03be 000003ac: PUSH1 0x04 000003ae: DUP1 000003af: DUP1 000003b0: CALLDATALOAD 000003b1: SWAP1 000003b2: PUSH1 0x20 000003b4: ADD 000003b5: SWAP1 000003b6: SWAP2 000003b7: SWAP1 000003b8: POP 000003b9: POP 000003ba: PUSH2 0x1183 000003bd: JUMP 000003be: JUMPDEST 000003bf: PUSH1 0x40 000003c1: MLOAD 000003c2: DUP1 000003c3: DUP3 000003c4: DUP2 000003c5: MSTORE 000003c6: PUSH1 0x20 000003c8: ADD 000003c9: SWAP2 000003ca: POP 000003cb: POP 000003cc: PUSH1 0x40 000003ce: MLOAD 000003cf: DUP1 000003d0: SWAP2 000003d1: SUB 000003d2: SWAP1 000003d3: RETURN 000003d4: JUMPDEST 000003d5: CALLVALUE 000003d6: ISZERO 000003d7: PUSH2 0x03df 000003da: JUMPI 000003db: PUSH1 0x00 000003dd: DUP1 000003de: REVERT 000003df: JUMPDEST 000003e0: PUSH2 0x0404 000003e3: PUSH1 0x04 000003e5: DUP1 000003e6: DUP1 000003e7: CALLDATALOAD 000003e8: PUSH4 0xffffffff 000003ed: AND 000003ee: SWAP1 000003ef: PUSH1 0x20 000003f1: ADD 000003f2: SWAP1 000003f3: SWAP2 000003f4: SWAP1 000003f5: DUP1 000003f6: CALLDATALOAD 000003f7: SWAP1 000003f8: PUSH1 0x20 000003fa: ADD 000003fb: SWAP1 000003fc: SWAP2 000003fd: SWAP1 000003fe: POP 000003ff: POP 00000400: PUSH2 0x11a7 00000403: JUMP 00000404: JUMPDEST 00000405: STOP 00000406: JUMPDEST 00000407: CALLVALUE 00000408: ISZERO 00000409: PUSH2 0x0411 0000040c: JUMPI 0000040d: PUSH1 0x00 0000040f: DUP1 00000410: REVERT 00000411: JUMPDEST 00000412: PUSH2 0x0419 00000415: PUSH2 0x1290 00000418: JUMP 00000419: JUMPDEST 0000041a: PUSH1 0x40 0000041c: MLOAD 0000041d: DUP1 0000041e: DUP3 0000041f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000434: AND 00000435: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000044a: AND 0000044b: DUP2 0000044c: MSTORE 0000044d: PUSH1 0x20 0000044f: ADD 00000450: SWAP2 00000451: POP 00000452: POP 00000453: PUSH1 0x40 00000455: MLOAD 00000456: DUP1 00000457: SWAP2 00000458: SUB 00000459: SWAP1 0000045a: RETURN 0000045b: JUMPDEST 0000045c: PUSH2 0x0471 0000045f: PUSH1 0x04 00000461: DUP1 00000462: DUP1 00000463: CALLDATALOAD 00000464: SWAP1 00000465: PUSH1 0x20 00000467: ADD 00000468: SWAP1 00000469: SWAP2 0000046a: SWAP1 0000046b: POP 0000046c: POP 0000046d: PUSH2 0x12ba 00000470: JUMP 00000471: JUMPDEST 00000472: STOP 00000473: JUMPDEST 00000474: CALLVALUE 00000475: ISZERO 00000476: PUSH2 0x047e 00000479: JUMPI 0000047a: PUSH1 0x00 0000047c: DUP1 0000047d: REVERT 0000047e: JUMPDEST 0000047f: PUSH2 0x0486 00000482: PUSH2 0x147c 00000485: JUMP 00000486: JUMPDEST 00000487: PUSH1 0x40 00000489: MLOAD 0000048a: DUP1 0000048b: DUP1 0000048c: PUSH1 0x20 0000048e: ADD 0000048f: DUP3 00000490: DUP2 00000491: SUB 00000492: DUP3 00000493: MSTORE 00000494: DUP4 00000495: DUP2 00000496: DUP2 00000497: MLOAD 00000498: DUP2 00000499: MSTORE 0000049a: PUSH1 0x20 0000049c: ADD 0000049d: SWAP2 0000049e: POP 0000049f: DUP1 000004a0: MLOAD 000004a1: SWAP1 000004a2: PUSH1 0x20 000004a4: ADD 000004a5: SWAP1 000004a6: DUP1 000004a7: DUP4 000004a8: DUP4 000004a9: PUSH1 0x00 000004ab: JUMPDEST 000004ac: DUP4 000004ad: DUP2 000004ae: LT 000004af: ISZERO 000004b0: PUSH2 0x04c6 000004b3: JUMPI 000004b4: DUP1 000004b5: DUP3 000004b6: ADD 000004b7: MLOAD 000004b8: DUP2 000004b9: DUP5 000004ba: ADD 000004bb: MSTORE 000004bc: PUSH1 0x20 000004be: DUP2 000004bf: ADD 000004c0: SWAP1 000004c1: POP 000004c2: PUSH2 0x04ab 000004c5: JUMP 000004c6: JUMPDEST 000004c7: POP 000004c8: POP 000004c9: POP 000004ca: POP 000004cb: SWAP1 000004cc: POP 000004cd: SWAP1 000004ce: DUP2 000004cf: ADD 000004d0: SWAP1 000004d1: PUSH1 0x1f 000004d3: AND 000004d4: DUP1 000004d5: ISZERO 000004d6: PUSH2 0x04f3 000004d9: JUMPI 000004da: DUP1 000004db: DUP3 000004dc: SUB 000004dd: DUP1 000004de: MLOAD 000004df: PUSH1 0x01 000004e1: DUP4 000004e2: PUSH1 0x20 000004e4: SUB 000004e5: PUSH2 0x0100 000004e8: EXP 000004e9: SUB 000004ea: NOT 000004eb: AND 000004ec: DUP2 000004ed: MSTORE 000004ee: PUSH1 0x20 000004f0: ADD 000004f1: SWAP2 000004f2: POP 000004f3: JUMPDEST 000004f4: POP 000004f5: SWAP3 000004f6: POP 000004f7: POP 000004f8: POP 000004f9: PUSH1 0x40 000004fb: MLOAD 000004fc: DUP1 000004fd: SWAP2 000004fe: SUB 000004ff: SWAP1 00000500: RETURN 00000501: JUMPDEST 00000502: CALLVALUE 00000503: ISZERO 00000504: PUSH2 0x050c 00000507: JUMPI 00000508: PUSH1 0x00 0000050a: DUP1 0000050b: REVERT 0000050c: JUMPDEST 0000050d: PUSH2 0x0522 00000510: PUSH1 0x04 00000512: DUP1 00000513: DUP1 00000514: CALLDATALOAD 00000515: SWAP1 00000516: PUSH1 0x20 00000518: ADD 00000519: SWAP1 0000051a: SWAP2 0000051b: SWAP1 0000051c: POP 0000051d: POP 0000051e: PUSH2 0x151a 00000521: JUMP 00000522: JUMPDEST 00000523: PUSH1 0x40 00000525: MLOAD 00000526: DUP1 00000527: DUP3 00000528: DUP2 00000529: MSTORE 0000052a: PUSH1 0x20 0000052c: ADD 0000052d: SWAP2 0000052e: POP 0000052f: POP 00000530: PUSH1 0x40 00000532: MLOAD 00000533: DUP1 00000534: SWAP2 00000535: SUB 00000536: SWAP1 00000537: RETURN 00000538: JUMPDEST 00000539: CALLVALUE 0000053a: ISZERO 0000053b: PUSH2 0x0543 0000053e: JUMPI 0000053f: PUSH1 0x00 00000541: DUP1 00000542: REVERT 00000543: JUMPDEST 00000544: PUSH2 0x0559 00000547: PUSH1 0x04 00000549: DUP1 0000054a: DUP1 0000054b: CALLDATALOAD 0000054c: SWAP1 0000054d: PUSH1 0x20 0000054f: ADD 00000550: SWAP1 00000551: SWAP2 00000552: SWAP1 00000553: POP 00000554: POP 00000555: PUSH2 0x1599 00000558: JUMP 00000559: JUMPDEST 0000055a: PUSH1 0x40 0000055c: MLOAD 0000055d: DUP1 0000055e: DUP1 0000055f: PUSH1 0x20 00000561: ADD 00000562: DUP3 00000563: DUP2 00000564: SUB 00000565: DUP3 00000566: MSTORE 00000567: DUP4 00000568: DUP2 00000569: DUP2 0000056a: MLOAD 0000056b: DUP2 0000056c: MSTORE 0000056d: PUSH1 0x20 0000056f: ADD 00000570: SWAP2 00000571: POP 00000572: DUP1 00000573: MLOAD 00000574: SWAP1 00000575: PUSH1 0x20 00000577: ADD 00000578: SWAP1 00000579: DUP1 0000057a: DUP4 0000057b: DUP4 0000057c: PUSH1 0x00 0000057e: JUMPDEST 0000057f: DUP4 00000580: DUP2 00000581: LT 00000582: ISZERO 00000583: PUSH2 0x0599 00000586: JUMPI 00000587: DUP1 00000588: DUP3 00000589: ADD 0000058a: MLOAD 0000058b: DUP2 0000058c: DUP5 0000058d: ADD 0000058e: MSTORE 0000058f: PUSH1 0x20 00000591: DUP2 00000592: ADD 00000593: SWAP1 00000594: POP 00000595: PUSH2 0x057e 00000598: JUMP 00000599: JUMPDEST 0000059a: POP 0000059b: POP 0000059c: POP 0000059d: POP 0000059e: SWAP1 0000059f: POP 000005a0: SWAP1 000005a1: DUP2 000005a2: ADD 000005a3: SWAP1 000005a4: PUSH1 0x1f 000005a6: AND 000005a7: DUP1 000005a8: ISZERO 000005a9: PUSH2 0x05c6 000005ac: JUMPI 000005ad: DUP1 000005ae: DUP3 000005af: SUB 000005b0: DUP1 000005b1: MLOAD 000005b2: PUSH1 0x01 000005b4: DUP4 000005b5: PUSH1 0x20 000005b7: SUB 000005b8: PUSH2 0x0100 000005bb: EXP 000005bc: SUB 000005bd: NOT 000005be: AND 000005bf: DUP2 000005c0: MSTORE 000005c1: PUSH1 0x20 000005c3: ADD 000005c4: SWAP2 000005c5: POP 000005c6: JUMPDEST 000005c7: POP 000005c8: SWAP3 000005c9: POP 000005ca: POP 000005cb: POP 000005cc: PUSH1 0x40 000005ce: MLOAD 000005cf: DUP1 000005d0: SWAP2 000005d1: SUB 000005d2: SWAP1 000005d3: RETURN 000005d4: JUMPDEST 000005d5: CALLVALUE 000005d6: ISZERO 000005d7: PUSH2 0x05df 000005da: JUMPI 000005db: PUSH1 0x00 000005dd: DUP1 000005de: REVERT 000005df: JUMPDEST 000005e0: PUSH2 0x061d 000005e3: PUSH1 0x04 000005e5: DUP1 000005e6: DUP1 000005e7: CALLDATALOAD 000005e8: SWAP1 000005e9: PUSH1 0x20 000005eb: ADD 000005ec: SWAP1 000005ed: SWAP2 000005ee: SWAP1 000005ef: DUP1 000005f0: CALLDATALOAD 000005f1: SWAP1 000005f2: PUSH1 0x20 000005f4: ADD 000005f5: SWAP1 000005f6: SWAP2 000005f7: SWAP1 000005f8: DUP1 000005f9: CALLDATALOAD 000005fa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000060f: AND 00000610: SWAP1 00000611: PUSH1 0x20 00000613: ADD 00000614: SWAP1 00000615: SWAP2 00000616: SWAP1 00000617: POP 00000618: POP 00000619: PUSH2 0x1649 0000061c: JUMP 0000061d: JUMPDEST 0000061e: STOP 0000061f: JUMPDEST 00000620: CALLVALUE 00000621: ISZERO 00000622: PUSH2 0x062a 00000625: JUMPI 00000626: PUSH1 0x00 00000628: DUP1 00000629: REVERT 0000062a: JUMPDEST 0000062b: PUSH2 0x0632 0000062e: PUSH2 0x1849 00000631: JUMP 00000632: JUMPDEST 00000633: PUSH1 0x40 00000635: MLOAD 00000636: DUP1 00000637: DUP1 00000638: PUSH1 0x20 0000063a: ADD 0000063b: DUP3 0000063c: DUP2 0000063d: SUB 0000063e: DUP3 0000063f: MSTORE 00000640: DUP4 00000641: DUP2 00000642: DUP2 00000643: MLOAD 00000644: DUP2 00000645: MSTORE 00000646: PUSH1 0x20 00000648: ADD 00000649: SWAP2 0000064a: POP 0000064b: DUP1 0000064c: MLOAD 0000064d: SWAP1 0000064e: PUSH1 0x20 00000650: ADD 00000651: SWAP1 00000652: DUP1 00000653: DUP4 00000654: DUP4 00000655: PUSH1 0x00 00000657: JUMPDEST 00000658: DUP4 00000659: DUP2 0000065a: LT 0000065b: ISZERO 0000065c: PUSH2 0x0672 0000065f: JUMPI 00000660: DUP1 00000661: DUP3 00000662: ADD 00000663: MLOAD 00000664: DUP2 00000665: DUP5 00000666: ADD 00000667: MSTORE 00000668: PUSH1 0x20 0000066a: DUP2 0000066b: ADD 0000066c: SWAP1 0000066d: POP 0000066e: PUSH2 0x0657 00000671: JUMP 00000672: JUMPDEST 00000673: POP 00000674: POP 00000675: POP 00000676: POP 00000677: SWAP1 00000678: POP 00000679: SWAP1 0000067a: DUP2 0000067b: ADD 0000067c: SWAP1 0000067d: PUSH1 0x1f 0000067f: AND 00000680: DUP1 00000681: ISZERO 00000682: PUSH2 0x069f 00000685: JUMPI 00000686: DUP1 00000687: DUP3 00000688: SUB 00000689: DUP1 0000068a: MLOAD 0000068b: PUSH1 0x01 0000068d: DUP4 0000068e: PUSH1 0x20 00000690: SUB 00000691: PUSH2 0x0100 00000694: EXP 00000695: SUB 00000696: NOT 00000697: AND 00000698: DUP2 00000699: MSTORE 0000069a: PUSH1 0x20 0000069c: ADD 0000069d: SWAP2 0000069e: POP 0000069f: JUMPDEST 000006a0: POP 000006a1: SWAP3 000006a2: POP 000006a3: POP 000006a4: POP 000006a5: PUSH1 0x40 000006a7: MLOAD 000006a8: DUP1 000006a9: SWAP2 000006aa: SUB 000006ab: SWAP1 000006ac: RETURN 000006ad: JUMPDEST 000006ae: CALLVALUE 000006af: ISZERO 000006b0: PUSH2 0x06b8 000006b3: JUMPI 000006b4: PUSH1 0x00 000006b6: DUP1 000006b7: REVERT 000006b8: JUMPDEST 000006b9: PUSH2 0x06c0 000006bc: PUSH2 0x18e7 000006bf: JUMP 000006c0: JUMPDEST 000006c1: PUSH1 0x40 000006c3: MLOAD 000006c4: DUP1 000006c5: DUP3 000006c6: ISZERO 000006c7: ISZERO 000006c8: ISZERO 000006c9: ISZERO 000006ca: DUP2 000006cb: MSTORE 000006cc: PUSH1 0x20 000006ce: ADD 000006cf: SWAP2 000006d0: POP 000006d1: POP 000006d2: PUSH1 0x40 000006d4: MLOAD 000006d5: DUP1 000006d6: SWAP2 000006d7: SUB 000006d8: SWAP1 000006d9: RETURN 000006da: JUMPDEST 000006db: CALLVALUE 000006dc: ISZERO 000006dd: PUSH2 0x06e5 000006e0: JUMPI 000006e1: PUSH1 0x00 000006e3: DUP1 000006e4: REVERT 000006e5: JUMPDEST 000006e6: PUSH2 0x0747 000006e9: PUSH1 0x04 000006eb: DUP1 000006ec: DUP1 000006ed: CALLDATALOAD 000006ee: SWAP1 000006ef: PUSH1 0x20 000006f1: ADD 000006f2: SWAP1 000006f3: SWAP2 000006f4: SWAP1 000006f5: DUP1 000006f6: CALLDATALOAD 000006f7: SWAP1 000006f8: PUSH1 0x20 000006fa: ADD 000006fb: SWAP1 000006fc: SWAP2 000006fd: SWAP1 000006fe: DUP1 000006ff: CALLDATALOAD 00000700: SWAP1 00000701: PUSH1 0x20 00000703: ADD 00000704: SWAP1 00000705: DUP3 00000706: ADD 00000707: DUP1 00000708: CALLDATALOAD 00000709: SWAP1 0000070a: PUSH1 0x20 0000070c: ADD 0000070d: SWAP1 0000070e: DUP1 0000070f: DUP1 00000710: PUSH1 0x1f 00000712: ADD 00000713: PUSH1 0x20 00000715: DUP1 00000716: SWAP2 00000717: DIV 00000718: MUL 00000719: PUSH1 0x20 0000071b: ADD 0000071c: PUSH1 0x40 0000071e: MLOAD 0000071f: SWAP1 00000720: DUP2 00000721: ADD 00000722: PUSH1 0x40 00000724: MSTORE 00000725: DUP1 00000726: SWAP4 00000727: SWAP3 00000728: SWAP2 00000729: SWAP1 0000072a: DUP2 0000072b: DUP2 0000072c: MSTORE 0000072d: PUSH1 0x20 0000072f: ADD 00000730: DUP4 00000731: DUP4 00000732: DUP1 00000733: DUP3 00000734: DUP5 00000735: CALLDATACOPY 00000736: DUP3 00000737: ADD 00000738: SWAP2 00000739: POP 0000073a: POP 0000073b: POP 0000073c: POP 0000073d: POP 0000073e: POP 0000073f: SWAP2 00000740: SWAP1 00000741: POP 00000742: POP 00000743: PUSH2 0x18fa 00000746: JUMP 00000747: JUMPDEST 00000748: STOP 00000749: JUMPDEST 0000074a: CALLVALUE 0000074b: ISZERO 0000074c: PUSH2 0x0754 0000074f: JUMPI 00000750: PUSH1 0x00 00000752: DUP1 00000753: REVERT 00000754: JUMPDEST 00000755: PUSH2 0x0780 00000758: PUSH1 0x04 0000075a: DUP1 0000075b: DUP1 0000075c: CALLDATALOAD 0000075d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000772: AND 00000773: SWAP1 00000774: PUSH1 0x20 00000776: ADD 00000777: SWAP1 00000778: SWAP2 00000779: SWAP1 0000077a: POP 0000077b: POP 0000077c: PUSH2 0x1a96 0000077f: JUMP 00000780: JUMPDEST 00000781: PUSH1 0x40 00000783: MLOAD 00000784: DUP1 00000785: DUP3 00000786: DUP2 00000787: MSTORE 00000788: PUSH1 0x20 0000078a: ADD 0000078b: SWAP2 0000078c: POP 0000078d: POP 0000078e: PUSH1 0x40 00000790: MLOAD 00000791: DUP1 00000792: SWAP2 00000793: SUB 00000794: SWAP1 00000795: RETURN 00000796: JUMPDEST 00000797: CALLVALUE 00000798: ISZERO 00000799: PUSH2 0x07a1 0000079c: JUMPI 0000079d: PUSH1 0x00 0000079f: DUP1 000007a0: REVERT 000007a1: JUMPDEST 000007a2: PUSH2 0x07bd 000007a5: PUSH1 0x04 000007a7: DUP1 000007a8: DUP1 000007a9: CALLDATALOAD 000007aa: PUSH4 0xffffffff 000007af: AND 000007b0: SWAP1 000007b1: PUSH1 0x20 000007b3: ADD 000007b4: SWAP1 000007b5: SWAP2 000007b6: SWAP1 000007b7: POP 000007b8: POP 000007b9: PUSH2 0x1b2d 000007bc: JUMP 000007bd: JUMPDEST 000007be: PUSH1 0x40 000007c0: MLOAD 000007c1: DUP1 000007c2: DUP3 000007c3: DUP2 000007c4: MSTORE 000007c5: PUSH1 0x20 000007c7: ADD 000007c8: SWAP2 000007c9: POP 000007ca: POP 000007cb: PUSH1 0x40 000007cd: MLOAD 000007ce: DUP1 000007cf: SWAP2 000007d0: SUB 000007d1: SWAP1 000007d2: RETURN 000007d3: JUMPDEST 000007d4: CALLVALUE 000007d5: ISZERO 000007d6: PUSH2 0x07de 000007d9: JUMPI 000007da: PUSH1 0x00 000007dc: DUP1 000007dd: REVERT 000007de: JUMPDEST 000007df: PUSH2 0x084f 000007e2: PUSH1 0x04 000007e4: DUP1 000007e5: DUP1 000007e6: CALLDATALOAD 000007e7: PUSH4 0xffffffff 000007ec: AND 000007ed: SWAP1 000007ee: PUSH1 0x20 000007f0: ADD 000007f1: SWAP1 000007f2: SWAP2 000007f3: SWAP1 000007f4: DUP1 000007f5: CALLDATALOAD 000007f6: SWAP1 000007f7: PUSH1 0x20 000007f9: ADD 000007fa: SWAP1 000007fb: SWAP2 000007fc: SWAP1 000007fd: DUP1 000007fe: CALLDATALOAD 000007ff: SWAP1 00000800: PUSH1 0x20 00000802: ADD 00000803: SWAP1 00000804: SWAP2 00000805: SWAP1 00000806: DUP1 00000807: CALLDATALOAD 00000808: SWAP1 00000809: PUSH1 0x20 0000080b: ADD 0000080c: SWAP1 0000080d: DUP3 0000080e: ADD 0000080f: DUP1 00000810: CALLDATALOAD 00000811: SWAP1 00000812: PUSH1 0x20 00000814: ADD 00000815: SWAP1 00000816: DUP1 00000817: DUP1 00000818: PUSH1 0x1f 0000081a: ADD 0000081b: PUSH1 0x20 0000081d: DUP1 0000081e: SWAP2 0000081f: DIV 00000820: MUL 00000821: PUSH1 0x20 00000823: ADD 00000824: PUSH1 0x40 00000826: MLOAD 00000827: SWAP1 00000828: DUP2 00000829: ADD 0000082a: PUSH1 0x40 0000082c: MSTORE 0000082d: DUP1 0000082e: SWAP4 0000082f: SWAP3 00000830: SWAP2 00000831: SWAP1 00000832: DUP2 00000833: DUP2 00000834: MSTORE 00000835: PUSH1 0x20 00000837: ADD 00000838: DUP4 00000839: DUP4 0000083a: DUP1 0000083b: DUP3 0000083c: DUP5 0000083d: CALLDATACOPY 0000083e: DUP3 0000083f: ADD 00000840: SWAP2 00000841: POP 00000842: POP 00000843: POP 00000844: POP 00000845: POP 00000846: POP 00000847: SWAP2 00000848: SWAP1 00000849: POP 0000084a: POP 0000084b: PUSH2 0x1b45 0000084e: JUMP 0000084f: JUMPDEST 00000850: PUSH1 0x40 00000852: MLOAD 00000853: DUP1 00000854: DUP3 00000855: DUP2 00000856: MSTORE 00000857: PUSH1 0x20 00000859: ADD 0000085a: SWAP2 0000085b: POP 0000085c: POP 0000085d: PUSH1 0x40 0000085f: MLOAD 00000860: DUP1 00000861: SWAP2 00000862: SUB 00000863: SWAP1 00000864: RETURN 00000865: JUMPDEST 00000866: CALLVALUE 00000867: ISZERO 00000868: PUSH2 0x0870 0000086b: JUMPI 0000086c: PUSH1 0x00 0000086e: DUP1 0000086f: REVERT 00000870: JUMPDEST 00000871: PUSH2 0x0878 00000874: PUSH2 0x1d18 00000877: JUMP 00000878: JUMPDEST 00000879: PUSH1 0x40 0000087b: MLOAD 0000087c: DUP1 0000087d: DUP3 0000087e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000893: AND 00000894: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000008a9: AND 000008aa: DUP2 000008ab: MSTORE 000008ac: PUSH1 0x20 000008ae: ADD 000008af: SWAP2 000008b0: POP 000008b1: POP 000008b2: PUSH1 0x40 000008b4: MLOAD 000008b5: DUP1 000008b6: SWAP2 000008b7: SUB 000008b8: SWAP1 000008b9: RETURN 000008ba: JUMPDEST 000008bb: CALLVALUE 000008bc: ISZERO 000008bd: PUSH2 0x08c5 000008c0: JUMPI 000008c1: PUSH1 0x00 000008c3: DUP1 000008c4: REVERT 000008c5: JUMPDEST 000008c6: PUSH2 0x08cd 000008c9: PUSH2 0x1d3e 000008cc: JUMP 000008cd: JUMPDEST 000008ce: PUSH1 0x40 000008d0: MLOAD 000008d1: DUP1 000008d2: DUP1 000008d3: PUSH1 0x20 000008d5: ADD 000008d6: DUP3 000008d7: DUP2 000008d8: SUB 000008d9: DUP3 000008da: MSTORE 000008db: DUP4 000008dc: DUP2 000008dd: DUP2 000008de: MLOAD 000008df: DUP2 000008e0: MSTORE 000008e1: PUSH1 0x20 000008e3: ADD 000008e4: SWAP2 000008e5: POP 000008e6: DUP1 000008e7: MLOAD 000008e8: SWAP1 000008e9: PUSH1 0x20 000008eb: ADD 000008ec: SWAP1 000008ed: DUP1 000008ee: DUP4 000008ef: DUP4 000008f0: PUSH1 0x00 000008f2: JUMPDEST 000008f3: DUP4 000008f4: DUP2 000008f5: LT 000008f6: ISZERO 000008f7: PUSH2 0x090d 000008fa: JUMPI 000008fb: DUP1 000008fc: DUP3 000008fd: ADD 000008fe: MLOAD 000008ff: DUP2 00000900: DUP5 00000901: ADD 00000902: MSTORE 00000903: PUSH1 0x20 00000905: DUP2 00000906: ADD 00000907: SWAP1 00000908: POP 00000909: PUSH2 0x08f2 0000090c: JUMP 0000090d: JUMPDEST 0000090e: POP 0000090f: POP 00000910: POP 00000911: POP 00000912: SWAP1 00000913: POP 00000914: SWAP1 00000915: DUP2 00000916: ADD 00000917: SWAP1 00000918: PUSH1 0x1f 0000091a: AND 0000091b: DUP1 0000091c: ISZERO 0000091d: PUSH2 0x093a 00000920: JUMPI 00000921: DUP1 00000922: DUP3 00000923: SUB 00000924: DUP1 00000925: MLOAD 00000926: PUSH1 0x01 00000928: DUP4 00000929: PUSH1 0x20 0000092b: SUB 0000092c: PUSH2 0x0100 0000092f: EXP 00000930: SUB 00000931: NOT 00000932: AND 00000933: DUP2 00000934: MSTORE 00000935: PUSH1 0x20 00000937: ADD 00000938: SWAP2 00000939: POP 0000093a: JUMPDEST 0000093b: POP 0000093c: SWAP3 0000093d: POP 0000093e: POP 0000093f: POP 00000940: PUSH1 0x40 00000942: MLOAD 00000943: DUP1 00000944: SWAP2 00000945: SUB 00000946: SWAP1 00000947: RETURN 00000948: JUMPDEST 00000949: CALLVALUE 0000094a: ISZERO 0000094b: PUSH2 0x0953 0000094e: JUMPI 0000094f: PUSH1 0x00 00000951: DUP1 00000952: REVERT 00000953: JUMPDEST 00000954: PUSH2 0x0969 00000957: PUSH1 0x04 00000959: DUP1 0000095a: DUP1 0000095b: CALLDATALOAD 0000095c: SWAP1 0000095d: PUSH1 0x20 0000095f: ADD 00000960: SWAP1 00000961: SWAP2 00000962: SWAP1 00000963: POP 00000964: POP 00000965: PUSH2 0x1ddc 00000968: JUMP 00000969: JUMPDEST 0000096a: PUSH1 0x40 0000096c: MLOAD 0000096d: DUP1 0000096e: DUP3 0000096f: PUSH4 0xffffffff 00000974: AND 00000975: PUSH4 0xffffffff 0000097a: AND 0000097b: DUP2 0000097c: MSTORE 0000097d: PUSH1 0x20 0000097f: ADD 00000980: SWAP2 00000981: POP 00000982: POP 00000983: PUSH1 0x40 00000985: MLOAD 00000986: DUP1 00000987: SWAP2 00000988: SUB 00000989: SWAP1 0000098a: RETURN 0000098b: JUMPDEST 0000098c: CALLVALUE 0000098d: ISZERO 0000098e: PUSH2 0x0996 00000991: JUMPI 00000992: PUSH1 0x00 00000994: DUP1 00000995: REVERT 00000996: JUMPDEST 00000997: PUSH2 0x09ac 0000099a: PUSH1 0x04 0000099c: DUP1 0000099d: DUP1 0000099e: CALLDATALOAD 0000099f: SWAP1 000009a0: PUSH1 0x20 000009a2: ADD 000009a3: SWAP1 000009a4: SWAP2 000009a5: SWAP1 000009a6: POP 000009a7: POP 000009a8: PUSH2 0x1e3b 000009ab: JUMP 000009ac: JUMPDEST 000009ad: PUSH1 0x40 000009af: MLOAD 000009b0: DUP1 000009b1: DUP7 000009b2: ISZERO 000009b3: ISZERO 000009b4: ISZERO 000009b5: ISZERO 000009b6: DUP2 000009b7: MSTORE 000009b8: PUSH1 0x20 000009ba: ADD 000009bb: DUP6 000009bc: DUP2 000009bd: MSTORE 000009be: PUSH1 0x20 000009c0: ADD 000009c1: DUP5 000009c2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000009d7: AND 000009d8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000009ed: AND 000009ee: DUP2 000009ef: MSTORE 000009f0: PUSH1 0x20 000009f2: ADD 000009f3: DUP4 000009f4: DUP2 000009f5: MSTORE 000009f6: PUSH1 0x20 000009f8: ADD 000009f9: DUP3 000009fa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a0f: AND 00000a10: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a25: AND 00000a26: DUP2 00000a27: MSTORE 00000a28: PUSH1 0x20 00000a2a: ADD 00000a2b: SWAP6 00000a2c: POP 00000a2d: POP 00000a2e: POP 00000a2f: POP 00000a30: POP 00000a31: POP 00000a32: PUSH1 0x40 00000a34: MLOAD 00000a35: DUP1 00000a36: SWAP2 00000a37: SUB 00000a38: SWAP1 00000a39: RETURN 00000a3a: JUMPDEST 00000a3b: CALLVALUE 00000a3c: ISZERO 00000a3d: PUSH2 0x0a45 00000a40: JUMPI 00000a41: PUSH1 0x00 00000a43: DUP1 00000a44: REVERT 00000a45: JUMPDEST 00000a46: PUSH2 0x0a4d 00000a49: PUSH2 0x1ebe 00000a4c: JUMP 00000a4d: JUMPDEST 00000a4e: PUSH1 0x40 00000a50: MLOAD 00000a51: DUP1 00000a52: DUP3 00000a53: ISZERO 00000a54: ISZERO 00000a55: ISZERO 00000a56: ISZERO 00000a57: DUP2 00000a58: MSTORE 00000a59: PUSH1 0x20 00000a5b: ADD 00000a5c: SWAP2 00000a5d: POP 00000a5e: POP 00000a5f: PUSH1 0x40 00000a61: MLOAD 00000a62: DUP1 00000a63: SWAP2 00000a64: SUB 00000a65: SWAP1 00000a66: RETURN 00000a67: JUMPDEST 00000a68: CALLVALUE 00000a69: ISZERO 00000a6a: PUSH2 0x0a72 00000a6d: JUMPI 00000a6e: PUSH1 0x00 00000a70: DUP1 00000a71: REVERT 00000a72: JUMPDEST 00000a73: PUSH2 0x0a7a 00000a76: PUSH2 0x1ed1 00000a79: JUMP 00000a7a: JUMPDEST 00000a7b: PUSH1 0x40 00000a7d: MLOAD 00000a7e: DUP1 00000a7f: DUP3 00000a80: PUSH1 0xff 00000a82: AND 00000a83: PUSH1 0xff 00000a85: AND 00000a86: DUP2 00000a87: MSTORE 00000a88: PUSH1 0x20 00000a8a: ADD 00000a8b: SWAP2 00000a8c: POP 00000a8d: POP 00000a8e: PUSH1 0x40 00000a90: MLOAD 00000a91: DUP1 00000a92: SWAP2 00000a93: SUB 00000a94: SWAP1 00000a95: RETURN 00000a96: JUMPDEST 00000a97: CALLVALUE 00000a98: ISZERO 00000a99: PUSH2 0x0aa1 00000a9c: JUMPI 00000a9d: PUSH1 0x00 00000a9f: DUP1 00000aa0: REVERT 00000aa1: JUMPDEST 00000aa2: PUSH2 0x0ac0 00000aa5: PUSH1 0x04 00000aa7: DUP1 00000aa8: DUP1 00000aa9: CALLDATALOAD 00000aaa: SWAP1 00000aab: PUSH1 0x20 00000aad: ADD 00000aae: SWAP1 00000aaf: SWAP2 00000ab0: SWAP1 00000ab1: DUP1 00000ab2: CALLDATALOAD 00000ab3: SWAP1 00000ab4: PUSH1 0x20 00000ab6: ADD 00000ab7: SWAP1 00000ab8: SWAP2 00000ab9: SWAP1 00000aba: POP 00000abb: POP 00000abc: PUSH2 0x1ee4 00000abf: JUMP 00000ac0: JUMPDEST 00000ac1: STOP 00000ac2: JUMPDEST 00000ac3: CALLVALUE 00000ac4: ISZERO 00000ac5: PUSH2 0x0acd 00000ac8: JUMPI 00000ac9: PUSH1 0x00 00000acb: DUP1 00000acc: REVERT 00000acd: JUMPDEST 00000ace: PUSH2 0x0b26 00000ad1: PUSH1 0x04 00000ad3: DUP1 00000ad4: DUP1 00000ad5: CALLDATALOAD 00000ad6: SWAP1 00000ad7: PUSH1 0x20 00000ad9: ADD 00000ada: SWAP1 00000adb: SWAP2 00000adc: SWAP1 00000add: DUP1 00000ade: CALLDATALOAD 00000adf: SWAP1 00000ae0: PUSH1 0x20 00000ae2: ADD 00000ae3: SWAP1 00000ae4: DUP3 00000ae5: ADD 00000ae6: DUP1 00000ae7: CALLDATALOAD 00000ae8: SWAP1 00000ae9: PUSH1 0x20 00000aeb: ADD 00000aec: SWAP1 00000aed: DUP1 00000aee: DUP1 00000aef: PUSH1 0x1f 00000af1: ADD 00000af2: PUSH1 0x20 00000af4: DUP1 00000af5: SWAP2 00000af6: DIV 00000af7: MUL 00000af8: PUSH1 0x20 00000afa: ADD 00000afb: PUSH1 0x40 00000afd: MLOAD 00000afe: SWAP1 00000aff: DUP2 00000b00: ADD 00000b01: PUSH1 0x40 00000b03: MSTORE 00000b04: DUP1 00000b05: SWAP4 00000b06: SWAP3 00000b07: SWAP2 00000b08: SWAP1 00000b09: DUP2 00000b0a: DUP2 00000b0b: MSTORE 00000b0c: PUSH1 0x20 00000b0e: ADD 00000b0f: DUP4 00000b10: DUP4 00000b11: DUP1 00000b12: DUP3 00000b13: DUP5 00000b14: CALLDATACOPY 00000b15: DUP3 00000b16: ADD 00000b17: SWAP2 00000b18: POP 00000b19: POP 00000b1a: POP 00000b1b: POP 00000b1c: POP 00000b1d: POP 00000b1e: SWAP2 00000b1f: SWAP1 00000b20: POP 00000b21: POP 00000b22: PUSH2 0x2227 00000b25: JUMP 00000b26: JUMPDEST 00000b27: STOP 00000b28: JUMPDEST 00000b29: CALLVALUE 00000b2a: ISZERO 00000b2b: PUSH2 0x0b33 00000b2e: JUMPI 00000b2f: PUSH1 0x00 00000b31: DUP1 00000b32: REVERT 00000b33: JUMPDEST 00000b34: PUSH2 0x0b68 00000b37: PUSH1 0x04 00000b39: DUP1 00000b3a: DUP1 00000b3b: CALLDATALOAD 00000b3c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b51: AND 00000b52: SWAP1 00000b53: PUSH1 0x20 00000b55: ADD 00000b56: SWAP1 00000b57: SWAP2 00000b58: SWAP1 00000b59: DUP1 00000b5a: CALLDATALOAD 00000b5b: SWAP1 00000b5c: PUSH1 0x20 00000b5e: ADD 00000b5f: SWAP1 00000b60: SWAP2 00000b61: SWAP1 00000b62: POP 00000b63: POP 00000b64: PUSH2 0x22cd 00000b67: JUMP 00000b68: JUMPDEST 00000b69: PUSH1 0x40 00000b6b: MLOAD 00000b6c: DUP1 00000b6d: DUP3 00000b6e: ISZERO 00000b6f: ISZERO 00000b70: ISZERO 00000b71: ISZERO 00000b72: DUP2 00000b73: MSTORE 00000b74: PUSH1 0x20 00000b76: ADD 00000b77: SWAP2 00000b78: POP 00000b79: POP 00000b7a: PUSH1 0x40 00000b7c: MLOAD 00000b7d: DUP1 00000b7e: SWAP2 00000b7f: SUB 00000b80: SWAP1 00000b81: RETURN 00000b82: JUMPDEST 00000b83: CALLVALUE 00000b84: ISZERO 00000b85: PUSH2 0x0b8d 00000b88: JUMPI 00000b89: PUSH1 0x00 00000b8b: DUP1 00000b8c: REVERT 00000b8d: JUMPDEST 00000b8e: PUSH2 0x0b95 00000b91: PUSH2 0x24fb 00000b94: JUMP 00000b95: JUMPDEST 00000b96: PUSH1 0x40 00000b98: MLOAD 00000b99: DUP1 00000b9a: DUP3 00000b9b: DUP2 00000b9c: MSTORE 00000b9d: PUSH1 0x20 00000b9f: ADD 00000ba0: SWAP2 00000ba1: POP 00000ba2: POP 00000ba3: PUSH1 0x40 00000ba5: MLOAD 00000ba6: DUP1 00000ba7: SWAP2 00000ba8: SUB 00000ba9: SWAP1 00000baa: RETURN 00000bab: JUMPDEST 00000bac: CALLVALUE 00000bad: ISZERO 00000bae: PUSH2 0x0bb6 00000bb1: JUMPI 00000bb2: PUSH1 0x00 00000bb4: DUP1 00000bb5: REVERT 00000bb6: JUMPDEST 00000bb7: PUSH2 0x0bd5 00000bba: PUSH1 0x04 00000bbc: DUP1 00000bbd: DUP1 00000bbe: CALLDATALOAD 00000bbf: SWAP1 00000bc0: PUSH1 0x20 00000bc2: ADD 00000bc3: SWAP1 00000bc4: SWAP2 00000bc5: SWAP1 00000bc6: DUP1 00000bc7: CALLDATALOAD 00000bc8: SWAP1 00000bc9: PUSH1 0x20 00000bcb: ADD 00000bcc: SWAP1 00000bcd: SWAP2 00000bce: SWAP1 00000bcf: POP 00000bd0: POP 00000bd1: PUSH2 0x2501 00000bd4: JUMP 00000bd5: JUMPDEST 00000bd6: STOP 00000bd7: JUMPDEST 00000bd8: CALLVALUE 00000bd9: ISZERO 00000bda: PUSH2 0x0be2 00000bdd: JUMPI 00000bde: PUSH1 0x00 00000be0: DUP1 00000be1: REVERT 00000be2: JUMPDEST 00000be3: PUSH2 0x0bf8 00000be6: PUSH1 0x04 00000be8: DUP1 00000be9: DUP1 00000bea: CALLDATALOAD 00000beb: SWAP1 00000bec: PUSH1 0x20 00000bee: ADD 00000bef: SWAP1 00000bf0: SWAP2 00000bf1: SWAP1 00000bf2: POP 00000bf3: POP 00000bf4: PUSH2 0x259a 00000bf7: JUMP 00000bf8: JUMPDEST 00000bf9: PUSH1 0x40 00000bfb: MLOAD 00000bfc: DUP1 00000bfd: DUP3 00000bfe: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c13: AND 00000c14: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c29: AND 00000c2a: DUP2 00000c2b: MSTORE 00000c2c: PUSH1 0x20 00000c2e: ADD 00000c2f: SWAP2 00000c30: POP 00000c31: POP 00000c32: PUSH1 0x40 00000c34: MLOAD 00000c35: DUP1 00000c36: SWAP2 00000c37: SUB 00000c38: SWAP1 00000c39: RETURN 00000c3a: JUMPDEST 00000c3b: PUSH2 0x0c50 00000c3e: PUSH1 0x04 00000c40: DUP1 00000c41: DUP1 00000c42: CALLDATALOAD 00000c43: SWAP1 00000c44: PUSH1 0x20 00000c46: ADD 00000c47: SWAP1 00000c48: SWAP2 00000c49: SWAP1 00000c4a: POP 00000c4b: POP 00000c4c: PUSH2 0x262f 00000c4f: JUMP 00000c50: JUMPDEST 00000c51: STOP 00000c52: JUMPDEST 00000c53: CALLVALUE 00000c54: ISZERO 00000c55: PUSH2 0x0c5d 00000c58: JUMPI 00000c59: PUSH1 0x00 00000c5b: DUP1 00000c5c: REVERT 00000c5d: JUMPDEST 00000c5e: PUSH2 0x0c7c 00000c61: PUSH1 0x04 00000c63: DUP1 00000c64: DUP1 00000c65: CALLDATALOAD 00000c66: SWAP1 00000c67: PUSH1 0x20 00000c69: ADD 00000c6a: SWAP1 00000c6b: SWAP2 00000c6c: SWAP1 00000c6d: DUP1 00000c6e: CALLDATALOAD 00000c6f: SWAP1 00000c70: PUSH1 0x20 00000c72: ADD 00000c73: SWAP1 00000c74: SWAP2 00000c75: SWAP1 00000c76: POP 00000c77: POP 00000c78: PUSH2 0x2a1e 00000c7b: JUMP 00000c7c: JUMPDEST 00000c7d: STOP 00000c7e: JUMPDEST 00000c7f: CALLVALUE 00000c80: ISZERO 00000c81: PUSH2 0x0c89 00000c84: JUMPI 00000c85: PUSH1 0x00 00000c87: DUP1 00000c88: REVERT 00000c89: JUMPDEST 00000c8a: PUSH2 0x0c9f 00000c8d: PUSH1 0x04 00000c8f: DUP1 00000c90: DUP1 00000c91: CALLDATALOAD 00000c92: SWAP1 00000c93: PUSH1 0x20 00000c95: ADD 00000c96: SWAP1 00000c97: SWAP2 00000c98: SWAP1 00000c99: POP 00000c9a: POP 00000c9b: PUSH2 0x2c09 00000c9e: JUMP 00000c9f: JUMPDEST 00000ca0: PUSH1 0x40 00000ca2: MLOAD 00000ca3: DUP1 00000ca4: DUP3 00000ca5: DUP2 00000ca6: MSTORE 00000ca7: PUSH1 0x20 00000ca9: ADD 00000caa: SWAP2 00000cab: POP 00000cac: POP 00000cad: PUSH1 0x40 00000caf: MLOAD 00000cb0: DUP1 00000cb1: SWAP2 00000cb2: SUB 00000cb3: SWAP1 00000cb4: RETURN 00000cb5: JUMPDEST 00000cb6: CALLVALUE 00000cb7: ISZERO 00000cb8: PUSH2 0x0cc0 00000cbb: JUMPI 00000cbc: PUSH1 0x00 00000cbe: DUP1 00000cbf: REVERT 00000cc0: JUMPDEST 00000cc1: PUSH2 0x0cc8 00000cc4: PUSH2 0x2c21 00000cc7: JUMP 00000cc8: JUMPDEST 00000cc9: PUSH1 0x40 00000ccb: MLOAD 00000ccc: DUP1 00000ccd: DUP3 00000cce: DUP2 00000ccf: MSTORE 00000cd0: PUSH1 0x20 00000cd2: ADD 00000cd3: SWAP2 00000cd4: POP 00000cd5: POP 00000cd6: PUSH1 0x40 00000cd8: MLOAD 00000cd9: DUP1 00000cda: SWAP2 00000cdb: SUB 00000cdc: SWAP1 00000cdd: RETURN 00000cde: JUMPDEST 00000cdf: CALLVALUE 00000ce0: ISZERO 00000ce1: PUSH2 0x0ce9 00000ce4: JUMPI 00000ce5: PUSH1 0x00 00000ce7: DUP1 00000ce8: REVERT 00000ce9: JUMPDEST 00000cea: PUSH2 0x0cf1 00000ced: PUSH2 0x2c27 00000cf0: JUMP 00000cf1: JUMPDEST 00000cf2: STOP 00000cf3: JUMPDEST 00000cf4: CALLVALUE 00000cf5: ISZERO 00000cf6: PUSH2 0x0cfe 00000cf9: JUMPI 00000cfa: PUSH1 0x00 00000cfc: DUP1 00000cfd: REVERT 00000cfe: JUMPDEST 00000cff: PUSH2 0x0d2a 00000d02: PUSH1 0x04 00000d04: DUP1 00000d05: DUP1 00000d06: CALLDATALOAD 00000d07: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d1c: AND 00000d1d: SWAP1 00000d1e: PUSH1 0x20 00000d20: ADD 00000d21: SWAP1 00000d22: SWAP2 00000d23: SWAP1 00000d24: POP 00000d25: POP 00000d26: PUSH2 0x2cfe 00000d29: JUMP 00000d2a: JUMPDEST 00000d2b: PUSH1 0x40 00000d2d: MLOAD 00000d2e: DUP1 00000d2f: DUP3 00000d30: DUP2 00000d31: MSTORE 00000d32: PUSH1 0x20 00000d34: ADD 00000d35: SWAP2 00000d36: POP 00000d37: POP 00000d38: PUSH1 0x40 00000d3a: MLOAD 00000d3b: DUP1 00000d3c: SWAP2 00000d3d: SUB 00000d3e: SWAP1 00000d3f: RETURN 00000d40: JUMPDEST 00000d41: CALLVALUE 00000d42: ISZERO 00000d43: PUSH2 0x0d4b 00000d46: JUMPI 00000d47: PUSH1 0x00 00000d49: DUP1 00000d4a: REVERT 00000d4b: JUMPDEST 00000d4c: PUSH2 0x0d6a 00000d4f: PUSH1 0x04 00000d51: DUP1 00000d52: DUP1 00000d53: CALLDATALOAD 00000d54: SWAP1 00000d55: PUSH1 0x20 00000d57: ADD 00000d58: SWAP1 00000d59: SWAP2 00000d5a: SWAP1 00000d5b: DUP1 00000d5c: CALLDATALOAD 00000d5d: SWAP1 00000d5e: PUSH1 0x20 00000d60: ADD 00000d61: SWAP1 00000d62: SWAP2 00000d63: SWAP1 00000d64: POP 00000d65: POP 00000d66: PUSH2 0x2d16 00000d69: JUMP 00000d6a: JUMPDEST 00000d6b: PUSH1 0x40 00000d6d: MLOAD 00000d6e: DUP1 00000d6f: DUP1 00000d70: PUSH1 0x20 00000d72: ADD 00000d73: DUP3 00000d74: DUP2 00000d75: SUB 00000d76: DUP3 00000d77: MSTORE 00000d78: DUP4 00000d79: DUP2 00000d7a: DUP2 00000d7b: MLOAD 00000d7c: DUP2 00000d7d: MSTORE 00000d7e: PUSH1 0x20 00000d80: ADD 00000d81: SWAP2 00000d82: POP 00000d83: DUP1 00000d84: MLOAD 00000d85: SWAP1 00000d86: PUSH1 0x20 00000d88: ADD 00000d89: SWAP1 00000d8a: DUP1 00000d8b: DUP4 00000d8c: DUP4 00000d8d: PUSH1 0x00 00000d8f: JUMPDEST 00000d90: DUP4 00000d91: DUP2 00000d92: LT 00000d93: ISZERO 00000d94: PUSH2 0x0daa 00000d97: JUMPI 00000d98: DUP1 00000d99: DUP3 00000d9a: ADD 00000d9b: MLOAD 00000d9c: DUP2 00000d9d: DUP5 00000d9e: ADD 00000d9f: MSTORE 00000da0: PUSH1 0x20 00000da2: DUP2 00000da3: ADD 00000da4: SWAP1 00000da5: POP 00000da6: PUSH2 0x0d8f 00000da9: JUMP 00000daa: JUMPDEST 00000dab: POP 00000dac: POP 00000dad: POP 00000dae: POP 00000daf: SWAP1 00000db0: POP 00000db1: SWAP1 00000db2: DUP2 00000db3: ADD 00000db4: SWAP1 00000db5: PUSH1 0x1f 00000db7: AND 00000db8: DUP1 00000db9: ISZERO 00000dba: PUSH2 0x0dd7 00000dbd: JUMPI 00000dbe: DUP1 00000dbf: DUP3 00000dc0: SUB 00000dc1: DUP1 00000dc2: MLOAD 00000dc3: PUSH1 0x01 00000dc5: DUP4 00000dc6: PUSH1 0x20 00000dc8: SUB 00000dc9: PUSH2 0x0100 00000dcc: EXP 00000dcd: SUB 00000dce: NOT 00000dcf: AND 00000dd0: DUP2 00000dd1: MSTORE 00000dd2: PUSH1 0x20 00000dd4: ADD 00000dd5: SWAP2 00000dd6: POP 00000dd7: JUMPDEST 00000dd8: POP 00000dd9: SWAP3 00000dda: POP 00000ddb: POP 00000ddc: POP 00000ddd: PUSH1 0x40 00000ddf: MLOAD 00000de0: DUP1 00000de1: SWAP2 00000de2: SUB 00000de3: SWAP1 00000de4: RETURN 00000de5: JUMPDEST 00000de6: PUSH1 0x03 00000de8: DUP1 00000de9: SLOAD 00000dea: PUSH1 0x01 00000dec: DUP2 00000ded: PUSH1 0x01 00000def: AND 00000df0: ISZERO 00000df1: PUSH2 0x0100 00000df4: MUL 00000df5: SUB 00000df6: AND 00000df7: PUSH1 0x02 00000df9: SWAP1 00000dfa: DIV 00000dfb: DUP1 00000dfc: PUSH1 0x1f 00000dfe: ADD 00000dff: PUSH1 0x20 00000e01: DUP1 00000e02: SWAP2 00000e03: DIV 00000e04: MUL 00000e05: PUSH1 0x20 00000e07: ADD 00000e08: PUSH1 0x40 00000e0a: MLOAD 00000e0b: SWAP1 00000e0c: DUP2 00000e0d: ADD 00000e0e: PUSH1 0x40 00000e10: MSTORE 00000e11: DUP1 00000e12: SWAP3 00000e13: SWAP2 00000e14: SWAP1 00000e15: DUP2 00000e16: DUP2 00000e17: MSTORE 00000e18: PUSH1 0x20 00000e1a: ADD 00000e1b: DUP3 00000e1c: DUP1 00000e1d: SLOAD 00000e1e: PUSH1 0x01 00000e20: DUP2 00000e21: PUSH1 0x01 00000e23: AND 00000e24: ISZERO 00000e25: PUSH2 0x0100 00000e28: MUL 00000e29: SUB 00000e2a: AND 00000e2b: PUSH1 0x02 00000e2d: SWAP1 00000e2e: DIV 00000e2f: DUP1 00000e30: ISZERO 00000e31: PUSH2 0x0e7b 00000e34: JUMPI 00000e35: DUP1 00000e36: PUSH1 0x1f 00000e38: LT 00000e39: PUSH2 0x0e50 00000e3c: JUMPI 00000e3d: PUSH2 0x0100 00000e40: DUP1 00000e41: DUP4 00000e42: SLOAD 00000e43: DIV 00000e44: MUL 00000e45: DUP4 00000e46: MSTORE 00000e47: SWAP2 00000e48: PUSH1 0x20 00000e4a: ADD 00000e4b: SWAP2 00000e4c: PUSH2 0x0e7b 00000e4f: JUMP 00000e50: JUMPDEST 00000e51: DUP3 00000e52: ADD 00000e53: SWAP2 00000e54: SWAP1 00000e55: PUSH1 0x00 00000e57: MSTORE 00000e58: PUSH1 0x20 00000e5a: PUSH1 0x00 00000e5c: KECCAK256 00000e5d: SWAP1 00000e5e: JUMPDEST 00000e5f: DUP2 00000e60: SLOAD 00000e61: DUP2 00000e62: MSTORE 00000e63: SWAP1 00000e64: PUSH1 0x01 00000e66: ADD 00000e67: SWAP1 00000e68: PUSH1 0x20 00000e6a: ADD 00000e6b: DUP1 00000e6c: DUP4 00000e6d: GT 00000e6e: PUSH2 0x0e5e 00000e71: JUMPI 00000e72: DUP3 00000e73: SWAP1 00000e74: SUB 00000e75: PUSH1 0x1f 00000e77: AND 00000e78: DUP3 00000e79: ADD 00000e7a: SWAP2 00000e7b: JUMPDEST 00000e7c: POP 00000e7d: POP 00000e7e: POP 00000e7f: POP 00000e80: POP 00000e81: DUP2 00000e82: JUMP 00000e83: JUMPDEST 00000e84: PUSH1 0x00 00000e86: PUSH1 0x06 00000e88: SLOAD 00000e89: SWAP1 00000e8a: POP 00000e8b: SWAP1 00000e8c: JUMP 00000e8d: JUMPDEST 00000e8e: CALLER 00000e8f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ea4: AND 00000ea5: PUSH1 0x0a 00000ea7: PUSH1 0x00 00000ea9: DUP4 00000eaa: DUP2 00000eab: MSTORE 00000eac: PUSH1 0x20 00000eae: ADD 00000eaf: SWAP1 00000eb0: DUP2 00000eb1: MSTORE 00000eb2: PUSH1 0x20 00000eb4: ADD 00000eb5: PUSH1 0x00 00000eb7: KECCAK256 00000eb8: PUSH1 0x00 00000eba: SWAP1 00000ebb: SLOAD 00000ebc: SWAP1 00000ebd: PUSH2 0x0100 00000ec0: EXP 00000ec1: SWAP1 00000ec2: DIV 00000ec3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ed8: AND 00000ed9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000eee: AND 00000eef: EQ 00000ef0: ISZERO 00000ef1: ISZERO 00000ef2: PUSH2 0x0efa 00000ef5: JUMPI 00000ef6: PUSH1 0x00 00000ef8: DUP1 00000ef9: REVERT 00000efa: JUMPDEST 00000efb: PUSH1 0x06 00000efd: SLOAD 00000efe: DUP2 00000eff: LT 00000f00: ISZERO 00000f01: ISZERO 00000f02: PUSH2 0x0f0a 00000f05: JUMPI 00000f06: PUSH1 0x00 00000f08: DUP1 00000f09: REVERT 00000f0a: JUMPDEST 00000f0b: PUSH1 0xa0 00000f0d: PUSH1 0x40 00000f0f: MLOAD 00000f10: SWAP1 00000f11: DUP2 00000f12: ADD 00000f13: PUSH1 0x40 00000f15: MSTORE 00000f16: DUP1 00000f17: PUSH1 0x00 00000f19: ISZERO 00000f1a: ISZERO 00000f1b: DUP2 00000f1c: MSTORE 00000f1d: PUSH1 0x20 00000f1f: ADD 00000f20: DUP3 00000f21: DUP2 00000f22: MSTORE 00000f23: PUSH1 0x20 00000f25: ADD 00000f26: CALLER 00000f27: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f3c: AND 00000f3d: DUP2 00000f3e: MSTORE 00000f3f: PUSH1 0x20 00000f41: ADD 00000f42: PUSH1 0x00 00000f44: DUP2 00000f45: MSTORE 00000f46: PUSH1 0x20 00000f48: ADD 00000f49: PUSH1 0x00 00000f4b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f60: AND 00000f61: DUP2 00000f62: MSTORE 00000f63: POP 00000f64: PUSH1 0x11 00000f66: PUSH1 0x00 00000f68: DUP4 00000f69: DUP2 00000f6a: MSTORE 00000f6b: PUSH1 0x20 00000f6d: ADD 00000f6e: SWAP1 00000f6f: DUP2 00000f70: MSTORE 00000f71: PUSH1 0x20 00000f73: ADD 00000f74: PUSH1 0x00 00000f76: KECCAK256 00000f77: PUSH1 0x00 00000f79: DUP3 00000f7a: ADD 00000f7b: MLOAD 00000f7c: DUP2 00000f7d: PUSH1 0x00 00000f7f: ADD 00000f80: PUSH1 0x00 00000f82: PUSH2 0x0100 00000f85: EXP 00000f86: DUP2 00000f87: SLOAD 00000f88: DUP2 00000f89: PUSH1 0xff 00000f8b: MUL 00000f8c: NOT 00000f8d: AND 00000f8e: SWAP1 00000f8f: DUP4 00000f90: ISZERO 00000f91: ISZERO 00000f92: MUL 00000f93: OR 00000f94: SWAP1 00000f95: SSTORE 00000f96: POP 00000f97: PUSH1 0x20 00000f99: DUP3 00000f9a: ADD 00000f9b: MLOAD 00000f9c: DUP2 00000f9d: PUSH1 0x01 00000f9f: ADD 00000fa0: SSTORE 00000fa1: PUSH1 0x40 00000fa3: DUP3 00000fa4: ADD 00000fa5: MLOAD 00000fa6: DUP2 00000fa7: PUSH1 0x02 00000fa9: ADD 00000faa: PUSH1 0x00 00000fac: PUSH2 0x0100 00000faf: EXP 00000fb0: DUP2 00000fb1: SLOAD 00000fb2: DUP2 00000fb3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000fc8: MUL 00000fc9: NOT 00000fca: AND 00000fcb: SWAP1 00000fcc: DUP4 00000fcd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000fe2: AND 00000fe3: MUL 00000fe4: OR 00000fe5: SWAP1 00000fe6: SSTORE 00000fe7: POP 00000fe8: PUSH1 0x60 00000fea: DUP3 00000feb: ADD 00000fec: MLOAD 00000fed: DUP2 00000fee: PUSH1 0x03 00000ff0: ADD 00000ff1: SSTORE 00000ff2: PUSH1 0x80 00000ff4: DUP3 00000ff5: ADD 00000ff6: MLOAD 00000ff7: DUP2 00000ff8: PUSH1 0x04 00000ffa: ADD 00000ffb: PUSH1 0x00 00000ffd: PUSH2 0x0100 00001000: EXP 00001001: DUP2 00001002: SLOAD 00001003: DUP2 00001004: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001019: MUL 0000101a: NOT 0000101b: AND 0000101c: SWAP1 0000101d: DUP4 0000101e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001033: AND 00001034: MUL 00001035: OR 00001036: SWAP1 00001037: SSTORE 00001038: POP 00001039: SWAP1 0000103a: POP 0000103b: POP 0000103c: DUP1 0000103d: PUSH32 0x7d5dcd38c1855f2d3253f06fbd995a7b03b1bd0d20277c21ffcb093862ccb0df 0000105e: PUSH1 0x40 00001060: MLOAD 00001061: PUSH1 0x40 00001063: MLOAD 00001064: DUP1 00001065: SWAP2 00001066: SUB 00001067: SWAP1 00001068: LOG2 00001069: POP 0000106a: JUMP 0000106b: JUMPDEST 0000106c: PUSH1 0x0a 0000106e: PUSH1 0x20 00001070: MSTORE 00001071: DUP1 00001072: PUSH1 0x00 00001074: MSTORE 00001075: PUSH1 0x40 00001077: PUSH1 0x00 00001079: KECCAK256 0000107a: PUSH1 0x00 0000107c: SWAP2 0000107d: POP 0000107e: SLOAD 0000107f: SWAP1 00001080: PUSH2 0x0100 00001083: EXP 00001084: SWAP1 00001085: DIV 00001086: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000109b: AND 0000109c: DUP2 0000109d: JUMP 0000109e: JUMPDEST 0000109f: PUSH1 0x05 000010a1: PUSH1 0x00 000010a3: SWAP1 000010a4: SLOAD 000010a5: SWAP1 000010a6: PUSH2 0x0100 000010a9: EXP 000010aa: SWAP1 000010ab: DIV 000010ac: PUSH1 0xff 000010ae: AND 000010af: DUP2 000010b0: JUMP 000010b1: JUMPDEST 000010b2: PUSH1 0x00 000010b4: PUSH1 0x12 000010b6: PUSH1 0x00 000010b8: CALLER 000010b9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000010ce: AND 000010cf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000010e4: AND 000010e5: DUP2 000010e6: MSTORE 000010e7: PUSH1 0x20 000010e9: ADD 000010ea: SWAP1 000010eb: DUP2 000010ec: MSTORE 000010ed: PUSH1 0x20 000010ef: ADD 000010f0: PUSH1 0x00 000010f2: KECCAK256 000010f3: SLOAD 000010f4: SWAP1 000010f5: POP 000010f6: PUSH1 0x00 000010f8: PUSH1 0x12 000010fa: PUSH1 0x00 000010fc: CALLER 000010fd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001112: AND 00001113: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001128: AND 00001129: DUP2 0000112a: MSTORE 0000112b: PUSH1 0x20 0000112d: ADD 0000112e: SWAP1 0000112f: DUP2 00001130: MSTORE 00001131: PUSH1 0x20 00001133: ADD 00001134: PUSH1 0x00 00001136: KECCAK256 00001137: DUP2 00001138: SWAP1 00001139: SSTORE 0000113a: POP 0000113b: CALLER 0000113c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001151: AND 00001152: PUSH2 0x08fc 00001155: DUP3 00001156: SWAP1 00001157: DUP2 00001158: ISZERO 00001159: MUL 0000115a: SWAP1 0000115b: PUSH1 0x40 0000115d: MLOAD 0000115e: PUSH1 0x00 00001160: PUSH1 0x40 00001162: MLOAD 00001163: DUP1 00001164: DUP4 00001165: SUB 00001166: DUP2 00001167: DUP6 00001168: DUP9 00001169: DUP9 0000116a: CALL 0000116b: SWAP4 0000116c: POP 0000116d: POP 0000116e: POP 0000116f: POP 00001170: ISZERO 00001171: ISZERO 00001172: PUSH2 0x117a 00001175: JUMPI 00001176: PUSH1 0x00 00001178: DUP1 00001179: REVERT 0000117a: JUMPDEST 0000117b: POP 0000117c: JUMP 0000117d: JUMPDEST 0000117e: PUSH1 0x06 00001180: SLOAD 00001181: DUP2 00001182: JUMP 00001183: JUMPDEST 00001184: PUSH1 0x10 00001186: DUP2 00001187: DUP2 00001188: SLOAD 00001189: DUP2 0000118a: LT 0000118b: ISZERO 0000118c: ISZERO 0000118d: PUSH2 0x1192 00001190: JUMPI 00001191: INVALID 00001192: JUMPDEST 00001193: SWAP1 00001194: PUSH1 0x00 00001196: MSTORE 00001197: PUSH1 0x20 00001199: PUSH1 0x00 0000119b: KECCAK256 0000119c: SWAP1 0000119d: ADD 0000119e: PUSH1 0x00 000011a0: SWAP2 000011a1: POP 000011a2: SWAP1 000011a3: POP 000011a4: SLOAD 000011a5: DUP2 000011a6: JUMP 000011a7: JUMPDEST 000011a8: PUSH1 0x01 000011aa: PUSH1 0x00 000011ac: SWAP1 000011ad: SLOAD 000011ae: SWAP1 000011af: PUSH2 0x0100 000011b2: EXP 000011b3: SWAP1 000011b4: DIV 000011b5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000011ca: AND 000011cb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000011e0: AND 000011e1: CALLER 000011e2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000011f7: AND 000011f8: EQ 000011f9: ISZERO 000011fa: ISZERO 000011fb: PUSH2 0x1203 000011fe: JUMPI 000011ff: PUSH1 0x00 00001201: DUP1 00001202: REVERT 00001203: JUMPDEST 00001204: PUSH1 0x10 00001206: DUP1 00001207: SLOAD 00001208: SWAP1 00001209: POP 0000120a: DUP3 0000120b: PUSH4 0xffffffff 00001210: AND 00001211: GT 00001212: ISZERO 00001213: ISZERO 00001214: ISZERO 00001215: PUSH2 0x121d 00001218: JUMPI 00001219: PUSH1 0x00 0000121b: DUP1 0000121c: REVERT 0000121d: JUMPDEST 0000121e: DUP1 0000121f: PUSH1 0x0b 00001221: PUSH1 0x00 00001223: DUP5 00001224: PUSH4 0xffffffff 00001229: AND 0000122a: PUSH4 0xffffffff 0000122f: AND 00001230: DUP2 00001231: MSTORE 00001232: PUSH1 0x20 00001234: ADD 00001235: SWAP1 00001236: DUP2 00001237: MSTORE 00001238: PUSH1 0x20 0000123a: ADD 0000123b: PUSH1 0x00 0000123d: KECCAK256 0000123e: DUP2 0000123f: SWAP1 00001240: SSTORE 00001241: POP 00001242: PUSH32 0x0d18952b49d796ef682b17341dc9347e1cbd53ede7fa0529048f9d1c2c485fd4 00001263: DUP3 00001264: DUP3 00001265: PUSH1 0x40 00001267: MLOAD 00001268: DUP1 00001269: DUP4 0000126a: PUSH4 0xffffffff 0000126f: AND 00001270: PUSH4 0xffffffff 00001275: AND 00001276: DUP2 00001277: MSTORE 00001278: PUSH1 0x20 0000127a: ADD 0000127b: DUP3 0000127c: DUP2 0000127d: MSTORE 0000127e: PUSH1 0x20 00001280: ADD 00001281: SWAP3 00001282: POP 00001283: POP 00001284: POP 00001285: PUSH1 0x40 00001287: MLOAD 00001288: DUP1 00001289: SWAP2 0000128a: SUB 0000128b: SWAP1 0000128c: LOG1 0000128d: POP 0000128e: POP 0000128f: JUMP 00001290: JUMPDEST 00001291: PUSH1 0x00 00001293: PUSH1 0x01 00001295: PUSH1 0x00 00001297: SWAP1 00001298: SLOAD 00001299: SWAP1 0000129a: PUSH2 0x0100 0000129d: EXP 0000129e: SWAP1 0000129f: DIV 000012a0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000012b5: AND 000012b6: SWAP1 000012b7: POP 000012b8: SWAP1 000012b9: JUMP 000012ba: JUMPDEST 000012bb: PUSH1 0x07 000012bd: PUSH1 0x16 000012bf: SWAP1 000012c0: SLOAD 000012c1: SWAP1 000012c2: PUSH2 0x0100 000012c5: EXP 000012c6: SWAP1 000012c7: DIV 000012c8: PUSH1 0xff 000012ca: AND 000012cb: ISZERO 000012cc: ISZERO 000012cd: ISZERO 000012ce: PUSH2 0x12d6 000012d1: JUMPI 000012d2: PUSH1 0x00 000012d4: DUP1 000012d5: REVERT 000012d6: JUMPDEST 000012d7: PUSH1 0x00 000012d9: PUSH1 0x08 000012db: SLOAD 000012dc: EQ 000012dd: ISZERO 000012de: ISZERO 000012df: ISZERO 000012e0: PUSH2 0x12e8 000012e3: JUMPI 000012e4: PUSH1 0x00 000012e6: DUP1 000012e7: REVERT 000012e8: JUMPDEST 000012e9: PUSH1 0x00 000012eb: PUSH1 0x0a 000012ed: PUSH1 0x00 000012ef: DUP4 000012f0: DUP2 000012f1: MSTORE 000012f2: PUSH1 0x20 000012f4: ADD 000012f5: SWAP1 000012f6: DUP2 000012f7: MSTORE 000012f8: PUSH1 0x20 000012fa: ADD 000012fb: PUSH1 0x00 000012fd: KECCAK256 000012fe: PUSH1 0x00 00001300: SWAP1 00001301: SLOAD 00001302: SWAP1 00001303: PUSH2 0x0100 00001306: EXP 00001307: SWAP1 00001308: DIV 00001309: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000131e: AND 0000131f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001334: AND 00001335: EQ 00001336: ISZERO 00001337: ISZERO 00001338: PUSH2 0x1340 0000133b: JUMPI 0000133c: PUSH1 0x00 0000133e: DUP1 0000133f: REVERT 00001340: JUMPDEST 00001341: PUSH1 0x06 00001343: SLOAD 00001344: DUP2 00001345: LT 00001346: ISZERO 00001347: ISZERO 00001348: PUSH2 0x1350 0000134b: JUMPI 0000134c: PUSH1 0x00 0000134e: DUP1 0000134f: REVERT 00001350: JUMPDEST 00001351: PUSH1 0x09 00001353: SLOAD 00001354: DUP2 00001355: LT 00001356: ISZERO 00001357: ISZERO 00001358: PUSH2 0x1360 0000135b: JUMPI 0000135c: PUSH1 0x00 0000135e: DUP1 0000135f: REVERT 00001360: JUMPDEST 00001361: CALLVALUE 00001362: PUSH2 0x136a 00001365: DUP3 00001366: PUSH2 0x151a 00001369: JUMP 0000136a: JUMPDEST 0000136b: GT 0000136c: ISZERO 0000136d: ISZERO 0000136e: ISZERO 0000136f: PUSH2 0x1377 00001372: JUMPI 00001373: PUSH1 0x00 00001375: DUP1 00001376: REVERT 00001377: JUMPDEST 00001378: CALLER 00001379: PUSH1 0x0a 0000137b: PUSH1 0x00 0000137d: DUP4 0000137e: DUP2 0000137f: MSTORE 00001380: PUSH1 0x20 00001382: ADD 00001383: SWAP1 00001384: DUP2 00001385: MSTORE 00001386: PUSH1 0x20 00001388: ADD 00001389: PUSH1 0x00 0000138b: KECCAK256 0000138c: PUSH1 0x00 0000138e: PUSH2 0x0100 00001391: EXP 00001392: DUP2 00001393: SLOAD 00001394: DUP2 00001395: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013aa: MUL 000013ab: NOT 000013ac: AND 000013ad: SWAP1 000013ae: DUP4 000013af: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013c4: AND 000013c5: MUL 000013c6: OR 000013c7: SWAP1 000013c8: SSTORE 000013c9: POP 000013ca: PUSH1 0x0d 000013cc: PUSH1 0x00 000013ce: CALLER 000013cf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013e4: AND 000013e5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013fa: AND 000013fb: DUP2 000013fc: MSTORE 000013fd: PUSH1 0x20 000013ff: ADD 00001400: SWAP1 00001401: DUP2 00001402: MSTORE 00001403: PUSH1 0x20 00001405: ADD 00001406: PUSH1 0x00 00001408: KECCAK256 00001409: PUSH1 0x00 0000140b: DUP2 0000140c: SLOAD 0000140d: DUP1 0000140e: SWAP3 0000140f: SWAP2 00001410: SWAP1 00001411: PUSH1 0x01 00001413: ADD 00001414: SWAP2 00001415: SWAP1 00001416: POP 00001417: SSTORE 00001418: POP 00001419: PUSH1 0x08 0000141b: PUSH1 0x00 0000141d: DUP2 0000141e: SLOAD 0000141f: DUP1 00001420: SWAP3 00001421: SWAP2 00001422: SWAP1 00001423: PUSH1 0x01 00001425: SWAP1 00001426: SUB 00001427: SWAP2 00001428: SWAP1 00001429: POP 0000142a: SSTORE 0000142b: POP 0000142c: CALLER 0000142d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001442: AND 00001443: PUSH32 0x8a0e37b73a0d9c82e205d4d1a3ff3d0b57ce5f4d7bccf6bac03336dc101cb7ba 00001464: DUP3 00001465: PUSH1 0x40 00001467: MLOAD 00001468: DUP1 00001469: DUP3 0000146a: DUP2 0000146b: MSTORE 0000146c: PUSH1 0x20 0000146e: ADD 0000146f: SWAP2 00001470: POP 00001471: POP 00001472: PUSH1 0x40 00001474: MLOAD 00001475: DUP1 00001476: SWAP2 00001477: SUB 00001478: SWAP1 00001479: LOG2 0000147a: POP 0000147b: JUMP 0000147c: JUMPDEST 0000147d: PUSH1 0x00 0000147f: DUP1 00001480: SLOAD 00001481: PUSH1 0x01 00001483: DUP2 00001484: PUSH1 0x01 00001486: AND 00001487: ISZERO 00001488: PUSH2 0x0100 0000148b: MUL 0000148c: SUB 0000148d: AND 0000148e: PUSH1 0x02 00001490: SWAP1 00001491: DIV 00001492: DUP1 00001493: PUSH1 0x1f 00001495: ADD 00001496: PUSH1 0x20 00001498: DUP1 00001499: SWAP2 0000149a: DIV 0000149b: MUL 0000149c: PUSH1 0x20 0000149e: ADD 0000149f: PUSH1 0x40 000014a1: MLOAD 000014a2: SWAP1 000014a3: DUP2 000014a4: ADD 000014a5: PUSH1 0x40 000014a7: MSTORE 000014a8: DUP1 000014a9: SWAP3 000014aa: SWAP2 000014ab: SWAP1 000014ac: DUP2 000014ad: DUP2 000014ae: MSTORE 000014af: PUSH1 0x20 000014b1: ADD 000014b2: DUP3 000014b3: DUP1 000014b4: SLOAD 000014b5: PUSH1 0x01 000014b7: DUP2 000014b8: PUSH1 0x01 000014ba: AND 000014bb: ISZERO 000014bc: PUSH2 0x0100 000014bf: MUL 000014c0: SUB 000014c1: AND 000014c2: PUSH1 0x02 000014c4: SWAP1 000014c5: DIV 000014c6: DUP1 000014c7: ISZERO 000014c8: PUSH2 0x1512 000014cb: JUMPI 000014cc: DUP1 000014cd: PUSH1 0x1f 000014cf: LT 000014d0: PUSH2 0x14e7 000014d3: JUMPI 000014d4: PUSH2 0x0100 000014d7: DUP1 000014d8: DUP4 000014d9: SLOAD 000014da: DIV 000014db: MUL 000014dc: DUP4 000014dd: MSTORE 000014de: SWAP2 000014df: PUSH1 0x20 000014e1: ADD 000014e2: SWAP2 000014e3: PUSH2 0x1512 000014e6: JUMP 000014e7: JUMPDEST 000014e8: DUP3 000014e9: ADD 000014ea: SWAP2 000014eb: SWAP1 000014ec: PUSH1 0x00 000014ee: MSTORE 000014ef: PUSH1 0x20 000014f1: PUSH1 0x00 000014f3: KECCAK256 000014f4: SWAP1 000014f5: JUMPDEST 000014f6: DUP2 000014f7: SLOAD 000014f8: DUP2 000014f9: MSTORE 000014fa: SWAP1 000014fb: PUSH1 0x01 000014fd: ADD 000014fe: SWAP1 000014ff: PUSH1 0x20 00001501: ADD 00001502: DUP1 00001503: DUP4 00001504: GT 00001505: PUSH2 0x14f5 00001508: JUMPI 00001509: DUP3 0000150a: SWAP1 0000150b: SUB 0000150c: PUSH1 0x1f 0000150e: AND 0000150f: DUP3 00001510: ADD 00001511: SWAP2 00001512: JUMPDEST 00001513: POP 00001514: POP 00001515: POP 00001516: POP 00001517: POP 00001518: DUP2 00001519: JUMP 0000151a: JUMPDEST 0000151b: PUSH1 0x00 0000151d: DUP1 0000151e: PUSH1 0x06 00001520: SLOAD 00001521: DUP4 00001522: LT 00001523: ISZERO 00001524: ISZERO 00001525: PUSH2 0x152d 00001528: JUMPI 00001529: PUSH1 0x00 0000152b: DUP1 0000152c: REVERT 0000152d: JUMPDEST 0000152e: PUSH1 0x00 00001530: PUSH1 0x0c 00001532: PUSH1 0x00 00001534: DUP6 00001535: DUP2 00001536: MSTORE 00001537: PUSH1 0x20 00001539: ADD 0000153a: SWAP1 0000153b: DUP2 0000153c: MSTORE 0000153d: PUSH1 0x20 0000153f: ADD 00001540: PUSH1 0x00 00001542: KECCAK256 00001543: SLOAD 00001544: EQ 00001545: ISZERO 00001546: ISZERO 00001547: PUSH2 0x1565 0000154a: JUMPI 0000154b: PUSH1 0x0c 0000154d: PUSH1 0x00 0000154f: DUP5 00001550: DUP2 00001551: MSTORE 00001552: PUSH1 0x20 00001554: ADD 00001555: SWAP1 00001556: DUP2 00001557: MSTORE 00001558: PUSH1 0x20 0000155a: ADD 0000155b: PUSH1 0x00 0000155d: KECCAK256 0000155e: SLOAD 0000155f: SWAP2 00001560: POP 00001561: PUSH2 0x1593 00001564: JUMP 00001565: JUMPDEST 00001566: PUSH2 0x156e 00001569: DUP4 0000156a: PUSH2 0x1ddc 0000156d: JUMP 0000156e: JUMPDEST 0000156f: SWAP1 00001570: POP 00001571: PUSH1 0x0b 00001573: PUSH1 0x00 00001575: DUP3 00001576: PUSH4 0xffffffff 0000157b: AND 0000157c: PUSH4 0xffffffff 00001581: AND 00001582: DUP2 00001583: MSTORE 00001584: PUSH1 0x20 00001586: ADD 00001587: SWAP1 00001588: DUP2 00001589: MSTORE 0000158a: PUSH1 0x20 0000158c: ADD 0000158d: PUSH1 0x00 0000158f: KECCAK256 00001590: SLOAD 00001591: SWAP2 00001592: POP 00001593: JUMPDEST 00001594: POP 00001595: SWAP2 00001596: SWAP1 00001597: POP 00001598: JUMP 00001599: JUMPDEST 0000159a: PUSH1 0x0e 0000159c: PUSH1 0x20 0000159e: MSTORE 0000159f: DUP1 000015a0: PUSH1 0x00 000015a2: MSTORE 000015a3: PUSH1 0x40 000015a5: PUSH1 0x00 000015a7: KECCAK256 000015a8: PUSH1 0x00 000015aa: SWAP2 000015ab: POP 000015ac: SWAP1 000015ad: POP 000015ae: DUP1 000015af: SLOAD 000015b0: PUSH1 0x01 000015b2: DUP2 000015b3: PUSH1 0x01 000015b5: AND 000015b6: ISZERO 000015b7: PUSH2 0x0100 000015ba: MUL 000015bb: SUB 000015bc: AND 000015bd: PUSH1 0x02 000015bf: SWAP1 000015c0: DIV 000015c1: DUP1 000015c2: PUSH1 0x1f 000015c4: ADD 000015c5: PUSH1 0x20 000015c7: DUP1 000015c8: SWAP2 000015c9: DIV 000015ca: MUL 000015cb: PUSH1 0x20 000015cd: ADD 000015ce: PUSH1 0x40 000015d0: MLOAD 000015d1: SWAP1 000015d2: DUP2 000015d3: ADD 000015d4: PUSH1 0x40 000015d6: MSTORE 000015d7: DUP1 000015d8: SWAP3 000015d9: SWAP2 000015da: SWAP1 000015db: DUP2 000015dc: DUP2 000015dd: MSTORE 000015de: PUSH1 0x20 000015e0: ADD 000015e1: DUP3 000015e2: DUP1 000015e3: SLOAD 000015e4: PUSH1 0x01 000015e6: DUP2 000015e7: PUSH1 0x01 000015e9: AND 000015ea: ISZERO 000015eb: PUSH2 0x0100 000015ee: MUL 000015ef: SUB 000015f0: AND 000015f1: PUSH1 0x02 000015f3: SWAP1 000015f4: DIV 000015f5: DUP1 000015f6: ISZERO 000015f7: PUSH2 0x1641 000015fa: JUMPI 000015fb: DUP1 000015fc: PUSH1 0x1f 000015fe: LT 000015ff: PUSH2 0x1616 00001602: JUMPI 00001603: PUSH2 0x0100 00001606: DUP1 00001607: DUP4 00001608: SLOAD 00001609: DIV 0000160a: MUL 0000160b: DUP4 0000160c: MSTORE 0000160d: SWAP2 0000160e: PUSH1 0x20 00001610: ADD 00001611: SWAP2 00001612: PUSH2 0x1641 00001615: JUMP 00001616: JUMPDEST 00001617: DUP3 00001618: ADD 00001619: SWAP2 0000161a: SWAP1 0000161b: PUSH1 0x00 0000161d: MSTORE 0000161e: PUSH1 0x20 00001620: PUSH1 0x00 00001622: KECCAK256 00001623: SWAP1 00001624: JUMPDEST 00001625: DUP2 00001626: SLOAD 00001627: DUP2 00001628: MSTORE 00001629: SWAP1 0000162a: PUSH1 0x01 0000162c: ADD 0000162d: SWAP1 0000162e: PUSH1 0x20 00001630: ADD 00001631: DUP1 00001632: DUP4 00001633: GT 00001634: PUSH2 0x1624 00001637: JUMPI 00001638: DUP3 00001639: SWAP1 0000163a: SUB 0000163b: PUSH1 0x1f 0000163d: AND 0000163e: DUP3 0000163f: ADD 00001640: SWAP2 00001641: JUMPDEST 00001642: POP 00001643: POP 00001644: POP 00001645: POP 00001646: POP 00001647: DUP2 00001648: JUMP 00001649: JUMPDEST 0000164a: CALLER 0000164b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001660: AND 00001661: PUSH1 0x0a 00001663: PUSH1 0x00 00001665: DUP6 00001666: DUP2 00001667: MSTORE 00001668: PUSH1 0x20 0000166a: ADD 0000166b: SWAP1 0000166c: DUP2 0000166d: MSTORE 0000166e: PUSH1 0x20 00001670: ADD 00001671: PUSH1 0x00 00001673: KECCAK256 00001674: PUSH1 0x00 00001676: SWAP1 00001677: SLOAD 00001678: SWAP1 00001679: PUSH2 0x0100 0000167c: EXP 0000167d: SWAP1 0000167e: DIV 0000167f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001694: AND 00001695: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000016aa: AND 000016ab: EQ 000016ac: ISZERO 000016ad: ISZERO 000016ae: PUSH2 0x16b6 000016b1: JUMPI 000016b2: PUSH1 0x00 000016b4: DUP1 000016b5: REVERT 000016b6: JUMPDEST 000016b7: PUSH1 0x06 000016b9: SLOAD 000016ba: DUP4 000016bb: LT 000016bc: ISZERO 000016bd: ISZERO 000016be: PUSH2 0x16c6 000016c1: JUMPI 000016c2: PUSH1 0x00 000016c4: DUP1 000016c5: REVERT 000016c6: JUMPDEST 000016c7: PUSH1 0xa0 000016c9: PUSH1 0x40 000016cb: MLOAD 000016cc: SWAP1 000016cd: DUP2 000016ce: ADD 000016cf: PUSH1 0x40 000016d1: MSTORE 000016d2: DUP1 000016d3: PUSH1 0x01 000016d5: ISZERO 000016d6: ISZERO 000016d7: DUP2 000016d8: MSTORE 000016d9: PUSH1 0x20 000016db: ADD 000016dc: DUP5 000016dd: DUP2 000016de: MSTORE 000016df: PUSH1 0x20 000016e1: ADD 000016e2: CALLER 000016e3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000016f8: AND 000016f9: DUP2 000016fa: MSTORE 000016fb: PUSH1 0x20 000016fd: ADD 000016fe: DUP4 000016ff: DUP2 00001700: MSTORE 00001701: PUSH1 0x20 00001703: ADD 00001704: DUP3 00001705: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000171a: AND 0000171b: DUP2 0000171c: MSTORE 0000171d: POP 0000171e: PUSH1 0x11 00001720: PUSH1 0x00 00001722: DUP6 00001723: DUP2 00001724: MSTORE 00001725: PUSH1 0x20 00001727: ADD 00001728: SWAP1 00001729: DUP2 0000172a: MSTORE 0000172b: PUSH1 0x20 0000172d: ADD 0000172e: PUSH1 0x00 00001730: KECCAK256 00001731: PUSH1 0x00 00001733: DUP3 00001734: ADD 00001735: MLOAD 00001736: DUP2 00001737: PUSH1 0x00 00001739: ADD 0000173a: PUSH1 0x00 0000173c: PUSH2 0x0100 0000173f: EXP 00001740: DUP2 00001741: SLOAD 00001742: DUP2 00001743: PUSH1 0xff 00001745: MUL 00001746: NOT 00001747: AND 00001748: SWAP1 00001749: DUP4 0000174a: ISZERO 0000174b: ISZERO 0000174c: MUL 0000174d: OR 0000174e: SWAP1 0000174f: SSTORE 00001750: POP 00001751: PUSH1 0x20 00001753: DUP3 00001754: ADD 00001755: MLOAD 00001756: DUP2 00001757: PUSH1 0x01 00001759: ADD 0000175a: SSTORE 0000175b: PUSH1 0x40 0000175d: DUP3 0000175e: ADD 0000175f: MLOAD 00001760: DUP2 00001761: PUSH1 0x02 00001763: ADD 00001764: PUSH1 0x00 00001766: PUSH2 0x0100 00001769: EXP 0000176a: DUP2 0000176b: SLOAD 0000176c: DUP2 0000176d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001782: MUL 00001783: NOT 00001784: AND 00001785: SWAP1 00001786: DUP4 00001787: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000179c: AND 0000179d: MUL 0000179e: OR 0000179f: SWAP1 000017a0: SSTORE 000017a1: POP 000017a2: PUSH1 0x60 000017a4: DUP3 000017a5: ADD 000017a6: MLOAD 000017a7: DUP2 000017a8: PUSH1 0x03 000017aa: ADD 000017ab: SSTORE 000017ac: PUSH1 0x80 000017ae: DUP3 000017af: ADD 000017b0: MLOAD 000017b1: DUP2 000017b2: PUSH1 0x04 000017b4: ADD 000017b5: PUSH1 0x00 000017b7: PUSH2 0x0100 000017ba: EXP 000017bb: DUP2 000017bc: SLOAD 000017bd: DUP2 000017be: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000017d3: MUL 000017d4: NOT 000017d5: AND 000017d6: SWAP1 000017d7: DUP4 000017d8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000017ed: AND 000017ee: MUL 000017ef: OR 000017f0: SWAP1 000017f1: SSTORE 000017f2: POP 000017f3: SWAP1 000017f4: POP 000017f5: POP 000017f6: DUP1 000017f7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000180c: AND 0000180d: DUP4 0000180e: PUSH32 0x76eaef99642f3e716e9cfa6e3047136d4087a9fc18673cb754c35f522fa6f61f 0000182f: DUP5 00001830: PUSH1 0x40 00001832: MLOAD 00001833: DUP1 00001834: DUP3 00001835: DUP2 00001836: MSTORE 00001837: PUSH1 0x20 00001839: ADD 0000183a: SWAP2 0000183b: POP 0000183c: POP 0000183d: PUSH1 0x40 0000183f: MLOAD 00001840: DUP1 00001841: SWAP2 00001842: SUB 00001843: SWAP1 00001844: LOG3 00001845: POP 00001846: POP 00001847: POP 00001848: JUMP 00001849: JUMPDEST 0000184a: PUSH1 0x02 0000184c: DUP1 0000184d: SLOAD 0000184e: PUSH1 0x01 00001850: DUP2 00001851: PUSH1 0x01 00001853: AND 00001854: ISZERO 00001855: PUSH2 0x0100 00001858: MUL 00001859: SUB 0000185a: AND 0000185b: PUSH1 0x02 0000185d: SWAP1 0000185e: DIV 0000185f: DUP1 00001860: PUSH1 0x1f 00001862: ADD 00001863: PUSH1 0x20 00001865: DUP1 00001866: SWAP2 00001867: DIV 00001868: MUL 00001869: PUSH1 0x20 0000186b: ADD 0000186c: PUSH1 0x40 0000186e: MLOAD 0000186f: SWAP1 00001870: DUP2 00001871: ADD 00001872: PUSH1 0x40 00001874: MSTORE 00001875: DUP1 00001876: SWAP3 00001877: SWAP2 00001878: SWAP1 00001879: DUP2 0000187a: DUP2 0000187b: MSTORE 0000187c: PUSH1 0x20 0000187e: ADD 0000187f: DUP3 00001880: DUP1 00001881: SLOAD 00001882: PUSH1 0x01 00001884: DUP2 00001885: PUSH1 0x01 00001887: AND 00001888: ISZERO 00001889: PUSH2 0x0100 0000188c: MUL 0000188d: SUB 0000188e: AND 0000188f: PUSH1 0x02 00001891: SWAP1 00001892: DIV 00001893: DUP1 00001894: ISZERO 00001895: PUSH2 0x18df 00001898: JUMPI 00001899: DUP1 0000189a: PUSH1 0x1f 0000189c: LT 0000189d: PUSH2 0x18b4 000018a0: JUMPI 000018a1: PUSH2 0x0100 000018a4: DUP1 000018a5: DUP4 000018a6: SLOAD 000018a7: DIV 000018a8: MUL 000018a9: DUP4 000018aa: MSTORE 000018ab: SWAP2 000018ac: PUSH1 0x20 000018ae: ADD 000018af: SWAP2 000018b0: PUSH2 0x18df 000018b3: JUMP 000018b4: JUMPDEST 000018b5: DUP3 000018b6: ADD 000018b7: SWAP2 000018b8: SWAP1 000018b9: PUSH1 0x00 000018bb: MSTORE 000018bc: PUSH1 0x20 000018be: PUSH1 0x00 000018c0: KECCAK256 000018c1: SWAP1 000018c2: JUMPDEST 000018c3: DUP2 000018c4: SLOAD 000018c5: DUP2 000018c6: MSTORE 000018c7: SWAP1 000018c8: PUSH1 0x01 000018ca: ADD 000018cb: SWAP1 000018cc: PUSH1 0x20 000018ce: ADD 000018cf: DUP1 000018d0: DUP4 000018d1: GT 000018d2: PUSH2 0x18c2 000018d5: JUMPI 000018d6: DUP3 000018d7: SWAP1 000018d8: SUB 000018d9: PUSH1 0x1f 000018db: AND 000018dc: DUP3 000018dd: ADD 000018de: SWAP2 000018df: JUMPDEST 000018e0: POP 000018e1: POP 000018e2: POP 000018e3: POP 000018e4: POP 000018e5: DUP2 000018e6: JUMP 000018e7: JUMPDEST 000018e8: PUSH1 0x07 000018ea: PUSH1 0x15 000018ec: SWAP1 000018ed: SLOAD 000018ee: SWAP1 000018ef: PUSH2 0x0100 000018f2: EXP 000018f3: SWAP1 000018f4: DIV 000018f5: PUSH1 0xff 000018f7: AND 000018f8: DUP2 000018f9: JUMP 000018fa: JUMPDEST 000018fb: PUSH2 0x1902 000018fe: PUSH2 0x2dd5 00001901: JUMP 00001902: JUMPDEST 00001903: PUSH1 0x06 00001905: SLOAD 00001906: DUP5 00001907: LT 00001908: ISZERO 00001909: ISZERO 0000190a: PUSH2 0x1912 0000190d: JUMPI 0000190e: PUSH1 0x00 00001910: DUP1 00001911: REVERT 00001912: JUMPDEST 00001913: CALLER 00001914: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001929: AND 0000192a: PUSH1 0x0a 0000192c: PUSH1 0x00 0000192e: DUP7 0000192f: DUP2 00001930: MSTORE 00001931: PUSH1 0x20 00001933: ADD 00001934: SWAP1 00001935: DUP2 00001936: MSTORE 00001937: PUSH1 0x20 00001939: ADD 0000193a: PUSH1 0x00 0000193c: KECCAK256 0000193d: PUSH1 0x00 0000193f: SWAP1 00001940: SLOAD 00001941: SWAP1 00001942: PUSH2 0x0100 00001945: EXP 00001946: SWAP1 00001947: DIV 00001948: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000195d: AND 0000195e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001973: AND 00001974: EQ 00001975: ISZERO 00001976: ISZERO 00001977: PUSH2 0x197f 0000197a: JUMPI 0000197b: PUSH1 0x00 0000197d: DUP1 0000197e: REVERT 0000197f: JUMPDEST 00001980: PUSH1 0x00 00001982: DUP4 00001983: LT 00001984: ISZERO 00001985: DUP1 00001986: ISZERO 00001987: PUSH2 0x1990 0000198a: JUMPI 0000198b: POP 0000198c: PUSH1 0x06 0000198e: DUP4 0000198f: LT 00001990: JUMPDEST 00001991: ISZERO 00001992: ISZERO 00001993: PUSH2 0x199b 00001996: JUMPI 00001997: PUSH1 0x00 00001999: DUP1 0000199a: REVERT 0000199b: JUMPDEST 0000199c: PUSH1 0x0e 0000199e: PUSH1 0x00 000019a0: DUP5 000019a1: DUP2 000019a2: MSTORE 000019a3: PUSH1 0x20 000019a5: ADD 000019a6: SWAP1 000019a7: DUP2 000019a8: MSTORE 000019a9: PUSH1 0x20 000019ab: ADD 000019ac: PUSH1 0x00 000019ae: KECCAK256 000019af: DUP1 000019b0: SLOAD 000019b1: PUSH1 0x01 000019b3: DUP2 000019b4: PUSH1 0x01 000019b6: AND 000019b7: ISZERO 000019b8: PUSH2 0x0100 000019bb: MUL 000019bc: SUB 000019bd: AND 000019be: PUSH1 0x02 000019c0: SWAP1 000019c1: DIV 000019c2: DUP1 000019c3: PUSH1 0x1f 000019c5: ADD 000019c6: PUSH1 0x20 000019c8: DUP1 000019c9: SWAP2 000019ca: DIV 000019cb: MUL 000019cc: PUSH1 0x20 000019ce: ADD 000019cf: PUSH1 0x40 000019d1: MLOAD 000019d2: SWAP1 000019d3: DUP2 000019d4: ADD 000019d5: PUSH1 0x40 000019d7: MSTORE 000019d8: DUP1 000019d9: SWAP3 000019da: SWAP2 000019db: SWAP1 000019dc: DUP2 000019dd: DUP2 000019de: MSTORE 000019df: PUSH1 0x20 000019e1: ADD 000019e2: DUP3 000019e3: DUP1 000019e4: SLOAD 000019e5: PUSH1 0x01 000019e7: DUP2 000019e8: PUSH1 0x01 000019ea: AND 000019eb: ISZERO 000019ec: PUSH2 0x0100 000019ef: MUL 000019f0: SUB 000019f1: AND 000019f2: PUSH1 0x02 000019f4: SWAP1 000019f5: DIV 000019f6: DUP1 000019f7: ISZERO 000019f8: PUSH2 0x1a42 000019fb: JUMPI 000019fc: DUP1 000019fd: PUSH1 0x1f 000019ff: LT 00001a00: PUSH2 0x1a17 00001a03: JUMPI 00001a04: PUSH2 0x0100 00001a07: DUP1 00001a08: DUP4 00001a09: SLOAD 00001a0a: DIV 00001a0b: MUL 00001a0c: DUP4 00001a0d: MSTORE 00001a0e: SWAP2 00001a0f: PUSH1 0x20 00001a11: ADD 00001a12: SWAP2 00001a13: PUSH2 0x1a42 00001a16: JUMP 00001a17: JUMPDEST 00001a18: DUP3 00001a19: ADD 00001a1a: SWAP2 00001a1b: SWAP1 00001a1c: PUSH1 0x00 00001a1e: MSTORE 00001a1f: PUSH1 0x20 00001a21: PUSH1 0x00 00001a23: KECCAK256 00001a24: SWAP1 00001a25: JUMPDEST 00001a26: DUP2 00001a27: SLOAD 00001a28: DUP2 00001a29: MSTORE 00001a2a: SWAP1 00001a2b: PUSH1 0x01 00001a2d: ADD 00001a2e: SWAP1 00001a2f: PUSH1 0x20 00001a31: ADD 00001a32: DUP1 00001a33: DUP4 00001a34: GT 00001a35: PUSH2 0x1a25 00001a38: JUMPI 00001a39: DUP3 00001a3a: SWAP1 00001a3b: SUB 00001a3c: PUSH1 0x1f 00001a3e: AND 00001a3f: DUP3 00001a40: ADD 00001a41: SWAP2 00001a42: JUMPDEST 00001a43: POP 00001a44: POP 00001a45: POP 00001a46: POP 00001a47: POP 00001a48: SWAP1 00001a49: POP 00001a4a: PUSH1 0x00 00001a4c: DUP2 00001a4d: MLOAD 00001a4e: EQ 00001a4f: ISZERO 00001a50: ISZERO 00001a51: ISZERO 00001a52: PUSH2 0x1a5a 00001a55: JUMPI 00001a56: PUSH1 0x00 00001a58: DUP1 00001a59: REVERT 00001a5a: JUMPDEST 00001a5b: DUP2 00001a5c: PUSH1 0x0f 00001a5e: PUSH1 0x00 00001a60: DUP7 00001a61: DUP2 00001a62: MSTORE 00001a63: PUSH1 0x20 00001a65: ADD 00001a66: SWAP1 00001a67: DUP2 00001a68: MSTORE 00001a69: PUSH1 0x20 00001a6b: ADD 00001a6c: PUSH1 0x00 00001a6e: KECCAK256 00001a6f: DUP5 00001a70: PUSH1 0x06 00001a72: DUP2 00001a73: LT 00001a74: ISZERO 00001a75: ISZERO 00001a76: PUSH2 0x1a7b 00001a79: JUMPI 00001a7a: INVALID 00001a7b: JUMPDEST 00001a7c: ADD 00001a7d: SWAP1 00001a7e: DUP1 00001a7f: MLOAD 00001a80: SWAP1 00001a81: PUSH1 0x20 00001a83: ADD 00001a84: SWAP1 00001a85: PUSH2 0x1a8f 00001a88: SWAP3 00001a89: SWAP2 00001a8a: SWAP1 00001a8b: PUSH2 0x2de9 00001a8e: JUMP 00001a8f: JUMPDEST 00001a90: POP 00001a91: POP 00001a92: POP 00001a93: POP 00001a94: POP 00001a95: JUMP 00001a96: JUMPDEST 00001a97: PUSH1 0x00 00001a99: DUP1 00001a9a: PUSH1 0x0d 00001a9c: PUSH1 0x00 00001a9e: DUP5 00001a9f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001ab4: AND 00001ab5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001aca: AND 00001acb: DUP2 00001acc: MSTORE 00001acd: PUSH1 0x20 00001acf: ADD 00001ad0: SWAP1 00001ad1: DUP2 00001ad2: MSTORE 00001ad3: PUSH1 0x20 00001ad5: ADD 00001ad6: PUSH1 0x00 00001ad8: KECCAK256 00001ad9: SLOAD 00001ada: EQ 00001adb: ISZERO 00001adc: ISZERO 00001add: ISZERO 00001ade: PUSH2 0x1ae6 00001ae1: JUMPI 00001ae2: PUSH1 0x00 00001ae4: DUP1 00001ae5: REVERT 00001ae6: JUMPDEST 00001ae7: PUSH1 0x0d 00001ae9: PUSH1 0x00 00001aeb: DUP4 00001aec: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b01: AND 00001b02: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b17: AND 00001b18: DUP2 00001b19: MSTORE 00001b1a: PUSH1 0x20 00001b1c: ADD 00001b1d: SWAP1 00001b1e: DUP2 00001b1f: MSTORE 00001b20: PUSH1 0x20 00001b22: ADD 00001b23: PUSH1 0x00 00001b25: KECCAK256 00001b26: SLOAD 00001b27: SWAP1 00001b28: POP 00001b29: SWAP2 00001b2a: SWAP1 00001b2b: POP 00001b2c: JUMP 00001b2d: JUMPDEST 00001b2e: PUSH1 0x0b 00001b30: PUSH1 0x20 00001b32: MSTORE 00001b33: DUP1 00001b34: PUSH1 0x00 00001b36: MSTORE 00001b37: PUSH1 0x40 00001b39: PUSH1 0x00 00001b3b: KECCAK256 00001b3c: PUSH1 0x00 00001b3e: SWAP2 00001b3f: POP 00001b40: SWAP1 00001b41: POP 00001b42: SLOAD 00001b43: DUP2 00001b44: JUMP 00001b45: JUMPDEST 00001b46: PUSH1 0x00 00001b48: DUP1 00001b49: PUSH1 0x01 00001b4b: PUSH1 0x00 00001b4d: SWAP1 00001b4e: SLOAD 00001b4f: SWAP1 00001b50: PUSH2 0x0100 00001b53: EXP 00001b54: SWAP1 00001b55: DIV 00001b56: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b6b: AND 00001b6c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b81: AND 00001b82: CALLER 00001b83: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b98: AND 00001b99: EQ 00001b9a: ISZERO 00001b9b: ISZERO 00001b9c: PUSH2 0x1ba4 00001b9f: JUMPI 00001ba0: PUSH1 0x00 00001ba2: DUP1 00001ba3: REVERT 00001ba4: JUMPDEST 00001ba5: PUSH1 0x07 00001ba7: PUSH1 0x15 00001ba9: SWAP1 00001baa: SLOAD 00001bab: SWAP1 00001bac: PUSH2 0x0100 00001baf: EXP 00001bb0: SWAP1 00001bb1: DIV 00001bb2: PUSH1 0xff 00001bb4: AND 00001bb5: ISZERO 00001bb6: ISZERO 00001bb7: ISZERO 00001bb8: PUSH2 0x1bc0 00001bbb: JUMPI 00001bbc: PUSH1 0x00 00001bbe: DUP1 00001bbf: REVERT 00001bc0: JUMPDEST 00001bc1: PUSH1 0x00 00001bc3: DUP6 00001bc4: GT 00001bc5: ISZERO 00001bc6: ISZERO 00001bc7: PUSH2 0x1bcf 00001bca: JUMPI 00001bcb: PUSH1 0x00 00001bcd: DUP1 00001bce: REVERT 00001bcf: JUMPDEST 00001bd0: DUP5 00001bd1: PUSH1 0x09 00001bd3: SLOAD 00001bd4: ADD 00001bd5: PUSH1 0x09 00001bd7: DUP2 00001bd8: SWAP1 00001bd9: SSTORE 00001bda: POP 00001bdb: PUSH1 0x06 00001bdd: SLOAD 00001bde: SWAP1 00001bdf: POP 00001be0: DUP5 00001be1: PUSH1 0x06 00001be3: SLOAD 00001be4: ADD 00001be5: PUSH1 0x06 00001be7: DUP2 00001be8: SWAP1 00001be9: SSTORE 00001bea: POP 00001beb: DUP5 00001bec: PUSH1 0x08 00001bee: SLOAD 00001bef: ADD 00001bf0: PUSH1 0x08 00001bf2: DUP2 00001bf3: SWAP1 00001bf4: SSTORE 00001bf5: POP 00001bf6: DUP3 00001bf7: PUSH1 0x00 00001bf9: SWAP1 00001bfa: DUP1 00001bfb: MLOAD 00001bfc: SWAP1 00001bfd: PUSH1 0x20 00001bff: ADD 00001c00: SWAP1 00001c01: PUSH2 0x1c0b 00001c04: SWAP3 00001c05: SWAP2 00001c06: SWAP1 00001c07: PUSH2 0x2de9 00001c0a: JUMP 00001c0b: JUMPDEST 00001c0c: POP 00001c0d: DUP4 00001c0e: PUSH1 0x0b 00001c10: PUSH1 0x00 00001c12: DUP9 00001c13: PUSH4 0xffffffff 00001c18: AND 00001c19: PUSH4 0xffffffff 00001c1e: AND 00001c1f: DUP2 00001c20: MSTORE 00001c21: PUSH1 0x20 00001c23: ADD 00001c24: SWAP1 00001c25: DUP2 00001c26: MSTORE 00001c27: PUSH1 0x20 00001c29: ADD 00001c2a: PUSH1 0x00 00001c2c: KECCAK256 00001c2d: DUP2 00001c2e: SWAP1 00001c2f: SSTORE 00001c30: POP 00001c31: PUSH1 0x10 00001c33: DUP1 00001c34: SLOAD 00001c35: DUP1 00001c36: PUSH1 0x01 00001c38: ADD 00001c39: DUP3 00001c3a: DUP2 00001c3b: PUSH2 0x1c44 00001c3e: SWAP2 00001c3f: SWAP1 00001c40: PUSH2 0x2e69 00001c43: JUMP 00001c44: JUMPDEST 00001c45: SWAP2 00001c46: PUSH1 0x00 00001c48: MSTORE 00001c49: PUSH1 0x20 00001c4b: PUSH1 0x00 00001c4d: KECCAK256 00001c4e: SWAP1 00001c4f: ADD 00001c50: PUSH1 0x00 00001c52: PUSH1 0x06 00001c54: SLOAD 00001c55: SWAP1 00001c56: SWAP2 00001c57: SWAP1 00001c58: SWAP2 00001c59: POP 00001c5a: SSTORE 00001c5b: POP 00001c5c: DUP5 00001c5d: PUSH32 0x76edb1b512062ed2fa9a21753f6906d5806f2522b48caf004f8b78eac6418ee5 00001c7e: PUSH1 0x06 00001c80: SLOAD 00001c81: DUP7 00001c82: DUP7 00001c83: PUSH1 0x40 00001c85: MLOAD 00001c86: DUP1 00001c87: DUP5 00001c88: DUP2 00001c89: MSTORE 00001c8a: PUSH1 0x20 00001c8c: ADD 00001c8d: DUP4 00001c8e: DUP2 00001c8f: MSTORE 00001c90: PUSH1 0x20 00001c92: ADD 00001c93: DUP1 00001c94: PUSH1 0x20 00001c96: ADD 00001c97: DUP3 00001c98: DUP2 00001c99: SUB 00001c9a: DUP3 00001c9b: MSTORE 00001c9c: DUP4 00001c9d: DUP2 00001c9e: DUP2 00001c9f: MLOAD 00001ca0: DUP2 00001ca1: MSTORE 00001ca2: PUSH1 0x20 00001ca4: ADD 00001ca5: SWAP2 00001ca6: POP 00001ca7: DUP1 00001ca8: MLOAD 00001ca9: SWAP1 00001caa: PUSH1 0x20 00001cac: ADD 00001cad: SWAP1 00001cae: DUP1 00001caf: DUP4 00001cb0: DUP4 00001cb1: PUSH1 0x00 00001cb3: JUMPDEST 00001cb4: DUP4 00001cb5: DUP2 00001cb6: LT 00001cb7: ISZERO 00001cb8: PUSH2 0x1cce 00001cbb: JUMPI 00001cbc: DUP1 00001cbd: DUP3 00001cbe: ADD 00001cbf: MLOAD 00001cc0: DUP2 00001cc1: DUP5 00001cc2: ADD 00001cc3: MSTORE 00001cc4: PUSH1 0x20 00001cc6: DUP2 00001cc7: ADD 00001cc8: SWAP1 00001cc9: POP 00001cca: PUSH2 0x1cb3 00001ccd: JUMP 00001cce: JUMPDEST 00001ccf: POP 00001cd0: POP 00001cd1: POP 00001cd2: POP 00001cd3: SWAP1 00001cd4: POP 00001cd5: SWAP1 00001cd6: DUP2 00001cd7: ADD 00001cd8: SWAP1 00001cd9: PUSH1 0x1f 00001cdb: AND 00001cdc: DUP1 00001cdd: ISZERO 00001cde: PUSH2 0x1cfb 00001ce1: JUMPI 00001ce2: DUP1 00001ce3: DUP3 00001ce4: SUB 00001ce5: DUP1 00001ce6: MLOAD 00001ce7: PUSH1 0x01 00001ce9: DUP4 00001cea: PUSH1 0x20 00001cec: SUB 00001ced: PUSH2 0x0100 00001cf0: EXP 00001cf1: SUB 00001cf2: NOT 00001cf3: AND 00001cf4: DUP2 00001cf5: MSTORE 00001cf6: PUSH1 0x20 00001cf8: ADD 00001cf9: SWAP2 00001cfa: POP 00001cfb: JUMPDEST 00001cfc: POP 00001cfd: SWAP5 00001cfe: POP 00001cff: POP 00001d00: POP 00001d01: POP 00001d02: POP 00001d03: PUSH1 0x40 00001d05: MLOAD 00001d06: DUP1 00001d07: SWAP2 00001d08: SUB 00001d09: SWAP1 00001d0a: LOG2 00001d0b: PUSH1 0x06 00001d0d: SLOAD 00001d0e: SWAP2 00001d0f: POP 00001d10: POP 00001d11: SWAP5 00001d12: SWAP4 00001d13: POP 00001d14: POP 00001d15: POP 00001d16: POP 00001d17: JUMP 00001d18: JUMPDEST 00001d19: PUSH1 0x07 00001d1b: PUSH1 0x00 00001d1d: SWAP1 00001d1e: SLOAD 00001d1f: SWAP1 00001d20: PUSH2 0x0100 00001d23: EXP 00001d24: SWAP1 00001d25: DIV 00001d26: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001d3b: AND 00001d3c: DUP2 00001d3d: JUMP 00001d3e: JUMPDEST 00001d3f: PUSH1 0x04 00001d41: DUP1 00001d42: SLOAD 00001d43: PUSH1 0x01 00001d45: DUP2 00001d46: PUSH1 0x01 00001d48: AND 00001d49: ISZERO 00001d4a: PUSH2 0x0100 00001d4d: MUL 00001d4e: SUB 00001d4f: AND 00001d50: PUSH1 0x02 00001d52: SWAP1 00001d53: DIV 00001d54: DUP1 00001d55: PUSH1 0x1f 00001d57: ADD 00001d58: PUSH1 0x20 00001d5a: DUP1 00001d5b: SWAP2 00001d5c: DIV 00001d5d: MUL 00001d5e: PUSH1 0x20 00001d60: ADD 00001d61: PUSH1 0x40 00001d63: MLOAD 00001d64: SWAP1 00001d65: DUP2 00001d66: ADD 00001d67: PUSH1 0x40 00001d69: MSTORE 00001d6a: DUP1 00001d6b: SWAP3 00001d6c: SWAP2 00001d6d: SWAP1 00001d6e: DUP2 00001d6f: DUP2 00001d70: MSTORE 00001d71: PUSH1 0x20 00001d73: ADD 00001d74: DUP3 00001d75: DUP1 00001d76: SLOAD 00001d77: PUSH1 0x01 00001d79: DUP2 00001d7a: PUSH1 0x01 00001d7c: AND 00001d7d: ISZERO 00001d7e: PUSH2 0x0100 00001d81: MUL 00001d82: SUB 00001d83: AND 00001d84: PUSH1 0x02 00001d86: SWAP1 00001d87: DIV 00001d88: DUP1 00001d89: ISZERO 00001d8a: PUSH2 0x1dd4 00001d8d: JUMPI 00001d8e: DUP1 00001d8f: PUSH1 0x1f 00001d91: LT 00001d92: PUSH2 0x1da9 00001d95: JUMPI 00001d96: PUSH2 0x0100 00001d99: DUP1 00001d9a: DUP4 00001d9b: SLOAD 00001d9c: DIV 00001d9d: MUL 00001d9e: DUP4 00001d9f: MSTORE 00001da0: SWAP2 00001da1: PUSH1 0x20 00001da3: ADD 00001da4: SWAP2 00001da5: PUSH2 0x1dd4 00001da8: JUMP 00001da9: JUMPDEST 00001daa: DUP3 00001dab: ADD 00001dac: SWAP2 00001dad: SWAP1 00001dae: PUSH1 0x00 00001db0: MSTORE 00001db1: PUSH1 0x20 00001db3: PUSH1 0x00 00001db5: KECCAK256 00001db6: SWAP1 00001db7: JUMPDEST 00001db8: DUP2 00001db9: SLOAD 00001dba: DUP2 00001dbb: MSTORE 00001dbc: SWAP1 00001dbd: PUSH1 0x01 00001dbf: ADD 00001dc0: SWAP1 00001dc1: PUSH1 0x20 00001dc3: ADD 00001dc4: DUP1 00001dc5: DUP4 00001dc6: GT 00001dc7: PUSH2 0x1db7 00001dca: JUMPI 00001dcb: DUP3 00001dcc: SWAP1 00001dcd: SUB 00001dce: PUSH1 0x1f 00001dd0: AND 00001dd1: DUP3 00001dd2: ADD 00001dd3: SWAP2 00001dd4: JUMPDEST 00001dd5: POP 00001dd6: POP 00001dd7: POP 00001dd8: POP 00001dd9: POP 00001dda: DUP2 00001ddb: JUMP 00001ddc: JUMPDEST 00001ddd: PUSH1 0x00 00001ddf: DUP1 00001de0: PUSH1 0x00 00001de2: SWAP1 00001de3: POP 00001de4: JUMPDEST 00001de5: PUSH1 0x10 00001de7: DUP1 00001de8: SLOAD 00001de9: SWAP1 00001dea: POP 00001deb: DUP2 00001dec: PUSH4 0xffffffff 00001df1: AND 00001df2: LT 00001df3: ISZERO 00001df4: PUSH2 0x1e34 00001df7: JUMPI 00001df8: DUP3 00001df9: PUSH1 0x10 00001dfb: DUP3 00001dfc: PUSH4 0xffffffff 00001e01: AND 00001e02: DUP2 00001e03: SLOAD 00001e04: DUP2 00001e05: LT 00001e06: ISZERO 00001e07: ISZERO 00001e08: PUSH2 0x1e0d 00001e0b: JUMPI 00001e0c: INVALID 00001e0d: JUMPDEST 00001e0e: SWAP1 00001e0f: PUSH1 0x00 00001e11: MSTORE 00001e12: PUSH1 0x20 00001e14: PUSH1 0x00 00001e16: KECCAK256 00001e17: SWAP1 00001e18: ADD 00001e19: SLOAD 00001e1a: GT 00001e1b: ISZERO 00001e1c: PUSH2 0x1e27 00001e1f: JUMPI 00001e20: DUP1 00001e21: SWAP2 00001e22: POP 00001e23: PUSH2 0x1e35 00001e26: JUMP 00001e27: JUMPDEST 00001e28: DUP1 00001e29: DUP1 00001e2a: PUSH1 0x01 00001e2c: ADD 00001e2d: SWAP2 00001e2e: POP 00001e2f: POP 00001e30: PUSH2 0x1de4 00001e33: JUMP 00001e34: JUMPDEST 00001e35: JUMPDEST 00001e36: POP 00001e37: SWAP2 00001e38: SWAP1 00001e39: POP 00001e3a: JUMP 00001e3b: JUMPDEST 00001e3c: PUSH1 0x11 00001e3e: PUSH1 0x20 00001e40: MSTORE 00001e41: DUP1 00001e42: PUSH1 0x00 00001e44: MSTORE 00001e45: PUSH1 0x40 00001e47: PUSH1 0x00 00001e49: KECCAK256 00001e4a: PUSH1 0x00 00001e4c: SWAP2 00001e4d: POP 00001e4e: SWAP1 00001e4f: POP 00001e50: DUP1 00001e51: PUSH1 0x00 00001e53: ADD 00001e54: PUSH1 0x00 00001e56: SWAP1 00001e57: SLOAD 00001e58: SWAP1 00001e59: PUSH2 0x0100 00001e5c: EXP 00001e5d: SWAP1 00001e5e: DIV 00001e5f: PUSH1 0xff 00001e61: AND 00001e62: SWAP1 00001e63: DUP1 00001e64: PUSH1 0x01 00001e66: ADD 00001e67: SLOAD 00001e68: SWAP1 00001e69: DUP1 00001e6a: PUSH1 0x02 00001e6c: ADD 00001e6d: PUSH1 0x00 00001e6f: SWAP1 00001e70: SLOAD 00001e71: SWAP1 00001e72: PUSH2 0x0100 00001e75: EXP 00001e76: SWAP1 00001e77: DIV 00001e78: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001e8d: AND 00001e8e: SWAP1 00001e8f: DUP1 00001e90: PUSH1 0x03 00001e92: ADD 00001e93: SLOAD 00001e94: SWAP1 00001e95: DUP1 00001e96: PUSH1 0x04 00001e98: ADD 00001e99: PUSH1 0x00 00001e9b: SWAP1 00001e9c: SLOAD 00001e9d: SWAP1 00001e9e: PUSH2 0x0100 00001ea1: EXP 00001ea2: SWAP1 00001ea3: DIV 00001ea4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001eb9: AND 00001eba: SWAP1 00001ebb: POP 00001ebc: DUP6 00001ebd: JUMP 00001ebe: JUMPDEST 00001ebf: PUSH1 0x07 00001ec1: PUSH1 0x16 00001ec3: SWAP1 00001ec4: SLOAD 00001ec5: SWAP1 00001ec6: PUSH2 0x0100 00001ec9: EXP 00001eca: SWAP1 00001ecb: DIV 00001ecc: PUSH1 0xff 00001ece: AND 00001ecf: DUP2 00001ed0: JUMP 00001ed1: JUMPDEST 00001ed2: PUSH1 0x07 00001ed4: PUSH1 0x14 00001ed6: SWAP1 00001ed7: SLOAD 00001ed8: SWAP1 00001ed9: PUSH2 0x0100 00001edc: EXP 00001edd: SWAP1 00001ede: DIV 00001edf: PUSH1 0xff 00001ee1: AND 00001ee2: DUP2 00001ee3: JUMP 00001ee4: JUMPDEST 00001ee5: PUSH1 0x00 00001ee7: DUP1 00001ee8: PUSH1 0x00 00001eea: DUP1 00001eeb: PUSH1 0x01 00001eed: PUSH1 0x00 00001eef: SWAP1 00001ef0: SLOAD 00001ef1: SWAP1 00001ef2: PUSH2 0x0100 00001ef5: EXP 00001ef6: SWAP1 00001ef7: DIV 00001ef8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f0d: AND 00001f0e: DUP1 00001f0f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f24: AND 00001f25: CALLER 00001f26: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f3b: AND 00001f3c: EQ 00001f3d: ISZERO 00001f3e: ISZERO 00001f3f: PUSH2 0x1f47 00001f42: JUMPI 00001f43: PUSH1 0x00 00001f45: DUP1 00001f46: REVERT 00001f47: JUMPDEST 00001f48: PUSH1 0x07 00001f4a: PUSH1 0x00 00001f4c: SWAP1 00001f4d: SLOAD 00001f4e: SWAP1 00001f4f: PUSH2 0x0100 00001f52: EXP 00001f53: SWAP1 00001f54: DIV 00001f55: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f6a: AND 00001f6b: SWAP5 00001f6c: POP 00001f6d: DUP7 00001f6e: SWAP4 00001f6f: POP 00001f70: JUMPDEST 00001f71: DUP6 00001f72: DUP5 00001f73: GT 00001f74: ISZERO 00001f75: ISZERO 00001f76: PUSH2 0x2191 00001f79: JUMPI 00001f7a: DUP5 00001f7b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f90: AND 00001f91: PUSH4 0x210fe93b 00001f96: DUP6 00001f97: PUSH1 0x00 00001f99: PUSH1 0x40 00001f9b: MLOAD 00001f9c: PUSH1 0x20 00001f9e: ADD 00001f9f: MSTORE 00001fa0: PUSH1 0x40 00001fa2: MLOAD 00001fa3: DUP3 00001fa4: PUSH4 0xffffffff 00001fa9: AND 00001faa: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 00001fc8: MUL 00001fc9: DUP2 00001fca: MSTORE 00001fcb: PUSH1 0x04 00001fcd: ADD 00001fce: DUP1 00001fcf: DUP3 00001fd0: DUP2 00001fd1: MSTORE 00001fd2: PUSH1 0x20 00001fd4: ADD 00001fd5: SWAP2 00001fd6: POP 00001fd7: POP 00001fd8: PUSH1 0x20 00001fda: PUSH1 0x40 00001fdc: MLOAD 00001fdd: DUP1 00001fde: DUP4 00001fdf: SUB 00001fe0: DUP2 00001fe1: PUSH1 0x00 00001fe3: DUP8 00001fe4: DUP1 00001fe5: EXTCODESIZE 00001fe6: ISZERO 00001fe7: ISZERO 00001fe8: PUSH2 0x1ff0 00001feb: JUMPI 00001fec: PUSH1 0x00 00001fee: DUP1 00001fef: REVERT 00001ff0: JUMPDEST 00001ff1: PUSH2 0x02c6 00001ff4: GAS 00001ff5: SUB 00001ff6: CALL 00001ff7: ISZERO 00001ff8: ISZERO 00001ff9: PUSH2 0x2001 00001ffc: JUMPI 00001ffd: PUSH1 0x00 00001fff: DUP1 00002000: REVERT 00002001: JUMPDEST 00002002: POP 00002003: POP 00002004: POP 00002005: PUSH1 0x40 00002007: MLOAD 00002008: DUP1 00002009: MLOAD 0000200a: SWAP1 0000200b: POP 0000200c: SWAP3 0000200d: POP 0000200e: PUSH1 0x00 00002010: DUP4 00002011: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002026: AND 00002027: EQ 00002028: ISZERO 00002029: ISZERO 0000202a: PUSH2 0x2184 0000202d: JUMPI 0000202e: DUP3 0000202f: PUSH1 0x0a 00002031: PUSH1 0x00 00002033: DUP7 00002034: DUP2 00002035: MSTORE 00002036: PUSH1 0x20 00002038: ADD 00002039: SWAP1 0000203a: DUP2 0000203b: MSTORE 0000203c: PUSH1 0x20 0000203e: ADD 0000203f: PUSH1 0x00 00002041: KECCAK256 00002042: PUSH1 0x00 00002044: PUSH2 0x0100 00002047: EXP 00002048: DUP2 00002049: SLOAD 0000204a: DUP2 0000204b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002060: MUL 00002061: NOT 00002062: AND 00002063: SWAP1 00002064: DUP4 00002065: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000207a: AND 0000207b: MUL 0000207c: OR 0000207d: SWAP1 0000207e: SSTORE 0000207f: POP 00002080: DUP5 00002081: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002096: AND 00002097: PUSH4 0x70a08231 0000209c: DUP5 0000209d: PUSH1 0x00 0000209f: PUSH1 0x40 000020a1: MLOAD 000020a2: PUSH1 0x20 000020a4: ADD 000020a5: MSTORE 000020a6: PUSH1 0x40 000020a8: MLOAD 000020a9: DUP3 000020aa: PUSH4 0xffffffff 000020af: AND 000020b0: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 000020ce: MUL 000020cf: DUP2 000020d0: MSTORE 000020d1: PUSH1 0x04 000020d3: ADD 000020d4: DUP1 000020d5: DUP3 000020d6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000020eb: AND 000020ec: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002101: AND 00002102: DUP2 00002103: MSTORE 00002104: PUSH1 0x20 00002106: ADD 00002107: SWAP2 00002108: POP 00002109: POP 0000210a: PUSH1 0x20 0000210c: PUSH1 0x40 0000210e: MLOAD 0000210f: DUP1 00002110: DUP4 00002111: SUB 00002112: DUP2 00002113: PUSH1 0x00 00002115: DUP8 00002116: DUP1 00002117: EXTCODESIZE 00002118: ISZERO 00002119: ISZERO 0000211a: PUSH2 0x2122 0000211d: JUMPI 0000211e: PUSH1 0x00 00002120: DUP1 00002121: REVERT 00002122: JUMPDEST 00002123: PUSH2 0x02c6 00002126: GAS 00002127: SUB 00002128: CALL 00002129: ISZERO 0000212a: ISZERO 0000212b: PUSH2 0x2133 0000212e: JUMPI 0000212f: PUSH1 0x00 00002131: DUP1 00002132: REVERT 00002133: JUMPDEST 00002134: POP 00002135: POP 00002136: POP 00002137: PUSH1 0x40 00002139: MLOAD 0000213a: DUP1 0000213b: MLOAD 0000213c: SWAP1 0000213d: POP 0000213e: SWAP2 0000213f: POP 00002140: DUP2 00002141: PUSH1 0x0d 00002143: PUSH1 0x00 00002145: DUP6 00002146: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000215b: AND 0000215c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002171: AND 00002172: DUP2 00002173: MSTORE 00002174: PUSH1 0x20 00002176: ADD 00002177: SWAP1 00002178: DUP2 00002179: MSTORE 0000217a: PUSH1 0x20 0000217c: ADD 0000217d: PUSH1 0x00 0000217f: KECCAK256 00002180: DUP2 00002181: SWAP1 00002182: SSTORE 00002183: POP 00002184: JUMPDEST 00002185: DUP4 00002186: DUP1 00002187: PUSH1 0x01 00002189: ADD 0000218a: SWAP5 0000218b: POP 0000218c: POP 0000218d: PUSH2 0x1f70 00002190: JUMP 00002191: JUMPDEST 00002192: DUP5 00002193: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000021a8: AND 000021a9: PUSH4 0xea341309 000021ae: PUSH1 0x00 000021b0: PUSH1 0x40 000021b2: MLOAD 000021b3: PUSH1 0x20 000021b5: ADD 000021b6: MSTORE 000021b7: PUSH1 0x40 000021b9: MLOAD 000021ba: DUP2 000021bb: PUSH4 0xffffffff 000021c0: AND 000021c1: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 000021df: MUL 000021e0: DUP2 000021e1: MSTORE 000021e2: PUSH1 0x04 000021e4: ADD 000021e5: PUSH1 0x20 000021e7: PUSH1 0x40 000021e9: MLOAD 000021ea: DUP1 000021eb: DUP4 000021ec: SUB 000021ed: DUP2 000021ee: PUSH1 0x00 000021f0: DUP8 000021f1: DUP1 000021f2: EXTCODESIZE 000021f3: ISZERO 000021f4: ISZERO 000021f5: PUSH2 0x21fd 000021f8: JUMPI 000021f9: PUSH1 0x00 000021fb: DUP1 000021fc: REVERT 000021fd: JUMPDEST 000021fe: PUSH2 0x02c6 00002201: GAS 00002202: SUB 00002203: CALL 00002204: ISZERO 00002205: ISZERO 00002206: PUSH2 0x220e 00002209: JUMPI 0000220a: PUSH1 0x00 0000220c: DUP1 0000220d: REVERT 0000220e: JUMPDEST 0000220f: POP 00002210: POP 00002211: POP 00002212: PUSH1 0x40 00002214: MLOAD 00002215: DUP1 00002216: MLOAD 00002217: SWAP1 00002218: POP 00002219: PUSH1 0x08 0000221b: DUP2 0000221c: SWAP1 0000221d: SSTORE 0000221e: POP 0000221f: POP 00002220: POP 00002221: POP 00002222: POP 00002223: POP 00002224: POP 00002225: POP 00002226: JUMP 00002227: JUMPDEST 00002228: PUSH1 0x01 0000222a: PUSH1 0x00 0000222c: SWAP1 0000222d: SLOAD 0000222e: SWAP1 0000222f: PUSH2 0x0100 00002232: EXP 00002233: SWAP1 00002234: DIV 00002235: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000224a: AND 0000224b: DUP1 0000224c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002261: AND 00002262: CALLER 00002263: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002278: AND 00002279: EQ 0000227a: ISZERO 0000227b: ISZERO 0000227c: PUSH2 0x2284 0000227f: JUMPI 00002280: PUSH1 0x00 00002282: DUP1 00002283: REVERT 00002284: JUMPDEST 00002285: PUSH1 0x00 00002287: DUP4 00002288: LT 00002289: ISZERO 0000228a: DUP1 0000228b: ISZERO 0000228c: PUSH2 0x2295 0000228f: JUMPI 00002290: POP 00002291: PUSH1 0x06 00002293: DUP4 00002294: LT 00002295: JUMPDEST 00002296: ISZERO 00002297: ISZERO 00002298: PUSH2 0x22a0 0000229b: JUMPI 0000229c: PUSH1 0x00 0000229e: DUP1 0000229f: REVERT 000022a0: JUMPDEST 000022a1: DUP2 000022a2: PUSH1 0x0e 000022a4: PUSH1 0x00 000022a6: DUP6 000022a7: DUP2 000022a8: MSTORE 000022a9: PUSH1 0x20 000022ab: ADD 000022ac: SWAP1 000022ad: DUP2 000022ae: MSTORE 000022af: PUSH1 0x20 000022b1: ADD 000022b2: PUSH1 0x00 000022b4: KECCAK256 000022b5: SWAP1 000022b6: DUP1 000022b7: MLOAD 000022b8: SWAP1 000022b9: PUSH1 0x20 000022bb: ADD 000022bc: SWAP1 000022bd: PUSH2 0x22c7 000022c0: SWAP3 000022c1: SWAP2 000022c2: SWAP1 000022c3: PUSH2 0x2de9 000022c6: JUMP 000022c7: JUMPDEST 000022c8: POP 000022c9: POP 000022ca: POP 000022cb: POP 000022cc: JUMP 000022cd: JUMPDEST 000022ce: PUSH1 0x00 000022d0: PUSH1 0x06 000022d2: SLOAD 000022d3: DUP3 000022d4: LT 000022d5: DUP1 000022d6: ISZERO 000022d7: PUSH2 0x233e 000022da: JUMPI 000022db: POP 000022dc: CALLER 000022dd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000022f2: AND 000022f3: PUSH1 0x0a 000022f5: PUSH1 0x00 000022f7: DUP5 000022f8: DUP2 000022f9: MSTORE 000022fa: PUSH1 0x20 000022fc: ADD 000022fd: SWAP1 000022fe: DUP2 000022ff: MSTORE 00002300: PUSH1 0x20 00002302: ADD 00002303: PUSH1 0x00 00002305: KECCAK256 00002306: PUSH1 0x00 00002308: SWAP1 00002309: SLOAD 0000230a: SWAP1 0000230b: PUSH2 0x0100 0000230e: EXP 0000230f: SWAP1 00002310: DIV 00002311: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002326: AND 00002327: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000233c: AND 0000233d: EQ 0000233e: JUMPDEST 0000233f: DUP1 00002340: ISZERO 00002341: PUSH2 0x2389 00002344: JUMPI 00002345: POP 00002346: PUSH1 0x00 00002348: PUSH1 0x0d 0000234a: PUSH1 0x00 0000234c: CALLER 0000234d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002362: AND 00002363: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002378: AND 00002379: DUP2 0000237a: MSTORE 0000237b: PUSH1 0x20 0000237d: ADD 0000237e: SWAP1 0000237f: DUP2 00002380: MSTORE 00002381: PUSH1 0x20 00002383: ADD 00002384: PUSH1 0x00 00002386: KECCAK256 00002387: SLOAD 00002388: GT 00002389: JUMPDEST 0000238a: ISZERO 0000238b: PUSH2 0x24ed 0000238e: JUMPI 0000238f: PUSH1 0x0d 00002391: PUSH1 0x00 00002393: CALLER 00002394: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000023a9: AND 000023aa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000023bf: AND 000023c0: DUP2 000023c1: MSTORE 000023c2: PUSH1 0x20 000023c4: ADD 000023c5: SWAP1 000023c6: DUP2 000023c7: MSTORE 000023c8: PUSH1 0x20 000023ca: ADD 000023cb: PUSH1 0x00 000023cd: KECCAK256 000023ce: PUSH1 0x00 000023d0: DUP2 000023d1: SLOAD 000023d2: DUP1 000023d3: SWAP3 000023d4: SWAP2 000023d5: SWAP1 000023d6: PUSH1 0x01 000023d8: SWAP1 000023d9: SUB 000023da: SWAP2 000023db: SWAP1 000023dc: POP 000023dd: SSTORE 000023de: POP 000023df: DUP3 000023e0: PUSH1 0x0a 000023e2: PUSH1 0x00 000023e4: DUP5 000023e5: DUP2 000023e6: MSTORE 000023e7: PUSH1 0x20 000023e9: ADD 000023ea: SWAP1 000023eb: DUP2 000023ec: MSTORE 000023ed: PUSH1 0x20 000023ef: ADD 000023f0: PUSH1 0x00 000023f2: KECCAK256 000023f3: PUSH1 0x00 000023f5: PUSH2 0x0100 000023f8: EXP 000023f9: DUP2 000023fa: SLOAD 000023fb: DUP2 000023fc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002411: MUL 00002412: NOT 00002413: AND 00002414: SWAP1 00002415: DUP4 00002416: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000242b: AND 0000242c: MUL 0000242d: OR 0000242e: SWAP1 0000242f: SSTORE 00002430: POP 00002431: PUSH1 0x0d 00002433: PUSH1 0x00 00002435: DUP5 00002436: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000244b: AND 0000244c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002461: AND 00002462: DUP2 00002463: MSTORE 00002464: PUSH1 0x20 00002466: ADD 00002467: SWAP1 00002468: DUP2 00002469: MSTORE 0000246a: PUSH1 0x20 0000246c: ADD 0000246d: PUSH1 0x00 0000246f: KECCAK256 00002470: PUSH1 0x00 00002472: DUP2 00002473: SLOAD 00002474: DUP1 00002475: SWAP3 00002476: SWAP2 00002477: SWAP1 00002478: PUSH1 0x01 0000247a: ADD 0000247b: SWAP2 0000247c: SWAP1 0000247d: POP 0000247e: SSTORE 0000247f: POP 00002480: DUP3 00002481: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002496: AND 00002497: CALLER 00002498: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000024ad: AND 000024ae: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef 000024cf: DUP5 000024d0: PUSH1 0x40 000024d2: MLOAD 000024d3: DUP1 000024d4: DUP3 000024d5: DUP2 000024d6: MSTORE 000024d7: PUSH1 0x20 000024d9: ADD 000024da: SWAP2 000024db: POP 000024dc: POP 000024dd: PUSH1 0x40 000024df: MLOAD 000024e0: DUP1 000024e1: SWAP2 000024e2: SUB 000024e3: SWAP1 000024e4: LOG3 000024e5: PUSH1 0x01 000024e7: SWAP1 000024e8: POP 000024e9: PUSH2 0x24f2 000024ec: JUMP 000024ed: JUMPDEST 000024ee: PUSH1 0x00 000024f0: SWAP1 000024f1: POP 000024f2: JUMPDEST 000024f3: DUP1 000024f4: SWAP1 000024f5: POP 000024f6: SWAP3 000024f7: SWAP2 000024f8: POP 000024f9: POP 000024fa: JUMP 000024fb: JUMPDEST 000024fc: PUSH1 0x09 000024fe: SLOAD 000024ff: DUP2 00002500: JUMP 00002501: JUMPDEST 00002502: PUSH1 0x01 00002504: PUSH1 0x00 00002506: SWAP1 00002507: SLOAD 00002508: SWAP1 00002509: PUSH2 0x0100 0000250c: EXP 0000250d: SWAP1 0000250e: DIV 0000250f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002524: AND 00002525: DUP1 00002526: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000253b: AND 0000253c: CALLER 0000253d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002552: AND 00002553: EQ 00002554: ISZERO 00002555: ISZERO 00002556: PUSH2 0x255e 00002559: JUMPI 0000255a: PUSH1 0x00 0000255c: DUP1 0000255d: REVERT 0000255e: JUMPDEST 0000255f: PUSH1 0x06 00002561: SLOAD 00002562: DUP4 00002563: LT 00002564: ISZERO 00002565: ISZERO 00002566: PUSH2 0x256e 00002569: JUMPI 0000256a: PUSH1 0x00 0000256c: DUP1 0000256d: REVERT 0000256e: JUMPDEST 0000256f: PUSH1 0x00 00002571: DUP3 00002572: GT 00002573: ISZERO 00002574: ISZERO 00002575: PUSH2 0x257d 00002578: JUMPI 00002579: PUSH1 0x00 0000257b: DUP1 0000257c: REVERT 0000257d: JUMPDEST 0000257e: DUP2 0000257f: PUSH1 0x0c 00002581: PUSH1 0x00 00002583: DUP6 00002584: DUP2 00002585: MSTORE 00002586: PUSH1 0x20 00002588: ADD 00002589: SWAP1 0000258a: DUP2 0000258b: MSTORE 0000258c: PUSH1 0x20 0000258e: ADD 0000258f: PUSH1 0x00 00002591: KECCAK256 00002592: DUP2 00002593: SWAP1 00002594: SSTORE 00002595: POP 00002596: POP 00002597: POP 00002598: POP 00002599: JUMP 0000259a: JUMPDEST 0000259b: PUSH1 0x00 0000259d: DUP1 0000259e: PUSH1 0x0a 000025a0: PUSH1 0x00 000025a2: DUP5 000025a3: DUP2 000025a4: MSTORE 000025a5: PUSH1 0x20 000025a7: ADD 000025a8: SWAP1 000025a9: DUP2 000025aa: MSTORE 000025ab: PUSH1 0x20 000025ad: ADD 000025ae: PUSH1 0x00 000025b0: KECCAK256 000025b1: PUSH1 0x00 000025b3: SWAP1 000025b4: SLOAD 000025b5: SWAP1 000025b6: PUSH2 0x0100 000025b9: EXP 000025ba: SWAP1 000025bb: DIV 000025bc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000025d1: AND 000025d2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000025e7: AND 000025e8: EQ 000025e9: ISZERO 000025ea: ISZERO 000025eb: ISZERO 000025ec: PUSH2 0x25f4 000025ef: JUMPI 000025f0: PUSH1 0x00 000025f2: DUP1 000025f3: REVERT 000025f4: JUMPDEST 000025f5: PUSH1 0x0a 000025f7: PUSH1 0x00 000025f9: DUP4 000025fa: DUP2 000025fb: MSTORE 000025fc: PUSH1 0x20 000025fe: ADD 000025ff: SWAP1 00002600: DUP2 00002601: MSTORE 00002602: PUSH1 0x20 00002604: ADD 00002605: PUSH1 0x00 00002607: KECCAK256 00002608: PUSH1 0x00 0000260a: SWAP1 0000260b: SLOAD 0000260c: SWAP1 0000260d: PUSH2 0x0100 00002610: EXP 00002611: SWAP1 00002612: DIV 00002613: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002628: AND 00002629: SWAP1 0000262a: POP 0000262b: SWAP2 0000262c: SWAP1 0000262d: POP 0000262e: JUMP 0000262f: JUMPDEST 00002630: PUSH1 0x00 00002632: DUP1 00002633: PUSH1 0x06 00002635: SLOAD 00002636: DUP4 00002637: LT 00002638: ISZERO 00002639: ISZERO 0000263a: PUSH2 0x2642 0000263d: JUMPI 0000263e: PUSH1 0x00 00002640: DUP1 00002641: REVERT 00002642: JUMPDEST 00002643: PUSH1 0x11 00002645: PUSH1 0x00 00002647: DUP5 00002648: DUP2 00002649: MSTORE 0000264a: PUSH1 0x20 0000264c: ADD 0000264d: SWAP1 0000264e: DUP2 0000264f: MSTORE 00002650: PUSH1 0x20 00002652: ADD 00002653: PUSH1 0x00 00002655: KECCAK256 00002656: SWAP2 00002657: POP 00002658: DUP2 00002659: PUSH1 0x00 0000265b: ADD 0000265c: PUSH1 0x00 0000265e: SWAP1 0000265f: SLOAD 00002660: SWAP1 00002661: PUSH2 0x0100 00002664: EXP 00002665: SWAP1 00002666: DIV 00002667: PUSH1 0xff 00002669: AND 0000266a: ISZERO 0000266b: ISZERO 0000266c: PUSH2 0x2674 0000266f: JUMPI 00002670: PUSH1 0x00 00002672: DUP1 00002673: REVERT 00002674: JUMPDEST 00002675: DUP2 00002676: PUSH1 0x03 00002678: ADD 00002679: SLOAD 0000267a: CALLVALUE 0000267b: LT 0000267c: ISZERO 0000267d: ISZERO 0000267e: ISZERO 0000267f: PUSH2 0x2687 00002682: JUMPI 00002683: PUSH1 0x00 00002685: DUP1 00002686: REVERT 00002687: JUMPDEST 00002688: PUSH1 0x0a 0000268a: PUSH1 0x00 0000268c: DUP5 0000268d: DUP2 0000268e: MSTORE 0000268f: PUSH1 0x20 00002691: ADD 00002692: SWAP1 00002693: DUP2 00002694: MSTORE 00002695: PUSH1 0x20 00002697: ADD 00002698: PUSH1 0x00 0000269a: KECCAK256 0000269b: PUSH1 0x00 0000269d: SWAP1 0000269e: SLOAD 0000269f: SWAP1 000026a0: PUSH2 0x0100 000026a3: EXP 000026a4: SWAP1 000026a5: DIV 000026a6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000026bb: AND 000026bc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000026d1: AND 000026d2: DUP3 000026d3: PUSH1 0x02 000026d5: ADD 000026d6: PUSH1 0x00 000026d8: SWAP1 000026d9: SLOAD 000026da: SWAP1 000026db: PUSH2 0x0100 000026de: EXP 000026df: SWAP1 000026e0: DIV 000026e1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000026f6: AND 000026f7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000270c: AND 0000270d: EQ 0000270e: ISZERO 0000270f: ISZERO 00002710: PUSH2 0x2718 00002713: JUMPI 00002714: PUSH1 0x00 00002716: DUP1 00002717: REVERT 00002718: JUMPDEST 00002719: PUSH1 0x00 0000271b: DUP3 0000271c: PUSH1 0x04 0000271e: ADD 0000271f: PUSH1 0x00 00002721: SWAP1 00002722: SLOAD 00002723: SWAP1 00002724: PUSH2 0x0100 00002727: EXP 00002728: SWAP1 00002729: DIV 0000272a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000273f: AND 00002740: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002755: AND 00002756: EQ 00002757: ISZERO 00002758: ISZERO 00002759: PUSH2 0x27bb 0000275c: JUMPI 0000275d: CALLER 0000275e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002773: AND 00002774: DUP3 00002775: PUSH1 0x04 00002777: ADD 00002778: PUSH1 0x00 0000277a: SWAP1 0000277b: SLOAD 0000277c: SWAP1 0000277d: PUSH2 0x0100 00002780: EXP 00002781: SWAP1 00002782: DIV 00002783: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002798: AND 00002799: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000027ae: AND 000027af: EQ 000027b0: ISZERO 000027b1: ISZERO 000027b2: PUSH2 0x27ba 000027b5: JUMPI 000027b6: PUSH1 0x00 000027b8: DUP1 000027b9: REVERT 000027ba: JUMPDEST 000027bb: JUMPDEST 000027bc: DUP2 000027bd: PUSH1 0x02 000027bf: ADD 000027c0: PUSH1 0x00 000027c2: SWAP1 000027c3: SLOAD 000027c4: SWAP1 000027c5: PUSH2 0x0100 000027c8: EXP 000027c9: SWAP1 000027ca: DIV 000027cb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000027e0: AND 000027e1: SWAP1 000027e2: POP 000027e3: CALLER 000027e4: PUSH1 0x0a 000027e6: PUSH1 0x00 000027e8: DUP6 000027e9: DUP2 000027ea: MSTORE 000027eb: PUSH1 0x20 000027ed: ADD 000027ee: SWAP1 000027ef: DUP2 000027f0: MSTORE 000027f1: PUSH1 0x20 000027f3: ADD 000027f4: PUSH1 0x00 000027f6: KECCAK256 000027f7: PUSH1 0x00 000027f9: PUSH2 0x0100 000027fc: EXP 000027fd: DUP2 000027fe: SLOAD 000027ff: DUP2 00002800: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002815: MUL 00002816: NOT 00002817: AND 00002818: SWAP1 00002819: DUP4 0000281a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000282f: AND 00002830: MUL 00002831: OR 00002832: SWAP1 00002833: SSTORE 00002834: POP 00002835: PUSH1 0x0d 00002837: PUSH1 0x00 00002839: DUP3 0000283a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000284f: AND 00002850: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002865: AND 00002866: DUP2 00002867: MSTORE 00002868: PUSH1 0x20 0000286a: ADD 0000286b: SWAP1 0000286c: DUP2 0000286d: MSTORE 0000286e: PUSH1 0x20 00002870: ADD 00002871: PUSH1 0x00 00002873: KECCAK256 00002874: PUSH1 0x00 00002876: DUP2 00002877: SLOAD 00002878: DUP1 00002879: SWAP3 0000287a: SWAP2 0000287b: SWAP1 0000287c: PUSH1 0x01 0000287e: SWAP1 0000287f: SUB 00002880: SWAP2 00002881: SWAP1 00002882: POP 00002883: SSTORE 00002884: POP 00002885: PUSH1 0x0d 00002887: PUSH1 0x00 00002889: CALLER 0000288a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000289f: AND 000028a0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000028b5: AND 000028b6: DUP2 000028b7: MSTORE 000028b8: PUSH1 0x20 000028ba: ADD 000028bb: SWAP1 000028bc: DUP2 000028bd: MSTORE 000028be: PUSH1 0x20 000028c0: ADD 000028c1: PUSH1 0x00 000028c3: KECCAK256 000028c4: PUSH1 0x00 000028c6: DUP2 000028c7: SLOAD 000028c8: DUP1 000028c9: SWAP3 000028ca: SWAP2 000028cb: SWAP1 000028cc: PUSH1 0x01 000028ce: ADD 000028cf: SWAP2 000028d0: SWAP1 000028d1: POP 000028d2: SSTORE 000028d3: POP 000028d4: CALLER 000028d5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000028ea: AND 000028eb: DUP2 000028ec: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002901: AND 00002902: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef 00002923: PUSH1 0x01 00002925: PUSH1 0x40 00002927: MLOAD 00002928: DUP1 00002929: DUP3 0000292a: DUP2 0000292b: MSTORE 0000292c: PUSH1 0x20 0000292e: ADD 0000292f: SWAP2 00002930: POP 00002931: POP 00002932: PUSH1 0x40 00002934: MLOAD 00002935: DUP1 00002936: SWAP2 00002937: SUB 00002938: SWAP1 00002939: LOG3 0000293a: DUP3 0000293b: PUSH32 0x7d5dcd38c1855f2d3253f06fbd995a7b03b1bd0d20277c21ffcb093862ccb0df 0000295c: PUSH1 0x40 0000295e: MLOAD 0000295f: PUSH1 0x40 00002961: MLOAD 00002962: DUP1 00002963: SWAP2 00002964: SUB 00002965: SWAP1 00002966: LOG2 00002967: CALLVALUE 00002968: PUSH1 0x12 0000296a: PUSH1 0x00 0000296c: DUP4 0000296d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002982: AND 00002983: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002998: AND 00002999: DUP2 0000299a: MSTORE 0000299b: PUSH1 0x20 0000299d: ADD 0000299e: SWAP1 0000299f: DUP2 000029a0: MSTORE 000029a1: PUSH1 0x20 000029a3: ADD 000029a4: PUSH1 0x00 000029a6: KECCAK256 000029a7: PUSH1 0x00 000029a9: DUP3 000029aa: DUP3 000029ab: SLOAD 000029ac: ADD 000029ad: SWAP3 000029ae: POP 000029af: POP 000029b0: DUP2 000029b1: SWAP1 000029b2: SSTORE 000029b3: POP 000029b4: CALLER 000029b5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000029ca: AND 000029cb: DUP2 000029cc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000029e1: AND 000029e2: DUP5 000029e3: PUSH32 0x6bd7e7dd1046023e899374de62f095782f09a5ad4633e535375a11724bafed74 00002a04: CALLVALUE 00002a05: PUSH1 0x40 00002a07: MLOAD 00002a08: DUP1 00002a09: DUP3 00002a0a: DUP2 00002a0b: MSTORE 00002a0c: PUSH1 0x20 00002a0e: ADD 00002a0f: SWAP2 00002a10: POP 00002a11: POP 00002a12: PUSH1 0x40 00002a14: MLOAD 00002a15: DUP1 00002a16: SWAP2 00002a17: SUB 00002a18: SWAP1 00002a19: LOG4 00002a1a: POP 00002a1b: POP 00002a1c: POP 00002a1d: JUMP 00002a1e: JUMPDEST 00002a1f: CALLER 00002a20: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002a35: AND 00002a36: PUSH1 0x0a 00002a38: PUSH1 0x00 00002a3a: DUP5 00002a3b: DUP2 00002a3c: MSTORE 00002a3d: PUSH1 0x20 00002a3f: ADD 00002a40: SWAP1 00002a41: DUP2 00002a42: MSTORE 00002a43: PUSH1 0x20 00002a45: ADD 00002a46: PUSH1 0x00 00002a48: KECCAK256 00002a49: PUSH1 0x00 00002a4b: SWAP1 00002a4c: SLOAD 00002a4d: SWAP1 00002a4e: PUSH2 0x0100 00002a51: EXP 00002a52: SWAP1 00002a53: DIV 00002a54: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002a69: AND 00002a6a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002a7f: AND 00002a80: EQ 00002a81: ISZERO 00002a82: ISZERO 00002a83: PUSH2 0x2a8b 00002a86: JUMPI 00002a87: PUSH1 0x00 00002a89: DUP1 00002a8a: REVERT 00002a8b: JUMPDEST 00002a8c: PUSH1 0x06 00002a8e: SLOAD 00002a8f: DUP3 00002a90: LT 00002a91: ISZERO 00002a92: ISZERO 00002a93: PUSH2 0x2a9b 00002a96: JUMPI 00002a97: PUSH1 0x00 00002a99: DUP1 00002a9a: REVERT 00002a9b: JUMPDEST 00002a9c: PUSH1 0xa0 00002a9e: PUSH1 0x40 00002aa0: MLOAD 00002aa1: SWAP1 00002aa2: DUP2 00002aa3: ADD 00002aa4: PUSH1 0x40 00002aa6: MSTORE 00002aa7: DUP1 00002aa8: PUSH1 0x01 00002aaa: ISZERO 00002aab: ISZERO 00002aac: DUP2 00002aad: MSTORE 00002aae: PUSH1 0x20 00002ab0: ADD 00002ab1: DUP4 00002ab2: DUP2 00002ab3: MSTORE 00002ab4: PUSH1 0x20 00002ab6: ADD 00002ab7: CALLER 00002ab8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002acd: AND 00002ace: DUP2 00002acf: MSTORE 00002ad0: PUSH1 0x20 00002ad2: ADD 00002ad3: DUP3 00002ad4: DUP2 00002ad5: MSTORE 00002ad6: PUSH1 0x20 00002ad8: ADD 00002ad9: PUSH1 0x00 00002adb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002af0: AND 00002af1: DUP2 00002af2: MSTORE 00002af3: POP 00002af4: PUSH1 0x11 00002af6: PUSH1 0x00 00002af8: DUP5 00002af9: DUP2 00002afa: MSTORE 00002afb: PUSH1 0x20 00002afd: ADD 00002afe: SWAP1 00002aff: DUP2 00002b00: MSTORE 00002b01: PUSH1 0x20 00002b03: ADD 00002b04: PUSH1 0x00 00002b06: KECCAK256 00002b07: PUSH1 0x00 00002b09: DUP3 00002b0a: ADD 00002b0b: MLOAD 00002b0c: DUP2 00002b0d: PUSH1 0x00 00002b0f: ADD 00002b10: PUSH1 0x00 00002b12: PUSH2 0x0100 00002b15: EXP 00002b16: DUP2 00002b17: SLOAD 00002b18: DUP2 00002b19: PUSH1 0xff 00002b1b: MUL 00002b1c: NOT 00002b1d: AND 00002b1e: SWAP1 00002b1f: DUP4 00002b20: ISZERO 00002b21: ISZERO 00002b22: MUL 00002b23: OR 00002b24: SWAP1 00002b25: SSTORE 00002b26: POP 00002b27: PUSH1 0x20 00002b29: DUP3 00002b2a: ADD 00002b2b: MLOAD 00002b2c: DUP2 00002b2d: PUSH1 0x01 00002b2f: ADD 00002b30: SSTORE 00002b31: PUSH1 0x40 00002b33: DUP3 00002b34: ADD 00002b35: MLOAD 00002b36: DUP2 00002b37: PUSH1 0x02 00002b39: ADD 00002b3a: PUSH1 0x00 00002b3c: PUSH2 0x0100 00002b3f: EXP 00002b40: DUP2 00002b41: SLOAD 00002b42: DUP2 00002b43: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002b58: MUL 00002b59: NOT 00002b5a: AND 00002b5b: SWAP1 00002b5c: DUP4 00002b5d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002b72: AND 00002b73: MUL 00002b74: OR 00002b75: SWAP1 00002b76: SSTORE 00002b77: POP 00002b78: PUSH1 0x60 00002b7a: DUP3 00002b7b: ADD 00002b7c: MLOAD 00002b7d: DUP2 00002b7e: PUSH1 0x03 00002b80: ADD 00002b81: SSTORE 00002b82: PUSH1 0x80 00002b84: DUP3 00002b85: ADD 00002b86: MLOAD 00002b87: DUP2 00002b88: PUSH1 0x04 00002b8a: ADD 00002b8b: PUSH1 0x00 00002b8d: PUSH2 0x0100 00002b90: EXP 00002b91: DUP2 00002b92: SLOAD 00002b93: DUP2 00002b94: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002ba9: MUL 00002baa: NOT 00002bab: AND 00002bac: SWAP1 00002bad: DUP4 00002bae: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002bc3: AND 00002bc4: MUL 00002bc5: OR 00002bc6: SWAP1 00002bc7: SSTORE 00002bc8: POP 00002bc9: SWAP1 00002bca: POP 00002bcb: POP 00002bcc: PUSH1 0x00 00002bce: DUP3 00002bcf: PUSH32 0x76eaef99642f3e716e9cfa6e3047136d4087a9fc18673cb754c35f522fa6f61f 00002bf0: DUP4 00002bf1: PUSH1 0x40 00002bf3: MLOAD 00002bf4: DUP1 00002bf5: DUP3 00002bf6: DUP2 00002bf7: MSTORE 00002bf8: PUSH1 0x20 00002bfa: ADD 00002bfb: SWAP2 00002bfc: POP 00002bfd: POP 00002bfe: PUSH1 0x40 00002c00: MLOAD 00002c01: DUP1 00002c02: SWAP2 00002c03: SUB 00002c04: SWAP1 00002c05: LOG3 00002c06: POP 00002c07: POP 00002c08: JUMP 00002c09: JUMPDEST 00002c0a: PUSH1 0x0c 00002c0c: PUSH1 0x20 00002c0e: MSTORE 00002c0f: DUP1 00002c10: PUSH1 0x00 00002c12: MSTORE 00002c13: PUSH1 0x40 00002c15: PUSH1 0x00 00002c17: KECCAK256 00002c18: PUSH1 0x00 00002c1a: SWAP2 00002c1b: POP 00002c1c: SWAP1 00002c1d: POP 00002c1e: SLOAD 00002c1f: DUP2 00002c20: JUMP 00002c21: JUMPDEST 00002c22: PUSH1 0x08 00002c24: SLOAD 00002c25: DUP2 00002c26: JUMP 00002c27: JUMPDEST 00002c28: PUSH1 0x01 00002c2a: PUSH1 0x00 00002c2c: SWAP1 00002c2d: SLOAD 00002c2e: SWAP1 00002c2f: PUSH2 0x0100 00002c32: EXP 00002c33: SWAP1 00002c34: DIV 00002c35: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002c4a: AND 00002c4b: DUP1 00002c4c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002c61: AND 00002c62: CALLER 00002c63: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002c78: AND 00002c79: EQ 00002c7a: ISZERO 00002c7b: ISZERO 00002c7c: PUSH2 0x2c84 00002c7f: JUMPI 00002c80: PUSH1 0x00 00002c82: DUP1 00002c83: REVERT 00002c84: JUMPDEST 00002c85: PUSH1 0x01 00002c87: PUSH1 0x00 00002c89: SWAP1 00002c8a: SLOAD 00002c8b: SWAP1 00002c8c: PUSH2 0x0100 00002c8f: EXP 00002c90: SWAP1 00002c91: DIV 00002c92: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002ca7: AND 00002ca8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002cbd: AND 00002cbe: CALLER 00002cbf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002cd4: AND 00002cd5: EQ 00002cd6: ISZERO 00002cd7: ISZERO 00002cd8: PUSH2 0x2ce0 00002cdb: JUMPI 00002cdc: PUSH1 0x00 00002cde: DUP1 00002cdf: REVERT 00002ce0: JUMPDEST 00002ce1: PUSH1 0x01 00002ce3: PUSH1 0x07 00002ce5: PUSH1 0x15 00002ce7: PUSH2 0x0100 00002cea: EXP 00002ceb: DUP2 00002cec: SLOAD 00002ced: DUP2 00002cee: PUSH1 0xff 00002cf0: MUL 00002cf1: NOT 00002cf2: AND 00002cf3: SWAP1 00002cf4: DUP4 00002cf5: ISZERO 00002cf6: ISZERO 00002cf7: MUL 00002cf8: OR 00002cf9: SWAP1 00002cfa: SSTORE 00002cfb: POP 00002cfc: POP 00002cfd: JUMP 00002cfe: JUMPDEST 00002cff: PUSH1 0x12 00002d01: PUSH1 0x20 00002d03: MSTORE 00002d04: DUP1 00002d05: PUSH1 0x00 00002d07: MSTORE 00002d08: PUSH1 0x40 00002d0a: PUSH1 0x00 00002d0c: KECCAK256 00002d0d: PUSH1 0x00 00002d0f: SWAP2 00002d10: POP 00002d11: SWAP1 00002d12: POP 00002d13: SLOAD 00002d14: DUP2 00002d15: JUMP 00002d16: JUMPDEST 00002d17: PUSH1 0x0f 00002d19: PUSH1 0x20 00002d1b: MSTORE 00002d1c: DUP2 00002d1d: PUSH1 0x00 00002d1f: MSTORE 00002d20: PUSH1 0x40 00002d22: PUSH1 0x00 00002d24: KECCAK256 00002d25: DUP2 00002d26: PUSH1 0x06 00002d28: DUP2 00002d29: LT 00002d2a: ISZERO 00002d2b: ISZERO 00002d2c: PUSH2 0x2d31 00002d2f: JUMPI 00002d30: INVALID 00002d31: JUMPDEST 00002d32: ADD 00002d33: PUSH1 0x00 00002d35: SWAP2 00002d36: POP 00002d37: SWAP2 00002d38: POP 00002d39: POP 00002d3a: DUP1 00002d3b: SLOAD 00002d3c: PUSH1 0x01 00002d3e: DUP2 00002d3f: PUSH1 0x01 00002d41: AND 00002d42: ISZERO 00002d43: PUSH2 0x0100 00002d46: MUL 00002d47: SUB 00002d48: AND 00002d49: PUSH1 0x02 00002d4b: SWAP1 00002d4c: DIV 00002d4d: DUP1 00002d4e: PUSH1 0x1f 00002d50: ADD 00002d51: PUSH1 0x20 00002d53: DUP1 00002d54: SWAP2 00002d55: DIV 00002d56: MUL 00002d57: PUSH1 0x20 00002d59: ADD 00002d5a: PUSH1 0x40 00002d5c: MLOAD 00002d5d: SWAP1 00002d5e: DUP2 00002d5f: ADD 00002d60: PUSH1 0x40 00002d62: MSTORE 00002d63: DUP1 00002d64: SWAP3 00002d65: SWAP2 00002d66: SWAP1 00002d67: DUP2 00002d68: DUP2 00002d69: MSTORE 00002d6a: PUSH1 0x20 00002d6c: ADD 00002d6d: DUP3 00002d6e: DUP1 00002d6f: SLOAD 00002d70: PUSH1 0x01 00002d72: DUP2 00002d73: PUSH1 0x01 00002d75: AND 00002d76: ISZERO 00002d77: PUSH2 0x0100 00002d7a: MUL 00002d7b: SUB 00002d7c: AND 00002d7d: PUSH1 0x02 00002d7f: SWAP1 00002d80: DIV 00002d81: DUP1 00002d82: ISZERO 00002d83: PUSH2 0x2dcd 00002d86: JUMPI 00002d87: DUP1 00002d88: PUSH1 0x1f 00002d8a: LT 00002d8b: PUSH2 0x2da2 00002d8e: JUMPI 00002d8f: PUSH2 0x0100 00002d92: DUP1 00002d93: DUP4 00002d94: SLOAD 00002d95: DIV 00002d96: MUL 00002d97: DUP4 00002d98: MSTORE 00002d99: SWAP2 00002d9a: PUSH1 0x20 00002d9c: ADD 00002d9d: SWAP2 00002d9e: PUSH2 0x2dcd 00002da1: JUMP 00002da2: JUMPDEST 00002da3: DUP3 00002da4: ADD 00002da5: SWAP2 00002da6: SWAP1 00002da7: PUSH1 0x00 00002da9: MSTORE 00002daa: PUSH1 0x20 00002dac: PUSH1 0x00 00002dae: KECCAK256 00002daf: SWAP1 00002db0: JUMPDEST 00002db1: DUP2 00002db2: SLOAD 00002db3: DUP2 00002db4: MSTORE 00002db5: SWAP1 00002db6: PUSH1 0x01 00002db8: ADD 00002db9: SWAP1 00002dba: PUSH1 0x20 00002dbc: ADD 00002dbd: DUP1 00002dbe: DUP4 00002dbf: GT 00002dc0: PUSH2 0x2db0 00002dc3: JUMPI 00002dc4: DUP3 00002dc5: SWAP1 00002dc6: SUB 00002dc7: PUSH1 0x1f 00002dc9: AND 00002dca: DUP3 00002dcb: ADD 00002dcc: SWAP2 00002dcd: JUMPDEST 00002dce: POP 00002dcf: POP 00002dd0: POP 00002dd1: POP 00002dd2: POP 00002dd3: DUP2 00002dd4: JUMP 00002dd5: JUMPDEST 00002dd6: PUSH1 0x20 00002dd8: PUSH1 0x40 00002dda: MLOAD 00002ddb: SWAP1 00002ddc: DUP2 00002ddd: ADD 00002dde: PUSH1 0x40 00002de0: MSTORE 00002de1: DUP1 00002de2: PUSH1 0x00 00002de4: DUP2 00002de5: MSTORE 00002de6: POP 00002de7: SWAP1 00002de8: JUMP 00002de9: JUMPDEST 00002dea: DUP3 00002deb: DUP1 00002dec: SLOAD 00002ded: PUSH1 0x01 00002def: DUP2 00002df0: PUSH1 0x01 00002df2: AND 00002df3: ISZERO 00002df4: PUSH2 0x0100 00002df7: MUL 00002df8: SUB 00002df9: AND 00002dfa: PUSH1 0x02 00002dfc: SWAP1 00002dfd: DIV 00002dfe: SWAP1 00002dff: PUSH1 0x00 00002e01: MSTORE 00002e02: PUSH1 0x20 00002e04: PUSH1 0x00 00002e06: KECCAK256 00002e07: SWAP1 00002e08: PUSH1 0x1f 00002e0a: ADD 00002e0b: PUSH1 0x20 00002e0d: SWAP1 00002e0e: DIV 00002e0f: DUP2 00002e10: ADD 00002e11: SWAP3 00002e12: DUP3 00002e13: PUSH1 0x1f 00002e15: LT 00002e16: PUSH2 0x2e2a 00002e19: JUMPI 00002e1a: DUP1 00002e1b: MLOAD 00002e1c: PUSH1 0xff 00002e1e: NOT 00002e1f: AND 00002e20: DUP4 00002e21: DUP1 00002e22: ADD 00002e23: OR 00002e24: DUP6 00002e25: SSTORE 00002e26: PUSH2 0x2e58 00002e29: JUMP 00002e2a: JUMPDEST 00002e2b: DUP3 00002e2c: DUP1 00002e2d: ADD 00002e2e: PUSH1 0x01 00002e30: ADD 00002e31: DUP6 00002e32: SSTORE 00002e33: DUP3 00002e34: ISZERO 00002e35: PUSH2 0x2e58 00002e38: JUMPI 00002e39: SWAP2 00002e3a: DUP3 00002e3b: ADD 00002e3c: JUMPDEST 00002e3d: DUP3 00002e3e: DUP2 00002e3f: GT 00002e40: ISZERO 00002e41: PUSH2 0x2e57 00002e44: JUMPI 00002e45: DUP3 00002e46: MLOAD 00002e47: DUP3 00002e48: SSTORE 00002e49: SWAP2 00002e4a: PUSH1 0x20 00002e4c: ADD 00002e4d: SWAP2 00002e4e: SWAP1 00002e4f: PUSH1 0x01 00002e51: ADD 00002e52: SWAP1 00002e53: PUSH2 0x2e3c 00002e56: JUMP 00002e57: JUMPDEST 00002e58: JUMPDEST 00002e59: POP 00002e5a: SWAP1 00002e5b: POP 00002e5c: PUSH2 0x2e65 00002e5f: SWAP2 00002e60: SWAP1 00002e61: PUSH2 0x2e95 00002e64: JUMP 00002e65: JUMPDEST 00002e66: POP 00002e67: SWAP1 00002e68: JUMP 00002e69: JUMPDEST 00002e6a: DUP2 00002e6b: SLOAD 00002e6c: DUP2 00002e6d: DUP4 00002e6e: SSTORE 00002e6f: DUP2 00002e70: DUP2 00002e71: ISZERO 00002e72: GT 00002e73: PUSH2 0x2e90 00002e76: JUMPI 00002e77: DUP2 00002e78: DUP4 00002e79: PUSH1 0x00 00002e7b: MSTORE 00002e7c: PUSH1 0x20 00002e7e: PUSH1 0x00 00002e80: KECCAK256 00002e81: SWAP2 00002e82: DUP3 00002e83: ADD 00002e84: SWAP2 00002e85: ADD 00002e86: PUSH2 0x2e8f 00002e89: SWAP2 00002e8a: SWAP1 00002e8b: PUSH2 0x2e95 00002e8e: JUMP 00002e8f: JUMPDEST 00002e90: JUMPDEST 00002e91: POP 00002e92: POP 00002e93: POP 00002e94: JUMP 00002e95: JUMPDEST 00002e96: PUSH2 0x2eb7 00002e99: SWAP2 00002e9a: SWAP1 00002e9b: JUMPDEST 00002e9c: DUP1 00002e9d: DUP3 00002e9e: GT 00002e9f: ISZERO 00002ea0: PUSH2 0x2eb3 00002ea3: JUMPI 00002ea4: PUSH1 0x00 00002ea6: DUP2 00002ea7: PUSH1 0x00 00002ea9: SWAP1 00002eaa: SSTORE 00002eab: POP 00002eac: PUSH1 0x01 00002eae: ADD 00002eaf: PUSH2 0x2e9b 00002eb2: JUMP 00002eb3: JUMPDEST 00002eb4: POP 00002eb5: SWAP1 00002eb6: JUMP 00002eb7: JUMPDEST 00002eb8: SWAP1 00002eb9: JUMP 00002eba: STOP 00002ebb: LOG1 00002ebc: PUSH6 0x627a7a723058 00002ec3: KECCAK256 00002ec4: PUSH5 0xd7be1bcfd7 00002eca: UNKNOWN(0x4D) 00002ecb: UNKNOWN(0x23) 00002ecc: SWAP2 00002ecd: UNKNOWN(0xC2) 00002ece: UNKNOWN(0xDA) 00002ecf: RETURNDATACOPY 00002ed0: UNKNOWN(0xA9) 00002ed1: PUSH7 0x62a2ef6143b561 00002ed9: PUSH22
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0x152fa764ae990d7b597c891709705cbc8bcb0763a44925c8e55f09d16dabbf18
call_targets:
0x9508008227b6b3391959334604677d60169ef540
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x152fa764ae990d7b597c891709705cbc8bcb0763a44925c8e55f09d16dabbf18",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x9508008227b6b3391959334604677d60169ef540"
],
"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": "0xffffffff",
"selector": "0xffffffff",
"calldata_variants": [
"0xffffffff",
"0xffffffff0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x06fdde03",
"selector": "0x06fdde03",
"calldata_variants": [
"0x06fdde03",
"0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18160ddd",
"selector": "0x18160ddd",
"calldata_variants": [
"0x18160ddd",
"0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x1fd9f187",
"selector": "0x1fd9f187",
"calldata_variants": [
"0x1fd9f187",
"0x1fd9f1870000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x210fe93b",
"selector": "0x210fe93b",
"calldata_variants": [
"0x210fe93b",
"0x210fe93b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x313ce567",
"selector": "0x313ce567",
"calldata_variants": [
"0x313ce567",
"0x313ce5670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3ccfd60b",
"selector": "0x3ccfd60b",
"calldata_variants": [
"0x3ccfd60b",
"0x3ccfd60b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3eaaf86b",
"selector": "0x3eaaf86b",
"calldata_variants": [
"0x3eaaf86b",
"0x3eaaf86b0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 4458,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 8182,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 8488,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 4,
"guards_detected": [
{
"pc": 4577,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 7042,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 7973,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 8802,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 9532,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 11362,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 11454,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"untrusted_call_count": 4
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0x152fa764ae990d7b597c891709705cbc8bcb0763a44925c8e55f09d16dabbf18
call_targets:
0x9508008227b6b3391959334604677d60169ef540
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x152fa764ae990d7b597c891709705cbc8bcb0763a44925c8e55f09d16dabbf18",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x9508008227b6b3391959334604677d60169ef540"
],
"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": "0xffffffff",
"selector": "0xffffffff",
"calldata_variants": [
"0xffffffff",
"0xffffffff0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x06fdde03",
"selector": "0x06fdde03",
"calldata_variants": [
"0x06fdde03",
"0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x18160ddd",
"selector": "0x18160ddd",
"calldata_variants": [
"0x18160ddd",
"0x18160ddd0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x1fd9f187",
"selector": "0x1fd9f187",
"calldata_variants": [
"0x1fd9f187",
"0x1fd9f1870000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x210fe93b",
"selector": "0x210fe93b",
"calldata_variants": [
"0x210fe93b",
"0x210fe93b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x313ce567",
"selector": "0x313ce567",
"calldata_variants": [
"0x313ce567",
"0x313ce5670000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3ccfd60b",
"selector": "0x3ccfd60b",
"calldata_variants": [
"0x3ccfd60b",
"0x3ccfd60b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3eaaf86b",
"selector": "0x3eaaf86b",
"calldata_variants": [
"0x3eaaf86b",
"0x3eaaf86b0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 4458,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 8182,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 8488,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 4,
"guards_detected": [
{
"pc": 4577,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 7042,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 7973,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 8802,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 9532,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 11362,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 11454,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
]
}
|