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

Analysis Run

ca4ebaa4-3f93-4558-89c8-3273e5339f48

complete
Chain ID
1
Address
Block Number
Created
Thu, Jan 1, 2026 10:36 PM
Review Summary

What survived the funnel

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

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

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
31157 report.consolidate complete 1 / 1 3 months ago
76756 artifact.fetch complete 1 / 3 1 week ago
76757 tool.cast_disasm complete 1 / 3 1 week ago
76758 analysis.bundle complete 1 / 3 1 week ago
76759 capability.graph complete 1 / 3 1 week ago
76760 detector.run complete 1 / 3 1 week ago
76761 validation.fork complete 1 / 3 1 week ago

Artifact

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

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 1
Findings
0
No findings?
yes
Summary
No concrete, exploitable value-extraction path identified from the provided bytecode bundle.
View stderr
[codex:133900] OpenAI Codex v0.77.0 (research preview)
[codex:133900] --------
[codex:133900] workdir: /tmp/codex-multi-z6_afl3k
[codex:133900] model: gpt-5.2-codex
[codex:133900] provider: openai
[codex:133900] approval: never
[codex:133900] sandbox: read-only
[codex:133900] reasoning effort: xhigh
[codex:133900] reasoning summaries: auto
[codex:133900] session id: 019b7ba6-f1d7-7c91-bf2c-40d05c563c95
[codex:133900] --------
[codex:133900] user
[codex:133900] 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:133900] 
[codex:133900] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:133900] 
[codex:133900] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:133900] - Gas inefficiency, code quality, or best practices
[codex:133900] - Theoretical vulnerabilities without a clear extraction path
[codex:133900] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:133900] - Issues requiring social engineering or off-chain coordination
[codex:133900] 
[codex:133900] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:133900] - CALL/DELEGATECALL with controllable destination or calldata
[codex:133900] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:133900] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:133900] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:133900] - External calls before state updates (reentrancy)
[codex:133900] - SELFDESTRUCT with controllable beneficiary
[codex:133900] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:133900] 
[codex:133900] For each finding, you MUST explain:
[codex:133900] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:133900] 2. The concrete sequence of transactions to extract value
[codex:133900] 3. Why you believe this is exploitable (not just suspicious)
[codex:133900] 
[codex:133900] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:133900] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:133900] 
[codex:133900] Output MUST be valid JSON matching the provided schema.
[codex:133900] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:133900] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:133900] mcp startup: no servers
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Preparing to read BYTECODE_BUNDLE.txt**
[codex:133900] exec
[codex:133900] /bin/bash -lc ls in /tmp/codex-multi-z6_afl3k succeeded in 6ms:
[codex:133900] BYTECODE_BUNDLE.txt
[codex:133900] codex-output-schema.json
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Reading a file**
[codex:133900] exec
[codex:133900] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-z6_afl3k succeeded in 5ms:
[codex:133900] Runtime bytecode bundle for best-effort auditing.
[codex:133900] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:133900] 
[codex:133900] FILE: runtime_bytecode.hex
[codex:133900] 0x60606040523615610168576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630a19b14a1461017d5780630b9276661461024457806319774d43146102bd578063278b8c0e146103145780632e1a7d4d146103b3578063338b5dea146103d35780633fb9950a1461041257806346be96c314610467578063508493bc1461053957806354d03b5c146105a257806357786394146105c25780635e1d7ae4146105e857806365e17c9d146106085780636c86888b1461065a57806371ffcb1614610758578063731c2f811461078e5780638823a9c0146107b45780638f283970146107d45780639e281a981461080a578063bb5f462914610849578063c281309e146108a4578063d0e30db0146108ca578063e8f6bc2e146108d4578063f34129421461090a578063f7888aec1461095c578063f851a440146109c5578063fa2d9ff014610a17578063fb6e155f14610a8d575b341561017057fe5b61017b5b610000565b565b005b341561018557fe5b610242600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560ff169060200190919080356000191690602001909190803560001916906020019091908035906020019091905050610b5f565b005b341561024c57fe5b6102bb600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803590602001909190505061105f565b005b34156102c557fe5b6102fe600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035600019169060200190919050506112e6565b6040518082815260200191505060405180910390f35b341561031c57fe5b6103b1600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803590602001909190803560ff16906020019091908035600019169060200190919080356000191690602001909190505061130b565b005b34156103bb57fe5b6103d1600480803590602001909190505061171e565b005b34156103db57fe5b610410600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611a31565b005b341561041a57fe5b610465600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611d81565b005b341561046f57fe5b610523600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560ff169060200190919080356000191690602001909190803560001916906020019091905050611e60565b6040518082815260200191505060405180910390f35b341561054157fe5b61058c600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611fee565b6040518082815260200191505060405180910390f35b34156105aa57fe5b6105c06004808035906020019091905050612013565b005b34156105ca57fe5b6105d2612089565b6040518082815260200191505060405180910390f35b34156105f057fe5b610606600480803590602001909190505061208f565b005b341561061057fe5b610618612111565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561066257fe5b61073e600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560ff16906020019091908035600019169060200190919080356000191690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612137565b604051808215151515815260200191505060405180910390f35b341561076057fe5b61078c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506121fa565b005b341561079657fe5b61079e61229b565b6040518082815260200191505060405180910390f35b34156107bc57fe5b6107d260048080359060200190919050506122a1565b005b34156107dc57fe5b610808600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612323565b005b341561081257fe5b610847600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506123c4565b005b341561085157fe5b61088a600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560001916906020019091905050612769565b604051808215151515815260200191505060405180910390f35b34156108ac57fe5b6108b4612798565b6040518082815260200191505060405180910390f35b6108d261279e565b005b34156108dc57fe5b610908600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612976565b005b341561091257fe5b61091a612a17565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561096457fe5b6109af600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612a3d565b6040518082815260200191505060405180910390f35b34156109cd57fe5b6109d5612ac5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610a1f57fe5b610a4b600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612aeb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610a9557fe5b610b49600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560ff169060200190919080356000191690602001909190803560001916906020019091905050612b1e565b6040518082815260200191505060405180910390f35b60006002308d8d8d8d8d8d600060405160200152604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019750505050505050506020604051808303816000866161da5a03f11515610c7557fe5b5050604051805190509050600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff1680610de457508573ffffffffffffffffffffffffffffffffffffffff1660018260405180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040518091039020878787604051806000526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000866161da5a03f11515610dc357fe5b50506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b8015610df05750874311155b8015610e5d57508a610e5a600860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084600019166000191681526020019081526020016000205484612ee0565b11155b1515610e6857610000565b610e768c8c8c8c8a87612f0c565b610ed8600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083600019166000191681526020019081526020016000205483612ee0565b600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008360001916600019168152602001908152602001600020819055507f6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d8c838c8e868e02811515610f6557fe5b048a33604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001965050505050505060405180910390a15b505050505050505050505050565b6000600230888888888888600060405160200152604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019750505050505050506020604051808303816000866161da5a03f1151561117557fe5b50506040518051905090506001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff0219169083151502179055507f3f7f2eda73683c21a15f9435af1028c93185b5f1fa38270762dc32be606b3e8587878787878733604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200197505050505050505060405180910390a15b50505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b60006002308b8b8b8b8b8b600060405160200152604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019750505050505050506020604051808303816000866161da5a03f1151561142157fe5b5050604051805190509050600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff168061159057503373ffffffffffffffffffffffffffffffffffffffff1660018260405180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040518091039020868686604051806000526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000866161da5a03f1151561156f57fe5b50506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b151561159b57610000565b88600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008360001916600019168152602001908152602001600020819055507f1e0b760c386003e9cb9bcf4fcf3997886042859d9b6ed6320e804597fcdb28b08a8a8a8a8a8a338b8b8b604051808b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018460ff1660ff168152602001836000191660001916815260200182600019166000191681526020019a505050505050505050505060405180910390a15b50505050505050505050565b60008160066000600073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561179457610000565b61180560066000600073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613674565b60066000600073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff1614156118f5573390505b8073ffffffffffffffffffffffffffffffffffffffff168260405180905060006040518083038185876185025a03f192505050151561193357610000565b7ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb5676000338460066000600073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15b5050565b60008273ffffffffffffffffffffffffffffffffffffffff161415611a5557610000565b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1515611b3157fe5b60325a03f11515611b3e57fe5b505050604051805190501515611b5357610000565b611bd9600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612ee0565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7823383600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15b5050565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ddd57610000565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5050565b600060006002308d8d8d8d8d8d600060405160200152604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019750505050505050506020604051808303816000866161da5a03f11515611f7857fe5b5050604051805190509050600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082600019166000191681526020019081526020016000205491505b509a9950505050505050505050565b6006602052816000526040600020602052806000526040600020600091509150505481565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561206f57610000565b60035481111561207e57610000565b806003819055505b50565b60035481565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156120eb57610000565b6005548110806120fc575060045481115b1561210657610000565b806005819055505b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082600660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101580156121d65750826121d38e8e8e8e8e8e8e8e8e8e612b1e565b10155b15156121e557600090506121ea565b600190505b9c9b505050505050505050505050565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561225657610000565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60055481565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156122fd57610000565b60045481118061230e575060055481105b1561231857610000565b806004819055505b50565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561237f57610000565b80600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60008273ffffffffffffffffffffffffffffffffffffffff1614156123e857610000565b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561247157610000565b6124f7600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482613674565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b151561261f57fe5b60325a03f1151561262c57fe5b50505060405180519050151561264157610000565b7ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567823383600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15b5050565b60076020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60045481565b61280f60066000600073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205434612ee0565b60066000600073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d76000333460066000600073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15b565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156129d257610000565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b92915050565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006000600060006002308f8f8f8f8f8f600060405160200152604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019750505050505050506020604051808303816000866161da5a03f11515612c3a57fe5b5050604051805190509250600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000846000191660001916815260200190815260200160002060009054906101000a900460ff1680612da957508773ffffffffffffffffffffffffffffffffffffffff1660018460405180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040518091039020898989604051806000526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000866161da5a03f11515612d8857fe5b50506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b8015612db55750894311155b1515612dc45760009350612ecf565b612e268d600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000866000191660001916815260200190815260200160002054613674565b91508a612eaf600660008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548f61368e565b811515612eb857fe5b04905080821015612ecb57819350612ecf565b8093505b5050509a9950505050505050505050565b600060008284019050612f01848210158015612efc5750838210155b6136c3565b8091505b5092915050565b6000600060006000670de0b6b3a7640000612f298660035461368e565b811515612f3257fe5b049350670de0b6b3a7640000612f4a8660045461368e565b811515612f5357fe5b049250600091506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156130b057600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cbd0519876000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561305e57fe5b60325a03f1151561306b57fe5b50505060405180519050905060018114156130a257670de0b6b3a76400006130958660055461368e565b81151561309e57fe5b0491505b60028114156130af578291505b5b61313f600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461313a8786612ee0565b613674565b600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613257600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461325261324c8886612ee0565b87613674565b612ee0565b600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613391600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461338c6133868787612ee0565b85613674565b612ee0565b600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134cd600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a6134be8a8961368e565b8115156134c757fe5b04613674565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135e7600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548a6135d88a8961368e565b8115156135e157fe5b04612ee0565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50505050505050505050565b6000613682838311156136c3565b81830390505b92915050565b6000600082840290506136b860008514806136b357508385838115156136b057fe5b04145b6136c3565b8091505b5092915050565b8015156136cf57610000565b5b505600a165627a7a723058206e7a5e93b60f6ddaa2caa7cb5cb601022fa06959a3b5bc2f667b20353f8e97a30029
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Searching for dangerous opcodes**
[codex:133900] 
[codex:133900] I'm trying to find potential exploit paths by identifying critical opcodes like SELFDESTRUCT, DELEGATECALL, and CALL in the bytecode. Since the bytecode is large and hex-encoded with data mixed in, I'll look for opcode patterns like "ff" and "f4" carefully, possibly using shell commands to check for tools like `evm` or disassemblers available offline.
[codex:133900] exec
[codex:133900] /bin/bash -lc 'which evm' in /tmp/codex-multi-z6_afl3k exited 1 in 6ms:
[codex:133900] 
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing contract bytecode for vulnerabilities**
[codex:133900] 
[codex:133900] I'm exploring the contract's bytecode to identify function selectors, patterns like ownership checks, token transfers, and crucial opcodes such as selfdestruct or delegatecall. I’m considering writing a simple Python disassembler to parse opcodes and map functions to check for missing access controls or unprotected withdrawal functionality. This deep dive should help clarify if there’s a concrete exploit lurking in the contract.
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import binascii
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] # extract runtime_bytecode.hex line after prefix
[codex:133900] import re
[codex:133900] m=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata)
[codex:133900] if not m:
[codex:133900]     print('not found')
[codex:133900]     raise SystemExit
[codex:133900] hexstr=m.group(1)[2:]
[codex:133900] code=bytes.fromhex(hexstr)
[codex:133900] # opcode table
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 0x20:'SHA3',
[codex:133900] 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:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 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:133900] 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:133900] 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:133900] 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:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] # find offsets of certain opcodes
[codex:133900] interesting={0xf1:'CALL',0xf4:'DELEGATECALL',0xff:'SELFDESTRUCT'}
[codex:133900] idx=0
[codex:133900] hits=[]
[codex:133900] while idx<len(code):
[codex:133900]     op=code[idx]
[codex:133900]     name=opnames.get(op,hex(op))
[codex:133900]     if op in interesting:
[codex:133900]         hits.append((idx, name))
[codex:133900]     if 0x60<=op<=0x7f:
[codex:133900]         n=op-0x5f
[codex:133900]         idx+=1+n
[codex:133900]     else:
[codex:133900]         idx+=1
[codex:133900] print('hits', hits[:20], '... total', len(hits))
[codex:133900] print('delegatecall hits', [h for h in hits if h[1]=='DELEGATECALL'][:10])
[codex:133900] print('selfdestruct hits', [h for h in hits if h[1]=='SELFDESTRUCT'])
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 37ms:
[codex:133900] hits [(3181, 'CALL'), (3515, 'CALL'), (4461, 'CALL'), (5145, 'CALL'), (5479, 'CALL'), (6436, 'CALL'), (6966, 'CALL'), (8048, 'CALL'), (9764, 'CALL'), (11314, 'CALL'), (11648, 'CALL'), (12387, 'CALL')] ... total 12
[codex:133900] delegatecall hits []
[codex:133900] selfdestruct hits []
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing CALL instructions for vulnerabilities**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import binascii, re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] m=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata)
[codex:133900] hexstr=m.group(1)[2:]
[codex:133900] code=bytes.fromhex(hexstr)
[codex:133900] # op names
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 0x20:'SHA3',
[codex:133900] 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:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 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:133900] 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:133900] 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:133900] 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:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] # produce disassembly list with offsets
[codex:133900] ops=[]
[codex:133900] idx=0
[codex:133900] while idx < len(code):
[codex:133900]     op=code[idx]
[codex:133900]     name=opnames.get(op,hex(op))
[codex:133900]     start=idx
[codex:133900]     if 0x60 <= op <= 0x7f:
[codex:133900]         n=op-0x5f
[codex:133900]         data=code[idx+1:idx+1+n]
[codex:133900]         ops.append((start, name, data.hex()))
[codex:133900]         idx += 1+n
[codex:133900]     else:
[codex:133900]         ops.append((start, name, None))
[codex:133900]         idx += 1
[codex:133900] # find CALLs
[codex:133900] call_offsets=[o[0] for o in ops if o[1]=='CALL']
[codex:133900] print('CALL offsets', call_offsets)
[codex:133900] # build index from offset to op index
[codex:133900] idx_map={o[0]:i for i,o in enumerate(ops)}
[codex:133900] for off in call_offsets:
[codex:133900]     i=idx_map[off]
[codex:133900]     # show 15 ops before and 5 after
[codex:133900]     start=max(0, i-18)
[codex:133900]     end=min(len(ops), i+6)
[codex:133900]     print('\\n-- CALL at', off, '--')
[codex:133900]     for o in ops[start:end]:
[codex:133900]         if o[0]==off:
[codex:133900]             marker='>>'
[codex:133900]         else:
[codex:133900]             marker='  '
[codex:133900]         if o[2] is None:
[codex:133900]             print(f\"{marker}{o[0]:04x}: {o[1]}\")
[codex:133900]         else:
[codex:133900]             print(f\"{marker}{o[0]:04x}: {o[1]} {o[2]}\")
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 34ms:
[codex:133900] CALL offsets [3181, 3515, 4461, 5145, 5479, 6436, 6966, 8048, 9764, 11314, 11648, 12387]
[codex:133900] 
[codex:133900] -- CALL at 3181 --
[codex:133900]   0c56: POP
[codex:133900]   0c57: POP
[codex:133900]   0c58: POP
[codex:133900]   0c59: POP
[codex:133900]   0c5a: POP
[codex:133900]   0c5b: POP
[codex:133900]   0c5c: PUSH1 20
[codex:133900]   0c5e: PUSH1 40
[codex:133900]   0c60: MLOAD
[codex:133900]   0c61: DUP1
[codex:133900]   0c62: DUP4
[codex:133900]   0c63: SUB
[codex:133900]   0c64: DUP2
[codex:133900]   0c65: PUSH1 00
[codex:133900]   0c67: DUP7
[codex:133900]   0c68: PUSH2 61da
[codex:133900]   0c6b: GAS
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing external contract calls and potential vulnerabilities**
[codex:133900] 
[codex:133900] I’m examining multiple CALL instructions that interact with token contracts and the ecrecover precompile, trying to identify if there’s any risky Ether transfer via CALL with value that could allow reentrancy. I want to decode the call parameters around suspected transfer points, map function offsets, and understand signature verification and nonce handling to spot any bugs or exploits. It’s a detailed low-level inspection, so I’m considering scripting to assist in parsing jump destinations and opcode sequences.
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] m=re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata)
[codex:133900] code=bytes.fromhex(m.group(1)[2:])
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 0x20:'SHA3',
[codex:133900] 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:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 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:133900] 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:133900] 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:133900] 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:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] # disassemble region around offset
[codex:133900] start=0x1860
[codex:133900] end=0x1950
[codex:133900] idx=start
[codex:133900] while idx<end:
[codex:133900]     op=code[idx]
[codex:133900]     name=opnames.get(op,hex(op))
[codex:133900]     if 0x60<=op<=0x7f:
[codex:133900]         n=op-0x5f
[codex:133900]         data=code[idx+1:idx+1+n]
[codex:133900]         print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900]         idx+=1+n
[codex:133900]     else:
[codex:133900]         print(f\"{idx:04x}: {name}\")
[codex:133900]         idx+=1
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 29ms:
[codex:133900] 1860: MSTORE
[codex:133900] 1861: PUSH1 20
[codex:133900] 1863: ADD
[codex:133900] 1864: SWAP1
[codex:133900] 1865: DUP2
[codex:133900] 1866: MSTORE
[codex:133900] 1867: PUSH1 20
[codex:133900] 1869: ADD
[codex:133900] 186a: PUSH1 00
[codex:133900] 186c: SHA3
[codex:133900] 186d: DUP2
[codex:133900] 186e: SWAP1
[codex:133900] 186f: SSTORE
[codex:133900] 1870: POP
[codex:133900] 1871: PUSH1 09
[codex:133900] 1873: PUSH1 00
[codex:133900] 1875: CALLER
[codex:133900] 1876: PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:133900] 188b: AND
[codex:133900] 188c: PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing complex EVM function and contract behavior**
[codex:133900] 
[codex:133900] This is a deep dive into EVM bytecode exploring a function likely handling ETH withdrawal, mapping storage access, and a call to an external address. I'm tracing function selectors and inspecting stack operations to identify calls and parameters, suspecting the contract resembles EtherDelta with deposit, withdraw, and token trade functions. I'm cross-referencing known selectors and contract patterns to understand potential vulnerabilities and contract identity. It’s a lot to unpack, so I’m considering programmatic simulation to better analyze call arguments and state changes.
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] try:
[codex:133900]     import sha3
[codex:133900]     k=sha3.keccak_256(b'depositToken(address,uint256)').hexdigest()
[codex:133900]     print(k[:8])
[codex:133900] except Exception as e:
[codex:133900]     print('err', e)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 19ms:
[codex:133900] err No module named 'sha3'
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing EtherDelta contract function signatures and vulnerabilities**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900] # disassemble around 0x1a31
[codex:133900] start=0x1a00
[codex:133900] end=0x1b80
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 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:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 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:133900] 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:133900] 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:133900] 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:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] idx=start
[codex:133900] while idx<end:
[codex:133900]     op=code[idx]
[codex:133900]     name=opnames.get(op,hex(op))
[codex:133900]     if 0x60<=op<=0x7f:
[codex:133900]         n=op-0x5f
[codex:133900]         data=code[idx+1:idx+1+n]
[codex:133900]         print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900]         idx+=1+n
[codex:133900]     else:
[codex:133900]         print(f\"{idx:04x}: {name}\")
[codex:133900]         idx+=1
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 28ms:
[codex:133900] 1a00: SELFDESTRUCT
[codex:133900] 1a01: SELFDESTRUCT
[codex:133900] 1a02: SELFDESTRUCT
[codex:133900] 1a03: SELFDESTRUCT
[codex:133900] 1a04: SELFDESTRUCT
[codex:133900] 1a05: SELFDESTRUCT
[codex:133900] 1a06: SELFDESTRUCT
[codex:133900] 1a07: SELFDESTRUCT
[codex:133900] 1a08: SELFDESTRUCT
[codex:133900] 1a09: SELFDESTRUCT
[codex:133900] 1a0a: SELFDESTRUCT
[codex:133900] 1a0b: SELFDESTRUCT
[codex:133900] 1a0c: SELFDESTRUCT
[codex:133900] 1a0d: AND
[codex:133900] 1a0e: DUP2
[codex:133900] 1a0f: MSTORE
[codex:133900] 1a10: PUSH1 20
[codex:133900] 1a12: ADD
[codex:133900] 1a13: DUP4
[codex:133900] 1a14: DUP2
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing depositToken function bytecode**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900] # disassemble around 0x23c4
[codex:133900] start=0x23a0
[codex:133900] end=0x26a0
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 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:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 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:133900] 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:133900] 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:133900] 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:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] idx=start
[codex:133900] while idx<end:
[codex:133900]     op=code[idx]
[codex:133900]     name=opnames.get(op,hex(op))
[codex:133900]     if 0x60<=op<=0x7f:
[codex:133900]         n=op-0x5f
[codex:133900]         data=code[idx+1:idx+1+n]
[codex:133900]         print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900]         idx+=1+n
[codex:133900]     else:
[codex:133900]         print(f\"{idx:04x}: {name}\")
[codex:133900]         idx+=1
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 27ms:
[codex:133900] 23a0: SELFDESTRUCT
[codex:133900] 23a1: MUL
[codex:133900] 23a2: NOT
[codex:133900] 23a3: AND
[codex:133900] 23a4: SWAP1
[codex:133900] 23a5: DUP4
[codex:133900] 23a6: PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:133900] 23bb: AND
[codex:133900] 23bc: MUL
[codex:133900] 23bd: OR
[codex:133900] 23be: SWAP1
[codex:133900] 23bf: SSTORE
[codex:133900] 23c0: POP
[codex:133900] 23c1: JUMPDEST
[codex:133900] 23c2: POP
[codex:133900] 23c3: JUMP
[codex:133900] 23c4: JUMPDEST
[codex:133900] 23c5: PUSH1 00
[codex:133900] 23c7: DUP3
[codex:133900] 23c8: PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing token withdrawal and signature validation**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] try:
[codex:133900]     from Crypto.Hash import keccak
[codex:133900]     k=keccak.new(digest_bits=256)
[codex:133900]     k.update(b'depositToken(address,uint256)')
[codex:133900]     print(k.hexdigest()[:8])
[codex:133900] except Exception as e:
[codex:133900]     print('err', e)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 39ms:
[codex:133900] 338b5dea
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Computing function selectors for matching**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900] 
[codex:133900] def selector(sig:str):
[codex:133900]     k=keccak.new(digest_bits=256)
[codex:133900]     k.update(sig.encode())
[codex:133900]     return k.hexdigest()[:8]
[codex:133900] 
[codex:133900] selectors=[
[codex:133900] '0a19b14a','0b927666','19774d43','278b8c0e','2e1a7d4d','338b5dea','3fb9950a','46be96c3','508493bc','54d03b5c','57786394','5e1d7ae4','65e17c9d','6c86888b','71ffcb16','731c2f81','8823a9c0','8f283970','9e281a98','bb5f4629','c281309e','d0e30db0','e8f6bc2e','f3412942','f7888aec','f851a440','fa2d9ff0','fb6e155f']
[codex:133900] 
[codex:133900] # known EtherDelta names
[codex:133900] sigs=[
[codex:133900] 'deposit()',
[codex:133900] 'withdraw(uint256)',
[codex:133900] 'depositToken(address,uint256)',
[codex:133900] 'withdrawToken(address,uint256)',
[codex:133900] 'balanceOf(address,address)',
[codex:133900] 'adminWithdraw(address,uint256)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'getBalance(address,address)',
[codex:133900] 'getFeeAccount()',
[codex:133900] 'feeAccount()',
[codex:133900] 'admin()',
[codex:133900] 'setAdmin(address)',
[codex:133900] 'setFeeAccount(address)',
[codex:133900] 'setAccountLevelsAddr(address)',
[codex:133900] 'setFeeMake(uint256)',
[codex:133900] 'setFeeTake(uint256)',
[codex:133900] 'setFeeRebate(uint256)',
[codex:133900] 'token(address,address)',
[codex:133900] 'getToken(address)',
[codex:133900] 'withdrawAdmin(uint256)',
[codex:133900] 'depositFor(address)',
[codex:133900] 'withdrawFor(address,uint256)',
[codex:133900] 'withdrawTokenFor(address,address,uint256)',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 
[codex:133900] ]
[codex:133900] 
[codex:133900] for sig in sigs:
[codex:133900]     sel=selector(sig)
[codex:133900]     if sel in selectors:
[codex:133900]         print(sig, sel)
[codex:133900] 
[codex:133900] # print selectors for few to identify
[codex:133900] print('depositToken selector', selector('depositToken(address,uint256)'))
[codex:133900] print('withdrawToken selector', selector('withdrawToken(address,uint256)'))
[codex:133900] print('trade selector', selector('trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)'))
[codex:133900] print('cancelOrder selector', selector('cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)'))
[codex:133900] print('order selector', selector('order(address,uint256,address,uint256,uint256,uint256)'))
[codex:133900] print('balanceOf selector', selector('balanceOf(address,address)'))
[codex:133900] print('availableVolume selector', selector('availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)'))
[codex:133900] print('amountFilled selector', selector('amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)'))
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 37ms:
[codex:133900] deposit() d0e30db0
[codex:133900] withdraw(uint256) 2e1a7d4d
[codex:133900] depositToken(address,uint256) 338b5dea
[codex:133900] withdrawToken(address,uint256) 9e281a98
[codex:133900] balanceOf(address,address) f7888aec
[codex:133900] order(address,uint256,address,uint256,uint256,uint256) 0b927666
[codex:133900] trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256) 0a19b14a
[codex:133900] cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32) 278b8c0e
[codex:133900] availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) fb6e155f
[codex:133900] amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) 46be96c3
[codex:133900] feeAccount() 65e17c9d
[codex:133900] admin() f851a440
[codex:133900] availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) fb6e155f
[codex:133900] amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) 46be96c3
[codex:133900] depositToken selector 338b5dea
[codex:133900] withdrawToken selector 9e281a98
[codex:133900] trade selector 0a19b14a
[codex:133900] cancelOrder selector 278b8c0e
[codex:133900] order selector 0b927666
[codex:133900] balanceOf selector f7888aec
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Mapping additional function selectors**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900] 
[codex:133900] def sel(sig):
[codex:133900]     k=keccak.new(digest_bits=256)
[codex:133900]     k.update(sig.encode())
[codex:133900]     return k.hexdigest()[:8]
[codex:133900] 
[codex:133900] cands=[
[codex:133900] 'setAdmin(address)',
[codex:133900] 'setFeeAccount(address)',
[codex:133900] 'setFeeTake(uint256)',
[codex:133900] 'setFeeMake(uint256)',
[codex:133900] 'setFeeRebate(uint256)',
[codex:133900] 'setAccountLevelsAddr(address)',
[codex:133900] 'accountLevelsAddr()',
[codex:133900] 'feeMake()',
[codex:133900] 'feeTake()',
[codex:133900] 'feeRebate()',
[codex:133900] 'token(address,address)',
[codex:133900] 'getBalance(address,address)',
[codex:133900] 'tokenFallback(address,uint256,bytes)',
[codex:133900] 'tokenTransfer(address,address,uint256)',
[codex:133900] 'owner()',
[codex:133900] 'getOrders(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'balanceOf(address,address)',
[codex:133900] 'cancelOrdersUpTo(uint256)',
[codex:133900] 'nonce(address)',
[codex:133900] 'adminWithdraw(address,uint256)',
[codex:133900] 'withdrawAdmin(address,uint256)',
[codex:133900] 'withdrawAdmin(uint256)',
[codex:133900] 'withdrawAdmin(address)',
[codex:133900] 'withdrawEther(uint256)',
[codex:133900] 'depositFor(address)',
[codex:133900] 'withdrawFor(address,uint256)',
[codex:133900] 'withdrawTokenFor(address,address,uint256)',
[codex:133900] 'changeOwner(address)',
[codex:133900] 'changeTokenAddress(address)',
[codex:133900] 'pause()',
[codex:133900] 'unpause()',
[codex:133900] 'getAccountLevel(address)',
[codex:133900] 'accountLevels(address)',
[codex:133900] 'getAccountLevelsAddr()',
[codex:133900] 'getFeeAccount()',
[codex:133900] 'getAdmin()',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] ]
[codex:133900] 
[codex:133900] selectors={
[codex:133900] '0a19b14a','0b927666','19774d43','278b8c0e','2e1a7d4d','338b5dea','3fb9950a','46be96c3','508493bc','54d03b5c','57786394','5e1d7ae4','65e17c9d','6c86888b','71ffcb16','731c2f81','8823a9c0','8f283970','9e281a98','bb5f4629','c281309e','d0e30db0','e8f6bc2e','f3412942','f7888aec','f851a440','fa2d9ff0','fb6e155f'
[codex:133900] }
[codex:133900] 
[codex:133900] for sig in cands:
[codex:133900]     s=sel(sig)
[codex:133900]     if s in selectors:
[codex:133900]         print(sig, s)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 47ms:
[codex:133900] accountLevelsAddr() f3412942
[codex:133900] feeMake() 57786394
[codex:133900] feeTake() c281309e
[codex:133900] feeRebate() 731c2f81
[codex:133900] cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32) 278b8c0e
[codex:133900] order(address,uint256,address,uint256,uint256,uint256) 0b927666
[codex:133900] availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) fb6e155f
[codex:133900] amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) 46be96c3
[codex:133900] balanceOf(address,address) f7888aec
[codex:133900] availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) fb6e155f
[codex:133900] amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) 46be96c3
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Identifying more selectors**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900] 
[codex:133900] def sel(sig):
[codex:133900]     k=keccak.new(digest_bits=256)
[codex:133900]     k.update(sig.encode())
[codex:133900]     return k.hexdigest()[:8]
[codex:133900] 
[codex:133900] selectors={
[codex:133900] '0a19b14a','0b927666','19774d43','278b8c0e','2e1a7d4d','338b5dea','3fb9950a','46be96c3','508493bc','54d03b5c','57786394','5e1d7ae4','65e17c9d','6c86888b','71ffcb16','731c2f81','8823a9c0','8f283970','9e281a98','bb5f4629','c281309e','d0e30db0','e8f6bc2e','f3412942','f7888aec','f851a440','fa2d9ff0','fb6e155f'
[codex:133900] }
[codex:133900] 
[codex:133900] cands=[
[codex:133900] 'setAdmin(address)',
[codex:133900] 'setFeeAccount(address)',
[codex:133900] 'setAccountLevelsAddr(address)',
[codex:133900] 'setFeeMake(uint256)',
[codex:133900] 'setFeeTake(uint256)',
[codex:133900] 'setFeeRebate(uint256)',
[codex:133900] 'getAdmin()',
[codex:133900] 'getFeeAccount()',
[codex:133900] 'adminWithdraw(address,uint256)',
[codex:133900] 'withdrawAdmin(address,uint256)',
[codex:133900] 'withdrawAdmin(uint256)',
[codex:133900] 'withdrawAdmin(address)',
[codex:133900] 'withdrawEther(uint256)',
[codex:133900] 'withdrawToken(address,uint256)',
[codex:133900] 'getBalance(address,address)',
[codex:133900] 'owner()',
[codex:133900] 'deleteOrder(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'changeAdmin(address)',
[codex:133900] 'changeOwner(address)',
[codex:133900] 'nonce(address)',
[codex:133900] 'orderInfo(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'cancelOrdersUpTo(uint256)',
[codex:133900] 'withdrawAdminTokens(address,uint256)',
[codex:133900] 'withdrawAdmin(address,address,uint256)',
[codex:133900] 'moveOrder(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'balanceOf(address)',
[codex:133900] 'getAccountLevel(address)',
[codex:133900] 'accountLevels(address)',
[codex:133900] 'setMinDeposit(uint256)',
[codex:133900] 'withdraw(uint256)',
[codex:133900] 'withdrawToken(address,uint256)',
[codex:133900] 'depositToken(address,uint256)',
[codex:133900] 'deposit()'
[codex:133900] ]
[codex:133900] 
[codex:133900] for sig in cands:
[codex:133900]     s=sel(sig)
[codex:133900]     if s in selectors:
[codex:133900]         print(sig, s)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 39ms:
[codex:133900] withdrawToken(address,uint256) 9e281a98
[codex:133900] changeAdmin(address) 8f283970
[codex:133900] withdraw(uint256) 2e1a7d4d
[codex:133900] withdrawToken(address,uint256) 9e281a98
[codex:133900] depositToken(address,uint256) 338b5dea
[codex:133900] deposit() d0e30db0
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Identifying function selectors**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900] 
[codex:133900] def sel(sig):
[codex:133900]     k=keccak.new(digest_bits=256)
[codex:133900]     k.update(sig.encode())
[codex:133900]     return k.hexdigest()[:8]
[codex:133900] 
[codex:133900] sigs=[
[codex:133900] 'setFeeAccount(address)',
[codex:133900] 'setAccountLevelsAddr(address)',
[codex:133900] 'setFeeMake(uint256)',
[codex:133900] 'setFeeTake(uint256)',
[codex:133900] 'setFeeRebate(uint256)',
[codex:133900] 'changeFeeAccount(address)',
[codex:133900] 'changeAccountLevelsAddr(address)',
[codex:133900] 'changeFeeMake(uint256)',
[codex:133900] 'changeFeeTake(uint256)',
[codex:133900] 'changeFeeRebate(uint256)',
[codex:133900] 'changeAccountLevels(address)',
[codex:133900] 'setAccountLevels(address)',
[codex:133900] 'setAccountLevels(address,uint256)',
[codex:133900] 'setAccountLevelsAddr(address)',
[codex:133900] 'accountLevels(address)',
[codex:133900] 'accountLevels(uint256)',
[codex:133900] 'adminWithdraw(address,uint256)',
[codex:133900] 'adminWithdraw(address,uint256,address)',
[codex:133900] 'adminWithdraw(uint256)',
[codex:133900] 'adminWithdraw(address)',
[codex:133900] 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orderFills(bytes32)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'nonce(address)',
[codex:133900] 'cancelOrdersUpTo(uint256)',
[codex:133900] 'getAccountLevelsAddr()',
[codex:133900] 'getAccountLevel(address)',
[codex:133900] 'getAccountLevels(address)',
[codex:133900] 'moveToTokens(address,uint256)',
[codex:133900] 'moveTokens(address,address,uint256)',
[codex:133900] 'withdrawBalance(address,uint256)',
[codex:133900] 'adminWithdraw(address,address,uint256)',
[codex:133900] 'adminWithdrawToken(address,address,uint256)',
[codex:133900] 'withdrawToken(address,uint256)',
[codex:133900] 'withdraw(address,uint256)',
[codex:133900] 'depositToken(address,uint256)',
[codex:133900] 'withdrawToken(address,address,uint256)',
[codex:133900] 'withdrawFor(address,uint256)',
[codex:133900] 'depositFor(address)',
[codex:133900] 'depositTo(address)',
[codex:133900] 'depositTo(address,uint256)',
[codex:133900] 'depositTokenTo(address,uint256)',
[codex:133900] 'depositTokenFor(address,uint256)',
[codex:133900] 'depositTokenTo(address,uint256)',
[codex:133900] 'withdrawTokenTo(address,uint256)',
[codex:133900] 'withdrawTo(address,uint256)',
[codex:133900] '
[codex:133900] ]
[codex:133900] 
[codex:133900] selectors={
[codex:133900] '0a19b14a','0b927666','19774d43','278b8c0e','2e1a7d4d','338b5dea','3fb9950a','46be96c3','508493bc','54d03b5c','57786394','5e1d7ae4','65e17c9d','6c86888b','71ffcb16','731c2f81','8823a9c0','8f283970','9e281a98','bb5f4629','c281309e','d0e30db0','e8f6bc2e','f3412942','f7888aec','f851a440','fa2d9ff0','fb6e155f'
[codex:133900] }
[codex:133900] 
[codex:133900] for sig in sigs:
[codex:133900]     s=sel(sig)
[codex:133900]     if s in selectors:
[codex:133900]         print(sig, s)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k exited 1 in 27ms:
[codex:133900]   File "<stdin>", line 67
[codex:133900]     '
[codex:133900]     ^
[codex:133900] SyntaxError: unterminated string literal (detected at line 67)
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Fixing syntax error and rerunning**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900] 
[codex:133900] def sel(sig):
[codex:133900]     k=keccak.new(digest_bits=256)
[codex:133900]     k.update(sig.encode())
[codex:133900]     return k.hexdigest()[:8]
[codex:133900] 
[codex:133900] selectors={
[codex:133900] '0a19b14a','0b927666','19774d43','278b8c0e','2e1a7d4d','338b5dea','3fb9950a','46be96c3','508493bc','54d03b5c','57786394','5e1d7ae4','65e17c9d','6c86888b','71ffcb16','731c2f81','8823a9c0','8f283970','9e281a98','bb5f4629','c281309e','d0e30db0','e8f6bc2e','f3412942','f7888aec','f851a440','fa2d9ff0','fb6e155f'
[codex:133900] }
[codex:133900] 
[codex:133900] sigs=[
[codex:133900] 'setFeeAccount(address)',
[codex:133900] 'setAccountLevelsAddr(address)',
[codex:133900] 'setFeeMake(uint256)',
[codex:133900] 'setFeeTake(uint256)',
[codex:133900] 'setFeeRebate(uint256)',
[codex:133900] 'changeFeeAccount(address)',
[codex:133900] 'changeAccountLevelsAddr(address)',
[codex:133900] 'changeFeeMake(uint256)',
[codex:133900] 'changeFeeTake(uint256)',
[codex:133900] 'changeFeeRebate(uint256)',
[codex:133900] 'changeAccountLevels(address)',
[codex:133900] 'setAccountLevels(address)',
[codex:133900] 'setAccountLevels(address,uint256)',
[codex:133900] 'accountLevels(address)',
[codex:133900] 'adminWithdraw(address,uint256)',
[codex:133900] 'adminWithdraw(address,uint256,address)',
[codex:133900] 'adminWithdraw(uint256)',
[codex:133900] 'adminWithdraw(address)',
[codex:133900] 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orderFills(bytes32)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'nonce(address)',
[codex:133900] 'cancelOrdersUpTo(uint256)',
[codex:133900] 'getAccountLevelsAddr()',
[codex:133900] 'getAccountLevel(address)',
[codex:133900] 'getAccountLevels(address)',
[codex:133900] 'moveToTokens(address,uint256)',
[codex:133900] 'moveTokens(address,address,uint256)',
[codex:133900] 'withdrawBalance(address,uint256)',
[codex:133900] 'adminWithdraw(address,address,uint256)',
[codex:133900] 'adminWithdrawToken(address,address,uint256)',
[codex:133900] 'withdrawToken(address,uint256)',
[codex:133900] 'withdraw(address,uint256)',
[codex:133900] 'depositToken(address,uint256)',
[codex:133900] 'withdrawToken(address,address,uint256)',
[codex:133900] 'withdrawFor(address,uint256)',
[codex:133900] 'depositFor(address)',
[codex:133900] 'depositTo(address)',
[codex:133900] 'depositTo(address,uint256)',
[codex:133900] 'depositTokenTo(address,uint256)',
[codex:133900] 'depositTokenFor(address,uint256)',
[codex:133900] 'depositTokenTo(address,uint256)',
[codex:133900] 'withdrawTokenTo(address,uint256)',
[codex:133900] 'withdrawTo(address,uint256)',
[codex:133900] ]
[codex:133900] 
[codex:133900] for sig in sigs:
[codex:133900]     s=sel(sig)
[codex:133900]     if s in selectors:
[codex:133900]         print(sig, s)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 42ms:
[codex:133900] changeFeeAccount(address) 71ffcb16
[codex:133900] changeAccountLevelsAddr(address) e8f6bc2e
[codex:133900] changeFeeMake(uint256) 54d03b5c
[codex:133900] changeFeeTake(uint256) 8823a9c0
[codex:133900] changeFeeRebate(uint256) 5e1d7ae4
[codex:133900] withdrawToken(address,uint256) 9e281a98
[codex:133900] depositToken(address,uint256) 338b5dea
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Mapping remaining selectors to functions**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900] 
[codex:133900] def sel(sig):
[codex:133900]     k=keccak.new(digest_bits=256)
[codex:133900]     k.update(sig.encode())
[codex:133900]     return k.hexdigest()[:8]
[codex:133900] 
[codex:133900] selectors={
[codex:133900] '0a19b14a','0b927666','19774d43','278b8c0e','2e1a7d4d','338b5dea','3fb9950a','46be96c3','508493bc','54d03b5c','57786394','5e1d7ae4','65e17c9d','6c86888b','71ffcb16','731c2f81','8823a9c0','8f283970','9e281a98','bb5f4629','c281309e','d0e30db0','e8f6bc2e','f3412942','f7888aec','f851a440','fa2d9ff0','fb6e155f'
[codex:133900] }
[codex:133900] 
[codex:133900] cands=[
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orderFills(bytes32)',
[codex:133900] 'orders(bytes32)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'cancelOrdersUpTo(uint256)',
[codex:133900] 'cancelOrdersUpTo(address,uint256)',
[codex:133900] 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'getBalance(address,address)',
[codex:133900] 'tokenGet()',
[codex:133900] 'nonce(address)',
[codex:133900] 'nonce()',
[codex:133900] 'getNonce(address)',
[codex:133900] 'getCancelOrdersUpTo(address)',
[codex:133900] 'cancelOrdersUpTo(address,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 
[codex:133900] ]
[codex:133900] 
[codex:133900] for sig in cands:
[codex:133900]     s=sel(sig)
[codex:133900]     if s in selectors:
[codex:133900]         print(sig, s)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 37ms:
[codex:133900] cancelOrder(address,uint256,address,uint256,uint256,uint256,uint8,bytes32,bytes32) 278b8c0e
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing Ethereum contract selectors**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900] 
[codex:133900] def sel(sig):
[codex:133900]     k=keccak.new(digest_bits=256)
[codex:133900]     k.update(sig.encode())
[codex:133900]     return k.hexdigest()[:8]
[codex:133900] 
[codex:133900] print('orderFills(bytes32):', sel('orderFills(bytes32)'))
[codex:133900] print('tokens(address,address):', sel('tokens(address,address)'))
[codex:133900] print('tokens(address):', sel('tokens(address)'))
[codex:133900] print('orderFills(address,uint256,address,uint256,uint256,uint256):', sel('orderFills(address,uint256,address,uint256,uint256,uint256)'))
[codex:133900] print('orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32):', sel('orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)'))
[codex:133900] print('orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256):', sel('orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)'))
[codex:133900] print('orders(bytes32):', sel('orders(bytes32)'))
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 38ms:
[codex:133900] orderFills(bytes32): f7213db6
[codex:133900] tokens(address,address): 508493bc
[codex:133900] tokens(address): e4860339
[codex:133900] orderFills(address,uint256,address,uint256,uint256,uint256): 97508c65
[codex:133900] orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32): f924eb1e
[codex:133900] orderFills(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256): 0908b580
[codex:133900] orders(bytes32): 9c3f1e90
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing function selectors and mappings**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900] 
[codex:133900] def sel(sig):
[codex:133900]     k=keccak.new(digest_bits=256)
[codex:133900]     k.update(sig.encode())
[codex:133900]     return k.hexdigest()[:8]
[codex:133900] 
[codex:133900] cands=[
[codex:133900] 'nonce(address)',
[codex:133900] 'nonce()',
[codex:133900] 'cancelOrdersUpTo(uint256)',
[codex:133900] 'cancelOrdersUpTo(address,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'orderFills(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'orderFills(bytes32)',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256)',
[codex:133900] 'orderHash(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'getAccountLevel(address)',
[codex:133900] 'accountLevels(address)',
[codex:133900] 'accountLevels(address,uint256)',
[codex:133900] 'getAccountLevelsAddr()',
[codex:133900] 'accountLevelsAddr()',
[codex:133900] 'adminWithdraw(address,uint256)',
[codex:133900] 'withdrawAdmin(address,uint256)',
[codex:133900] 'withdrawAdmin(address,address,uint256)',
[codex:133900] 'adminWithdraw(address,address,uint256)',
[codex:133900] 'withdrawToken(address,uint256)',
[codex:133900] 'withdraw(address)',
[codex:133900] 'withdraw(uint256)',
[codex:133900] 'adminWithdraw(address)',
[codex:133900] 'adminWithdraw(uint256)',
[codex:133900] 'balanceOf(address,address)',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'cancelOrdersUpTo(uint256,address)',
[codex:133900] 'cancelOrdersUpTo(address,uint256,uint256)',
[codex:133900] 
[codex:133900] ]
[codex:133900] 
[codex:133900] selectors={
[codex:133900] '0a19b14a','0b927666','19774d43','278b8c0e','2e1a7d4d','338b5dea','3fb9950a','46be96c3','508493bc','54d03b5c','57786394','5e1d7ae4','65e17c9d','6c86888b','71ffcb16','731c2f81','8823a9c0','8f283970','9e281a98','bb5f4629','c281309e','d0e30db0','e8f6bc2e','f3412942','f7888aec','f851a440','fa2d9ff0','fb6e155f'
[codex:133900] }
[codex:133900] 
[codex:133900] for sig in cands:
[codex:133900]     s=sel(sig)
[codex:133900]     if s in selectors:
[codex:133900]         print(sig, s)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 42ms:
[codex:133900] availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) fb6e155f
[codex:133900] amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) 46be96c3
[codex:133900] accountLevelsAddr() f3412942
[codex:133900] withdrawToken(address,uint256) 9e281a98
[codex:133900] withdraw(uint256) 2e1a7d4d
[codex:133900] balanceOf(address,address) f7888aec
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing accountLevels function possibilities**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900] 
[codex:133900] def sel(sig):
[codex:133900]     k=keccak.new(digest_bits=256)
[codex:133900]     k.update(sig.encode())
[codex:133900]     return k.hexdigest()[:8]
[codex:133900] 
[codex:133900] print('accountLevels(address):', sel('accountLevels(address)'))
[codex:133900] print('getAccountLevel(address):', sel('getAccountLevel(address)'))
[codex:133900] print('accountLevel(address):', sel('accountLevel(address)'))
[codex:133900] print('getLevel(address):', sel('getLevel(address)'))
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 36ms:
[codex:133900] accountLevels(address): 14577c55
[codex:133900] getAccountLevel(address): 189048fc
[codex:133900] accountLevel(address): 1cbd0519
[codex:133900] getLevel(address): 817c8966
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Identifying unknown reference**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900] 
[codex:133900] def sel(sig):
[codex:133900]     k=keccak.new(digest_bits=256)
[codex:133900]     k.update(sig.encode())
[codex:133900]     return k.hexdigest()[:8]
[codex:133900] 
[codex:133900] sigs=[
[codex:133900] 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'orderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'getOrderHash(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'orderState(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'orderState(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'orderState(bytes32)',
[codex:133900] 'getOrderStatus(bytes32)',
[codex:133900] 'orderStatus(bytes32)',
[codex:133900] 'volume(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'volume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'makeOrder(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'getAvailableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'getAmountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)',
[codex:133900] 'getBalance(address,address)',
[codex:133900] 'getOrder(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 
[codex:133900] ]
[codex:133900] 
[codex:133900] selectors={'19774d43','3fb9950a','6c86888b','bb5f4629','fa2d9ff0'}
[codex:133900] for sig in sigs:
[codex:133900]     s=sel(sig)
[codex:133900]     if s in selectors:
[codex:133900]         print(sig, s)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 44ms:
[codex:133900] 
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Mapping function selectors to offsets**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900] # disassemble around 0x12e6
[codex:133900] start=0x12c0
[codex:133900] end=0x1360
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 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:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 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:133900] 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:133900] 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:133900] 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:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] idx=start
[codex:133900] while idx<end:
[codex:133900]     op=code[idx]
[codex:133900]     name=opnames.get(op,hex(op))
[codex:133900]     if 0x60<=op<=0x7f:
[codex:133900]         n=op-0x5f
[codex:133900]         data=code[idx+1:idx+1+n]
[codex:133900]         print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900]         idx+=1+n
[codex:133900]     else:
[codex:133900]         print(f\"{idx:04x}: {name}\")
[codex:133900]         idx+=1
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 28ms:
[codex:133900] 12c0: SELFDESTRUCT
[codex:133900] 12c1: SELFDESTRUCT
[codex:133900] 12c2: SELFDESTRUCT
[codex:133900] 12c3: SELFDESTRUCT
[codex:133900] 12c4: SELFDESTRUCT
[codex:133900] 12c5: SELFDESTRUCT
[codex:133900] 12c6: AND
[codex:133900] 12c7: DUP2
[codex:133900] 12c8: MSTORE
[codex:133900] 12c9: PUSH1 20
[codex:133900] 12cb: ADD
[codex:133900] 12cc: SWAP8
[codex:133900] 12cd: POP
[codex:133900] 12ce: POP
[codex:133900] 12cf: POP
[codex:133900] 12d0: POP
[codex:133900] 12d1: POP
[codex:133900] 12d2: POP
[codex:133900] 12d3: POP
[codex:133900] 12d4: POP
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing function parameters and storage access**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900] # disassemble around 0x02f0-0x0320
[codex:133900] start=0x02e0
[codex:133900] end=0x0330
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 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:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 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:133900] 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:133900] 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:133900] 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:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] idx=start
[codex:133900] while idx<end:
[codex:133900]     op=code[idx]
[codex:133900]     name=opnames.get(op,hex(op))
[codex:133900]     if 0x60<=op<=0x7f:
[codex:133900]         n=op-0x5f
[codex:133900]         data=code[idx+1:idx+1+n]
[codex:133900]         print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900]         idx+=1+n
[codex:133900]     else:
[codex:133900]         print(f\"{idx:04x}: {name}\")
[codex:133900]         idx+=1
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 31ms:
[codex:133900] 02e0: SELFDESTRUCT
[codex:133900] 02e1: SELFDESTRUCT
[codex:133900] 02e2: SELFDESTRUCT
[codex:133900] 02e3: AND
[codex:133900] 02e4: SWAP1
[codex:133900] 02e5: PUSH1 20
[codex:133900] 02e7: ADD
[codex:133900] 02e8: SWAP1
[codex:133900] 02e9: SWAP2
[codex:133900] 02ea: SWAP1
[codex:133900] 02eb: DUP1
[codex:133900] 02ec: CALLDATALOAD
[codex:133900] 02ed: PUSH1 00
[codex:133900] 02ef: NOT
[codex:133900] 02f0: AND
[codex:133900] 02f1: SWAP1
[codex:133900] 02f2: PUSH1 20
[codex:133900] 02f4: ADD
[codex:133900] 02f5: SWAP1
[codex:133900] 02f6: SWAP2
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing function parameter decoding and storage access**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900] 
[codex:133900] def sel(sig):
[codex:133900]     k=keccak.new(digest_bits=256)
[codex:133900]     k.update(sig.encode())
[codex:133900]     return k.hexdigest()[:8]
[codex:133900] 
[codex:133900] print('orders(address,address):', sel('orders(address,address)'))
[codex:133900] print('tokens(address,address):', sel('tokens(address,address)'))
[codex:133900] print('balances(address,address):', sel('balances(address,address)'))
[codex:133900] print('balanceOf(address,address):', sel('balanceOf(address,address)'))
[codex:133900] print('userTokens(address,address):', sel('userTokens(address,address)'))
[codex:133900] print('trades(address,uint256,address,uint256,uint256,uint256):', sel('trades(address,uint256,address,uint256,uint256,uint256)'))
[codex:133900] print('tradeBalances(address,address):', sel('tradeBalances(address,address)'))
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 37ms:
[codex:133900] orders(address,address): 0ba85081
[codex:133900] tokens(address,address): 508493bc
[codex:133900] balances(address,address): c23f001f
[codex:133900] balanceOf(address,address): f7888aec
[codex:133900] userTokens(address,address): dab116fe
[codex:133900] trades(address,uint256,address,uint256,uint256,uint256): a92c06cb
[codex:133900] tradeBalances(address,address): aa41dae0
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Matching function selectors**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900] 
[codex:133900] def sel(sig):
[codex:133900]     k=keccak.new(digest_bits=256)
[codex:133900]     k.update(sig.encode())
[codex:133900]     return k.hexdigest()[:8]
[codex:133900] 
[codex:133900] print('testTrade', sel('testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)'))
[codex:133900] print('testTradeNoAmount', sel('testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)'))
[codex:133900] print('testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256)', sel('testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256)'))
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 39ms:
[codex:133900] testTrade 5c73dcea
[codex:133900] testTradeNoAmount be03eec1
[codex:133900] testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256) 775c2277
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing function signatures and matching**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900] # disassemble around 0x2137
[codex:133900] start=0x2100
[codex:133900] end=0x2240
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 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:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 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:133900] 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:133900] 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:133900] 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:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] idx=start
[codex:133900] while idx<end:
[codex:133900]     op=code[idx]
[codex:133900]     name=opnames.get(op,hex(op))
[codex:133900]     if 0x60<=op<=0x7f:
[codex:133900]         n=op-0x5f
[codex:133900]         data=code[idx+1:idx+1+n]
[codex:133900]         print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900]         idx+=1+n
[codex:133900]     else:
[codex:133900]         print(f\"{idx:04x}: {name}\")
[codex:133900]         idx+=1
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 31ms:
[codex:133900] 2100: MOD
[codex:133900] 2101: JUMPI
[codex:133900] 2102: PUSH2 0000
[codex:133900] 2105: JUMP
[codex:133900] 2106: JUMPDEST
[codex:133900] 2107: DUP1
[codex:133900] 2108: PUSH1 05
[codex:133900] 210a: DUP2
[codex:133900] 210b: SWAP1
[codex:133900] 210c: SSTORE
[codex:133900] 210d: POP
[codex:133900] 210e: JUMPDEST
[codex:133900] 210f: POP
[codex:133900] 2110: JUMP
[codex:133900] 2111: JUMPDEST
[codex:133900] 2112: PUSH1 01
[codex:133900] 2114: PUSH1 00
[codex:133900] 2116: SWAP1
[codex:133900] 2117: SLOAD
[codex:133900] 2118: SWAP1
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing function selectors and mappings**
[codex:133900] 
[codex:133900] I'm sorting through confusing disassembly and correlating function selectors with known EtherDelta contract functions. I'm trying to identify which hashes correspond to functions like `testTrade`, `availableVolume`, and possibly `cancelOrdersUpTo` or `trade`, while checking if mappings like `orderFills` have custom getter signatures. There is a lot to untangle!
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900] 
[codex:133900] def sel(sig):
[codex:133900]     k=keccak.new(digest_bits=256)
[codex:133900]     k.update(sig.encode())
[codex:133900]     return k.hexdigest()[:8]
[codex:133900] 
[codex:133900] for sig in [
[codex:133900] 'orderFills(address,uint256)',
[codex:133900] 'orderFills(address,uint)',
[codex:133900] 'orderFills(address,bytes32)',
[codex:133900] 'orders(address,uint256)',
[codex:133900] 'orders(address,uint)',
[codex:133900] 'orders(address,bytes32)',
[codex:133900] 'orderFills(address,address)',
[codex:133900] 'orders(address,address)',
[codex:133900] 'cancelOrdersUpTo(uint256)',
[codex:133900] 'ordersUpTo(address)',
[codex:133900] 'ordersUpTo(address,uint256)',
[codex:133900] 'orderNonce(address)',
[codex:133900] 'nonce(address)',
[codex:133900] 'getOrderFills(address,uint256)',
[codex:133900] 'getOrderFills(bytes32)',
[codex:133900] 'ordersUpTo(address,uint256)',
[codex:133900] 'ordersUpTo(address,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,uint256)',
[codex:133900] 'orders(address,uint256,address,uint256,uint256,uint256,uint256,uint256)',
[codex:133900] ]:
[codex:133900]     print(sig, sel(sig))
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 38ms:
[codex:133900] orderFills(address,uint256) ca0188e7
[codex:133900] orderFills(address,uint) c08fad39
[codex:133900] orderFills(address,bytes32) 19774d43
[codex:133900] orders(address,uint256) 793b8c6d
[codex:133900] orders(address,uint) 1f05be22
[codex:133900] orders(address,bytes32) bb5f4629
[codex:133900] orderFills(address,address) 89ddd13e
[codex:133900] orders(address,address) 0ba85081
[codex:133900] cancelOrdersUpTo(uint256) 4f9559b1
[codex:133900] ordersUpTo(address) faf54925
[codex:133900] ordersUpTo(address,uint256) 5a47fb53
[codex:133900] orderNonce(address) e47937f0
[codex:133900] nonce(address) 70ae92d2
[codex:133900] getOrderFills(address,uint256) 297597e0
[codex:133900] getOrderFills(bytes32) c0112c51
[codex:133900] ordersUpTo(address,uint256) 5a47fb53
[codex:133900] ordersUpTo(address,uint256,uint256) 60b99abd
[codex:133900] orders(address,uint256,address,uint256) beb5b342
[codex:133900] orders(address,uint256,address,uint256,uint256) 52ca4724
[codex:133900] orders(address,uint256,address,uint256,uint256,uint256) 2c92eeff
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing function selectors and mappings**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900] 
[codex:133900] def sel(sig):
[codex:133900]     k=keccak.new(digest_bits=256)
[codex:133900]     k.update(sig.encode())
[codex:133900]     return k.hexdigest()[:8]
[codex:133900] 
[codex:133900] cands=[
[codex:133900] 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)',
[codex:133900] 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address)',
[codex:133900] 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address,uint256)',
[codex:133900] 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address,uint256,uint256)',
[codex:133900] 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address,uint256)',
[codex:133900] test:= 'testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)',
[codex:133900] ]
[codex:133900] 
[codex:133900] for sig in cands:
[codex:133900]     print(sig, sel(sig))
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 38ms:
[codex:133900] testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address) 6c86888b
[codex:133900] testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address) 24eab561
[codex:133900] testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address,uint256) 0b8fc7f7
[codex:133900] testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address,uint256,uint256) 9d886c2a
[codex:133900] testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address,uint256) 2468cd9b
[codex:133900] testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address) 6c86888b
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing function signatures and selectors**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900] 
[codex:133900] def sel(sig):
[codex:133900]     k=keccak.new(digest_bits=256)
[codex:133900]     k.update(sig.encode())
[codex:133900]     return k.hexdigest()[:8]
[codex:133900] 
[codex:133900] cands=[
[codex:133900] 'trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)',
[codex:133900] 'trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address)',
[codex:133900] 'trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address,uint256)',
[codex:133900] 'trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256,address)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address)',
[codex:133900] 'order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address)',
[codex:133900] 'availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address)',
[codex:133900] 'amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)',
[codex:133900] ]
[codex:133900] 
[codex:133900] for sig in cands:
[codex:133900]     print(sig, sel(sig))
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 36ms:
[codex:133900] trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address) 0e9bb90b
[codex:133900] trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address) 3a18a53c
[codex:133900] trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address,uint256) 394a114e
[codex:133900] trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address,uint256) cdd4a774
[codex:133900] cancelOrder(address,uint256,address,uint256,uint256,uint256,address) c2fc5ac6
[codex:133900] cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address) 50e7ad1d
[codex:133900] cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256) a7d66375
[codex:133900] cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address) 0bd28cd3
[codex:133900] order(address,uint256,address,uint256,uint256,uint256,address) 8582c5aa
[codex:133900] order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address) 3822a7c1
[codex:133900] order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256) 50197b10
[codex:133900] availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address) 107a9ed6
[codex:133900] availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address) ad203688
[codex:133900] amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address) 1ecfd267
[codex:133900] amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address) 6f12488a
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Matching function selectors**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] from Crypto.Hash import keccak
[codex:133900] 
[codex:133900] def sel(sig):
[codex:133900]     k=keccak.new(digest_bits=256)
[codex:133900]     k.update(sig.encode())
[codex:133900]     return k.hexdigest()[:8]
[codex:133900] 
[codex:133900] sigs=[
[codex:133900] 'withdrawToken(address,address)',
[codex:133900] 'withdrawToken(address,address,uint256)',
[codex:133900] 'withdraw(address,address)',
[codex:133900] 'withdraw(address,uint256,address)',
[codex:133900] 'withdraw(address,uint256)',
[codex:133900] 'withdraw(address)',
[codex:133900] 'depositToken(address,address,uint256)',
[codex:133900] 'depositToken(address,address)',
[codex:133900] 'depositToken(address,uint256)',
[codex:133900] 'deposit(address)',
[codex:133900] 'deposit(address,uint256)',
[codex:133900] 'balanceOf(address)',
[codex:133900] 'balanceOf(address,uint256)',
[codex:133900] 'balances(address,address)',
[codex:133900] 'cancelOrdersUpTo(uint256)',
[codex:133900] 'cancelOrdersUpTo(address,uint256)',
[codex:133900] 'cancelOrdersUpTo(address)',
[codex:133900] 'cancelOrdersUpTo(address,uint256,uint256)',
[codex:133900] 'orders(address,bytes32)',
[codex:133900] 'orderFills(address,bytes32)',
[codex:133900] 'orders(address,bytes32,address)',
[codex:133900] 'orderFills(address,bytes32,address)',
[codex:133900] 'orders(bytes32)',
[codex:133900] 'orderFills(bytes32)',
[codex:133900] 'getOrder(bytes32)',
[codex:133900] 'getOrderFills(address,bytes32)',
[codex:133900] 'getOrders(address,bytes32)',
[codex:133900] 'orders(address,uint256)',
[codex:133900] 'orders(address,uint256,address)',
[codex:133900] 'orderFills(address,uint256)',
[codex:133900] 'orderFills(address,uint256,address)',
[codex:133900] ]
[codex:133900] 
[codex:133900] for sig in sigs:
[codex:133900]     print(sig, sel(sig))
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 41ms:
[codex:133900] withdrawToken(address,address) 3aeac4e1
[codex:133900] withdrawToken(address,address,uint256) 01e33667
[codex:133900] withdraw(address,address) f940e385
[codex:133900] withdraw(address,uint256,address) 69328dec
[codex:133900] withdraw(address,uint256) f3fef3a3
[codex:133900] withdraw(address) 51cff8d9
[codex:133900] depositToken(address,address,uint256) fb0f97a8
[codex:133900] depositToken(address,address) f4521c7f
[codex:133900] depositToken(address,uint256) 338b5dea
[codex:133900] deposit(address) f340fa01
[codex:133900] deposit(address,uint256) 47e7ef24
[codex:133900] balanceOf(address) 70a08231
[codex:133900] balanceOf(address,uint256) 00fdd58e
[codex:133900] balances(address,address) c23f001f
[codex:133900] cancelOrdersUpTo(uint256) 4f9559b1
[codex:133900] cancelOrdersUpTo(address,uint256) b32137a8
[codex:133900] cancelOrdersUpTo(address) 6cfd1efe
[codex:133900] cancelOrdersUpTo(address,uint256,uint256) 7e3def6d
[codex:133900] orders(address,bytes32) bb5f4629
[codex:133900] orderFills(address,bytes32) 19774d43
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing function selectors and parameters**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900] # disassemble around 0x2aeb
[codex:133900] start=0x2ad0
[codex:133900] end=0x2b60
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 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:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 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:133900] 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:133900] 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:133900] 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:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] idx=start
[codex:133900] while idx<end:
[codex:133900]     op=code[idx]
[codex:133900]     name=opnames.get(op,hex(op))
[codex:133900]     if 0x60<=op<=0x7f:
[codex:133900]         n=op-0x5f
[codex:133900]         data=code[idx+1:idx+1+n]
[codex:133900]         print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900]         idx+=1+n
[codex:133900]     else:
[codex:133900]         print(f\"{idx:04x}: {name}\")
[codex:133900]         idx+=1
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 26ms:
[codex:133900] 2ad0: EXP
[codex:133900] 2ad1: SWAP1
[codex:133900] 2ad2: DIV
[codex:133900] 2ad3: PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:133900] 2ae8: AND
[codex:133900] 2ae9: DUP2
[codex:133900] 2aea: JUMP
[codex:133900] 2aeb: JUMPDEST
[codex:133900] 2aec: PUSH1 09
[codex:133900] 2aee: PUSH1 20
[codex:133900] 2af0: MSTORE
[codex:133900] 2af1: DUP1
[codex:133900] 2af2: PUSH1 00
[codex:133900] 2af4: MSTORE
[codex:133900] 2af5: PUSH1 40
[codex:133900] 2af7: PUSH1 00
[codex:133900] 2af9: SHA3
[codex:133900] 2afa: PUSH1 00
[codex:133900] 2afc: SWAP2
[codex:133900] 2afd: POP
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing storage slot usage in contract**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900] # disassemble around 0x1d81
[codex:133900] start=0x1d40
[codex:133900] end=0x1e20
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 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:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 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:133900] 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:133900] 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:133900] 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:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] idx=start
[codex:133900] while idx<end:
[codex:133900]     op=code[idx]
[codex:133900]     name=opnames.get(op,hex(op))
[codex:133900]     if 0x60<=op<=0x7f:
[codex:133900]         n=op-0x5f
[codex:133900]         data=code[idx+1:idx+1+n]
[codex:133900]         print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900]         idx+=1+n
[codex:133900]     else:
[codex:133900]         print(f\"{idx:04x}: {name}\")
[codex:133900]         idx+=1
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 30ms:
[codex:133900] 1d40: SELFDESTRUCT
[codex:133900] 1d41: SELFDESTRUCT
[codex:133900] 1d42: SELFDESTRUCT
[codex:133900] 1d43: SELFDESTRUCT
[codex:133900] 1d44: SELFDESTRUCT
[codex:133900] 1d45: SELFDESTRUCT
[codex:133900] 1d46: SELFDESTRUCT
[codex:133900] 1d47: AND
[codex:133900] 1d48: PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:133900] 1d5d: AND
[codex:133900] 1d5e: DUP2
[codex:133900] 1d5f: MSTORE
[codex:133900] 1d60: PUSH1 20
[codex:133900] 1d62: ADD
[codex:133900] 1d63: DUP4
[codex:133900] 1d64: DUP2
[codex:133900] 1d65: MSTORE
[codex:133900] 1d66: PUSH1 20
[codex:133900] 1d68: ADD
[codex:133900] 1d69: DUP3
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900] # disassemble around 0x1e1e-0x1e80
[codex:133900] start=0x1e1e
[codex:133900] end=0x1e90
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 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:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 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:133900] 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:133900] 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:133900] 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:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] idx=start
[codex:133900] while idx<end:
[codex:133900]     op=code[idx]
[codex:133900]     name=opnames.get(op,hex(op))
[codex:133900]     if 0x60<=op<=0x7f:
[codex:133900]         n=op-0x5f
[codex:133900]         data=code[idx+1:idx+1+n]
[codex:133900]         print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900]         idx+=1+n
[codex:133900]     else:
[codex:133900]         print(f\"{idx:04x}: {name}\")
[codex:133900]         idx+=1
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 40ms:
[codex:133900] 1e1e: PUSH1 00
[codex:133900] 1e20: PUSH2 0100
[codex:133900] 1e23: EXP
[codex:133900] 1e24: DUP2
[codex:133900] 1e25: SLOAD
[codex:133900] 1e26: DUP2
[codex:133900] 1e27: PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:133900] 1e3c: MUL
[codex:133900] 1e3d: NOT
[codex:133900] 1e3e: AND
[codex:133900] 1e3f: SWAP1
[codex:133900] 1e40: DUP4
[codex:133900] 1e41: PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:133900] 1e56: AND
[codex:133900] 1e57: MUL
[codex:133900] 1e58: OR
[codex:133900] 1e59: SWAP1
[codex:133900] 1e5a: SSTORE
[codex:133900] 1e5b: POP
[codex:133900] 1e5c: JUMPDEST
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing admin-only withdrawal address setting**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900] # disassemble around 0x105f
[codex:133900] start=0x1030
[codex:133900] end=0x1120
[codex:133900] opnames={
[codex:133900] 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:133900] 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:133900] 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:133900] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900] 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:133900] 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:133900] 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:133900] 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:133900] 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:133900] 0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900] }
[codex:133900] idx=start
[codex:133900] while idx<end:
[codex:133900]     op=code[idx]
[codex:133900]     name=opnames.get(op,hex(op))
[codex:133900]     if 0x60<=op<=0x7f:
[codex:133900]         n=op-0x5f
[codex:133900]         data=code[idx+1:idx+1+n]
[codex:133900]         print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900]         idx+=1+n
[codex:133900]     else:
[codex:133900]         print(f\"{idx:04x}: {name}\")
[codex:133900]         idx+=1
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 28ms:
[codex:133900] 1030: SELFDESTRUCT
[codex:133900] 1031: SELFDESTRUCT
[codex:133900] 1032: SELFDESTRUCT
[codex:133900] 1033: SELFDESTRUCT
[codex:133900] 1034: SELFDESTRUCT
[codex:133900] 1035: SELFDESTRUCT
[codex:133900] 1036: SELFDESTRUCT
[codex:133900] 1037: SELFDESTRUCT
[codex:133900] 1038: SELFDESTRUCT
[codex:133900] 1039: SELFDESTRUCT
[codex:133900] 103a: SELFDESTRUCT
[codex:133900] 103b: AND
[codex:133900] 103c: DUP2
[codex:133900] 103d: MSTORE
[codex:133900] 103e: PUSH1 20
[codex:133900] 1040: ADD
[codex:133900] 1041: SWAP7
[codex:133900] 1042: POP
[codex:133900] 1043: POP
[codex:133900] 1044: POP
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing contract order and trade functions**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900] 
[codex:133900] # find ORIGIN opcode occurrences
[codex:133900] origins=[]
[codex:133900] idx=0
[codex:133900] while idx < len(code):
[codex:133900]     op=code[idx]
[codex:133900]     if op==0x32:
[codex:133900]         origins.append(idx)
[codex:133900]     if 0x60<=op<=0x7f:
[codex:133900]         idx += 1 + (op-0x5f)
[codex:133900]     else:
[codex:133900]         idx += 1
[codex:133900] print('ORIGIN offsets', origins)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 30ms:
[codex:133900] ORIGIN offsets []
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing withdrawal address control and safe math usage**
[codex:133900] exec
[codex:133900] /bin/bash -lc "python - <<'PY'
[codex:133900] import re
[codex:133900] from pathlib import Path
[codex:133900] hexdata=Path('/tmp/codex-multi-z6_afl3k/BYTECODE_BUNDLE.txt').read_text()
[codex:133900] code=bytes.fromhex(re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', hexdata).group(1)[2:])
[codex:133900] 
[codex:133900] def disasm(start,end):
[codex:133900]     opnames={
[codex:133900]     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:133900]     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:133900]     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:133900]     0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:133900]     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:133900]     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:133900]     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:133900]     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:133900]     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:133900]     0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',
[codex:133900]     0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:133900]     }
[codex:133900]     idx=start
[codex:133900]     while idx<end:
[codex:133900]         op=code[idx]
[codex:133900]         name=opnames.get(op,hex(op))
[codex:133900]         if 0x60<=op<=0x7f:
[codex:133900]             n=op-0x5f
[codex:133900]             data=code[idx+1:idx+1+n]
[codex:133900]             print(f\"{idx:04x}: {name} {data.hex()}\")
[codex:133900]             idx+=1+n
[codex:133900]         else:
[codex:133900]             print(f\"{idx:04x}: {name}\")
[codex:133900]             idx+=1
[codex:133900] 
[codex:133900] print('--- 2ee0 ---')
[codex:133900] disasm(0x2ee0,0x2f40)
[codex:133900] print('--- 2f40 ---')
[codex:133900] disasm(0x2f40,0x2fa0)
[codex:133900] print('--- 3674 ---')
[codex:133900] disasm(0x3670,0x36d0)
[codex:133900] PY" in /tmp/codex-multi-z6_afl3k succeeded in 28ms:
[codex:133900] --- 2ee0 ---
[codex:133900] 2ee0: JUMPDEST
[codex:133900] 2ee1: PUSH1 00
[codex:133900] 2ee3: PUSH1 00
[codex:133900] 2ee5: DUP3
[codex:133900] 2ee6: DUP5
[codex:133900] 2ee7: ADD
[codex:133900] 2ee8: SWAP1
[codex:133900] 2ee9: POP
[codex:133900] 2eea: PUSH2 2f01
[codex:133900] 2eed: DUP5
[codex:133900] 2eee: DUP3
[codex:133900] 2eef: LT
[codex:133900] 2ef0: ISZERO
[codex:133900] 2ef1: DUP1
[codex:133900] 2ef2: ISZERO
[codex:133900] 2ef3: PUSH2 2efc
[codex:133900] 2ef6: JUMPI
[codex:133900] 2ef7: POP
[codex:133900] 2ef8: DUP4
[codex:133900] 
[codex:133900] thinking
[codex:133900] **Analyzing potential exploits and confirming no findings**
[codex:133900] 
[codex:133900] I carefully examined the contract’s math safety, signature checks on order cancellations, token transfers, and reentrancy risks, especially regarding deposit and withdraw flows. After thorough reasoning, I didn’t find any concrete, exploitable path to profit extraction, so I will prepare a JSON response indicating no findings and provide a concise summary reflecting that.
[codex:133900] codex
[codex:133900] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path identified from the provided bytecode bundle.","findings":[]}
[codex:133900] tokens used
[codex:133900] 117,541
[codex:133900] {"no_findings":true,"summary":"No concrete, exploitable value-extraction path identified from the provided bytecode bundle.","findings":[]}
Metadata
{
    "codex": {
        "ran_at": "2026-01-01T22:36:21.748596+00:00",
        "returncode": 0
    },
    "summary": "No concrete, exploitable value-extraction path identified from the provided bytecode bundle.",
    "raw_final": {
        "summary": "No concrete, exploitable value-extraction path identified from the provided bytecode bundle.",
        "findings": [],
        "no_findings": true
    },
    "no_findings": true,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
12
EXT*/BALANCE
3
Total opcodes
5977
Flags
call_family_heavy
View cast disassembly output
00000000: PUSH1 0x60
00000002: PUSH1 0x40
00000004: MSTORE
00000005: CALLDATASIZE
00000006: ISZERO
00000007: PUSH2 0x0168
0000000a: JUMPI
0000000b: PUSH1 0x00
0000000d: CALLDATALOAD
0000000e: PUSH29 0x0100000000000000000000000000000000000000000000000000000000
0000002c: SWAP1
0000002d: DIV
0000002e: PUSH4 0xffffffff
00000033: AND
00000034: DUP1
00000035: PUSH4 0x0a19b14a
0000003a: EQ
0000003b: PUSH2 0x017d
0000003e: JUMPI
0000003f: DUP1
00000040: PUSH4 0x0b927666
00000045: EQ
00000046: PUSH2 0x0244
00000049: JUMPI
0000004a: DUP1
0000004b: PUSH4 0x19774d43
00000050: EQ
00000051: PUSH2 0x02bd
00000054: JUMPI
00000055: DUP1
00000056: PUSH4 0x278b8c0e
0000005b: EQ
0000005c: PUSH2 0x0314
0000005f: JUMPI
00000060: DUP1
00000061: PUSH4 0x2e1a7d4d
00000066: EQ
00000067: PUSH2 0x03b3
0000006a: JUMPI
0000006b: DUP1
0000006c: PUSH4 0x338b5dea
00000071: EQ
00000072: PUSH2 0x03d3
00000075: JUMPI
00000076: DUP1
00000077: PUSH4 0x3fb9950a
0000007c: EQ
0000007d: PUSH2 0x0412
00000080: JUMPI
00000081: DUP1
00000082: PUSH4 0x46be96c3
00000087: EQ
00000088: PUSH2 0x0467
0000008b: JUMPI
0000008c: DUP1
0000008d: PUSH4 0x508493bc
00000092: EQ
00000093: PUSH2 0x0539
00000096: JUMPI
00000097: DUP1
00000098: PUSH4 0x54d03b5c
0000009d: EQ
0000009e: PUSH2 0x05a2
000000a1: JUMPI
000000a2: DUP1
000000a3: PUSH4 0x57786394
000000a8: EQ
000000a9: PUSH2 0x05c2
000000ac: JUMPI
000000ad: DUP1
000000ae: PUSH4 0x5e1d7ae4
000000b3: EQ
000000b4: PUSH2 0x05e8
000000b7: JUMPI
000000b8: DUP1
000000b9: PUSH4 0x65e17c9d
000000be: EQ
000000bf: PUSH2 0x0608
000000c2: JUMPI
000000c3: DUP1
000000c4: PUSH4 0x6c86888b
000000c9: EQ
000000ca: PUSH2 0x065a
000000cd: JUMPI
000000ce: DUP1
000000cf: PUSH4 0x71ffcb16
000000d4: EQ
000000d5: PUSH2 0x0758
000000d8: JUMPI
000000d9: DUP1
000000da: PUSH4 0x731c2f81
000000df: EQ
000000e0: PUSH2 0x078e
000000e3: JUMPI
000000e4: DUP1
000000e5: PUSH4 0x8823a9c0
000000ea: EQ
000000eb: PUSH2 0x07b4
000000ee: JUMPI
000000ef: DUP1
000000f0: PUSH4 0x8f283970
000000f5: EQ
000000f6: PUSH2 0x07d4
000000f9: JUMPI
000000fa: DUP1
000000fb: PUSH4 0x9e281a98
00000100: EQ
00000101: PUSH2 0x080a
00000104: JUMPI
00000105: DUP1
00000106: PUSH4 0xbb5f4629
0000010b: EQ
0000010c: PUSH2 0x0849
0000010f: JUMPI
00000110: DUP1
00000111: PUSH4 0xc281309e
00000116: EQ
00000117: PUSH2 0x08a4
0000011a: JUMPI
0000011b: DUP1
0000011c: PUSH4 0xd0e30db0
00000121: EQ
00000122: PUSH2 0x08ca
00000125: JUMPI
00000126: DUP1
00000127: PUSH4 0xe8f6bc2e
0000012c: EQ
0000012d: PUSH2 0x08d4
00000130: JUMPI
00000131: DUP1
00000132: PUSH4 0xf3412942
00000137: EQ
00000138: PUSH2 0x090a
0000013b: JUMPI
0000013c: DUP1
0000013d: PUSH4 0xf7888aec
00000142: EQ
00000143: PUSH2 0x095c
00000146: JUMPI
00000147: DUP1
00000148: PUSH4 0xf851a440
0000014d: EQ
0000014e: PUSH2 0x09c5
00000151: JUMPI
00000152: DUP1
00000153: PUSH4 0xfa2d9ff0
00000158: EQ
00000159: PUSH2 0x0a17
0000015c: JUMPI
0000015d: DUP1
0000015e: PUSH4 0xfb6e155f
00000163: EQ
00000164: PUSH2 0x0a8d
00000167: JUMPI
00000168: JUMPDEST
00000169: CALLVALUE
0000016a: ISZERO
0000016b: PUSH2 0x0170
0000016e: JUMPI
0000016f: INVALID
00000170: JUMPDEST
00000171: PUSH2 0x017b
00000174: JUMPDEST
00000175: PUSH2 0x0000
00000178: JUMP
00000179: JUMPDEST
0000017a: JUMP
0000017b: JUMPDEST
0000017c: STOP
0000017d: JUMPDEST
0000017e: CALLVALUE
0000017f: ISZERO
00000180: PUSH2 0x0185
00000183: JUMPI
00000184: INVALID
00000185: JUMPDEST
00000186: PUSH2 0x0242
00000189: PUSH1 0x04
0000018b: DUP1
0000018c: DUP1
0000018d: CALLDATALOAD
0000018e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000001a3: AND
000001a4: SWAP1
000001a5: PUSH1 0x20
000001a7: ADD
000001a8: SWAP1
000001a9: SWAP2
000001aa: SWAP1
000001ab: DUP1
000001ac: CALLDATALOAD
000001ad: SWAP1
000001ae: PUSH1 0x20
000001b0: ADD
000001b1: SWAP1
000001b2: SWAP2
000001b3: SWAP1
000001b4: DUP1
000001b5: CALLDATALOAD
000001b6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000001cb: AND
000001cc: SWAP1
000001cd: PUSH1 0x20
000001cf: ADD
000001d0: SWAP1
000001d1: SWAP2
000001d2: SWAP1
000001d3: DUP1
000001d4: CALLDATALOAD
000001d5: SWAP1
000001d6: PUSH1 0x20
000001d8: ADD
000001d9: SWAP1
000001da: SWAP2
000001db: SWAP1
000001dc: DUP1
000001dd: CALLDATALOAD
000001de: SWAP1
000001df: PUSH1 0x20
000001e1: ADD
000001e2: SWAP1
000001e3: SWAP2
000001e4: SWAP1
000001e5: DUP1
000001e6: CALLDATALOAD
000001e7: SWAP1
000001e8: PUSH1 0x20
000001ea: ADD
000001eb: SWAP1
000001ec: SWAP2
000001ed: SWAP1
000001ee: DUP1
000001ef: CALLDATALOAD
000001f0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000205: AND
00000206: SWAP1
00000207: PUSH1 0x20
00000209: ADD
0000020a: SWAP1
0000020b: SWAP2
0000020c: SWAP1
0000020d: DUP1
0000020e: CALLDATALOAD
0000020f: PUSH1 0xff
00000211: AND
00000212: SWAP1
00000213: PUSH1 0x20
00000215: ADD
00000216: SWAP1
00000217: SWAP2
00000218: SWAP1
00000219: DUP1
0000021a: CALLDATALOAD
0000021b: PUSH1 0x00
0000021d: NOT
0000021e: AND
0000021f: SWAP1
00000220: PUSH1 0x20
00000222: ADD
00000223: SWAP1
00000224: SWAP2
00000225: SWAP1
00000226: DUP1
00000227: CALLDATALOAD
00000228: PUSH1 0x00
0000022a: NOT
0000022b: AND
0000022c: SWAP1
0000022d: PUSH1 0x20
0000022f: ADD
00000230: SWAP1
00000231: SWAP2
00000232: SWAP1
00000233: DUP1
00000234: CALLDATALOAD
00000235: SWAP1
00000236: PUSH1 0x20
00000238: ADD
00000239: SWAP1
0000023a: SWAP2
0000023b: SWAP1
0000023c: POP
0000023d: POP
0000023e: PUSH2 0x0b5f
00000241: JUMP
00000242: JUMPDEST
00000243: STOP
00000244: JUMPDEST
00000245: CALLVALUE
00000246: ISZERO
00000247: PUSH2 0x024c
0000024a: JUMPI
0000024b: INVALID
0000024c: JUMPDEST
0000024d: PUSH2 0x02bb
00000250: PUSH1 0x04
00000252: DUP1
00000253: DUP1
00000254: CALLDATALOAD
00000255: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000026a: AND
0000026b: SWAP1
0000026c: PUSH1 0x20
0000026e: ADD
0000026f: SWAP1
00000270: SWAP2
00000271: SWAP1
00000272: DUP1
00000273: CALLDATALOAD
00000274: SWAP1
00000275: PUSH1 0x20
00000277: ADD
00000278: SWAP1
00000279: SWAP2
0000027a: SWAP1
0000027b: DUP1
0000027c: CALLDATALOAD
0000027d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000292: AND
00000293: SWAP1
00000294: PUSH1 0x20
00000296: ADD
00000297: SWAP1
00000298: SWAP2
00000299: SWAP1
0000029a: DUP1
0000029b: CALLDATALOAD
0000029c: SWAP1
0000029d: PUSH1 0x20
0000029f: ADD
000002a0: SWAP1
000002a1: SWAP2
000002a2: SWAP1
000002a3: DUP1
000002a4: CALLDATALOAD
000002a5: SWAP1
000002a6: PUSH1 0x20
000002a8: ADD
000002a9: SWAP1
000002aa: SWAP2
000002ab: SWAP1
000002ac: DUP1
000002ad: CALLDATALOAD
000002ae: SWAP1
000002af: PUSH1 0x20
000002b1: ADD
000002b2: SWAP1
000002b3: SWAP2
000002b4: SWAP1
000002b5: POP
000002b6: POP
000002b7: PUSH2 0x105f
000002ba: JUMP
000002bb: JUMPDEST
000002bc: STOP
000002bd: JUMPDEST
000002be: CALLVALUE
000002bf: ISZERO
000002c0: PUSH2 0x02c5
000002c3: JUMPI
000002c4: INVALID
000002c5: JUMPDEST
000002c6: PUSH2 0x02fe
000002c9: PUSH1 0x04
000002cb: DUP1
000002cc: DUP1
000002cd: CALLDATALOAD
000002ce: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000002e3: AND
000002e4: SWAP1
000002e5: PUSH1 0x20
000002e7: ADD
000002e8: SWAP1
000002e9: SWAP2
000002ea: SWAP1
000002eb: DUP1
000002ec: CALLDATALOAD
000002ed: PUSH1 0x00
000002ef: NOT
000002f0: AND
000002f1: SWAP1
000002f2: PUSH1 0x20
000002f4: ADD
000002f5: SWAP1
000002f6: SWAP2
000002f7: SWAP1
000002f8: POP
000002f9: POP
000002fa: PUSH2 0x12e6
000002fd: JUMP
000002fe: JUMPDEST
000002ff: PUSH1 0x40
00000301: MLOAD
00000302: DUP1
00000303: DUP3
00000304: DUP2
00000305: MSTORE
00000306: PUSH1 0x20
00000308: ADD
00000309: SWAP2
0000030a: POP
0000030b: POP
0000030c: PUSH1 0x40
0000030e: MLOAD
0000030f: DUP1
00000310: SWAP2
00000311: SUB
00000312: SWAP1
00000313: RETURN
00000314: JUMPDEST
00000315: CALLVALUE
00000316: ISZERO
00000317: PUSH2 0x031c
0000031a: JUMPI
0000031b: INVALID
0000031c: JUMPDEST
0000031d: PUSH2 0x03b1
00000320: PUSH1 0x04
00000322: DUP1
00000323: DUP1
00000324: CALLDATALOAD
00000325: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000033a: AND
0000033b: SWAP1
0000033c: PUSH1 0x20
0000033e: ADD
0000033f: SWAP1
00000340: SWAP2
00000341: SWAP1
00000342: DUP1
00000343: CALLDATALOAD
00000344: SWAP1
00000345: PUSH1 0x20
00000347: ADD
00000348: SWAP1
00000349: SWAP2
0000034a: SWAP1
0000034b: DUP1
0000034c: CALLDATALOAD
0000034d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000362: AND
00000363: SWAP1
00000364: PUSH1 0x20
00000366: ADD
00000367: SWAP1
00000368: SWAP2
00000369: SWAP1
0000036a: DUP1
0000036b: CALLDATALOAD
0000036c: SWAP1
0000036d: PUSH1 0x20
0000036f: ADD
00000370: SWAP1
00000371: SWAP2
00000372: SWAP1
00000373: DUP1
00000374: CALLDATALOAD
00000375: SWAP1
00000376: PUSH1 0x20
00000378: ADD
00000379: SWAP1
0000037a: SWAP2
0000037b: SWAP1
0000037c: DUP1
0000037d: CALLDATALOAD
0000037e: SWAP1
0000037f: PUSH1 0x20
00000381: ADD
00000382: SWAP1
00000383: SWAP2
00000384: SWAP1
00000385: DUP1
00000386: CALLDATALOAD
00000387: PUSH1 0xff
00000389: AND
0000038a: SWAP1
0000038b: PUSH1 0x20
0000038d: ADD
0000038e: SWAP1
0000038f: SWAP2
00000390: SWAP1
00000391: DUP1
00000392: CALLDATALOAD
00000393: PUSH1 0x00
00000395: NOT
00000396: AND
00000397: SWAP1
00000398: PUSH1 0x20
0000039a: ADD
0000039b: SWAP1
0000039c: SWAP2
0000039d: SWAP1
0000039e: DUP1
0000039f: CALLDATALOAD
000003a0: PUSH1 0x00
000003a2: NOT
000003a3: AND
000003a4: SWAP1
000003a5: PUSH1 0x20
000003a7: ADD
000003a8: SWAP1
000003a9: SWAP2
000003aa: SWAP1
000003ab: POP
000003ac: POP
000003ad: PUSH2 0x130b
000003b0: JUMP
000003b1: JUMPDEST
000003b2: STOP
000003b3: JUMPDEST
000003b4: CALLVALUE
000003b5: ISZERO
000003b6: PUSH2 0x03bb
000003b9: JUMPI
000003ba: INVALID
000003bb: JUMPDEST
000003bc: PUSH2 0x03d1
000003bf: PUSH1 0x04
000003c1: DUP1
000003c2: DUP1
000003c3: CALLDATALOAD
000003c4: SWAP1
000003c5: PUSH1 0x20
000003c7: ADD
000003c8: SWAP1
000003c9: SWAP2
000003ca: SWAP1
000003cb: POP
000003cc: POP
000003cd: PUSH2 0x171e
000003d0: JUMP
000003d1: JUMPDEST
000003d2: STOP
000003d3: JUMPDEST
000003d4: CALLVALUE
000003d5: ISZERO
000003d6: PUSH2 0x03db
000003d9: JUMPI
000003da: INVALID
000003db: JUMPDEST
000003dc: PUSH2 0x0410
000003df: PUSH1 0x04
000003e1: DUP1
000003e2: DUP1
000003e3: CALLDATALOAD
000003e4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000003f9: AND
000003fa: SWAP1
000003fb: PUSH1 0x20
000003fd: ADD
000003fe: SWAP1
000003ff: SWAP2
00000400: SWAP1
00000401: DUP1
00000402: CALLDATALOAD
00000403: SWAP1
00000404: PUSH1 0x20
00000406: ADD
00000407: SWAP1
00000408: SWAP2
00000409: SWAP1
0000040a: POP
0000040b: POP
0000040c: PUSH2 0x1a31
0000040f: JUMP
00000410: JUMPDEST
00000411: STOP
00000412: JUMPDEST
00000413: CALLVALUE
00000414: ISZERO
00000415: PUSH2 0x041a
00000418: JUMPI
00000419: INVALID
0000041a: JUMPDEST
0000041b: PUSH2 0x0465
0000041e: PUSH1 0x04
00000420: DUP1
00000421: DUP1
00000422: CALLDATALOAD
00000423: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000438: AND
00000439: SWAP1
0000043a: PUSH1 0x20
0000043c: ADD
0000043d: SWAP1
0000043e: SWAP2
0000043f: SWAP1
00000440: DUP1
00000441: CALLDATALOAD
00000442: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000457: AND
00000458: SWAP1
00000459: PUSH1 0x20
0000045b: ADD
0000045c: SWAP1
0000045d: SWAP2
0000045e: SWAP1
0000045f: POP
00000460: POP
00000461: PUSH2 0x1d81
00000464: JUMP
00000465: JUMPDEST
00000466: STOP
00000467: JUMPDEST
00000468: CALLVALUE
00000469: ISZERO
0000046a: PUSH2 0x046f
0000046d: JUMPI
0000046e: INVALID
0000046f: JUMPDEST
00000470: PUSH2 0x0523
00000473: PUSH1 0x04
00000475: DUP1
00000476: DUP1
00000477: CALLDATALOAD
00000478: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000048d: AND
0000048e: SWAP1
0000048f: PUSH1 0x20
00000491: ADD
00000492: SWAP1
00000493: SWAP2
00000494: SWAP1
00000495: DUP1
00000496: CALLDATALOAD
00000497: SWAP1
00000498: PUSH1 0x20
0000049a: ADD
0000049b: SWAP1
0000049c: SWAP2
0000049d: SWAP1
0000049e: DUP1
0000049f: CALLDATALOAD
000004a0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000004b5: AND
000004b6: SWAP1
000004b7: PUSH1 0x20
000004b9: ADD
000004ba: SWAP1
000004bb: SWAP2
000004bc: SWAP1
000004bd: DUP1
000004be: CALLDATALOAD
000004bf: SWAP1
000004c0: PUSH1 0x20
000004c2: ADD
000004c3: SWAP1
000004c4: SWAP2
000004c5: SWAP1
000004c6: DUP1
000004c7: CALLDATALOAD
000004c8: SWAP1
000004c9: PUSH1 0x20
000004cb: ADD
000004cc: SWAP1
000004cd: SWAP2
000004ce: SWAP1
000004cf: DUP1
000004d0: CALLDATALOAD
000004d1: SWAP1
000004d2: PUSH1 0x20
000004d4: ADD
000004d5: SWAP1
000004d6: SWAP2
000004d7: SWAP1
000004d8: DUP1
000004d9: CALLDATALOAD
000004da: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000004ef: AND
000004f0: SWAP1
000004f1: PUSH1 0x20
000004f3: ADD
000004f4: SWAP1
000004f5: SWAP2
000004f6: SWAP1
000004f7: DUP1
000004f8: CALLDATALOAD
000004f9: PUSH1 0xff
000004fb: AND
000004fc: SWAP1
000004fd: PUSH1 0x20
000004ff: ADD
00000500: SWAP1
00000501: SWAP2
00000502: SWAP1
00000503: DUP1
00000504: CALLDATALOAD
00000505: PUSH1 0x00
00000507: NOT
00000508: AND
00000509: SWAP1
0000050a: PUSH1 0x20
0000050c: ADD
0000050d: SWAP1
0000050e: SWAP2
0000050f: SWAP1
00000510: DUP1
00000511: CALLDATALOAD
00000512: PUSH1 0x00
00000514: NOT
00000515: AND
00000516: SWAP1
00000517: PUSH1 0x20
00000519: ADD
0000051a: SWAP1
0000051b: SWAP2
0000051c: SWAP1
0000051d: POP
0000051e: POP
0000051f: PUSH2 0x1e60
00000522: JUMP
00000523: JUMPDEST
00000524: PUSH1 0x40
00000526: MLOAD
00000527: DUP1
00000528: DUP3
00000529: DUP2
0000052a: MSTORE
0000052b: PUSH1 0x20
0000052d: ADD
0000052e: SWAP2
0000052f: POP
00000530: POP
00000531: PUSH1 0x40
00000533: MLOAD
00000534: DUP1
00000535: SWAP2
00000536: SUB
00000537: SWAP1
00000538: RETURN
00000539: JUMPDEST
0000053a: CALLVALUE
0000053b: ISZERO
0000053c: PUSH2 0x0541
0000053f: JUMPI
00000540: INVALID
00000541: JUMPDEST
00000542: PUSH2 0x058c
00000545: PUSH1 0x04
00000547: DUP1
00000548: DUP1
00000549: CALLDATALOAD
0000054a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000055f: AND
00000560: SWAP1
00000561: PUSH1 0x20
00000563: ADD
00000564: SWAP1
00000565: SWAP2
00000566: SWAP1
00000567: DUP1
00000568: CALLDATALOAD
00000569: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000057e: AND
0000057f: SWAP1
00000580: PUSH1 0x20
00000582: ADD
00000583: SWAP1
00000584: SWAP2
00000585: SWAP1
00000586: POP
00000587: POP
00000588: PUSH2 0x1fee
0000058b: JUMP
0000058c: JUMPDEST
0000058d: PUSH1 0x40
0000058f: MLOAD
00000590: DUP1
00000591: DUP3
00000592: DUP2
00000593: MSTORE
00000594: PUSH1 0x20
00000596: ADD
00000597: SWAP2
00000598: POP
00000599: POP
0000059a: PUSH1 0x40
0000059c: MLOAD
0000059d: DUP1
0000059e: SWAP2
0000059f: SUB
000005a0: SWAP1
000005a1: RETURN
000005a2: JUMPDEST
000005a3: CALLVALUE
000005a4: ISZERO
000005a5: PUSH2 0x05aa
000005a8: JUMPI
000005a9: INVALID
000005aa: JUMPDEST
000005ab: PUSH2 0x05c0
000005ae: PUSH1 0x04
000005b0: DUP1
000005b1: DUP1
000005b2: CALLDATALOAD
000005b3: SWAP1
000005b4: PUSH1 0x20
000005b6: ADD
000005b7: SWAP1
000005b8: SWAP2
000005b9: SWAP1
000005ba: POP
000005bb: POP
000005bc: PUSH2 0x2013
000005bf: JUMP
000005c0: JUMPDEST
000005c1: STOP
000005c2: JUMPDEST
000005c3: CALLVALUE
000005c4: ISZERO
000005c5: PUSH2 0x05ca
000005c8: JUMPI
000005c9: INVALID
000005ca: JUMPDEST
000005cb: PUSH2 0x05d2
000005ce: PUSH2 0x2089
000005d1: JUMP
000005d2: JUMPDEST
000005d3: PUSH1 0x40
000005d5: MLOAD
000005d6: DUP1
000005d7: DUP3
000005d8: DUP2
000005d9: MSTORE
000005da: PUSH1 0x20
000005dc: ADD
000005dd: SWAP2
000005de: POP
000005df: POP
000005e0: PUSH1 0x40
000005e2: MLOAD
000005e3: DUP1
000005e4: SWAP2
000005e5: SUB
000005e6: SWAP1
000005e7: RETURN
000005e8: JUMPDEST
000005e9: CALLVALUE
000005ea: ISZERO
000005eb: PUSH2 0x05f0
000005ee: JUMPI
000005ef: INVALID
000005f0: JUMPDEST
000005f1: PUSH2 0x0606
000005f4: PUSH1 0x04
000005f6: DUP1
000005f7: DUP1
000005f8: CALLDATALOAD
000005f9: SWAP1
000005fa: PUSH1 0x20
000005fc: ADD
000005fd: SWAP1
000005fe: SWAP2
000005ff: SWAP1
00000600: POP
00000601: POP
00000602: PUSH2 0x208f
00000605: JUMP
00000606: JUMPDEST
00000607: STOP
00000608: JUMPDEST
00000609: CALLVALUE
0000060a: ISZERO
0000060b: PUSH2 0x0610
0000060e: JUMPI
0000060f: INVALID
00000610: JUMPDEST
00000611: PUSH2 0x0618
00000614: PUSH2 0x2111
00000617: JUMP
00000618: JUMPDEST
00000619: PUSH1 0x40
0000061b: MLOAD
0000061c: DUP1
0000061d: DUP3
0000061e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000633: AND
00000634: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000649: AND
0000064a: DUP2
0000064b: MSTORE
0000064c: PUSH1 0x20
0000064e: ADD
0000064f: SWAP2
00000650: POP
00000651: POP
00000652: PUSH1 0x40
00000654: MLOAD
00000655: DUP1
00000656: SWAP2
00000657: SUB
00000658: SWAP1
00000659: RETURN
0000065a: JUMPDEST
0000065b: CALLVALUE
0000065c: ISZERO
0000065d: PUSH2 0x0662
00000660: JUMPI
00000661: INVALID
00000662: JUMPDEST
00000663: PUSH2 0x073e
00000666: PUSH1 0x04
00000668: DUP1
00000669: DUP1
0000066a: CALLDATALOAD
0000066b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000680: AND
00000681: SWAP1
00000682: PUSH1 0x20
00000684: ADD
00000685: SWAP1
00000686: SWAP2
00000687: SWAP1
00000688: DUP1
00000689: CALLDATALOAD
0000068a: SWAP1
0000068b: PUSH1 0x20
0000068d: ADD
0000068e: SWAP1
0000068f: SWAP2
00000690: SWAP1
00000691: DUP1
00000692: CALLDATALOAD
00000693: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000006a8: AND
000006a9: SWAP1
000006aa: PUSH1 0x20
000006ac: ADD
000006ad: SWAP1
000006ae: SWAP2
000006af: SWAP1
000006b0: DUP1
000006b1: CALLDATALOAD
000006b2: SWAP1
000006b3: PUSH1 0x20
000006b5: ADD
000006b6: SWAP1
000006b7: SWAP2
000006b8: SWAP1
000006b9: DUP1
000006ba: CALLDATALOAD
000006bb: SWAP1
000006bc: PUSH1 0x20
000006be: ADD
000006bf: SWAP1
000006c0: SWAP2
000006c1: SWAP1
000006c2: DUP1
000006c3: CALLDATALOAD
000006c4: SWAP1
000006c5: PUSH1 0x20
000006c7: ADD
000006c8: SWAP1
000006c9: SWAP2
000006ca: SWAP1
000006cb: DUP1
000006cc: CALLDATALOAD
000006cd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000006e2: AND
000006e3: SWAP1
000006e4: PUSH1 0x20
000006e6: ADD
000006e7: SWAP1
000006e8: SWAP2
000006e9: SWAP1
000006ea: DUP1
000006eb: CALLDATALOAD
000006ec: PUSH1 0xff
000006ee: AND
000006ef: SWAP1
000006f0: PUSH1 0x20
000006f2: ADD
000006f3: SWAP1
000006f4: SWAP2
000006f5: SWAP1
000006f6: DUP1
000006f7: CALLDATALOAD
000006f8: PUSH1 0x00
000006fa: NOT
000006fb: AND
000006fc: SWAP1
000006fd: PUSH1 0x20
000006ff: ADD
00000700: SWAP1
00000701: SWAP2
00000702: SWAP1
00000703: DUP1
00000704: CALLDATALOAD
00000705: PUSH1 0x00
00000707: NOT
00000708: AND
00000709: SWAP1
0000070a: PUSH1 0x20
0000070c: ADD
0000070d: SWAP1
0000070e: SWAP2
0000070f: SWAP1
00000710: DUP1
00000711: CALLDATALOAD
00000712: SWAP1
00000713: PUSH1 0x20
00000715: ADD
00000716: SWAP1
00000717: SWAP2
00000718: SWAP1
00000719: DUP1
0000071a: CALLDATALOAD
0000071b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000730: AND
00000731: SWAP1
00000732: PUSH1 0x20
00000734: ADD
00000735: SWAP1
00000736: SWAP2
00000737: SWAP1
00000738: POP
00000739: POP
0000073a: PUSH2 0x2137
0000073d: JUMP
0000073e: JUMPDEST
0000073f: PUSH1 0x40
00000741: MLOAD
00000742: DUP1
00000743: DUP3
00000744: ISZERO
00000745: ISZERO
00000746: ISZERO
00000747: ISZERO
00000748: DUP2
00000749: MSTORE
0000074a: PUSH1 0x20
0000074c: ADD
0000074d: SWAP2
0000074e: POP
0000074f: POP
00000750: PUSH1 0x40
00000752: MLOAD
00000753: DUP1
00000754: SWAP2
00000755: SUB
00000756: SWAP1
00000757: RETURN
00000758: JUMPDEST
00000759: CALLVALUE
0000075a: ISZERO
0000075b: PUSH2 0x0760
0000075e: JUMPI
0000075f: INVALID
00000760: JUMPDEST
00000761: PUSH2 0x078c
00000764: PUSH1 0x04
00000766: DUP1
00000767: DUP1
00000768: CALLDATALOAD
00000769: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000077e: AND
0000077f: SWAP1
00000780: PUSH1 0x20
00000782: ADD
00000783: SWAP1
00000784: SWAP2
00000785: SWAP1
00000786: POP
00000787: POP
00000788: PUSH2 0x21fa
0000078b: JUMP
0000078c: JUMPDEST
0000078d: STOP
0000078e: JUMPDEST
0000078f: CALLVALUE
00000790: ISZERO
00000791: PUSH2 0x0796
00000794: JUMPI
00000795: INVALID
00000796: JUMPDEST
00000797: PUSH2 0x079e
0000079a: PUSH2 0x229b
0000079d: JUMP
0000079e: JUMPDEST
0000079f: PUSH1 0x40
000007a1: MLOAD
000007a2: DUP1
000007a3: DUP3
000007a4: DUP2
000007a5: MSTORE
000007a6: PUSH1 0x20
000007a8: ADD
000007a9: SWAP2
000007aa: POP
000007ab: POP
000007ac: PUSH1 0x40
000007ae: MLOAD
000007af: DUP1
000007b0: SWAP2
000007b1: SUB
000007b2: SWAP1
000007b3: RETURN
000007b4: JUMPDEST
000007b5: CALLVALUE
000007b6: ISZERO
000007b7: PUSH2 0x07bc
000007ba: JUMPI
000007bb: INVALID
000007bc: JUMPDEST
000007bd: PUSH2 0x07d2
000007c0: PUSH1 0x04
000007c2: DUP1
000007c3: DUP1
000007c4: CALLDATALOAD
000007c5: SWAP1
000007c6: PUSH1 0x20
000007c8: ADD
000007c9: SWAP1
000007ca: SWAP2
000007cb: SWAP1
000007cc: POP
000007cd: POP
000007ce: PUSH2 0x22a1
000007d1: JUMP
000007d2: JUMPDEST
000007d3: STOP
000007d4: JUMPDEST
000007d5: CALLVALUE
000007d6: ISZERO
000007d7: PUSH2 0x07dc
000007da: JUMPI
000007db: INVALID
000007dc: JUMPDEST
000007dd: PUSH2 0x0808
000007e0: PUSH1 0x04
000007e2: DUP1
000007e3: DUP1
000007e4: CALLDATALOAD
000007e5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000007fa: AND
000007fb: SWAP1
000007fc: PUSH1 0x20
000007fe: ADD
000007ff: SWAP1
00000800: SWAP2
00000801: SWAP1
00000802: POP
00000803: POP
00000804: PUSH2 0x2323
00000807: JUMP
00000808: JUMPDEST
00000809: STOP
0000080a: JUMPDEST
0000080b: CALLVALUE
0000080c: ISZERO
0000080d: PUSH2 0x0812
00000810: JUMPI
00000811: INVALID
00000812: JUMPDEST
00000813: PUSH2 0x0847
00000816: PUSH1 0x04
00000818: DUP1
00000819: DUP1
0000081a: CALLDATALOAD
0000081b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000830: AND
00000831: SWAP1
00000832: PUSH1 0x20
00000834: ADD
00000835: SWAP1
00000836: SWAP2
00000837: SWAP1
00000838: DUP1
00000839: CALLDATALOAD
0000083a: SWAP1
0000083b: PUSH1 0x20
0000083d: ADD
0000083e: SWAP1
0000083f: SWAP2
00000840: SWAP1
00000841: POP
00000842: POP
00000843: PUSH2 0x23c4
00000846: JUMP
00000847: JUMPDEST
00000848: STOP
00000849: JUMPDEST
0000084a: CALLVALUE
0000084b: ISZERO
0000084c: PUSH2 0x0851
0000084f: JUMPI
00000850: INVALID
00000851: JUMPDEST
00000852: PUSH2 0x088a
00000855: PUSH1 0x04
00000857: DUP1
00000858: DUP1
00000859: CALLDATALOAD
0000085a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000086f: AND
00000870: SWAP1
00000871: PUSH1 0x20
00000873: ADD
00000874: SWAP1
00000875: SWAP2
00000876: SWAP1
00000877: DUP1
00000878: CALLDATALOAD
00000879: PUSH1 0x00
0000087b: NOT
0000087c: AND
0000087d: SWAP1
0000087e: PUSH1 0x20
00000880: ADD
00000881: SWAP1
00000882: SWAP2
00000883: SWAP1
00000884: POP
00000885: POP
00000886: PUSH2 0x2769
00000889: JUMP
0000088a: JUMPDEST
0000088b: PUSH1 0x40
0000088d: MLOAD
0000088e: DUP1
0000088f: DUP3
00000890: ISZERO
00000891: ISZERO
00000892: ISZERO
00000893: ISZERO
00000894: DUP2
00000895: MSTORE
00000896: PUSH1 0x20
00000898: ADD
00000899: SWAP2
0000089a: POP
0000089b: POP
0000089c: PUSH1 0x40
0000089e: MLOAD
0000089f: DUP1
000008a0: SWAP2
000008a1: SUB
000008a2: SWAP1
000008a3: RETURN
000008a4: JUMPDEST
000008a5: CALLVALUE
000008a6: ISZERO
000008a7: PUSH2 0x08ac
000008aa: JUMPI
000008ab: INVALID
000008ac: JUMPDEST
000008ad: PUSH2 0x08b4
000008b0: PUSH2 0x2798
000008b3: JUMP
000008b4: JUMPDEST
000008b5: PUSH1 0x40
000008b7: MLOAD
000008b8: DUP1
000008b9: DUP3
000008ba: DUP2
000008bb: MSTORE
000008bc: PUSH1 0x20
000008be: ADD
000008bf: SWAP2
000008c0: POP
000008c1: POP
000008c2: PUSH1 0x40
000008c4: MLOAD
000008c5: DUP1
000008c6: SWAP2
000008c7: SUB
000008c8: SWAP1
000008c9: RETURN
000008ca: JUMPDEST
000008cb: PUSH2 0x08d2
000008ce: PUSH2 0x279e
000008d1: JUMP
000008d2: JUMPDEST
000008d3: STOP
000008d4: JUMPDEST
000008d5: CALLVALUE
000008d6: ISZERO
000008d7: PUSH2 0x08dc
000008da: JUMPI
000008db: INVALID
000008dc: JUMPDEST
000008dd: PUSH2 0x0908
000008e0: PUSH1 0x04
000008e2: DUP1
000008e3: DUP1
000008e4: CALLDATALOAD
000008e5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000008fa: AND
000008fb: SWAP1
000008fc: PUSH1 0x20
000008fe: ADD
000008ff: SWAP1
00000900: SWAP2
00000901: SWAP1
00000902: POP
00000903: POP
00000904: PUSH2 0x2976
00000907: JUMP
00000908: JUMPDEST
00000909: STOP
0000090a: JUMPDEST
0000090b: CALLVALUE
0000090c: ISZERO
0000090d: PUSH2 0x0912
00000910: JUMPI
00000911: INVALID
00000912: JUMPDEST
00000913: PUSH2 0x091a
00000916: PUSH2 0x2a17
00000919: JUMP
0000091a: JUMPDEST
0000091b: PUSH1 0x40
0000091d: MLOAD
0000091e: DUP1
0000091f: DUP3
00000920: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000935: AND
00000936: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000094b: AND
0000094c: DUP2
0000094d: MSTORE
0000094e: PUSH1 0x20
00000950: ADD
00000951: SWAP2
00000952: POP
00000953: POP
00000954: PUSH1 0x40
00000956: MLOAD
00000957: DUP1
00000958: SWAP2
00000959: SUB
0000095a: SWAP1
0000095b: RETURN
0000095c: JUMPDEST
0000095d: CALLVALUE
0000095e: ISZERO
0000095f: PUSH2 0x0964
00000962: JUMPI
00000963: INVALID
00000964: JUMPDEST
00000965: PUSH2 0x09af
00000968: PUSH1 0x04
0000096a: DUP1
0000096b: DUP1
0000096c: CALLDATALOAD
0000096d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000982: AND
00000983: SWAP1
00000984: PUSH1 0x20
00000986: ADD
00000987: SWAP1
00000988: SWAP2
00000989: SWAP1
0000098a: DUP1
0000098b: CALLDATALOAD
0000098c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000009a1: AND
000009a2: SWAP1
000009a3: PUSH1 0x20
000009a5: ADD
000009a6: SWAP1
000009a7: SWAP2
000009a8: SWAP1
000009a9: POP
000009aa: POP
000009ab: PUSH2 0x2a3d
000009ae: JUMP
000009af: JUMPDEST
000009b0: PUSH1 0x40
000009b2: MLOAD
000009b3: DUP1
000009b4: DUP3
000009b5: DUP2
000009b6: MSTORE
000009b7: PUSH1 0x20
000009b9: ADD
000009ba: SWAP2
000009bb: POP
000009bc: POP
000009bd: PUSH1 0x40
000009bf: MLOAD
000009c0: DUP1
000009c1: SWAP2
000009c2: SUB
000009c3: SWAP1
000009c4: RETURN
000009c5: JUMPDEST
000009c6: CALLVALUE
000009c7: ISZERO
000009c8: PUSH2 0x09cd
000009cb: JUMPI
000009cc: INVALID
000009cd: JUMPDEST
000009ce: PUSH2 0x09d5
000009d1: PUSH2 0x2ac5
000009d4: JUMP
000009d5: JUMPDEST
000009d6: PUSH1 0x40
000009d8: MLOAD
000009d9: DUP1
000009da: DUP3
000009db: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000009f0: AND
000009f1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000a06: AND
00000a07: DUP2
00000a08: MSTORE
00000a09: PUSH1 0x20
00000a0b: ADD
00000a0c: SWAP2
00000a0d: POP
00000a0e: POP
00000a0f: PUSH1 0x40
00000a11: MLOAD
00000a12: DUP1
00000a13: SWAP2
00000a14: SUB
00000a15: SWAP1
00000a16: RETURN
00000a17: JUMPDEST
00000a18: CALLVALUE
00000a19: ISZERO
00000a1a: PUSH2 0x0a1f
00000a1d: JUMPI
00000a1e: INVALID
00000a1f: JUMPDEST
00000a20: PUSH2 0x0a4b
00000a23: PUSH1 0x04
00000a25: DUP1
00000a26: DUP1
00000a27: CALLDATALOAD
00000a28: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000a3d: AND
00000a3e: SWAP1
00000a3f: PUSH1 0x20
00000a41: ADD
00000a42: SWAP1
00000a43: SWAP2
00000a44: SWAP1
00000a45: POP
00000a46: POP
00000a47: PUSH2 0x2aeb
00000a4a: JUMP
00000a4b: JUMPDEST
00000a4c: PUSH1 0x40
00000a4e: MLOAD
00000a4f: DUP1
00000a50: DUP3
00000a51: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000a66: AND
00000a67: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000a7c: AND
00000a7d: DUP2
00000a7e: MSTORE
00000a7f: PUSH1 0x20
00000a81: ADD
00000a82: SWAP2
00000a83: POP
00000a84: POP
00000a85: PUSH1 0x40
00000a87: MLOAD
00000a88: DUP1
00000a89: SWAP2
00000a8a: SUB
00000a8b: SWAP1
00000a8c: RETURN
00000a8d: JUMPDEST
00000a8e: CALLVALUE
00000a8f: ISZERO
00000a90: PUSH2 0x0a95
00000a93: JUMPI
00000a94: INVALID
00000a95: JUMPDEST
00000a96: PUSH2 0x0b49
00000a99: PUSH1 0x04
00000a9b: DUP1
00000a9c: DUP1
00000a9d: CALLDATALOAD
00000a9e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000ab3: AND
00000ab4: SWAP1
00000ab5: PUSH1 0x20
00000ab7: ADD
00000ab8: SWAP1
00000ab9: SWAP2
00000aba: SWAP1
00000abb: DUP1
00000abc: CALLDATALOAD
00000abd: SWAP1
00000abe: PUSH1 0x20
00000ac0: ADD
00000ac1: SWAP1
00000ac2: SWAP2
00000ac3: SWAP1
00000ac4: DUP1
00000ac5: CALLDATALOAD
00000ac6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000adb: AND
00000adc: SWAP1
00000add: PUSH1 0x20
00000adf: ADD
00000ae0: SWAP1
00000ae1: SWAP2
00000ae2: SWAP1
00000ae3: DUP1
00000ae4: CALLDATALOAD
00000ae5: SWAP1
00000ae6: PUSH1 0x20
00000ae8: ADD
00000ae9: SWAP1
00000aea: SWAP2
00000aeb: SWAP1
00000aec: DUP1
00000aed: CALLDATALOAD
00000aee: SWAP1
00000aef: PUSH1 0x20
00000af1: ADD
00000af2: SWAP1
00000af3: SWAP2
00000af4: SWAP1
00000af5: DUP1
00000af6: CALLDATALOAD
00000af7: SWAP1
00000af8: PUSH1 0x20
00000afa: ADD
00000afb: SWAP1
00000afc: SWAP2
00000afd: SWAP1
00000afe: DUP1
00000aff: CALLDATALOAD
00000b00: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000b15: AND
00000b16: SWAP1
00000b17: PUSH1 0x20
00000b19: ADD
00000b1a: SWAP1
00000b1b: SWAP2
00000b1c: SWAP1
00000b1d: DUP1
00000b1e: CALLDATALOAD
00000b1f: PUSH1 0xff
00000b21: AND
00000b22: SWAP1
00000b23: PUSH1 0x20
00000b25: ADD
00000b26: SWAP1
00000b27: SWAP2
00000b28: SWAP1
00000b29: DUP1
00000b2a: CALLDATALOAD
00000b2b: PUSH1 0x00
00000b2d: NOT
00000b2e: AND
00000b2f: SWAP1
00000b30: PUSH1 0x20
00000b32: ADD
00000b33: SWAP1
00000b34: SWAP2
00000b35: SWAP1
00000b36: DUP1
00000b37: CALLDATALOAD
00000b38: PUSH1 0x00
00000b3a: NOT
00000b3b: AND
00000b3c: SWAP1
00000b3d: PUSH1 0x20
00000b3f: ADD
00000b40: SWAP1
00000b41: SWAP2
00000b42: SWAP1
00000b43: POP
00000b44: POP
00000b45: PUSH2 0x2b1e
00000b48: JUMP
00000b49: JUMPDEST
00000b4a: PUSH1 0x40
00000b4c: MLOAD
00000b4d: DUP1
00000b4e: DUP3
00000b4f: DUP2
00000b50: MSTORE
00000b51: PUSH1 0x20
00000b53: ADD
00000b54: SWAP2
00000b55: POP
00000b56: POP
00000b57: PUSH1 0x40
00000b59: MLOAD
00000b5a: DUP1
00000b5b: SWAP2
00000b5c: SUB
00000b5d: SWAP1
00000b5e: RETURN
00000b5f: JUMPDEST
00000b60: PUSH1 0x00
00000b62: PUSH1 0x02
00000b64: ADDRESS
00000b65: DUP14
00000b66: DUP14
00000b67: DUP14
00000b68: DUP14
00000b69: DUP14
00000b6a: DUP14
00000b6b: PUSH1 0x00
00000b6d: PUSH1 0x40
00000b6f: MLOAD
00000b70: PUSH1 0x20
00000b72: ADD
00000b73: MSTORE
00000b74: PUSH1 0x40
00000b76: MLOAD
00000b77: DUP1
00000b78: DUP9
00000b79: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000b8e: AND
00000b8f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000ba4: AND
00000ba5: PUSH13 0x01000000000000000000000000
00000bb3: MUL
00000bb4: DUP2
00000bb5: MSTORE
00000bb6: PUSH1 0x14
00000bb8: ADD
00000bb9: DUP8
00000bba: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000bcf: AND
00000bd0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000be5: AND
00000be6: PUSH13 0x01000000000000000000000000
00000bf4: MUL
00000bf5: DUP2
00000bf6: MSTORE
00000bf7: PUSH1 0x14
00000bf9: ADD
00000bfa: DUP7
00000bfb: DUP2
00000bfc: MSTORE
00000bfd: PUSH1 0x20
00000bff: ADD
00000c00: DUP6
00000c01: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000c16: AND
00000c17: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000c2c: AND
00000c2d: PUSH13 0x01000000000000000000000000
00000c3b: MUL
00000c3c: DUP2
00000c3d: MSTORE
00000c3e: PUSH1 0x14
00000c40: ADD
00000c41: DUP5
00000c42: DUP2
00000c43: MSTORE
00000c44: PUSH1 0x20
00000c46: ADD
00000c47: DUP4
00000c48: DUP2
00000c49: MSTORE
00000c4a: PUSH1 0x20
00000c4c: ADD
00000c4d: DUP3
00000c4e: DUP2
00000c4f: MSTORE
00000c50: PUSH1 0x20
00000c52: ADD
00000c53: SWAP8
00000c54: POP
00000c55: POP
00000c56: POP
00000c57: POP
00000c58: POP
00000c59: POP
00000c5a: POP
00000c5b: POP
00000c5c: PUSH1 0x20
00000c5e: PUSH1 0x40
00000c60: MLOAD
00000c61: DUP1
00000c62: DUP4
00000c63: SUB
00000c64: DUP2
00000c65: PUSH1 0x00
00000c67: DUP7
00000c68: PUSH2 0x61da
00000c6b: GAS
00000c6c: SUB
00000c6d: CALL
00000c6e: ISZERO
00000c6f: ISZERO
00000c70: PUSH2 0x0c75
00000c73: JUMPI
00000c74: INVALID
00000c75: JUMPDEST
00000c76: POP
00000c77: POP
00000c78: PUSH1 0x40
00000c7a: MLOAD
00000c7b: DUP1
00000c7c: MLOAD
00000c7d: SWAP1
00000c7e: POP
00000c7f: SWAP1
00000c80: POP
00000c81: PUSH1 0x07
00000c83: PUSH1 0x00
00000c85: DUP8
00000c86: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000c9b: AND
00000c9c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000cb1: AND
00000cb2: DUP2
00000cb3: MSTORE
00000cb4: PUSH1 0x20
00000cb6: ADD
00000cb7: SWAP1
00000cb8: DUP2
00000cb9: MSTORE
00000cba: PUSH1 0x20
00000cbc: ADD
00000cbd: PUSH1 0x00
00000cbf: KECCAK256
00000cc0: PUSH1 0x00
00000cc2: DUP3
00000cc3: PUSH1 0x00
00000cc5: NOT
00000cc6: AND
00000cc7: PUSH1 0x00
00000cc9: NOT
00000cca: AND
00000ccb: DUP2
00000ccc: MSTORE
00000ccd: PUSH1 0x20
00000ccf: ADD
00000cd0: SWAP1
00000cd1: DUP2
00000cd2: MSTORE
00000cd3: PUSH1 0x20
00000cd5: ADD
00000cd6: PUSH1 0x00
00000cd8: KECCAK256
00000cd9: PUSH1 0x00
00000cdb: SWAP1
00000cdc: SLOAD
00000cdd: SWAP1
00000cde: PUSH2 0x0100
00000ce1: EXP
00000ce2: SWAP1
00000ce3: DIV
00000ce4: PUSH1 0xff
00000ce6: AND
00000ce7: DUP1
00000ce8: PUSH2 0x0de4
00000ceb: JUMPI
00000cec: POP
00000ced: DUP6
00000cee: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000d03: AND
00000d04: PUSH1 0x01
00000d06: DUP3
00000d07: PUSH1 0x40
00000d09: MLOAD
00000d0a: DUP1
00000d0b: DUP1
00000d0c: PUSH32 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000
00000d2d: DUP2
00000d2e: MSTORE
00000d2f: POP
00000d30: PUSH1 0x1c
00000d32: ADD
00000d33: DUP3
00000d34: PUSH1 0x00
00000d36: NOT
00000d37: AND
00000d38: PUSH1 0x00
00000d3a: NOT
00000d3b: AND
00000d3c: DUP2
00000d3d: MSTORE
00000d3e: PUSH1 0x20
00000d40: ADD
00000d41: SWAP2
00000d42: POP
00000d43: POP
00000d44: PUSH1 0x40
00000d46: MLOAD
00000d47: DUP1
00000d48: SWAP2
00000d49: SUB
00000d4a: SWAP1
00000d4b: KECCAK256
00000d4c: DUP8
00000d4d: DUP8
00000d4e: DUP8
00000d4f: PUSH1 0x40
00000d51: MLOAD
00000d52: DUP1
00000d53: PUSH1 0x00
00000d55: MSTORE
00000d56: PUSH1 0x20
00000d58: ADD
00000d59: PUSH1 0x40
00000d5b: MSTORE
00000d5c: PUSH1 0x00
00000d5e: PUSH1 0x40
00000d60: MLOAD
00000d61: PUSH1 0x20
00000d63: ADD
00000d64: MSTORE
00000d65: PUSH1 0x40
00000d67: MLOAD
00000d68: DUP1
00000d69: DUP6
00000d6a: PUSH1 0x00
00000d6c: NOT
00000d6d: AND
00000d6e: PUSH1 0x00
00000d70: NOT
00000d71: AND
00000d72: DUP2
00000d73: MSTORE
00000d74: PUSH1 0x20
00000d76: ADD
00000d77: DUP5
00000d78: PUSH1 0xff
00000d7a: AND
00000d7b: PUSH1 0xff
00000d7d: AND
00000d7e: DUP2
00000d7f: MSTORE
00000d80: PUSH1 0x20
00000d82: ADD
00000d83: DUP4
00000d84: PUSH1 0x00
00000d86: NOT
00000d87: AND
00000d88: PUSH1 0x00
00000d8a: NOT
00000d8b: AND
00000d8c: DUP2
00000d8d: MSTORE
00000d8e: PUSH1 0x20
00000d90: ADD
00000d91: DUP3
00000d92: PUSH1 0x00
00000d94: NOT
00000d95: AND
00000d96: PUSH1 0x00
00000d98: NOT
00000d99: AND
00000d9a: DUP2
00000d9b: MSTORE
00000d9c: PUSH1 0x20
00000d9e: ADD
00000d9f: SWAP5
00000da0: POP
00000da1: POP
00000da2: POP
00000da3: POP
00000da4: POP
00000da5: PUSH1 0x20
00000da7: PUSH1 0x40
00000da9: MLOAD
00000daa: PUSH1 0x20
00000dac: DUP2
00000dad: SUB
00000dae: SWAP1
00000daf: DUP1
00000db0: DUP5
00000db1: SUB
00000db2: SWAP1
00000db3: PUSH1 0x00
00000db5: DUP7
00000db6: PUSH2 0x61da
00000db9: GAS
00000dba: SUB
00000dbb: CALL
00000dbc: ISZERO
00000dbd: ISZERO
00000dbe: PUSH2 0x0dc3
00000dc1: JUMPI
00000dc2: INVALID
00000dc3: JUMPDEST
00000dc4: POP
00000dc5: POP
00000dc6: PUSH1 0x20
00000dc8: PUSH1 0x40
00000dca: MLOAD
00000dcb: SUB
00000dcc: MLOAD
00000dcd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000de2: AND
00000de3: EQ
00000de4: JUMPDEST
00000de5: DUP1
00000de6: ISZERO
00000de7: PUSH2 0x0df0
00000dea: JUMPI
00000deb: POP
00000dec: DUP8
00000ded: NUMBER
00000dee: GT
00000def: ISZERO
00000df0: JUMPDEST
00000df1: DUP1
00000df2: ISZERO
00000df3: PUSH2 0x0e5d
00000df6: JUMPI
00000df7: POP
00000df8: DUP11
00000df9: PUSH2 0x0e5a
00000dfc: PUSH1 0x08
00000dfe: PUSH1 0x00
00000e00: DUP10
00000e01: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000e16: AND
00000e17: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000e2c: AND
00000e2d: DUP2
00000e2e: MSTORE
00000e2f: PUSH1 0x20
00000e31: ADD
00000e32: SWAP1
00000e33: DUP2
00000e34: MSTORE
00000e35: PUSH1 0x20
00000e37: ADD
00000e38: PUSH1 0x00
00000e3a: KECCAK256
00000e3b: PUSH1 0x00
00000e3d: DUP5
00000e3e: PUSH1 0x00
00000e40: NOT
00000e41: AND
00000e42: PUSH1 0x00
00000e44: NOT
00000e45: AND
00000e46: DUP2
00000e47: MSTORE
00000e48: PUSH1 0x20
00000e4a: ADD
00000e4b: SWAP1
00000e4c: DUP2
00000e4d: MSTORE
00000e4e: PUSH1 0x20
00000e50: ADD
00000e51: PUSH1 0x00
00000e53: KECCAK256
00000e54: SLOAD
00000e55: DUP5
00000e56: PUSH2 0x2ee0
00000e59: JUMP
00000e5a: JUMPDEST
00000e5b: GT
00000e5c: ISZERO
00000e5d: JUMPDEST
00000e5e: ISZERO
00000e5f: ISZERO
00000e60: PUSH2 0x0e68
00000e63: JUMPI
00000e64: PUSH2 0x0000
00000e67: JUMP
00000e68: JUMPDEST
00000e69: PUSH2 0x0e76
00000e6c: DUP13
00000e6d: DUP13
00000e6e: DUP13
00000e6f: DUP13
00000e70: DUP11
00000e71: DUP8
00000e72: PUSH2 0x2f0c
00000e75: JUMP
00000e76: JUMPDEST
00000e77: PUSH2 0x0ed8
00000e7a: PUSH1 0x08
00000e7c: PUSH1 0x00
00000e7e: DUP9
00000e7f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000e94: AND
00000e95: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000eaa: AND
00000eab: DUP2
00000eac: MSTORE
00000ead: PUSH1 0x20
00000eaf: ADD
00000eb0: SWAP1
00000eb1: DUP2
00000eb2: MSTORE
00000eb3: PUSH1 0x20
00000eb5: ADD
00000eb6: PUSH1 0x00
00000eb8: KECCAK256
00000eb9: PUSH1 0x00
00000ebb: DUP4
00000ebc: PUSH1 0x00
00000ebe: NOT
00000ebf: AND
00000ec0: PUSH1 0x00
00000ec2: NOT
00000ec3: AND
00000ec4: DUP2
00000ec5: MSTORE
00000ec6: PUSH1 0x20
00000ec8: ADD
00000ec9: SWAP1
00000eca: DUP2
00000ecb: MSTORE
00000ecc: PUSH1 0x20
00000ece: ADD
00000ecf: PUSH1 0x00
00000ed1: KECCAK256
00000ed2: SLOAD
00000ed3: DUP4
00000ed4: PUSH2 0x2ee0
00000ed7: JUMP
00000ed8: JUMPDEST
00000ed9: PUSH1 0x08
00000edb: PUSH1 0x00
00000edd: DUP9
00000ede: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000ef3: AND
00000ef4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000f09: AND
00000f0a: DUP2
00000f0b: MSTORE
00000f0c: PUSH1 0x20
00000f0e: ADD
00000f0f: SWAP1
00000f10: DUP2
00000f11: MSTORE
00000f12: PUSH1 0x20
00000f14: ADD
00000f15: PUSH1 0x00
00000f17: KECCAK256
00000f18: PUSH1 0x00
00000f1a: DUP4
00000f1b: PUSH1 0x00
00000f1d: NOT
00000f1e: AND
00000f1f: PUSH1 0x00
00000f21: NOT
00000f22: AND
00000f23: DUP2
00000f24: MSTORE
00000f25: PUSH1 0x20
00000f27: ADD
00000f28: SWAP1
00000f29: DUP2
00000f2a: MSTORE
00000f2b: PUSH1 0x20
00000f2d: ADD
00000f2e: PUSH1 0x00
00000f30: KECCAK256
00000f31: DUP2
00000f32: SWAP1
00000f33: SSTORE
00000f34: POP
00000f35: PUSH32 0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d
00000f56: DUP13
00000f57: DUP4
00000f58: DUP13
00000f59: DUP15
00000f5a: DUP7
00000f5b: DUP15
00000f5c: MUL
00000f5d: DUP2
00000f5e: ISZERO
00000f5f: ISZERO
00000f60: PUSH2 0x0f65
00000f63: JUMPI
00000f64: INVALID
00000f65: JUMPDEST
00000f66: DIV
00000f67: DUP11
00000f68: CALLER
00000f69: PUSH1 0x40
00000f6b: MLOAD
00000f6c: DUP1
00000f6d: DUP8
00000f6e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000f83: AND
00000f84: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000f99: AND
00000f9a: DUP2
00000f9b: MSTORE
00000f9c: PUSH1 0x20
00000f9e: ADD
00000f9f: DUP7
00000fa0: DUP2
00000fa1: MSTORE
00000fa2: PUSH1 0x20
00000fa4: ADD
00000fa5: DUP6
00000fa6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000fbb: AND
00000fbc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000fd1: AND
00000fd2: DUP2
00000fd3: MSTORE
00000fd4: PUSH1 0x20
00000fd6: ADD
00000fd7: DUP5
00000fd8: DUP2
00000fd9: MSTORE
00000fda: PUSH1 0x20
00000fdc: ADD
00000fdd: DUP4
00000fde: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00000ff3: AND
00000ff4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001009: AND
0000100a: DUP2
0000100b: MSTORE
0000100c: PUSH1 0x20
0000100e: ADD
0000100f: DUP3
00001010: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001025: AND
00001026: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000103b: AND
0000103c: DUP2
0000103d: MSTORE
0000103e: PUSH1 0x20
00001040: ADD
00001041: SWAP7
00001042: POP
00001043: POP
00001044: POP
00001045: POP
00001046: POP
00001047: POP
00001048: POP
00001049: PUSH1 0x40
0000104b: MLOAD
0000104c: DUP1
0000104d: SWAP2
0000104e: SUB
0000104f: SWAP1
00001050: LOG1
00001051: JUMPDEST
00001052: POP
00001053: POP
00001054: POP
00001055: POP
00001056: POP
00001057: POP
00001058: POP
00001059: POP
0000105a: POP
0000105b: POP
0000105c: POP
0000105d: POP
0000105e: JUMP
0000105f: JUMPDEST
00001060: PUSH1 0x00
00001062: PUSH1 0x02
00001064: ADDRESS
00001065: DUP9
00001066: DUP9
00001067: DUP9
00001068: DUP9
00001069: DUP9
0000106a: DUP9
0000106b: PUSH1 0x00
0000106d: PUSH1 0x40
0000106f: MLOAD
00001070: PUSH1 0x20
00001072: ADD
00001073: MSTORE
00001074: PUSH1 0x40
00001076: MLOAD
00001077: DUP1
00001078: DUP9
00001079: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000108e: AND
0000108f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000010a4: AND
000010a5: PUSH13 0x01000000000000000000000000
000010b3: MUL
000010b4: DUP2
000010b5: MSTORE
000010b6: PUSH1 0x14
000010b8: ADD
000010b9: DUP8
000010ba: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000010cf: AND
000010d0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000010e5: AND
000010e6: PUSH13 0x01000000000000000000000000
000010f4: MUL
000010f5: DUP2
000010f6: MSTORE
000010f7: PUSH1 0x14
000010f9: ADD
000010fa: DUP7
000010fb: DUP2
000010fc: MSTORE
000010fd: PUSH1 0x20
000010ff: ADD
00001100: DUP6
00001101: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001116: AND
00001117: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000112c: AND
0000112d: PUSH13 0x01000000000000000000000000
0000113b: MUL
0000113c: DUP2
0000113d: MSTORE
0000113e: PUSH1 0x14
00001140: ADD
00001141: DUP5
00001142: DUP2
00001143: MSTORE
00001144: PUSH1 0x20
00001146: ADD
00001147: DUP4
00001148: DUP2
00001149: MSTORE
0000114a: PUSH1 0x20
0000114c: ADD
0000114d: DUP3
0000114e: DUP2
0000114f: MSTORE
00001150: PUSH1 0x20
00001152: ADD
00001153: SWAP8
00001154: POP
00001155: POP
00001156: POP
00001157: POP
00001158: POP
00001159: POP
0000115a: POP
0000115b: POP
0000115c: PUSH1 0x20
0000115e: PUSH1 0x40
00001160: MLOAD
00001161: DUP1
00001162: DUP4
00001163: SUB
00001164: DUP2
00001165: PUSH1 0x00
00001167: DUP7
00001168: PUSH2 0x61da
0000116b: GAS
0000116c: SUB
0000116d: CALL
0000116e: ISZERO
0000116f: ISZERO
00001170: PUSH2 0x1175
00001173: JUMPI
00001174: INVALID
00001175: JUMPDEST
00001176: POP
00001177: POP
00001178: PUSH1 0x40
0000117a: MLOAD
0000117b: DUP1
0000117c: MLOAD
0000117d: SWAP1
0000117e: POP
0000117f: SWAP1
00001180: POP
00001181: PUSH1 0x01
00001183: PUSH1 0x07
00001185: PUSH1 0x00
00001187: CALLER
00001188: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000119d: AND
0000119e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000011b3: AND
000011b4: DUP2
000011b5: MSTORE
000011b6: PUSH1 0x20
000011b8: ADD
000011b9: SWAP1
000011ba: DUP2
000011bb: MSTORE
000011bc: PUSH1 0x20
000011be: ADD
000011bf: PUSH1 0x00
000011c1: KECCAK256
000011c2: PUSH1 0x00
000011c4: DUP4
000011c5: PUSH1 0x00
000011c7: NOT
000011c8: AND
000011c9: PUSH1 0x00
000011cb: NOT
000011cc: AND
000011cd: DUP2
000011ce: MSTORE
000011cf: PUSH1 0x20
000011d1: ADD
000011d2: SWAP1
000011d3: DUP2
000011d4: MSTORE
000011d5: PUSH1 0x20
000011d7: ADD
000011d8: PUSH1 0x00
000011da: KECCAK256
000011db: PUSH1 0x00
000011dd: PUSH2 0x0100
000011e0: EXP
000011e1: DUP2
000011e2: SLOAD
000011e3: DUP2
000011e4: PUSH1 0xff
000011e6: MUL
000011e7: NOT
000011e8: AND
000011e9: SWAP1
000011ea: DUP4
000011eb: ISZERO
000011ec: ISZERO
000011ed: MUL
000011ee: OR
000011ef: SWAP1
000011f0: SSTORE
000011f1: POP
000011f2: PUSH32 0x3f7f2eda73683c21a15f9435af1028c93185b5f1fa38270762dc32be606b3e85
00001213: DUP8
00001214: DUP8
00001215: DUP8
00001216: DUP8
00001217: DUP8
00001218: DUP8
00001219: CALLER
0000121a: PUSH1 0x40
0000121c: MLOAD
0000121d: DUP1
0000121e: DUP9
0000121f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001234: AND
00001235: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000124a: AND
0000124b: DUP2
0000124c: MSTORE
0000124d: PUSH1 0x20
0000124f: ADD
00001250: DUP8
00001251: DUP2
00001252: MSTORE
00001253: PUSH1 0x20
00001255: ADD
00001256: DUP7
00001257: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000126c: AND
0000126d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001282: AND
00001283: DUP2
00001284: MSTORE
00001285: PUSH1 0x20
00001287: ADD
00001288: DUP6
00001289: DUP2
0000128a: MSTORE
0000128b: PUSH1 0x20
0000128d: ADD
0000128e: DUP5
0000128f: DUP2
00001290: MSTORE
00001291: PUSH1 0x20
00001293: ADD
00001294: DUP4
00001295: DUP2
00001296: MSTORE
00001297: PUSH1 0x20
00001299: ADD
0000129a: DUP3
0000129b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000012b0: AND
000012b1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000012c6: AND
000012c7: DUP2
000012c8: MSTORE
000012c9: PUSH1 0x20
000012cb: ADD
000012cc: SWAP8
000012cd: POP
000012ce: POP
000012cf: POP
000012d0: POP
000012d1: POP
000012d2: POP
000012d3: POP
000012d4: POP
000012d5: PUSH1 0x40
000012d7: MLOAD
000012d8: DUP1
000012d9: SWAP2
000012da: SUB
000012db: SWAP1
000012dc: LOG1
000012dd: JUMPDEST
000012de: POP
000012df: POP
000012e0: POP
000012e1: POP
000012e2: POP
000012e3: POP
000012e4: POP
000012e5: JUMP
000012e6: JUMPDEST
000012e7: PUSH1 0x08
000012e9: PUSH1 0x20
000012eb: MSTORE
000012ec: DUP2
000012ed: PUSH1 0x00
000012ef: MSTORE
000012f0: PUSH1 0x40
000012f2: PUSH1 0x00
000012f4: KECCAK256
000012f5: PUSH1 0x20
000012f7: MSTORE
000012f8: DUP1
000012f9: PUSH1 0x00
000012fb: MSTORE
000012fc: PUSH1 0x40
000012fe: PUSH1 0x00
00001300: KECCAK256
00001301: PUSH1 0x00
00001303: SWAP2
00001304: POP
00001305: SWAP2
00001306: POP
00001307: POP
00001308: SLOAD
00001309: DUP2
0000130a: JUMP
0000130b: JUMPDEST
0000130c: PUSH1 0x00
0000130e: PUSH1 0x02
00001310: ADDRESS
00001311: DUP12
00001312: DUP12
00001313: DUP12
00001314: DUP12
00001315: DUP12
00001316: DUP12
00001317: PUSH1 0x00
00001319: PUSH1 0x40
0000131b: MLOAD
0000131c: PUSH1 0x20
0000131e: ADD
0000131f: MSTORE
00001320: PUSH1 0x40
00001322: MLOAD
00001323: DUP1
00001324: DUP9
00001325: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000133a: AND
0000133b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001350: AND
00001351: PUSH13 0x01000000000000000000000000
0000135f: MUL
00001360: DUP2
00001361: MSTORE
00001362: PUSH1 0x14
00001364: ADD
00001365: DUP8
00001366: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000137b: AND
0000137c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001391: AND
00001392: PUSH13 0x01000000000000000000000000
000013a0: MUL
000013a1: DUP2
000013a2: MSTORE
000013a3: PUSH1 0x14
000013a5: ADD
000013a6: DUP7
000013a7: DUP2
000013a8: MSTORE
000013a9: PUSH1 0x20
000013ab: ADD
000013ac: DUP6
000013ad: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000013c2: AND
000013c3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000013d8: AND
000013d9: PUSH13 0x01000000000000000000000000
000013e7: MUL
000013e8: DUP2
000013e9: MSTORE
000013ea: PUSH1 0x14
000013ec: ADD
000013ed: DUP5
000013ee: DUP2
000013ef: MSTORE
000013f0: PUSH1 0x20
000013f2: ADD
000013f3: DUP4
000013f4: DUP2
000013f5: MSTORE
000013f6: PUSH1 0x20
000013f8: ADD
000013f9: DUP3
000013fa: DUP2
000013fb: MSTORE
000013fc: PUSH1 0x20
000013fe: ADD
000013ff: SWAP8
00001400: POP
00001401: POP
00001402: POP
00001403: POP
00001404: POP
00001405: POP
00001406: POP
00001407: POP
00001408: PUSH1 0x20
0000140a: PUSH1 0x40
0000140c: MLOAD
0000140d: DUP1
0000140e: DUP4
0000140f: SUB
00001410: DUP2
00001411: PUSH1 0x00
00001413: DUP7
00001414: PUSH2 0x61da
00001417: GAS
00001418: SUB
00001419: CALL
0000141a: ISZERO
0000141b: ISZERO
0000141c: PUSH2 0x1421
0000141f: JUMPI
00001420: INVALID
00001421: JUMPDEST
00001422: POP
00001423: POP
00001424: PUSH1 0x40
00001426: MLOAD
00001427: DUP1
00001428: MLOAD
00001429: SWAP1
0000142a: POP
0000142b: SWAP1
0000142c: POP
0000142d: PUSH1 0x07
0000142f: PUSH1 0x00
00001431: CALLER
00001432: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001447: AND
00001448: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000145d: AND
0000145e: DUP2
0000145f: MSTORE
00001460: PUSH1 0x20
00001462: ADD
00001463: SWAP1
00001464: DUP2
00001465: MSTORE
00001466: PUSH1 0x20
00001468: ADD
00001469: PUSH1 0x00
0000146b: KECCAK256
0000146c: PUSH1 0x00
0000146e: DUP3
0000146f: PUSH1 0x00
00001471: NOT
00001472: AND
00001473: PUSH1 0x00
00001475: NOT
00001476: AND
00001477: DUP2
00001478: MSTORE
00001479: PUSH1 0x20
0000147b: ADD
0000147c: SWAP1
0000147d: DUP2
0000147e: MSTORE
0000147f: PUSH1 0x20
00001481: ADD
00001482: PUSH1 0x00
00001484: KECCAK256
00001485: PUSH1 0x00
00001487: SWAP1
00001488: SLOAD
00001489: SWAP1
0000148a: PUSH2 0x0100
0000148d: EXP
0000148e: SWAP1
0000148f: DIV
00001490: PUSH1 0xff
00001492: AND
00001493: DUP1
00001494: PUSH2 0x1590
00001497: JUMPI
00001498: POP
00001499: CALLER
0000149a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000014af: AND
000014b0: PUSH1 0x01
000014b2: DUP3
000014b3: PUSH1 0x40
000014b5: MLOAD
000014b6: DUP1
000014b7: DUP1
000014b8: PUSH32 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000
000014d9: DUP2
000014da: MSTORE
000014db: POP
000014dc: PUSH1 0x1c
000014de: ADD
000014df: DUP3
000014e0: PUSH1 0x00
000014e2: NOT
000014e3: AND
000014e4: PUSH1 0x00
000014e6: NOT
000014e7: AND
000014e8: DUP2
000014e9: MSTORE
000014ea: PUSH1 0x20
000014ec: ADD
000014ed: SWAP2
000014ee: POP
000014ef: POP
000014f0: PUSH1 0x40
000014f2: MLOAD
000014f3: DUP1
000014f4: SWAP2
000014f5: SUB
000014f6: SWAP1
000014f7: KECCAK256
000014f8: DUP7
000014f9: DUP7
000014fa: DUP7
000014fb: PUSH1 0x40
000014fd: MLOAD
000014fe: DUP1
000014ff: PUSH1 0x00
00001501: MSTORE
00001502: PUSH1 0x20
00001504: ADD
00001505: PUSH1 0x40
00001507: MSTORE
00001508: PUSH1 0x00
0000150a: PUSH1 0x40
0000150c: MLOAD
0000150d: PUSH1 0x20
0000150f: ADD
00001510: MSTORE
00001511: PUSH1 0x40
00001513: MLOAD
00001514: DUP1
00001515: DUP6
00001516: PUSH1 0x00
00001518: NOT
00001519: AND
0000151a: PUSH1 0x00
0000151c: NOT
0000151d: AND
0000151e: DUP2
0000151f: MSTORE
00001520: PUSH1 0x20
00001522: ADD
00001523: DUP5
00001524: PUSH1 0xff
00001526: AND
00001527: PUSH1 0xff
00001529: AND
0000152a: DUP2
0000152b: MSTORE
0000152c: PUSH1 0x20
0000152e: ADD
0000152f: DUP4
00001530: PUSH1 0x00
00001532: NOT
00001533: AND
00001534: PUSH1 0x00
00001536: NOT
00001537: AND
00001538: DUP2
00001539: MSTORE
0000153a: PUSH1 0x20
0000153c: ADD
0000153d: DUP3
0000153e: PUSH1 0x00
00001540: NOT
00001541: AND
00001542: PUSH1 0x00
00001544: NOT
00001545: AND
00001546: DUP2
00001547: MSTORE
00001548: PUSH1 0x20
0000154a: ADD
0000154b: SWAP5
0000154c: POP
0000154d: POP
0000154e: POP
0000154f: POP
00001550: POP
00001551: PUSH1 0x20
00001553: PUSH1 0x40
00001555: MLOAD
00001556: PUSH1 0x20
00001558: DUP2
00001559: SUB
0000155a: SWAP1
0000155b: DUP1
0000155c: DUP5
0000155d: SUB
0000155e: SWAP1
0000155f: PUSH1 0x00
00001561: DUP7
00001562: PUSH2 0x61da
00001565: GAS
00001566: SUB
00001567: CALL
00001568: ISZERO
00001569: ISZERO
0000156a: PUSH2 0x156f
0000156d: JUMPI
0000156e: INVALID
0000156f: JUMPDEST
00001570: POP
00001571: POP
00001572: PUSH1 0x20
00001574: PUSH1 0x40
00001576: MLOAD
00001577: SUB
00001578: MLOAD
00001579: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000158e: AND
0000158f: EQ
00001590: JUMPDEST
00001591: ISZERO
00001592: ISZERO
00001593: PUSH2 0x159b
00001596: JUMPI
00001597: PUSH2 0x0000
0000159a: JUMP
0000159b: JUMPDEST
0000159c: DUP9
0000159d: PUSH1 0x08
0000159f: PUSH1 0x00
000015a1: CALLER
000015a2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000015b7: AND
000015b8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000015cd: AND
000015ce: DUP2
000015cf: MSTORE
000015d0: PUSH1 0x20
000015d2: ADD
000015d3: SWAP1
000015d4: DUP2
000015d5: MSTORE
000015d6: PUSH1 0x20
000015d8: ADD
000015d9: PUSH1 0x00
000015db: KECCAK256
000015dc: PUSH1 0x00
000015de: DUP4
000015df: PUSH1 0x00
000015e1: NOT
000015e2: AND
000015e3: PUSH1 0x00
000015e5: NOT
000015e6: AND
000015e7: DUP2
000015e8: MSTORE
000015e9: PUSH1 0x20
000015eb: ADD
000015ec: SWAP1
000015ed: DUP2
000015ee: MSTORE
000015ef: PUSH1 0x20
000015f1: ADD
000015f2: PUSH1 0x00
000015f4: KECCAK256
000015f5: DUP2
000015f6: SWAP1
000015f7: SSTORE
000015f8: POP
000015f9: PUSH32 0x1e0b760c386003e9cb9bcf4fcf3997886042859d9b6ed6320e804597fcdb28b0
0000161a: DUP11
0000161b: DUP11
0000161c: DUP11
0000161d: DUP11
0000161e: DUP11
0000161f: DUP11
00001620: CALLER
00001621: DUP12
00001622: DUP12
00001623: DUP12
00001624: PUSH1 0x40
00001626: MLOAD
00001627: DUP1
00001628: DUP12
00001629: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000163e: AND
0000163f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001654: AND
00001655: DUP2
00001656: MSTORE
00001657: PUSH1 0x20
00001659: ADD
0000165a: DUP11
0000165b: DUP2
0000165c: MSTORE
0000165d: PUSH1 0x20
0000165f: ADD
00001660: DUP10
00001661: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001676: AND
00001677: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000168c: AND
0000168d: DUP2
0000168e: MSTORE
0000168f: PUSH1 0x20
00001691: ADD
00001692: DUP9
00001693: DUP2
00001694: MSTORE
00001695: PUSH1 0x20
00001697: ADD
00001698: DUP8
00001699: DUP2
0000169a: MSTORE
0000169b: PUSH1 0x20
0000169d: ADD
0000169e: DUP7
0000169f: DUP2
000016a0: MSTORE
000016a1: PUSH1 0x20
000016a3: ADD
000016a4: DUP6
000016a5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000016ba: AND
000016bb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000016d0: AND
000016d1: DUP2
000016d2: MSTORE
000016d3: PUSH1 0x20
000016d5: ADD
000016d6: DUP5
000016d7: PUSH1 0xff
000016d9: AND
000016da: PUSH1 0xff
000016dc: AND
000016dd: DUP2
000016de: MSTORE
000016df: PUSH1 0x20
000016e1: ADD
000016e2: DUP4
000016e3: PUSH1 0x00
000016e5: NOT
000016e6: AND
000016e7: PUSH1 0x00
000016e9: NOT
000016ea: AND
000016eb: DUP2
000016ec: MSTORE
000016ed: PUSH1 0x20
000016ef: ADD
000016f0: DUP3
000016f1: PUSH1 0x00
000016f3: NOT
000016f4: AND
000016f5: PUSH1 0x00
000016f7: NOT
000016f8: AND
000016f9: DUP2
000016fa: MSTORE
000016fb: PUSH1 0x20
000016fd: ADD
000016fe: SWAP11
000016ff: POP
00001700: POP
00001701: POP
00001702: POP
00001703: POP
00001704: POP
00001705: POP
00001706: POP
00001707: POP
00001708: POP
00001709: POP
0000170a: PUSH1 0x40
0000170c: MLOAD
0000170d: DUP1
0000170e: SWAP2
0000170f: SUB
00001710: SWAP1
00001711: LOG1
00001712: JUMPDEST
00001713: POP
00001714: POP
00001715: POP
00001716: POP
00001717: POP
00001718: POP
00001719: POP
0000171a: POP
0000171b: POP
0000171c: POP
0000171d: JUMP
0000171e: JUMPDEST
0000171f: PUSH1 0x00
00001721: DUP2
00001722: PUSH1 0x06
00001724: PUSH1 0x00
00001726: PUSH1 0x00
00001728: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000173d: AND
0000173e: DUP2
0000173f: MSTORE
00001740: PUSH1 0x20
00001742: ADD
00001743: SWAP1
00001744: DUP2
00001745: MSTORE
00001746: PUSH1 0x20
00001748: ADD
00001749: PUSH1 0x00
0000174b: KECCAK256
0000174c: PUSH1 0x00
0000174e: CALLER
0000174f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001764: AND
00001765: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000177a: AND
0000177b: DUP2
0000177c: MSTORE
0000177d: PUSH1 0x20
0000177f: ADD
00001780: SWAP1
00001781: DUP2
00001782: MSTORE
00001783: PUSH1 0x20
00001785: ADD
00001786: PUSH1 0x00
00001788: KECCAK256
00001789: SLOAD
0000178a: LT
0000178b: ISZERO
0000178c: PUSH2 0x1794
0000178f: JUMPI
00001790: PUSH2 0x0000
00001793: JUMP
00001794: JUMPDEST
00001795: PUSH2 0x1805
00001798: PUSH1 0x06
0000179a: PUSH1 0x00
0000179c: PUSH1 0x00
0000179e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000017b3: AND
000017b4: DUP2
000017b5: MSTORE
000017b6: PUSH1 0x20
000017b8: ADD
000017b9: SWAP1
000017ba: DUP2
000017bb: MSTORE
000017bc: PUSH1 0x20
000017be: ADD
000017bf: PUSH1 0x00
000017c1: KECCAK256
000017c2: PUSH1 0x00
000017c4: CALLER
000017c5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000017da: AND
000017db: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000017f0: AND
000017f1: DUP2
000017f2: MSTORE
000017f3: PUSH1 0x20
000017f5: ADD
000017f6: SWAP1
000017f7: DUP2
000017f8: MSTORE
000017f9: PUSH1 0x20
000017fb: ADD
000017fc: PUSH1 0x00
000017fe: KECCAK256
000017ff: SLOAD
00001800: DUP4
00001801: PUSH2 0x3674
00001804: JUMP
00001805: JUMPDEST
00001806: PUSH1 0x06
00001808: PUSH1 0x00
0000180a: PUSH1 0x00
0000180c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001821: AND
00001822: DUP2
00001823: MSTORE
00001824: PUSH1 0x20
00001826: ADD
00001827: SWAP1
00001828: DUP2
00001829: MSTORE
0000182a: PUSH1 0x20
0000182c: ADD
0000182d: PUSH1 0x00
0000182f: KECCAK256
00001830: PUSH1 0x00
00001832: CALLER
00001833: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001848: AND
00001849: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000185e: AND
0000185f: DUP2
00001860: MSTORE
00001861: PUSH1 0x20
00001863: ADD
00001864: SWAP1
00001865: DUP2
00001866: MSTORE
00001867: PUSH1 0x20
00001869: ADD
0000186a: PUSH1 0x00
0000186c: KECCAK256
0000186d: DUP2
0000186e: SWAP1
0000186f: SSTORE
00001870: POP
00001871: PUSH1 0x09
00001873: PUSH1 0x00
00001875: CALLER
00001876: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000188b: AND
0000188c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000018a1: AND
000018a2: DUP2
000018a3: MSTORE
000018a4: PUSH1 0x20
000018a6: ADD
000018a7: SWAP1
000018a8: DUP2
000018a9: MSTORE
000018aa: PUSH1 0x20
000018ac: ADD
000018ad: PUSH1 0x00
000018af: KECCAK256
000018b0: PUSH1 0x00
000018b2: SWAP1
000018b3: SLOAD
000018b4: SWAP1
000018b5: PUSH2 0x0100
000018b8: EXP
000018b9: SWAP1
000018ba: DIV
000018bb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000018d0: AND
000018d1: SWAP1
000018d2: POP
000018d3: PUSH1 0x00
000018d5: DUP2
000018d6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000018eb: AND
000018ec: EQ
000018ed: ISZERO
000018ee: PUSH2 0x18f5
000018f1: JUMPI
000018f2: CALLER
000018f3: SWAP1
000018f4: POP
000018f5: JUMPDEST
000018f6: DUP1
000018f7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000190c: AND
0000190d: DUP3
0000190e: PUSH1 0x40
00001910: MLOAD
00001911: DUP1
00001912: SWAP1
00001913: POP
00001914: PUSH1 0x00
00001916: PUSH1 0x40
00001918: MLOAD
00001919: DUP1
0000191a: DUP4
0000191b: SUB
0000191c: DUP2
0000191d: DUP6
0000191e: DUP8
0000191f: PUSH2 0x8502
00001922: GAS
00001923: SUB
00001924: CALL
00001925: SWAP3
00001926: POP
00001927: POP
00001928: POP
00001929: ISZERO
0000192a: ISZERO
0000192b: PUSH2 0x1933
0000192e: JUMPI
0000192f: PUSH2 0x0000
00001932: JUMP
00001933: JUMPDEST
00001934: PUSH32 0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567
00001955: PUSH1 0x00
00001957: CALLER
00001958: DUP5
00001959: PUSH1 0x06
0000195b: PUSH1 0x00
0000195d: PUSH1 0x00
0000195f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001974: AND
00001975: DUP2
00001976: MSTORE
00001977: PUSH1 0x20
00001979: ADD
0000197a: SWAP1
0000197b: DUP2
0000197c: MSTORE
0000197d: PUSH1 0x20
0000197f: ADD
00001980: PUSH1 0x00
00001982: KECCAK256
00001983: PUSH1 0x00
00001985: CALLER
00001986: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000199b: AND
0000199c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000019b1: AND
000019b2: DUP2
000019b3: MSTORE
000019b4: PUSH1 0x20
000019b6: ADD
000019b7: SWAP1
000019b8: DUP2
000019b9: MSTORE
000019ba: PUSH1 0x20
000019bc: ADD
000019bd: PUSH1 0x00
000019bf: KECCAK256
000019c0: SLOAD
000019c1: PUSH1 0x40
000019c3: MLOAD
000019c4: DUP1
000019c5: DUP6
000019c6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000019db: AND
000019dc: DUP2
000019dd: MSTORE
000019de: PUSH1 0x20
000019e0: ADD
000019e1: DUP5
000019e2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000019f7: AND
000019f8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001a0d: AND
00001a0e: DUP2
00001a0f: MSTORE
00001a10: PUSH1 0x20
00001a12: ADD
00001a13: DUP4
00001a14: DUP2
00001a15: MSTORE
00001a16: PUSH1 0x20
00001a18: ADD
00001a19: DUP3
00001a1a: DUP2
00001a1b: MSTORE
00001a1c: PUSH1 0x20
00001a1e: ADD
00001a1f: SWAP5
00001a20: POP
00001a21: POP
00001a22: POP
00001a23: POP
00001a24: POP
00001a25: PUSH1 0x40
00001a27: MLOAD
00001a28: DUP1
00001a29: SWAP2
00001a2a: SUB
00001a2b: SWAP1
00001a2c: LOG1
00001a2d: JUMPDEST
00001a2e: POP
00001a2f: POP
00001a30: JUMP
00001a31: JUMPDEST
00001a32: PUSH1 0x00
00001a34: DUP3
00001a35: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001a4a: AND
00001a4b: EQ
00001a4c: ISZERO
00001a4d: PUSH2 0x1a55
00001a50: JUMPI
00001a51: PUSH2 0x0000
00001a54: JUMP
00001a55: JUMPDEST
00001a56: DUP2
00001a57: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001a6c: AND
00001a6d: PUSH4 0x23b872dd
00001a72: CALLER
00001a73: ADDRESS
00001a74: DUP5
00001a75: PUSH1 0x00
00001a77: PUSH1 0x40
00001a79: MLOAD
00001a7a: PUSH1 0x20
00001a7c: ADD
00001a7d: MSTORE
00001a7e: PUSH1 0x40
00001a80: MLOAD
00001a81: DUP5
00001a82: PUSH4 0xffffffff
00001a87: AND
00001a88: PUSH29 0x0100000000000000000000000000000000000000000000000000000000
00001aa6: MUL
00001aa7: DUP2
00001aa8: MSTORE
00001aa9: PUSH1 0x04
00001aab: ADD
00001aac: DUP1
00001aad: DUP5
00001aae: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001ac3: AND
00001ac4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001ad9: AND
00001ada: DUP2
00001adb: MSTORE
00001adc: PUSH1 0x20
00001ade: ADD
00001adf: DUP4
00001ae0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001af5: AND
00001af6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001b0b: AND
00001b0c: DUP2
00001b0d: MSTORE
00001b0e: PUSH1 0x20
00001b10: ADD
00001b11: DUP3
00001b12: DUP2
00001b13: MSTORE
00001b14: PUSH1 0x20
00001b16: ADD
00001b17: SWAP4
00001b18: POP
00001b19: POP
00001b1a: POP
00001b1b: POP
00001b1c: PUSH1 0x20
00001b1e: PUSH1 0x40
00001b20: MLOAD
00001b21: DUP1
00001b22: DUP4
00001b23: SUB
00001b24: DUP2
00001b25: PUSH1 0x00
00001b27: DUP8
00001b28: DUP1
00001b29: EXTCODESIZE
00001b2a: ISZERO
00001b2b: ISZERO
00001b2c: PUSH2 0x1b31
00001b2f: JUMPI
00001b30: INVALID
00001b31: JUMPDEST
00001b32: PUSH1 0x32
00001b34: GAS
00001b35: SUB
00001b36: CALL
00001b37: ISZERO
00001b38: ISZERO
00001b39: PUSH2 0x1b3e
00001b3c: JUMPI
00001b3d: INVALID
00001b3e: JUMPDEST
00001b3f: POP
00001b40: POP
00001b41: POP
00001b42: PUSH1 0x40
00001b44: MLOAD
00001b45: DUP1
00001b46: MLOAD
00001b47: SWAP1
00001b48: POP
00001b49: ISZERO
00001b4a: ISZERO
00001b4b: PUSH2 0x1b53
00001b4e: JUMPI
00001b4f: PUSH2 0x0000
00001b52: JUMP
00001b53: JUMPDEST
00001b54: PUSH2 0x1bd9
00001b57: PUSH1 0x06
00001b59: PUSH1 0x00
00001b5b: DUP5
00001b5c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001b71: AND
00001b72: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001b87: AND
00001b88: DUP2
00001b89: MSTORE
00001b8a: PUSH1 0x20
00001b8c: ADD
00001b8d: SWAP1
00001b8e: DUP2
00001b8f: MSTORE
00001b90: PUSH1 0x20
00001b92: ADD
00001b93: PUSH1 0x00
00001b95: KECCAK256
00001b96: PUSH1 0x00
00001b98: CALLER
00001b99: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001bae: AND
00001baf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001bc4: AND
00001bc5: DUP2
00001bc6: MSTORE
00001bc7: PUSH1 0x20
00001bc9: ADD
00001bca: SWAP1
00001bcb: DUP2
00001bcc: MSTORE
00001bcd: PUSH1 0x20
00001bcf: ADD
00001bd0: PUSH1 0x00
00001bd2: KECCAK256
00001bd3: SLOAD
00001bd4: DUP3
00001bd5: PUSH2 0x2ee0
00001bd8: JUMP
00001bd9: JUMPDEST
00001bda: PUSH1 0x06
00001bdc: PUSH1 0x00
00001bde: DUP5
00001bdf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001bf4: AND
00001bf5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001c0a: AND
00001c0b: DUP2
00001c0c: MSTORE
00001c0d: PUSH1 0x20
00001c0f: ADD
00001c10: SWAP1
00001c11: DUP2
00001c12: MSTORE
00001c13: PUSH1 0x20
00001c15: ADD
00001c16: PUSH1 0x00
00001c18: KECCAK256
00001c19: PUSH1 0x00
00001c1b: CALLER
00001c1c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001c31: AND
00001c32: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001c47: AND
00001c48: DUP2
00001c49: MSTORE
00001c4a: PUSH1 0x20
00001c4c: ADD
00001c4d: SWAP1
00001c4e: DUP2
00001c4f: MSTORE
00001c50: PUSH1 0x20
00001c52: ADD
00001c53: PUSH1 0x00
00001c55: KECCAK256
00001c56: DUP2
00001c57: SWAP1
00001c58: SSTORE
00001c59: POP
00001c5a: PUSH32 0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7
00001c7b: DUP3
00001c7c: CALLER
00001c7d: DUP4
00001c7e: PUSH1 0x06
00001c80: PUSH1 0x00
00001c82: DUP8
00001c83: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001c98: AND
00001c99: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001cae: AND
00001caf: DUP2
00001cb0: MSTORE
00001cb1: PUSH1 0x20
00001cb3: ADD
00001cb4: SWAP1
00001cb5: DUP2
00001cb6: MSTORE
00001cb7: PUSH1 0x20
00001cb9: ADD
00001cba: PUSH1 0x00
00001cbc: KECCAK256
00001cbd: PUSH1 0x00
00001cbf: CALLER
00001cc0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001cd5: AND
00001cd6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001ceb: AND
00001cec: DUP2
00001ced: MSTORE
00001cee: PUSH1 0x20
00001cf0: ADD
00001cf1: SWAP1
00001cf2: DUP2
00001cf3: MSTORE
00001cf4: PUSH1 0x20
00001cf6: ADD
00001cf7: PUSH1 0x00
00001cf9: KECCAK256
00001cfa: SLOAD
00001cfb: PUSH1 0x40
00001cfd: MLOAD
00001cfe: DUP1
00001cff: DUP6
00001d00: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001d15: AND
00001d16: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001d2b: AND
00001d2c: DUP2
00001d2d: MSTORE
00001d2e: PUSH1 0x20
00001d30: ADD
00001d31: DUP5
00001d32: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001d47: AND
00001d48: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001d5d: AND
00001d5e: DUP2
00001d5f: MSTORE
00001d60: PUSH1 0x20
00001d62: ADD
00001d63: DUP4
00001d64: DUP2
00001d65: MSTORE
00001d66: PUSH1 0x20
00001d68: ADD
00001d69: DUP3
00001d6a: DUP2
00001d6b: MSTORE
00001d6c: PUSH1 0x20
00001d6e: ADD
00001d6f: SWAP5
00001d70: POP
00001d71: POP
00001d72: POP
00001d73: POP
00001d74: POP
00001d75: PUSH1 0x40
00001d77: MLOAD
00001d78: DUP1
00001d79: SWAP2
00001d7a: SUB
00001d7b: SWAP1
00001d7c: LOG1
00001d7d: JUMPDEST
00001d7e: POP
00001d7f: POP
00001d80: JUMP
00001d81: JUMPDEST
00001d82: PUSH1 0x00
00001d84: PUSH1 0x00
00001d86: SWAP1
00001d87: SLOAD
00001d88: SWAP1
00001d89: PUSH2 0x0100
00001d8c: EXP
00001d8d: SWAP1
00001d8e: DIV
00001d8f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001da4: AND
00001da5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001dba: AND
00001dbb: CALLER
00001dbc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001dd1: AND
00001dd2: EQ
00001dd3: ISZERO
00001dd4: ISZERO
00001dd5: PUSH2 0x1ddd
00001dd8: JUMPI
00001dd9: PUSH2 0x0000
00001ddc: JUMP
00001ddd: JUMPDEST
00001dde: DUP1
00001ddf: PUSH1 0x09
00001de1: PUSH1 0x00
00001de3: DUP5
00001de4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001df9: AND
00001dfa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001e0f: AND
00001e10: DUP2
00001e11: MSTORE
00001e12: PUSH1 0x20
00001e14: ADD
00001e15: SWAP1
00001e16: DUP2
00001e17: MSTORE
00001e18: PUSH1 0x20
00001e1a: ADD
00001e1b: PUSH1 0x00
00001e1d: KECCAK256
00001e1e: PUSH1 0x00
00001e20: PUSH2 0x0100
00001e23: EXP
00001e24: DUP2
00001e25: SLOAD
00001e26: DUP2
00001e27: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001e3c: MUL
00001e3d: NOT
00001e3e: AND
00001e3f: SWAP1
00001e40: DUP4
00001e41: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001e56: AND
00001e57: MUL
00001e58: OR
00001e59: SWAP1
00001e5a: SSTORE
00001e5b: POP
00001e5c: JUMPDEST
00001e5d: POP
00001e5e: POP
00001e5f: JUMP
00001e60: JUMPDEST
00001e61: PUSH1 0x00
00001e63: PUSH1 0x00
00001e65: PUSH1 0x02
00001e67: ADDRESS
00001e68: DUP14
00001e69: DUP14
00001e6a: DUP14
00001e6b: DUP14
00001e6c: DUP14
00001e6d: DUP14
00001e6e: PUSH1 0x00
00001e70: PUSH1 0x40
00001e72: MLOAD
00001e73: PUSH1 0x20
00001e75: ADD
00001e76: MSTORE
00001e77: PUSH1 0x40
00001e79: MLOAD
00001e7a: DUP1
00001e7b: DUP9
00001e7c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001e91: AND
00001e92: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001ea7: AND
00001ea8: PUSH13 0x01000000000000000000000000
00001eb6: MUL
00001eb7: DUP2
00001eb8: MSTORE
00001eb9: PUSH1 0x14
00001ebb: ADD
00001ebc: DUP8
00001ebd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001ed2: AND
00001ed3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001ee8: AND
00001ee9: PUSH13 0x01000000000000000000000000
00001ef7: MUL
00001ef8: DUP2
00001ef9: MSTORE
00001efa: PUSH1 0x14
00001efc: ADD
00001efd: DUP7
00001efe: DUP2
00001eff: MSTORE
00001f00: PUSH1 0x20
00001f02: ADD
00001f03: DUP6
00001f04: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001f19: AND
00001f1a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001f2f: AND
00001f30: PUSH13 0x01000000000000000000000000
00001f3e: MUL
00001f3f: DUP2
00001f40: MSTORE
00001f41: PUSH1 0x14
00001f43: ADD
00001f44: DUP5
00001f45: DUP2
00001f46: MSTORE
00001f47: PUSH1 0x20
00001f49: ADD
00001f4a: DUP4
00001f4b: DUP2
00001f4c: MSTORE
00001f4d: PUSH1 0x20
00001f4f: ADD
00001f50: DUP3
00001f51: DUP2
00001f52: MSTORE
00001f53: PUSH1 0x20
00001f55: ADD
00001f56: SWAP8
00001f57: POP
00001f58: POP
00001f59: POP
00001f5a: POP
00001f5b: POP
00001f5c: POP
00001f5d: POP
00001f5e: POP
00001f5f: PUSH1 0x20
00001f61: PUSH1 0x40
00001f63: MLOAD
00001f64: DUP1
00001f65: DUP4
00001f66: SUB
00001f67: DUP2
00001f68: PUSH1 0x00
00001f6a: DUP7
00001f6b: PUSH2 0x61da
00001f6e: GAS
00001f6f: SUB
00001f70: CALL
00001f71: ISZERO
00001f72: ISZERO
00001f73: PUSH2 0x1f78
00001f76: JUMPI
00001f77: INVALID
00001f78: JUMPDEST
00001f79: POP
00001f7a: POP
00001f7b: PUSH1 0x40
00001f7d: MLOAD
00001f7e: DUP1
00001f7f: MLOAD
00001f80: SWAP1
00001f81: POP
00001f82: SWAP1
00001f83: POP
00001f84: PUSH1 0x08
00001f86: PUSH1 0x00
00001f88: DUP8
00001f89: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001f9e: AND
00001f9f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00001fb4: AND
00001fb5: DUP2
00001fb6: MSTORE
00001fb7: PUSH1 0x20
00001fb9: ADD
00001fba: SWAP1
00001fbb: DUP2
00001fbc: MSTORE
00001fbd: PUSH1 0x20
00001fbf: ADD
00001fc0: PUSH1 0x00
00001fc2: KECCAK256
00001fc3: PUSH1 0x00
00001fc5: DUP3
00001fc6: PUSH1 0x00
00001fc8: NOT
00001fc9: AND
00001fca: PUSH1 0x00
00001fcc: NOT
00001fcd: AND
00001fce: DUP2
00001fcf: MSTORE
00001fd0: PUSH1 0x20
00001fd2: ADD
00001fd3: SWAP1
00001fd4: DUP2
00001fd5: MSTORE
00001fd6: PUSH1 0x20
00001fd8: ADD
00001fd9: PUSH1 0x00
00001fdb: KECCAK256
00001fdc: SLOAD
00001fdd: SWAP2
00001fde: POP
00001fdf: JUMPDEST
00001fe0: POP
00001fe1: SWAP11
00001fe2: SWAP10
00001fe3: POP
00001fe4: POP
00001fe5: POP
00001fe6: POP
00001fe7: POP
00001fe8: POP
00001fe9: POP
00001fea: POP
00001feb: POP
00001fec: POP
00001fed: JUMP
00001fee: JUMPDEST
00001fef: PUSH1 0x06
00001ff1: PUSH1 0x20
00001ff3: MSTORE
00001ff4: DUP2
00001ff5: PUSH1 0x00
00001ff7: MSTORE
00001ff8: PUSH1 0x40
00001ffa: PUSH1 0x00
00001ffc: KECCAK256
00001ffd: PUSH1 0x20
00001fff: MSTORE
00002000: DUP1
00002001: PUSH1 0x00
00002003: MSTORE
00002004: PUSH1 0x40
00002006: PUSH1 0x00
00002008: KECCAK256
00002009: PUSH1 0x00
0000200b: SWAP2
0000200c: POP
0000200d: SWAP2
0000200e: POP
0000200f: POP
00002010: SLOAD
00002011: DUP2
00002012: JUMP
00002013: JUMPDEST
00002014: PUSH1 0x00
00002016: PUSH1 0x00
00002018: SWAP1
00002019: SLOAD
0000201a: SWAP1
0000201b: PUSH2 0x0100
0000201e: EXP
0000201f: SWAP1
00002020: DIV
00002021: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002036: AND
00002037: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000204c: AND
0000204d: CALLER
0000204e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002063: AND
00002064: EQ
00002065: ISZERO
00002066: ISZERO
00002067: PUSH2 0x206f
0000206a: JUMPI
0000206b: PUSH2 0x0000
0000206e: JUMP
0000206f: JUMPDEST
00002070: PUSH1 0x03
00002072: SLOAD
00002073: DUP2
00002074: GT
00002075: ISZERO
00002076: PUSH2 0x207e
00002079: JUMPI
0000207a: PUSH2 0x0000
0000207d: JUMP
0000207e: JUMPDEST
0000207f: DUP1
00002080: PUSH1 0x03
00002082: DUP2
00002083: SWAP1
00002084: SSTORE
00002085: POP
00002086: JUMPDEST
00002087: POP
00002088: JUMP
00002089: JUMPDEST
0000208a: PUSH1 0x03
0000208c: SLOAD
0000208d: DUP2
0000208e: JUMP
0000208f: JUMPDEST
00002090: PUSH1 0x00
00002092: PUSH1 0x00
00002094: SWAP1
00002095: SLOAD
00002096: SWAP1
00002097: PUSH2 0x0100
0000209a: EXP
0000209b: SWAP1
0000209c: DIV
0000209d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000020b2: AND
000020b3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000020c8: AND
000020c9: CALLER
000020ca: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000020df: AND
000020e0: EQ
000020e1: ISZERO
000020e2: ISZERO
000020e3: PUSH2 0x20eb
000020e6: JUMPI
000020e7: PUSH2 0x0000
000020ea: JUMP
000020eb: JUMPDEST
000020ec: PUSH1 0x05
000020ee: SLOAD
000020ef: DUP2
000020f0: LT
000020f1: DUP1
000020f2: PUSH2 0x20fc
000020f5: JUMPI
000020f6: POP
000020f7: PUSH1 0x04
000020f9: SLOAD
000020fa: DUP2
000020fb: GT
000020fc: JUMPDEST
000020fd: ISZERO
000020fe: PUSH2 0x2106
00002101: JUMPI
00002102: PUSH2 0x0000
00002105: JUMP
00002106: JUMPDEST
00002107: DUP1
00002108: PUSH1 0x05
0000210a: DUP2
0000210b: SWAP1
0000210c: SSTORE
0000210d: POP
0000210e: JUMPDEST
0000210f: POP
00002110: JUMP
00002111: JUMPDEST
00002112: PUSH1 0x01
00002114: PUSH1 0x00
00002116: SWAP1
00002117: SLOAD
00002118: SWAP1
00002119: PUSH2 0x0100
0000211c: EXP
0000211d: SWAP1
0000211e: DIV
0000211f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002134: AND
00002135: DUP2
00002136: JUMP
00002137: JUMPDEST
00002138: PUSH1 0x00
0000213a: DUP3
0000213b: PUSH1 0x06
0000213d: PUSH1 0x00
0000213f: DUP16
00002140: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002155: AND
00002156: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000216b: AND
0000216c: DUP2
0000216d: MSTORE
0000216e: PUSH1 0x20
00002170: ADD
00002171: SWAP1
00002172: DUP2
00002173: MSTORE
00002174: PUSH1 0x20
00002176: ADD
00002177: PUSH1 0x00
00002179: KECCAK256
0000217a: PUSH1 0x00
0000217c: DUP5
0000217d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002192: AND
00002193: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000021a8: AND
000021a9: DUP2
000021aa: MSTORE
000021ab: PUSH1 0x20
000021ad: ADD
000021ae: SWAP1
000021af: DUP2
000021b0: MSTORE
000021b1: PUSH1 0x20
000021b3: ADD
000021b4: PUSH1 0x00
000021b6: KECCAK256
000021b7: SLOAD
000021b8: LT
000021b9: ISZERO
000021ba: DUP1
000021bb: ISZERO
000021bc: PUSH2 0x21d6
000021bf: JUMPI
000021c0: POP
000021c1: DUP3
000021c2: PUSH2 0x21d3
000021c5: DUP15
000021c6: DUP15
000021c7: DUP15
000021c8: DUP15
000021c9: DUP15
000021ca: DUP15
000021cb: DUP15
000021cc: DUP15
000021cd: DUP15
000021ce: DUP15
000021cf: PUSH2 0x2b1e
000021d2: JUMP
000021d3: JUMPDEST
000021d4: LT
000021d5: ISZERO
000021d6: JUMPDEST
000021d7: ISZERO
000021d8: ISZERO
000021d9: PUSH2 0x21e5
000021dc: JUMPI
000021dd: PUSH1 0x00
000021df: SWAP1
000021e0: POP
000021e1: PUSH2 0x21ea
000021e4: JUMP
000021e5: JUMPDEST
000021e6: PUSH1 0x01
000021e8: SWAP1
000021e9: POP
000021ea: JUMPDEST
000021eb: SWAP13
000021ec: SWAP12
000021ed: POP
000021ee: POP
000021ef: POP
000021f0: POP
000021f1: POP
000021f2: POP
000021f3: POP
000021f4: POP
000021f5: POP
000021f6: POP
000021f7: POP
000021f8: POP
000021f9: JUMP
000021fa: JUMPDEST
000021fb: PUSH1 0x00
000021fd: PUSH1 0x00
000021ff: SWAP1
00002200: SLOAD
00002201: SWAP1
00002202: PUSH2 0x0100
00002205: EXP
00002206: SWAP1
00002207: DIV
00002208: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000221d: AND
0000221e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002233: AND
00002234: CALLER
00002235: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000224a: AND
0000224b: EQ
0000224c: ISZERO
0000224d: ISZERO
0000224e: PUSH2 0x2256
00002251: JUMPI
00002252: PUSH2 0x0000
00002255: JUMP
00002256: JUMPDEST
00002257: DUP1
00002258: PUSH1 0x01
0000225a: PUSH1 0x00
0000225c: PUSH2 0x0100
0000225f: EXP
00002260: DUP2
00002261: SLOAD
00002262: DUP2
00002263: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002278: MUL
00002279: NOT
0000227a: AND
0000227b: SWAP1
0000227c: DUP4
0000227d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002292: AND
00002293: MUL
00002294: OR
00002295: SWAP1
00002296: SSTORE
00002297: POP
00002298: JUMPDEST
00002299: POP
0000229a: JUMP
0000229b: JUMPDEST
0000229c: PUSH1 0x05
0000229e: SLOAD
0000229f: DUP2
000022a0: JUMP
000022a1: JUMPDEST
000022a2: PUSH1 0x00
000022a4: PUSH1 0x00
000022a6: SWAP1
000022a7: SLOAD
000022a8: SWAP1
000022a9: PUSH2 0x0100
000022ac: EXP
000022ad: SWAP1
000022ae: DIV
000022af: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000022c4: AND
000022c5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000022da: AND
000022db: CALLER
000022dc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000022f1: AND
000022f2: EQ
000022f3: ISZERO
000022f4: ISZERO
000022f5: PUSH2 0x22fd
000022f8: JUMPI
000022f9: PUSH2 0x0000
000022fc: JUMP
000022fd: JUMPDEST
000022fe: PUSH1 0x04
00002300: SLOAD
00002301: DUP2
00002302: GT
00002303: DUP1
00002304: PUSH2 0x230e
00002307: JUMPI
00002308: POP
00002309: PUSH1 0x05
0000230b: SLOAD
0000230c: DUP2
0000230d: LT
0000230e: JUMPDEST
0000230f: ISZERO
00002310: PUSH2 0x2318
00002313: JUMPI
00002314: PUSH2 0x0000
00002317: JUMP
00002318: JUMPDEST
00002319: DUP1
0000231a: PUSH1 0x04
0000231c: DUP2
0000231d: SWAP1
0000231e: SSTORE
0000231f: POP
00002320: JUMPDEST
00002321: POP
00002322: JUMP
00002323: JUMPDEST
00002324: PUSH1 0x00
00002326: PUSH1 0x00
00002328: SWAP1
00002329: SLOAD
0000232a: SWAP1
0000232b: PUSH2 0x0100
0000232e: EXP
0000232f: SWAP1
00002330: DIV
00002331: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002346: AND
00002347: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000235c: AND
0000235d: CALLER
0000235e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002373: AND
00002374: EQ
00002375: ISZERO
00002376: ISZERO
00002377: PUSH2 0x237f
0000237a: JUMPI
0000237b: PUSH2 0x0000
0000237e: JUMP
0000237f: JUMPDEST
00002380: DUP1
00002381: PUSH1 0x00
00002383: PUSH1 0x00
00002385: PUSH2 0x0100
00002388: EXP
00002389: DUP2
0000238a: SLOAD
0000238b: DUP2
0000238c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000023a1: MUL
000023a2: NOT
000023a3: AND
000023a4: SWAP1
000023a5: DUP4
000023a6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000023bb: AND
000023bc: MUL
000023bd: OR
000023be: SWAP1
000023bf: SSTORE
000023c0: POP
000023c1: JUMPDEST
000023c2: POP
000023c3: JUMP
000023c4: JUMPDEST
000023c5: PUSH1 0x00
000023c7: DUP3
000023c8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000023dd: AND
000023de: EQ
000023df: ISZERO
000023e0: PUSH2 0x23e8
000023e3: JUMPI
000023e4: PUSH2 0x0000
000023e7: JUMP
000023e8: JUMPDEST
000023e9: DUP1
000023ea: PUSH1 0x06
000023ec: PUSH1 0x00
000023ee: DUP5
000023ef: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002404: AND
00002405: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000241a: AND
0000241b: DUP2
0000241c: MSTORE
0000241d: PUSH1 0x20
0000241f: ADD
00002420: SWAP1
00002421: DUP2
00002422: MSTORE
00002423: PUSH1 0x20
00002425: ADD
00002426: PUSH1 0x00
00002428: KECCAK256
00002429: PUSH1 0x00
0000242b: CALLER
0000242c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002441: AND
00002442: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002457: AND
00002458: DUP2
00002459: MSTORE
0000245a: PUSH1 0x20
0000245c: ADD
0000245d: SWAP1
0000245e: DUP2
0000245f: MSTORE
00002460: PUSH1 0x20
00002462: ADD
00002463: PUSH1 0x00
00002465: KECCAK256
00002466: SLOAD
00002467: LT
00002468: ISZERO
00002469: PUSH2 0x2471
0000246c: JUMPI
0000246d: PUSH2 0x0000
00002470: JUMP
00002471: JUMPDEST
00002472: PUSH2 0x24f7
00002475: PUSH1 0x06
00002477: PUSH1 0x00
00002479: DUP5
0000247a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000248f: AND
00002490: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000024a5: AND
000024a6: DUP2
000024a7: MSTORE
000024a8: PUSH1 0x20
000024aa: ADD
000024ab: SWAP1
000024ac: DUP2
000024ad: MSTORE
000024ae: PUSH1 0x20
000024b0: ADD
000024b1: PUSH1 0x00
000024b3: KECCAK256
000024b4: PUSH1 0x00
000024b6: CALLER
000024b7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000024cc: AND
000024cd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000024e2: AND
000024e3: DUP2
000024e4: MSTORE
000024e5: PUSH1 0x20
000024e7: ADD
000024e8: SWAP1
000024e9: DUP2
000024ea: MSTORE
000024eb: PUSH1 0x20
000024ed: ADD
000024ee: PUSH1 0x00
000024f0: KECCAK256
000024f1: SLOAD
000024f2: DUP3
000024f3: PUSH2 0x3674
000024f6: JUMP
000024f7: JUMPDEST
000024f8: PUSH1 0x06
000024fa: PUSH1 0x00
000024fc: DUP5
000024fd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002512: AND
00002513: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002528: AND
00002529: DUP2
0000252a: MSTORE
0000252b: PUSH1 0x20
0000252d: ADD
0000252e: SWAP1
0000252f: DUP2
00002530: MSTORE
00002531: PUSH1 0x20
00002533: ADD
00002534: PUSH1 0x00
00002536: KECCAK256
00002537: PUSH1 0x00
00002539: CALLER
0000253a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000254f: AND
00002550: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002565: AND
00002566: DUP2
00002567: MSTORE
00002568: PUSH1 0x20
0000256a: ADD
0000256b: SWAP1
0000256c: DUP2
0000256d: MSTORE
0000256e: PUSH1 0x20
00002570: ADD
00002571: PUSH1 0x00
00002573: KECCAK256
00002574: DUP2
00002575: SWAP1
00002576: SSTORE
00002577: POP
00002578: DUP2
00002579: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000258e: AND
0000258f: PUSH4 0xa9059cbb
00002594: CALLER
00002595: DUP4
00002596: PUSH1 0x00
00002598: PUSH1 0x40
0000259a: MLOAD
0000259b: PUSH1 0x20
0000259d: ADD
0000259e: MSTORE
0000259f: PUSH1 0x40
000025a1: MLOAD
000025a2: DUP4
000025a3: PUSH4 0xffffffff
000025a8: AND
000025a9: PUSH29 0x0100000000000000000000000000000000000000000000000000000000
000025c7: MUL
000025c8: DUP2
000025c9: MSTORE
000025ca: PUSH1 0x04
000025cc: ADD
000025cd: DUP1
000025ce: DUP4
000025cf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000025e4: AND
000025e5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000025fa: AND
000025fb: DUP2
000025fc: MSTORE
000025fd: PUSH1 0x20
000025ff: ADD
00002600: DUP3
00002601: DUP2
00002602: MSTORE
00002603: PUSH1 0x20
00002605: ADD
00002606: SWAP3
00002607: POP
00002608: POP
00002609: POP
0000260a: PUSH1 0x20
0000260c: PUSH1 0x40
0000260e: MLOAD
0000260f: DUP1
00002610: DUP4
00002611: SUB
00002612: DUP2
00002613: PUSH1 0x00
00002615: DUP8
00002616: DUP1
00002617: EXTCODESIZE
00002618: ISZERO
00002619: ISZERO
0000261a: PUSH2 0x261f
0000261d: JUMPI
0000261e: INVALID
0000261f: JUMPDEST
00002620: PUSH1 0x32
00002622: GAS
00002623: SUB
00002624: CALL
00002625: ISZERO
00002626: ISZERO
00002627: PUSH2 0x262c
0000262a: JUMPI
0000262b: INVALID
0000262c: JUMPDEST
0000262d: POP
0000262e: POP
0000262f: POP
00002630: PUSH1 0x40
00002632: MLOAD
00002633: DUP1
00002634: MLOAD
00002635: SWAP1
00002636: POP
00002637: ISZERO
00002638: ISZERO
00002639: PUSH2 0x2641
0000263c: JUMPI
0000263d: PUSH2 0x0000
00002640: JUMP
00002641: JUMPDEST
00002642: PUSH32 0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567
00002663: DUP3
00002664: CALLER
00002665: DUP4
00002666: PUSH1 0x06
00002668: PUSH1 0x00
0000266a: DUP8
0000266b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002680: AND
00002681: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002696: AND
00002697: DUP2
00002698: MSTORE
00002699: PUSH1 0x20
0000269b: ADD
0000269c: SWAP1
0000269d: DUP2
0000269e: MSTORE
0000269f: PUSH1 0x20
000026a1: ADD
000026a2: PUSH1 0x00
000026a4: KECCAK256
000026a5: PUSH1 0x00
000026a7: CALLER
000026a8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000026bd: AND
000026be: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000026d3: AND
000026d4: DUP2
000026d5: MSTORE
000026d6: PUSH1 0x20
000026d8: ADD
000026d9: SWAP1
000026da: DUP2
000026db: MSTORE
000026dc: PUSH1 0x20
000026de: ADD
000026df: PUSH1 0x00
000026e1: KECCAK256
000026e2: SLOAD
000026e3: PUSH1 0x40
000026e5: MLOAD
000026e6: DUP1
000026e7: DUP6
000026e8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000026fd: AND
000026fe: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002713: AND
00002714: DUP2
00002715: MSTORE
00002716: PUSH1 0x20
00002718: ADD
00002719: DUP5
0000271a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000272f: AND
00002730: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002745: AND
00002746: DUP2
00002747: MSTORE
00002748: PUSH1 0x20
0000274a: ADD
0000274b: DUP4
0000274c: DUP2
0000274d: MSTORE
0000274e: PUSH1 0x20
00002750: ADD
00002751: DUP3
00002752: DUP2
00002753: MSTORE
00002754: PUSH1 0x20
00002756: ADD
00002757: SWAP5
00002758: POP
00002759: POP
0000275a: POP
0000275b: POP
0000275c: POP
0000275d: PUSH1 0x40
0000275f: MLOAD
00002760: DUP1
00002761: SWAP2
00002762: SUB
00002763: SWAP1
00002764: LOG1
00002765: JUMPDEST
00002766: POP
00002767: POP
00002768: JUMP
00002769: JUMPDEST
0000276a: PUSH1 0x07
0000276c: PUSH1 0x20
0000276e: MSTORE
0000276f: DUP2
00002770: PUSH1 0x00
00002772: MSTORE
00002773: PUSH1 0x40
00002775: PUSH1 0x00
00002777: KECCAK256
00002778: PUSH1 0x20
0000277a: MSTORE
0000277b: DUP1
0000277c: PUSH1 0x00
0000277e: MSTORE
0000277f: PUSH1 0x40
00002781: PUSH1 0x00
00002783: KECCAK256
00002784: PUSH1 0x00
00002786: SWAP2
00002787: POP
00002788: SWAP2
00002789: POP
0000278a: SWAP1
0000278b: SLOAD
0000278c: SWAP1
0000278d: PUSH2 0x0100
00002790: EXP
00002791: SWAP1
00002792: DIV
00002793: PUSH1 0xff
00002795: AND
00002796: DUP2
00002797: JUMP
00002798: JUMPDEST
00002799: PUSH1 0x04
0000279b: SLOAD
0000279c: DUP2
0000279d: JUMP
0000279e: JUMPDEST
0000279f: PUSH2 0x280f
000027a2: PUSH1 0x06
000027a4: PUSH1 0x00
000027a6: PUSH1 0x00
000027a8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000027bd: AND
000027be: DUP2
000027bf: MSTORE
000027c0: PUSH1 0x20
000027c2: ADD
000027c3: SWAP1
000027c4: DUP2
000027c5: MSTORE
000027c6: PUSH1 0x20
000027c8: ADD
000027c9: PUSH1 0x00
000027cb: KECCAK256
000027cc: PUSH1 0x00
000027ce: CALLER
000027cf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000027e4: AND
000027e5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000027fa: AND
000027fb: DUP2
000027fc: MSTORE
000027fd: PUSH1 0x20
000027ff: ADD
00002800: SWAP1
00002801: DUP2
00002802: MSTORE
00002803: PUSH1 0x20
00002805: ADD
00002806: PUSH1 0x00
00002808: KECCAK256
00002809: SLOAD
0000280a: CALLVALUE
0000280b: PUSH2 0x2ee0
0000280e: JUMP
0000280f: JUMPDEST
00002810: PUSH1 0x06
00002812: PUSH1 0x00
00002814: PUSH1 0x00
00002816: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000282b: AND
0000282c: DUP2
0000282d: MSTORE
0000282e: PUSH1 0x20
00002830: ADD
00002831: SWAP1
00002832: DUP2
00002833: MSTORE
00002834: PUSH1 0x20
00002836: ADD
00002837: PUSH1 0x00
00002839: KECCAK256
0000283a: PUSH1 0x00
0000283c: CALLER
0000283d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002852: AND
00002853: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002868: AND
00002869: DUP2
0000286a: MSTORE
0000286b: PUSH1 0x20
0000286d: ADD
0000286e: SWAP1
0000286f: DUP2
00002870: MSTORE
00002871: PUSH1 0x20
00002873: ADD
00002874: PUSH1 0x00
00002876: KECCAK256
00002877: DUP2
00002878: SWAP1
00002879: SSTORE
0000287a: POP
0000287b: PUSH32 0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7
0000289c: PUSH1 0x00
0000289e: CALLER
0000289f: CALLVALUE
000028a0: PUSH1 0x06
000028a2: PUSH1 0x00
000028a4: PUSH1 0x00
000028a6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000028bb: AND
000028bc: DUP2
000028bd: MSTORE
000028be: PUSH1 0x20
000028c0: ADD
000028c1: SWAP1
000028c2: DUP2
000028c3: MSTORE
000028c4: PUSH1 0x20
000028c6: ADD
000028c7: PUSH1 0x00
000028c9: KECCAK256
000028ca: PUSH1 0x00
000028cc: CALLER
000028cd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000028e2: AND
000028e3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000028f8: AND
000028f9: DUP2
000028fa: MSTORE
000028fb: PUSH1 0x20
000028fd: ADD
000028fe: SWAP1
000028ff: DUP2
00002900: MSTORE
00002901: PUSH1 0x20
00002903: ADD
00002904: PUSH1 0x00
00002906: KECCAK256
00002907: SLOAD
00002908: PUSH1 0x40
0000290a: MLOAD
0000290b: DUP1
0000290c: DUP6
0000290d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002922: AND
00002923: DUP2
00002924: MSTORE
00002925: PUSH1 0x20
00002927: ADD
00002928: DUP5
00002929: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000293e: AND
0000293f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002954: AND
00002955: DUP2
00002956: MSTORE
00002957: PUSH1 0x20
00002959: ADD
0000295a: DUP4
0000295b: DUP2
0000295c: MSTORE
0000295d: PUSH1 0x20
0000295f: ADD
00002960: DUP3
00002961: DUP2
00002962: MSTORE
00002963: PUSH1 0x20
00002965: ADD
00002966: SWAP5
00002967: POP
00002968: POP
00002969: POP
0000296a: POP
0000296b: POP
0000296c: PUSH1 0x40
0000296e: MLOAD
0000296f: DUP1
00002970: SWAP2
00002971: SUB
00002972: SWAP1
00002973: LOG1
00002974: JUMPDEST
00002975: JUMP
00002976: JUMPDEST
00002977: PUSH1 0x00
00002979: PUSH1 0x00
0000297b: SWAP1
0000297c: SLOAD
0000297d: SWAP1
0000297e: PUSH2 0x0100
00002981: EXP
00002982: SWAP1
00002983: DIV
00002984: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002999: AND
0000299a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000029af: AND
000029b0: CALLER
000029b1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000029c6: AND
000029c7: EQ
000029c8: ISZERO
000029c9: ISZERO
000029ca: PUSH2 0x29d2
000029cd: JUMPI
000029ce: PUSH2 0x0000
000029d1: JUMP
000029d2: JUMPDEST
000029d3: DUP1
000029d4: PUSH1 0x02
000029d6: PUSH1 0x00
000029d8: PUSH2 0x0100
000029db: EXP
000029dc: DUP2
000029dd: SLOAD
000029de: DUP2
000029df: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000029f4: MUL
000029f5: NOT
000029f6: AND
000029f7: SWAP1
000029f8: DUP4
000029f9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002a0e: AND
00002a0f: MUL
00002a10: OR
00002a11: SWAP1
00002a12: SSTORE
00002a13: POP
00002a14: JUMPDEST
00002a15: POP
00002a16: JUMP
00002a17: JUMPDEST
00002a18: PUSH1 0x02
00002a1a: PUSH1 0x00
00002a1c: SWAP1
00002a1d: SLOAD
00002a1e: SWAP1
00002a1f: PUSH2 0x0100
00002a22: EXP
00002a23: SWAP1
00002a24: DIV
00002a25: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002a3a: AND
00002a3b: DUP2
00002a3c: JUMP
00002a3d: JUMPDEST
00002a3e: PUSH1 0x00
00002a40: PUSH1 0x06
00002a42: PUSH1 0x00
00002a44: DUP5
00002a45: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002a5a: AND
00002a5b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002a70: AND
00002a71: DUP2
00002a72: MSTORE
00002a73: PUSH1 0x20
00002a75: ADD
00002a76: SWAP1
00002a77: DUP2
00002a78: MSTORE
00002a79: PUSH1 0x20
00002a7b: ADD
00002a7c: PUSH1 0x00
00002a7e: KECCAK256
00002a7f: PUSH1 0x00
00002a81: DUP4
00002a82: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002a97: AND
00002a98: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002aad: AND
00002aae: DUP2
00002aaf: MSTORE
00002ab0: PUSH1 0x20
00002ab2: ADD
00002ab3: SWAP1
00002ab4: DUP2
00002ab5: MSTORE
00002ab6: PUSH1 0x20
00002ab8: ADD
00002ab9: PUSH1 0x00
00002abb: KECCAK256
00002abc: SLOAD
00002abd: SWAP1
00002abe: POP
00002abf: JUMPDEST
00002ac0: SWAP3
00002ac1: SWAP2
00002ac2: POP
00002ac3: POP
00002ac4: JUMP
00002ac5: JUMPDEST
00002ac6: PUSH1 0x00
00002ac8: PUSH1 0x00
00002aca: SWAP1
00002acb: SLOAD
00002acc: SWAP1
00002acd: PUSH2 0x0100
00002ad0: EXP
00002ad1: SWAP1
00002ad2: DIV
00002ad3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002ae8: AND
00002ae9: DUP2
00002aea: JUMP
00002aeb: JUMPDEST
00002aec: PUSH1 0x09
00002aee: PUSH1 0x20
00002af0: MSTORE
00002af1: DUP1
00002af2: PUSH1 0x00
00002af4: MSTORE
00002af5: PUSH1 0x40
00002af7: PUSH1 0x00
00002af9: KECCAK256
00002afa: PUSH1 0x00
00002afc: SWAP2
00002afd: POP
00002afe: SLOAD
00002aff: SWAP1
00002b00: PUSH2 0x0100
00002b03: EXP
00002b04: SWAP1
00002b05: DIV
00002b06: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002b1b: AND
00002b1c: DUP2
00002b1d: JUMP
00002b1e: JUMPDEST
00002b1f: PUSH1 0x00
00002b21: PUSH1 0x00
00002b23: PUSH1 0x00
00002b25: PUSH1 0x00
00002b27: PUSH1 0x02
00002b29: ADDRESS
00002b2a: DUP16
00002b2b: DUP16
00002b2c: DUP16
00002b2d: DUP16
00002b2e: DUP16
00002b2f: DUP16
00002b30: PUSH1 0x00
00002b32: PUSH1 0x40
00002b34: MLOAD
00002b35: PUSH1 0x20
00002b37: ADD
00002b38: MSTORE
00002b39: PUSH1 0x40
00002b3b: MLOAD
00002b3c: DUP1
00002b3d: DUP9
00002b3e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002b53: AND
00002b54: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002b69: AND
00002b6a: PUSH13 0x01000000000000000000000000
00002b78: MUL
00002b79: DUP2
00002b7a: MSTORE
00002b7b: PUSH1 0x14
00002b7d: ADD
00002b7e: DUP8
00002b7f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002b94: AND
00002b95: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002baa: AND
00002bab: PUSH13 0x01000000000000000000000000
00002bb9: MUL
00002bba: DUP2
00002bbb: MSTORE
00002bbc: PUSH1 0x14
00002bbe: ADD
00002bbf: DUP7
00002bc0: DUP2
00002bc1: MSTORE
00002bc2: PUSH1 0x20
00002bc4: ADD
00002bc5: DUP6
00002bc6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002bdb: AND
00002bdc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002bf1: AND
00002bf2: PUSH13 0x01000000000000000000000000
00002c00: MUL
00002c01: DUP2
00002c02: MSTORE
00002c03: PUSH1 0x14
00002c05: ADD
00002c06: DUP5
00002c07: DUP2
00002c08: MSTORE
00002c09: PUSH1 0x20
00002c0b: ADD
00002c0c: DUP4
00002c0d: DUP2
00002c0e: MSTORE
00002c0f: PUSH1 0x20
00002c11: ADD
00002c12: DUP3
00002c13: DUP2
00002c14: MSTORE
00002c15: PUSH1 0x20
00002c17: ADD
00002c18: SWAP8
00002c19: POP
00002c1a: POP
00002c1b: POP
00002c1c: POP
00002c1d: POP
00002c1e: POP
00002c1f: POP
00002c20: POP
00002c21: PUSH1 0x20
00002c23: PUSH1 0x40
00002c25: MLOAD
00002c26: DUP1
00002c27: DUP4
00002c28: SUB
00002c29: DUP2
00002c2a: PUSH1 0x00
00002c2c: DUP7
00002c2d: PUSH2 0x61da
00002c30: GAS
00002c31: SUB
00002c32: CALL
00002c33: ISZERO
00002c34: ISZERO
00002c35: PUSH2 0x2c3a
00002c38: JUMPI
00002c39: INVALID
00002c3a: JUMPDEST
00002c3b: POP
00002c3c: POP
00002c3d: PUSH1 0x40
00002c3f: MLOAD
00002c40: DUP1
00002c41: MLOAD
00002c42: SWAP1
00002c43: POP
00002c44: SWAP3
00002c45: POP
00002c46: PUSH1 0x07
00002c48: PUSH1 0x00
00002c4a: DUP10
00002c4b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002c60: AND
00002c61: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002c76: AND
00002c77: DUP2
00002c78: MSTORE
00002c79: PUSH1 0x20
00002c7b: ADD
00002c7c: SWAP1
00002c7d: DUP2
00002c7e: MSTORE
00002c7f: PUSH1 0x20
00002c81: ADD
00002c82: PUSH1 0x00
00002c84: KECCAK256
00002c85: PUSH1 0x00
00002c87: DUP5
00002c88: PUSH1 0x00
00002c8a: NOT
00002c8b: AND
00002c8c: PUSH1 0x00
00002c8e: NOT
00002c8f: AND
00002c90: DUP2
00002c91: MSTORE
00002c92: PUSH1 0x20
00002c94: ADD
00002c95: SWAP1
00002c96: DUP2
00002c97: MSTORE
00002c98: PUSH1 0x20
00002c9a: ADD
00002c9b: PUSH1 0x00
00002c9d: KECCAK256
00002c9e: PUSH1 0x00
00002ca0: SWAP1
00002ca1: SLOAD
00002ca2: SWAP1
00002ca3: PUSH2 0x0100
00002ca6: EXP
00002ca7: SWAP1
00002ca8: DIV
00002ca9: PUSH1 0xff
00002cab: AND
00002cac: DUP1
00002cad: PUSH2 0x2da9
00002cb0: JUMPI
00002cb1: POP
00002cb2: DUP8
00002cb3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002cc8: AND
00002cc9: PUSH1 0x01
00002ccb: DUP5
00002ccc: PUSH1 0x40
00002cce: MLOAD
00002ccf: DUP1
00002cd0: DUP1
00002cd1: PUSH32 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000
00002cf2: DUP2
00002cf3: MSTORE
00002cf4: POP
00002cf5: PUSH1 0x1c
00002cf7: ADD
00002cf8: DUP3
00002cf9: PUSH1 0x00
00002cfb: NOT
00002cfc: AND
00002cfd: PUSH1 0x00
00002cff: NOT
00002d00: AND
00002d01: DUP2
00002d02: MSTORE
00002d03: PUSH1 0x20
00002d05: ADD
00002d06: SWAP2
00002d07: POP
00002d08: POP
00002d09: PUSH1 0x40
00002d0b: MLOAD
00002d0c: DUP1
00002d0d: SWAP2
00002d0e: SUB
00002d0f: SWAP1
00002d10: KECCAK256
00002d11: DUP10
00002d12: DUP10
00002d13: DUP10
00002d14: PUSH1 0x40
00002d16: MLOAD
00002d17: DUP1
00002d18: PUSH1 0x00
00002d1a: MSTORE
00002d1b: PUSH1 0x20
00002d1d: ADD
00002d1e: PUSH1 0x40
00002d20: MSTORE
00002d21: PUSH1 0x00
00002d23: PUSH1 0x40
00002d25: MLOAD
00002d26: PUSH1 0x20
00002d28: ADD
00002d29: MSTORE
00002d2a: PUSH1 0x40
00002d2c: MLOAD
00002d2d: DUP1
00002d2e: DUP6
00002d2f: PUSH1 0x00
00002d31: NOT
00002d32: AND
00002d33: PUSH1 0x00
00002d35: NOT
00002d36: AND
00002d37: DUP2
00002d38: MSTORE
00002d39: PUSH1 0x20
00002d3b: ADD
00002d3c: DUP5
00002d3d: PUSH1 0xff
00002d3f: AND
00002d40: PUSH1 0xff
00002d42: AND
00002d43: DUP2
00002d44: MSTORE
00002d45: PUSH1 0x20
00002d47: ADD
00002d48: DUP4
00002d49: PUSH1 0x00
00002d4b: NOT
00002d4c: AND
00002d4d: PUSH1 0x00
00002d4f: NOT
00002d50: AND
00002d51: DUP2
00002d52: MSTORE
00002d53: PUSH1 0x20
00002d55: ADD
00002d56: DUP3
00002d57: PUSH1 0x00
00002d59: NOT
00002d5a: AND
00002d5b: PUSH1 0x00
00002d5d: NOT
00002d5e: AND
00002d5f: DUP2
00002d60: MSTORE
00002d61: PUSH1 0x20
00002d63: ADD
00002d64: SWAP5
00002d65: POP
00002d66: POP
00002d67: POP
00002d68: POP
00002d69: POP
00002d6a: PUSH1 0x20
00002d6c: PUSH1 0x40
00002d6e: MLOAD
00002d6f: PUSH1 0x20
00002d71: DUP2
00002d72: SUB
00002d73: SWAP1
00002d74: DUP1
00002d75: DUP5
00002d76: SUB
00002d77: SWAP1
00002d78: PUSH1 0x00
00002d7a: DUP7
00002d7b: PUSH2 0x61da
00002d7e: GAS
00002d7f: SUB
00002d80: CALL
00002d81: ISZERO
00002d82: ISZERO
00002d83: PUSH2 0x2d88
00002d86: JUMPI
00002d87: INVALID
00002d88: JUMPDEST
00002d89: POP
00002d8a: POP
00002d8b: PUSH1 0x20
00002d8d: PUSH1 0x40
00002d8f: MLOAD
00002d90: SUB
00002d91: MLOAD
00002d92: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002da7: AND
00002da8: EQ
00002da9: JUMPDEST
00002daa: DUP1
00002dab: ISZERO
00002dac: PUSH2 0x2db5
00002daf: JUMPI
00002db0: POP
00002db1: DUP10
00002db2: NUMBER
00002db3: GT
00002db4: ISZERO
00002db5: JUMPDEST
00002db6: ISZERO
00002db7: ISZERO
00002db8: PUSH2 0x2dc4
00002dbb: JUMPI
00002dbc: PUSH1 0x00
00002dbe: SWAP4
00002dbf: POP
00002dc0: PUSH2 0x2ecf
00002dc3: JUMP
00002dc4: JUMPDEST
00002dc5: PUSH2 0x2e26
00002dc8: DUP14
00002dc9: PUSH1 0x08
00002dcb: PUSH1 0x00
00002dcd: DUP12
00002dce: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002de3: AND
00002de4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002df9: AND
00002dfa: DUP2
00002dfb: MSTORE
00002dfc: PUSH1 0x20
00002dfe: ADD
00002dff: SWAP1
00002e00: DUP2
00002e01: MSTORE
00002e02: PUSH1 0x20
00002e04: ADD
00002e05: PUSH1 0x00
00002e07: KECCAK256
00002e08: PUSH1 0x00
00002e0a: DUP7
00002e0b: PUSH1 0x00
00002e0d: NOT
00002e0e: AND
00002e0f: PUSH1 0x00
00002e11: NOT
00002e12: AND
00002e13: DUP2
00002e14: MSTORE
00002e15: PUSH1 0x20
00002e17: ADD
00002e18: SWAP1
00002e19: DUP2
00002e1a: MSTORE
00002e1b: PUSH1 0x20
00002e1d: ADD
00002e1e: PUSH1 0x00
00002e20: KECCAK256
00002e21: SLOAD
00002e22: PUSH2 0x3674
00002e25: JUMP
00002e26: JUMPDEST
00002e27: SWAP2
00002e28: POP
00002e29: DUP11
00002e2a: PUSH2 0x2eaf
00002e2d: PUSH1 0x06
00002e2f: PUSH1 0x00
00002e31: DUP16
00002e32: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002e47: AND
00002e48: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002e5d: AND
00002e5e: DUP2
00002e5f: MSTORE
00002e60: PUSH1 0x20
00002e62: ADD
00002e63: SWAP1
00002e64: DUP2
00002e65: MSTORE
00002e66: PUSH1 0x20
00002e68: ADD
00002e69: PUSH1 0x00
00002e6b: KECCAK256
00002e6c: PUSH1 0x00
00002e6e: DUP12
00002e6f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002e84: AND
00002e85: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002e9a: AND
00002e9b: DUP2
00002e9c: MSTORE
00002e9d: PUSH1 0x20
00002e9f: ADD
00002ea0: SWAP1
00002ea1: DUP2
00002ea2: MSTORE
00002ea3: PUSH1 0x20
00002ea5: ADD
00002ea6: PUSH1 0x00
00002ea8: KECCAK256
00002ea9: SLOAD
00002eaa: DUP16
00002eab: PUSH2 0x368e
00002eae: JUMP
00002eaf: JUMPDEST
00002eb0: DUP2
00002eb1: ISZERO
00002eb2: ISZERO
00002eb3: PUSH2 0x2eb8
00002eb6: JUMPI
00002eb7: INVALID
00002eb8: JUMPDEST
00002eb9: DIV
00002eba: SWAP1
00002ebb: POP
00002ebc: DUP1
00002ebd: DUP3
00002ebe: LT
00002ebf: ISZERO
00002ec0: PUSH2 0x2ecb
00002ec3: JUMPI
00002ec4: DUP2
00002ec5: SWAP4
00002ec6: POP
00002ec7: PUSH2 0x2ecf
00002eca: JUMP
00002ecb: JUMPDEST
00002ecc: DUP1
00002ecd: SWAP4
00002ece: POP
00002ecf: JUMPDEST
00002ed0: POP
00002ed1: POP
00002ed2: POP
00002ed3: SWAP11
00002ed4: SWAP10
00002ed5: POP
00002ed6: POP
00002ed7: POP
00002ed8: POP
00002ed9: POP
00002eda: POP
00002edb: POP
00002edc: POP
00002edd: POP
00002ede: POP
00002edf: JUMP
00002ee0: JUMPDEST
00002ee1: PUSH1 0x00
00002ee3: PUSH1 0x00
00002ee5: DUP3
00002ee6: DUP5
00002ee7: ADD
00002ee8: SWAP1
00002ee9: POP
00002eea: PUSH2 0x2f01
00002eed: DUP5
00002eee: DUP3
00002eef: LT
00002ef0: ISZERO
00002ef1: DUP1
00002ef2: ISZERO
00002ef3: PUSH2 0x2efc
00002ef6: JUMPI
00002ef7: POP
00002ef8: DUP4
00002ef9: DUP3
00002efa: LT
00002efb: ISZERO
00002efc: JUMPDEST
00002efd: PUSH2 0x36c3
00002f00: JUMP
00002f01: JUMPDEST
00002f02: DUP1
00002f03: SWAP2
00002f04: POP
00002f05: JUMPDEST
00002f06: POP
00002f07: SWAP3
00002f08: SWAP2
00002f09: POP
00002f0a: POP
00002f0b: JUMP
00002f0c: JUMPDEST
00002f0d: PUSH1 0x00
00002f0f: PUSH1 0x00
00002f11: PUSH1 0x00
00002f13: PUSH1 0x00
00002f15: PUSH8 0x0de0b6b3a7640000
00002f1e: PUSH2 0x2f29
00002f21: DUP7
00002f22: PUSH1 0x03
00002f24: SLOAD
00002f25: PUSH2 0x368e
00002f28: JUMP
00002f29: JUMPDEST
00002f2a: DUP2
00002f2b: ISZERO
00002f2c: ISZERO
00002f2d: PUSH2 0x2f32
00002f30: JUMPI
00002f31: INVALID
00002f32: JUMPDEST
00002f33: DIV
00002f34: SWAP4
00002f35: POP
00002f36: PUSH8 0x0de0b6b3a7640000
00002f3f: PUSH2 0x2f4a
00002f42: DUP7
00002f43: PUSH1 0x04
00002f45: SLOAD
00002f46: PUSH2 0x368e
00002f49: JUMP
00002f4a: JUMPDEST
00002f4b: DUP2
00002f4c: ISZERO
00002f4d: ISZERO
00002f4e: PUSH2 0x2f53
00002f51: JUMPI
00002f52: INVALID
00002f53: JUMPDEST
00002f54: DIV
00002f55: SWAP3
00002f56: POP
00002f57: PUSH1 0x00
00002f59: SWAP2
00002f5a: POP
00002f5b: PUSH1 0x00
00002f5d: PUSH1 0x02
00002f5f: PUSH1 0x00
00002f61: SWAP1
00002f62: SLOAD
00002f63: SWAP1
00002f64: PUSH2 0x0100
00002f67: EXP
00002f68: SWAP1
00002f69: DIV
00002f6a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002f7f: AND
00002f80: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002f95: AND
00002f96: EQ
00002f97: ISZERO
00002f98: ISZERO
00002f99: PUSH2 0x30b0
00002f9c: JUMPI
00002f9d: PUSH1 0x02
00002f9f: PUSH1 0x00
00002fa1: SWAP1
00002fa2: SLOAD
00002fa3: SWAP1
00002fa4: PUSH2 0x0100
00002fa7: EXP
00002fa8: SWAP1
00002fa9: DIV
00002faa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002fbf: AND
00002fc0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00002fd5: AND
00002fd6: PUSH4 0x1cbd0519
00002fdb: DUP8
00002fdc: PUSH1 0x00
00002fde: PUSH1 0x40
00002fe0: MLOAD
00002fe1: PUSH1 0x20
00002fe3: ADD
00002fe4: MSTORE
00002fe5: PUSH1 0x40
00002fe7: MLOAD
00002fe8: DUP3
00002fe9: PUSH4 0xffffffff
00002fee: AND
00002fef: PUSH29 0x0100000000000000000000000000000000000000000000000000000000
0000300d: MUL
0000300e: DUP2
0000300f: MSTORE
00003010: PUSH1 0x04
00003012: ADD
00003013: DUP1
00003014: DUP3
00003015: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000302a: AND
0000302b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003040: AND
00003041: DUP2
00003042: MSTORE
00003043: PUSH1 0x20
00003045: ADD
00003046: SWAP2
00003047: POP
00003048: POP
00003049: PUSH1 0x20
0000304b: PUSH1 0x40
0000304d: MLOAD
0000304e: DUP1
0000304f: DUP4
00003050: SUB
00003051: DUP2
00003052: PUSH1 0x00
00003054: DUP8
00003055: DUP1
00003056: EXTCODESIZE
00003057: ISZERO
00003058: ISZERO
00003059: PUSH2 0x305e
0000305c: JUMPI
0000305d: INVALID
0000305e: JUMPDEST
0000305f: PUSH1 0x32
00003061: GAS
00003062: SUB
00003063: CALL
00003064: ISZERO
00003065: ISZERO
00003066: PUSH2 0x306b
00003069: JUMPI
0000306a: INVALID
0000306b: JUMPDEST
0000306c: POP
0000306d: POP
0000306e: POP
0000306f: PUSH1 0x40
00003071: MLOAD
00003072: DUP1
00003073: MLOAD
00003074: SWAP1
00003075: POP
00003076: SWAP1
00003077: POP
00003078: PUSH1 0x01
0000307a: DUP2
0000307b: EQ
0000307c: ISZERO
0000307d: PUSH2 0x30a2
00003080: JUMPI
00003081: PUSH8 0x0de0b6b3a7640000
0000308a: PUSH2 0x3095
0000308d: DUP7
0000308e: PUSH1 0x05
00003090: SLOAD
00003091: PUSH2 0x368e
00003094: JUMP
00003095: JUMPDEST
00003096: DUP2
00003097: ISZERO
00003098: ISZERO
00003099: PUSH2 0x309e
0000309c: JUMPI
0000309d: INVALID
0000309e: JUMPDEST
0000309f: DIV
000030a0: SWAP2
000030a1: POP
000030a2: JUMPDEST
000030a3: PUSH1 0x02
000030a5: DUP2
000030a6: EQ
000030a7: ISZERO
000030a8: PUSH2 0x30af
000030ab: JUMPI
000030ac: DUP3
000030ad: SWAP2
000030ae: POP
000030af: JUMPDEST
000030b0: JUMPDEST
000030b1: PUSH2 0x313f
000030b4: PUSH1 0x06
000030b6: PUSH1 0x00
000030b8: DUP13
000030b9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000030ce: AND
000030cf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000030e4: AND
000030e5: DUP2
000030e6: MSTORE
000030e7: PUSH1 0x20
000030e9: ADD
000030ea: SWAP1
000030eb: DUP2
000030ec: MSTORE
000030ed: PUSH1 0x20
000030ef: ADD
000030f0: PUSH1 0x00
000030f2: KECCAK256
000030f3: PUSH1 0x00
000030f5: CALLER
000030f6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000310b: AND
0000310c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003121: AND
00003122: DUP2
00003123: MSTORE
00003124: PUSH1 0x20
00003126: ADD
00003127: SWAP1
00003128: DUP2
00003129: MSTORE
0000312a: PUSH1 0x20
0000312c: ADD
0000312d: PUSH1 0x00
0000312f: KECCAK256
00003130: SLOAD
00003131: PUSH2 0x313a
00003134: DUP8
00003135: DUP7
00003136: PUSH2 0x2ee0
00003139: JUMP
0000313a: JUMPDEST
0000313b: PUSH2 0x3674
0000313e: JUMP
0000313f: JUMPDEST
00003140: PUSH1 0x06
00003142: PUSH1 0x00
00003144: DUP13
00003145: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000315a: AND
0000315b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003170: AND
00003171: DUP2
00003172: MSTORE
00003173: PUSH1 0x20
00003175: ADD
00003176: SWAP1
00003177: DUP2
00003178: MSTORE
00003179: PUSH1 0x20
0000317b: ADD
0000317c: PUSH1 0x00
0000317e: KECCAK256
0000317f: PUSH1 0x00
00003181: CALLER
00003182: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003197: AND
00003198: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000031ad: AND
000031ae: DUP2
000031af: MSTORE
000031b0: PUSH1 0x20
000031b2: ADD
000031b3: SWAP1
000031b4: DUP2
000031b5: MSTORE
000031b6: PUSH1 0x20
000031b8: ADD
000031b9: PUSH1 0x00
000031bb: KECCAK256
000031bc: DUP2
000031bd: SWAP1
000031be: SSTORE
000031bf: POP
000031c0: PUSH2 0x3257
000031c3: PUSH1 0x06
000031c5: PUSH1 0x00
000031c7: DUP13
000031c8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000031dd: AND
000031de: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000031f3: AND
000031f4: DUP2
000031f5: MSTORE
000031f6: PUSH1 0x20
000031f8: ADD
000031f9: SWAP1
000031fa: DUP2
000031fb: MSTORE
000031fc: PUSH1 0x20
000031fe: ADD
000031ff: PUSH1 0x00
00003201: KECCAK256
00003202: PUSH1 0x00
00003204: DUP9
00003205: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000321a: AND
0000321b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003230: AND
00003231: DUP2
00003232: MSTORE
00003233: PUSH1 0x20
00003235: ADD
00003236: SWAP1
00003237: DUP2
00003238: MSTORE
00003239: PUSH1 0x20
0000323b: ADD
0000323c: PUSH1 0x00
0000323e: KECCAK256
0000323f: SLOAD
00003240: PUSH2 0x3252
00003243: PUSH2 0x324c
00003246: DUP9
00003247: DUP7
00003248: PUSH2 0x2ee0
0000324b: JUMP
0000324c: JUMPDEST
0000324d: DUP8
0000324e: PUSH2 0x3674
00003251: JUMP
00003252: JUMPDEST
00003253: PUSH2 0x2ee0
00003256: JUMP
00003257: JUMPDEST
00003258: PUSH1 0x06
0000325a: PUSH1 0x00
0000325c: DUP13
0000325d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003272: AND
00003273: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003288: AND
00003289: DUP2
0000328a: MSTORE
0000328b: PUSH1 0x20
0000328d: ADD
0000328e: SWAP1
0000328f: DUP2
00003290: MSTORE
00003291: PUSH1 0x20
00003293: ADD
00003294: PUSH1 0x00
00003296: KECCAK256
00003297: PUSH1 0x00
00003299: DUP9
0000329a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000032af: AND
000032b0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000032c5: AND
000032c6: DUP2
000032c7: MSTORE
000032c8: PUSH1 0x20
000032ca: ADD
000032cb: SWAP1
000032cc: DUP2
000032cd: MSTORE
000032ce: PUSH1 0x20
000032d0: ADD
000032d1: PUSH1 0x00
000032d3: KECCAK256
000032d4: DUP2
000032d5: SWAP1
000032d6: SSTORE
000032d7: POP
000032d8: PUSH2 0x3391
000032db: PUSH1 0x06
000032dd: PUSH1 0x00
000032df: DUP13
000032e0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000032f5: AND
000032f6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000330b: AND
0000330c: DUP2
0000330d: MSTORE
0000330e: PUSH1 0x20
00003310: ADD
00003311: SWAP1
00003312: DUP2
00003313: MSTORE
00003314: PUSH1 0x20
00003316: ADD
00003317: PUSH1 0x00
00003319: KECCAK256
0000331a: PUSH1 0x00
0000331c: PUSH1 0x01
0000331e: PUSH1 0x00
00003320: SWAP1
00003321: SLOAD
00003322: SWAP1
00003323: PUSH2 0x0100
00003326: EXP
00003327: SWAP1
00003328: DIV
00003329: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000333e: AND
0000333f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003354: AND
00003355: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000336a: AND
0000336b: DUP2
0000336c: MSTORE
0000336d: PUSH1 0x20
0000336f: ADD
00003370: SWAP1
00003371: DUP2
00003372: MSTORE
00003373: PUSH1 0x20
00003375: ADD
00003376: PUSH1 0x00
00003378: KECCAK256
00003379: SLOAD
0000337a: PUSH2 0x338c
0000337d: PUSH2 0x3386
00003380: DUP8
00003381: DUP8
00003382: PUSH2 0x2ee0
00003385: JUMP
00003386: JUMPDEST
00003387: DUP6
00003388: PUSH2 0x3674
0000338b: JUMP
0000338c: JUMPDEST
0000338d: PUSH2 0x2ee0
00003390: JUMP
00003391: JUMPDEST
00003392: PUSH1 0x06
00003394: PUSH1 0x00
00003396: DUP13
00003397: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000033ac: AND
000033ad: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000033c2: AND
000033c3: DUP2
000033c4: MSTORE
000033c5: PUSH1 0x20
000033c7: ADD
000033c8: SWAP1
000033c9: DUP2
000033ca: MSTORE
000033cb: PUSH1 0x20
000033cd: ADD
000033ce: PUSH1 0x00
000033d0: KECCAK256
000033d1: PUSH1 0x00
000033d3: PUSH1 0x01
000033d5: PUSH1 0x00
000033d7: SWAP1
000033d8: SLOAD
000033d9: SWAP1
000033da: PUSH2 0x0100
000033dd: EXP
000033de: SWAP1
000033df: DIV
000033e0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000033f5: AND
000033f6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000340b: AND
0000340c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003421: AND
00003422: DUP2
00003423: MSTORE
00003424: PUSH1 0x20
00003426: ADD
00003427: SWAP1
00003428: DUP2
00003429: MSTORE
0000342a: PUSH1 0x20
0000342c: ADD
0000342d: PUSH1 0x00
0000342f: KECCAK256
00003430: DUP2
00003431: SWAP1
00003432: SSTORE
00003433: POP
00003434: PUSH2 0x34cd
00003437: PUSH1 0x06
00003439: PUSH1 0x00
0000343b: DUP11
0000343c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003451: AND
00003452: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003467: AND
00003468: DUP2
00003469: MSTORE
0000346a: PUSH1 0x20
0000346c: ADD
0000346d: SWAP1
0000346e: DUP2
0000346f: MSTORE
00003470: PUSH1 0x20
00003472: ADD
00003473: PUSH1 0x00
00003475: KECCAK256
00003476: PUSH1 0x00
00003478: DUP9
00003479: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000348e: AND
0000348f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000034a4: AND
000034a5: DUP2
000034a6: MSTORE
000034a7: PUSH1 0x20
000034a9: ADD
000034aa: SWAP1
000034ab: DUP2
000034ac: MSTORE
000034ad: PUSH1 0x20
000034af: ADD
000034b0: PUSH1 0x00
000034b2: KECCAK256
000034b3: SLOAD
000034b4: DUP11
000034b5: PUSH2 0x34be
000034b8: DUP11
000034b9: DUP10
000034ba: PUSH2 0x368e
000034bd: JUMP
000034be: JUMPDEST
000034bf: DUP2
000034c0: ISZERO
000034c1: ISZERO
000034c2: PUSH2 0x34c7
000034c5: JUMPI
000034c6: INVALID
000034c7: JUMPDEST
000034c8: DIV
000034c9: PUSH2 0x3674
000034cc: JUMP
000034cd: JUMPDEST
000034ce: PUSH1 0x06
000034d0: PUSH1 0x00
000034d2: DUP11
000034d3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000034e8: AND
000034e9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000034fe: AND
000034ff: DUP2
00003500: MSTORE
00003501: PUSH1 0x20
00003503: ADD
00003504: SWAP1
00003505: DUP2
00003506: MSTORE
00003507: PUSH1 0x20
00003509: ADD
0000350a: PUSH1 0x00
0000350c: KECCAK256
0000350d: PUSH1 0x00
0000350f: DUP9
00003510: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003525: AND
00003526: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000353b: AND
0000353c: DUP2
0000353d: MSTORE
0000353e: PUSH1 0x20
00003540: ADD
00003541: SWAP1
00003542: DUP2
00003543: MSTORE
00003544: PUSH1 0x20
00003546: ADD
00003547: PUSH1 0x00
00003549: KECCAK256
0000354a: DUP2
0000354b: SWAP1
0000354c: SSTORE
0000354d: POP
0000354e: PUSH2 0x35e7
00003551: PUSH1 0x06
00003553: PUSH1 0x00
00003555: DUP11
00003556: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000356b: AND
0000356c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003581: AND
00003582: DUP2
00003583: MSTORE
00003584: PUSH1 0x20
00003586: ADD
00003587: SWAP1
00003588: DUP2
00003589: MSTORE
0000358a: PUSH1 0x20
0000358c: ADD
0000358d: PUSH1 0x00
0000358f: KECCAK256
00003590: PUSH1 0x00
00003592: CALLER
00003593: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000035a8: AND
000035a9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
000035be: AND
000035bf: DUP2
000035c0: MSTORE
000035c1: PUSH1 0x20
000035c3: ADD
000035c4: SWAP1
000035c5: DUP2
000035c6: MSTORE
000035c7: PUSH1 0x20
000035c9: ADD
000035ca: PUSH1 0x00
000035cc: KECCAK256
000035cd: SLOAD
000035ce: DUP11
000035cf: PUSH2 0x35d8
000035d2: DUP11
000035d3: DUP10
000035d4: PUSH2 0x368e
000035d7: JUMP
000035d8: JUMPDEST
000035d9: DUP2
000035da: ISZERO
000035db: ISZERO
000035dc: PUSH2 0x35e1
000035df: JUMPI
000035e0: INVALID
000035e1: JUMPDEST
000035e2: DIV
000035e3: PUSH2 0x2ee0
000035e6: JUMP
000035e7: JUMPDEST
000035e8: PUSH1 0x06
000035ea: PUSH1 0x00
000035ec: DUP11
000035ed: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003602: AND
00003603: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003618: AND
00003619: DUP2
0000361a: MSTORE
0000361b: PUSH1 0x20
0000361d: ADD
0000361e: SWAP1
0000361f: DUP2
00003620: MSTORE
00003621: PUSH1 0x20
00003623: ADD
00003624: PUSH1 0x00
00003626: KECCAK256
00003627: PUSH1 0x00
00003629: CALLER
0000362a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
0000363f: AND
00003640: PUSH20 0xffffffffffffffffffffffffffffffffffffffff
00003655: AND
00003656: DUP2
00003657: MSTORE
00003658: PUSH1 0x20
0000365a: ADD
0000365b: SWAP1
0000365c: DUP2
0000365d: MSTORE
0000365e: PUSH1 0x20
00003660: ADD
00003661: PUSH1 0x00
00003663: KECCAK256
00003664: DUP2
00003665: SWAP1
00003666: SSTORE
00003667: POP
00003668: JUMPDEST
00003669: POP
0000366a: POP
0000366b: POP
0000366c: POP
0000366d: POP
0000366e: POP
0000366f: POP
00003670: POP
00003671: POP
00003672: POP
00003673: JUMP
00003674: JUMPDEST
00003675: PUSH1 0x00
00003677: PUSH2 0x3682
0000367a: DUP4
0000367b: DUP4
0000367c: GT
0000367d: ISZERO
0000367e: PUSH2 0x36c3
00003681: JUMP
00003682: JUMPDEST
00003683: DUP2
00003684: DUP4
00003685: SUB
00003686: SWAP1
00003687: POP
00003688: JUMPDEST
00003689: SWAP3
0000368a: SWAP2
0000368b: POP
0000368c: POP
0000368d: JUMP
0000368e: JUMPDEST
0000368f: PUSH1 0x00
00003691: PUSH1 0x00
00003693: DUP3
00003694: DUP5
00003695: MUL
00003696: SWAP1
00003697: POP
00003698: PUSH2 0x36b8
0000369b: PUSH1 0x00
0000369d: DUP6
0000369e: EQ
0000369f: DUP1
000036a0: PUSH2 0x36b3
000036a3: JUMPI
000036a4: POP
000036a5: DUP4
000036a6: DUP6
000036a7: DUP4
000036a8: DUP2
000036a9: ISZERO
000036aa: ISZERO
000036ab: PUSH2 0x36b0
000036ae: JUMPI
000036af: INVALID
000036b0: JUMPDEST
000036b1: DIV
000036b2: EQ
000036b3: JUMPDEST
000036b4: PUSH2 0x36c3
000036b7: JUMP
000036b8: JUMPDEST
000036b9: DUP1
000036ba: SWAP2
000036bb: POP
000036bc: JUMPDEST
000036bd: POP
000036be: SWAP3
000036bf: SWAP2
000036c0: POP
000036c1: POP
000036c2: JUMP
000036c3: JUMPDEST
000036c4: DUP1
000036c5: ISZERO
000036c6: ISZERO
000036c7: PUSH2 0x36cf
000036ca: JUMPI
000036cb: PUSH2 0x0000
000036ce: JUMP
000036cf: JUMPDEST
000036d0: JUMPDEST
000036d1: POP
000036d2: JUMP
000036d3: STOP
000036d4: LOG1
000036d5: PUSH6 0x627a7a723058
000036dc: KECCAK256
000036dd: PUSH15 0x7a5e93b60f6ddaa2caa7cb5cb60102
000036ed: UNKNOWN(0x2F)
000036ee: LOG0
000036ef: PUSH10 0x59a3b5bc2f667b20353f
000036fa: DUP15
000036fb: SWAP8
000036fc: LOG3
000036fd: STOP
000036fe: UNKNOWN(0x29)

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
medium other detector Untrusted CALL target/value reachable 45 no no
view
trace_id: 0x479104777f1090919a0692ff3532e59bcf36b1fba6b79028b6222b3d78b16d86
call_targets: 0x4d55f76ce2dbbae7b48661bef9bd144ce0c9091b
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x479104777f1090919a0692ff3532e59bcf36b1fba6b79028b6222b3d78b16d86",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x4d55f76ce2dbbae7b48661bef9bd144ce0c9091b"
    ],
    "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": "0x0a19b14a",
            "selector": "0x0a19b14a",
            "calldata_variants": [
                "0x0a19b14a",
                "0x0a19b14a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x0b927666",
            "selector": "0x0b927666",
            "calldata_variants": [
                "0x0b927666",
                "0x0b9276660000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x19774d43",
            "selector": "0x19774d43",
            "calldata_variants": [
                "0x19774d43",
                "0x19774d430000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x278b8c0e",
            "selector": "0x278b8c0e",
            "calldata_variants": [
                "0x278b8c0e",
                "0x278b8c0e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x2e1a7d4d",
            "selector": "0x2e1a7d4d",
            "calldata_variants": [
                "0x2e1a7d4d",
                "0x2e1a7d4d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x338b5dea",
            "selector": "0x338b5dea",
            "calldata_variants": [
                "0x338b5dea",
                "0x338b5dea0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3fb9950a",
            "selector": "0x3fb9950a",
            "calldata_variants": [
                "0x3fb9950a",
                "0x3fb9950a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 3181,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 3515,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 4461,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 12,
    "guards_detected": [
        {
            "pc": 7611,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 8269,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 8393,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 8756,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 8923,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 9053,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 10672,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        }
    ],
    "untrusted_call_count": 12
}
medium other detector ETH value transfer possible 40 no no
view
trace_id: 0x479104777f1090919a0692ff3532e59bcf36b1fba6b79028b6222b3d78b16d86
call_targets: 0x4d55f76ce2dbbae7b48661bef9bd144ce0c9091b
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0x479104777f1090919a0692ff3532e59bcf36b1fba6b79028b6222b3d78b16d86",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x4d55f76ce2dbbae7b48661bef9bd144ce0c9091b"
    ],
    "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": "0x0a19b14a",
            "selector": "0x0a19b14a",
            "calldata_variants": [
                "0x0a19b14a",
                "0x0a19b14a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x0b927666",
            "selector": "0x0b927666",
            "calldata_variants": [
                "0x0b927666",
                "0x0b9276660000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x19774d43",
            "selector": "0x19774d43",
            "calldata_variants": [
                "0x19774d43",
                "0x19774d430000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x278b8c0e",
            "selector": "0x278b8c0e",
            "calldata_variants": [
                "0x278b8c0e",
                "0x278b8c0e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x2e1a7d4d",
            "selector": "0x2e1a7d4d",
            "calldata_variants": [
                "0x2e1a7d4d",
                "0x2e1a7d4d0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x338b5dea",
            "selector": "0x338b5dea",
            "calldata_variants": [
                "0x338b5dea",
                "0x338b5dea0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3fb9950a",
            "selector": "0x3fb9950a",
            "calldata_variants": [
                "0x3fb9950a",
                "0x3fb9950a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 3181,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 3515,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 4461,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 12,
    "guards_detected": [
        {
            "pc": 7611,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 8269,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 8393,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 8756,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 8923,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 9053,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        },
        {
            "pc": 10672,
            "type": "msg_sender_eq_const",
            "value": "0xffffffffffffffffffffffffffffffffffffffff"
        }
    ]
}
info other cast Heavy CALL-family usage 55 no
view
evidence_json
{
    "notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
    "call_family_count": 12
}