05eda14a-2e2e-44e6-9372-5f5cb3960690
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 31446 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 77302 | artifact.fetch | complete | 1 / 3 | 2 weeks ago |
| 77303 | tool.cast_disasm | complete | 1 / 3 | 2 weeks ago |
| 77304 | analysis.bundle | complete | 1 / 3 | 2 weeks ago |
| 77305 | capability.graph | complete | 1 / 3 | 2 weeks ago |
| 77306 | detector.run | complete | 1 / 3 | 2 weeks ago |
| 77307 | validation.fork | complete | 1 / 3 | 2 weeks ago |
No slither job recorded yet.
[codex:341744] OpenAI Codex v0.77.0 (research preview)
[codex:341744] --------
[codex:341744] workdir: /tmp/codex-multi-gjepc61z
[codex:341744] model: gpt-5.2-codex
[codex:341744] provider: openai
[codex:341744] approval: never
[codex:341744] sandbox: read-only
[codex:341744] reasoning effort: xhigh
[codex:341744] reasoning summaries: auto
[codex:341744] session id: 019b81d9-b032-73e1-baa4-565438ce5e55
[codex:341744] --------
[codex:341744] user
[codex:341744] 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:341744]
[codex:341744] Read `BYTECODE_BUNDLE.txt` completely before concluding.
[codex:341744]
[codex:341744] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:341744] - Gas inefficiency, code quality, or best practices
[codex:341744] - Theoretical vulnerabilities without a clear extraction path
[codex:341744] - Generic footguns (unchecked return values, etc.) unless they enable theft
[codex:341744] - Issues requiring social engineering or off-chain coordination
[codex:341744]
[codex:341744] PATTERNS WORTH INVESTIGATING in bytecode:
[codex:341744] - CALL/DELEGATECALL with controllable destination or calldata
[codex:341744] - Value transfers (CALL with non-zero value) without prior CALLER/ORIGIN checks
[codex:341744] - SSTORE to low slots (0-10) that might be owner/admin storage
[codex:341744] - ecrecover (signature validation) - look for missing nonce/replay protection
[codex:341744] - External calls before state updates (reentrancy)
[codex:341744] - SELFDESTRUCT with controllable beneficiary
[codex:341744] - Proxy patterns (DELEGATECALL to storage slot) with unprotected upgrade paths
[codex:341744]
[codex:341744] For each finding, you MUST explain:
[codex:341744] 1. The specific bytecode pattern/offsets that indicate the vulnerability
[codex:341744] 2. The concrete sequence of transactions to extract value
[codex:341744] 3. Why you believe this is exploitable (not just suspicious)
[codex:341744]
[codex:341744] If you cannot identify a concrete profit path from bytecode alone: set no_findings=true.
[codex:341744] Do NOT hallucinate. Bytecode-only analysis is limited - be honest about uncertainty.
[codex:341744]
[codex:341744] Output MUST be valid JSON matching the provided schema.
[codex:341744] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:341744] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:341744] mcp startup: no servers
[codex:341744]
[codex:341744] thinking
[codex:341744] **Searching for BYTECODE_BUNDLE.txt**
[codex:341744] exec
[codex:341744] /bin/bash -lc ls in /tmp/codex-multi-gjepc61z succeeded in 9ms:
[codex:341744] BYTECODE_BUNDLE.txt
[codex:341744] codex-output-schema.json
[codex:341744] exec
[codex:341744] /bin/bash -lc 'cat BYTECODE_BUNDLE.txt' in /tmp/codex-multi-gjepc61z succeeded in 6ms:
[codex:341744] Runtime bytecode bundle for best-effort auditing.
[codex:341744] Note: without verified source, conclusions are low-confidence unless a concrete pattern is visible.
[codex:341744]
[codex:341744] FILE: runtime_bytecode.hex
[codex:341744] 0x60606040523615610152576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630a19b14a146101675780630b9276661461022e57806314577c55146102a757806319774d43146102f5578063278b8c0e1461034c5780632e1a7d4d146103eb578063338b5dea1461040b57806346be96c31461044a578063508493bc1461051c57806354d03b5c1461058557806357786394146105a55780635e1d7ae4146105cb57806365e17c9d146105eb5780636c86888b1461063d57806371ffcb161461073b578063731c2f81146107715780638823a9c0146107975780638f283970146107b75780639e281a98146107ed578063bb5f46291461082c578063c281309e14610887578063d0e30db0146108ad578063d9d412e6146108b7578063f7888aec146108ed578063f851a44014610956578063fb6e155f146109a8575b341561015a57fe5b6101655b610000565b565b005b341561016f57fe5b61022c600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560ff169060200190919080356000191690602001909190803560001916906020019091908035906020019091905050610a7a565b005b341561023657fe5b6102a5600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091908035906020019091908035906020019091905050610f7a565b005b34156102af57fe5b6102db600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611201565b604051808215151515815260200191505060405180910390f35b34156102fd57fe5b610336600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560001916906020019091905050611221565b6040518082815260200191505060405180910390f35b341561035457fe5b6103e9600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803590602001909190803560ff169060200190919080356000191690602001909190803560001916906020019091905050611246565b005b34156103f357fe5b6104096004808035906020019091905050611659565b005b341561041357fe5b610448600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506118e4565b005b341561045257fe5b610506600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560ff169060200190919080356000191690602001909190803560001916906020019091905050611c34565b6040518082815260200191505060405180910390f35b341561052457fe5b61056f600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611dc2565b6040518082815260200191505060405180910390f35b341561058d57fe5b6105a36004808035906020019091905050611de7565b005b34156105ad57fe5b6105b5611e5d565b6040518082815260200191505060405180910390f35b34156105d357fe5b6105e96004808035906020019091905050611e63565b005b34156105f357fe5b6105fb611ee5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561064557fe5b610721600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560ff16906020019091908035600019169060200190919080356000191690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611f0b565b604051808215151515815260200191505060405180910390f35b341561074357fe5b61076f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611fce565b005b341561077957fe5b61078161206f565b6040518082815260200191505060405180910390f35b341561079f57fe5b6107b56004808035906020019091905050612075565b005b34156107bf57fe5b6107eb600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506120f7565b005b34156107f557fe5b61082a600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612198565b005b341561083457fe5b61086d600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080356000191690602001909190505061253d565b604051808215151515815260200191505060405180910390f35b341561088f57fe5b61089761256c565b6040518082815260200191505060405180910390f35b6108b5612572565b005b34156108bf57fe5b6108eb600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061274a565b005b34156108f557fe5b610940600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612802565b6040518082815260200191505060405180910390f35b341561095e57fe5b61096661288a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156109b057fe5b610a64600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803560ff1690602001909190803560001916906020019091908035600019169060200190919050506128b0565b6040518082815260200191505060405180910390f35b60006002308d8d8d8d8d8d600060405160200152604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019750505050505050506020604051808303816000866161da5a03f11515610b9057fe5b5050604051805190509050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff1680610cff57508573ffffffffffffffffffffffffffffffffffffffff1660018260405180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040518091039020878787604051806000526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000866161da5a03f11515610cde57fe5b50506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b8015610d0b5750874311155b8015610d7857508a610d75600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084600019166000191681526020019081526020016000205484612c72565b11155b1515610d8357610000565b610d918c8c8c8c8a87612c9e565b610df3600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083600019166000191681526020019081526020016000205483612c72565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008360001916600019168152602001908152602001600020819055507f6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d8c838c8e868e02811515610e8057fe5b048a33604051808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001965050505050505060405180910390a15b505050505050505050505050565b6000600230888888888888600060405160200152604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019750505050505050506020604051808303816000866161da5a03f1151561109057fe5b50506040518051905090506001600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000836000191660001916815260200190815260200160002060006101000a81548160ff0219169083151502179055507f3f7f2eda73683c21a15f9435af1028c93185b5f1fa38270762dc32be606b3e8587878787878733604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200197505050505050505060405180910390a15b50505050505050565b60086020528060005260406000206000915054906101000a900460ff1681565b6007602052816000526040600020602052806000526040600020600091509150505481565b60006002308b8b8b8b8b8b600060405160200152604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019750505050505050506020604051808303816000866161da5a03f1151561135c57fe5b5050604051805190509050600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000826000191660001916815260200190815260200160002060009054906101000a900460ff16806114cb57503373ffffffffffffffffffffffffffffffffffffffff1660018260405180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040518091039020868686604051806000526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000866161da5a03f115156114aa57fe5b50506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b15156114d657610000565b88600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008360001916600019168152602001908152602001600020819055507f1e0b760c386003e9cb9bcf4fcf3997886042859d9b6ed6320e804597fcdb28b08a8a8a8a8a8a338b8b8b604051808b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018460ff1660ff168152602001836000191660001916815260200182600019166000191681526020019a505050505050505050505060405180910390a15b50505050505050505050565b8060056000600073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156116cd57610000565b61173e60056000600073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261330b565b60056000600073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff168160405180905060006040518083038185876185025a03f19250505015156117e757610000565b7ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb5676000338360056000600073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15b50565b60008273ffffffffffffffffffffffffffffffffffffffff16141561190857610000565b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15156119e457fe5b60325a03f115156119f157fe5b505050604051805190501515611a0657610000565b611a8c600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482612c72565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7823383600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15b5050565b600060006002308d8d8d8d8d8d600060405160200152604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019750505050505050506020604051808303816000866161da5a03f11515611d4c57fe5b5050604051805190509050600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082600019166000191681526020019081526020016000205491505b509a9950505050505050505050565b6005602052816000526040600020602052806000526040600020600091509150505481565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611e4357610000565b600254811115611e5257610000565b806002819055505b50565b60025481565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ebf57610000565b600454811080611ed0575060035481115b15611eda57610000565b806004819055505b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082600560008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410158015611faa575082611fa78e8e8e8e8e8e8e8e8e8e6128b0565b10155b1515611fb95760009050611fbe565b600190505b9c9b505050505050505050505050565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561202a57610000565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60045481565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156120d157610000565b6003548111806120e2575060045481105b156120ec57610000565b806003819055505b50565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561215357610000565b80600060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60008273ffffffffffffffffffffffffffffffffffffffff1614156121bc57610000565b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561224557610000565b6122cb600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261330b565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836000604051602001526040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15156123f357fe5b60325a03f1151561240057fe5b50505060405180519050151561241557610000565b7ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567823383600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15b5050565b60066020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60035481565b6125e360056000600073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205434612c72565b60056000600073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d76000333460056000600073ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051808573ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200194505050505060405180910390a15b565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156127a657610000565b6001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490505b92915050565b600060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006000600060006002308f8f8f8f8f8f600060405160200152604051808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018481526020018381526020018281526020019750505050505050506020604051808303816000866161da5a03f115156129cc57fe5b5050604051805190509250600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000846000191660001916815260200190815260200160002060009054906101000a900460ff1680612b3b57508773ffffffffffffffffffffffffffffffffffffffff1660018460405180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c0182600019166000191681526020019150506040518091039020898989604051806000526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff1681526020018360001916600019168152602001826000191660001916815260200194505050505060206040516020810390808403906000866161da5a03f11515612b1a57fe5b50506020604051035173ffffffffffffffffffffffffffffffffffffffff16145b8015612b475750894311155b1515612b565760009350612c61565b612bb88d600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600086600019166000191681526020019081526020016000205461330b565b91508a612c41600560008f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548f613325565b811515612c4a57fe5b04905080821015612c5d57819350612c61565b8093505b5050509a9950505050505050505050565b600060008284019050612c93848210158015612c8e5750838210155b61335a565b8091505b5092915050565b600060006000670de0b6b3a7640000612cb985600254613325565b811515612cc257fe5b049250670de0b6b3a7640000612cda85600354613325565b811515612ce357fe5b0491506000905060011515600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415612d4857600091505b612dd7600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dd28685612c72565b61330b565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612eef600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612eea612ee48785612c72565b8661330b565b612c72565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613029600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461302461301e8686612c72565b8461330b565b612c72565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613165600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054896131568988613325565b81151561315f57fe5b0461330b565b600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061327f600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054896132708988613325565b81151561327957fe5b04612c72565b600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050505050505050565b60006133198383111561335a565b81830390505b92915050565b60006000828402905061334f600085148061334a575083858381151561334757fe5b04145b61335a565b8091505b5092915050565b80151561336657610000565b5b505600a165627a7a723058200e003830e030a591457b2152c4fc36832bdf244d42205f1ccb14bbf5a0c6e19c0029
[codex:341744]
[codex:341744] thinking
[codex:341744] **Interpreting contract bytecode for vulnerabilities**
[codex:341744] exec
[codex:341744] /bin/bash -lc "python - <<'PY'
[codex:341744] import hashlib
[codex:341744] from eth_utils import keccak
[codex:341744]
[codex:341744] sigs=[
[codex:341744] \"deposit()\",
[codex:341744] \"withdraw(uint256)\",
[codex:341744] \"depositToken(address,uint256)\",
[codex:341744] \"withdrawToken(address,uint256)\",
[codex:341744] \"balanceOf(address,address)\",
[codex:341744] \"trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)\",
[codex:341744] \"order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"adminWithdraw(address,uint256)\",
[codex:341744] \"setAdmin(address)\",
[codex:341744] \"setFeeAccount(address)\",
[codex:341744] \"setFeeMake(uint256)\",
[codex:341744] \"setFeeTake(uint256)\",
[codex:341744] \"setFeeRebate(uint256)\",
[codex:341744] \"setTradingFee(uint256)\",
[codex:341744] \"setEtherDelta(address)\" # not
[codex:341744] ]
[codex:341744] for sig in sigs:
[codex:341744] h=keccak(text=sig).hex()[:8]
[codex:341744] print(sig,h)
[codex:341744] PY" in /tmp/codex-multi-gjepc61z succeeded in 250ms:
[codex:341744] deposit() d0e30db0
[codex:341744] withdraw(uint256) 2e1a7d4d
[codex:341744] depositToken(address,uint256) 338b5dea
[codex:341744] withdrawToken(address,uint256) 9e281a98
[codex:341744] balanceOf(address,address) f7888aec
[codex:341744] trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256) 0a19b14a
[codex:341744] order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) 7c2d0695
[codex:341744] cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) 74e60a48
[codex:341744] availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) fb6e155f
[codex:341744] amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) 46be96c3
[codex:341744] adminWithdraw(address,uint256) 401d4482
[codex:341744] setAdmin(address) 704b6c02
[codex:341744] setFeeAccount(address) 4b023cf8
[codex:341744] setFeeMake(uint256) e913d376
[codex:341744] setFeeTake(uint256) 90f098bb
[codex:341744] setFeeRebate(uint256) f5a63266
[codex:341744] setTradingFee(uint256) b0d54bcf
[codex:341744] setEtherDelta(address) 5093cb38
[codex:341744]
[codex:341744] thinking
[codex:341744] **Mapping function selectors to contract roles**
[codex:341744] exec
[codex:341744] /bin/bash -lc "python - <<'PY'
[codex:341744] from eth_utils import keccak
[codex:341744] sigs=[
[codex:341744] \"admin()\",
[codex:341744] \"getAdmin()\",
[codex:341744] \"feeAccount()\",
[codex:341744] \"feeMake()\",
[codex:341744] \"feeTake()\",
[codex:341744] \"feeRebate()\",
[codex:341744] \"tradingFee()\",
[codex:341744] \"setAdmin(address)\",
[codex:341744] \"setFeeAccount(address)\",
[codex:341744] \"setFeeMake(uint256)\",
[codex:341744] \"setFeeTake(uint256)\",
[codex:341744] \"setFeeRebate(uint256)\",
[codex:341744] \"setTradingFee(uint256)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"withdraw(address,uint256)\",
[codex:341744] \"withdrawToken(address,uint256)\",
[codex:341744] \"depositToken(address,uint256)\",
[codex:341744] \"withdraw(uint256)\",
[codex:341744] \"deposit()\",
[codex:341744] \"availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)\",
[codex:341744] \"trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)\",
[codex:341744] \"trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)\",
[codex:341744] \"tradeV2(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)\",
[codex:341744] \"cancel(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] ]
[codex:341744] for sig in sigs:
[codex:341744] print(sig, keccak(text=sig).hex()[:8])
[codex:341744] PY" in /tmp/codex-multi-gjepc61z succeeded in 194ms:
[codex:341744] admin() f851a440
[codex:341744] getAdmin() 6e9960c3
[codex:341744] feeAccount() 65e17c9d
[codex:341744] feeMake() 57786394
[codex:341744] feeTake() c281309e
[codex:341744] feeRebate() 731c2f81
[codex:341744] tradingFee() 56f43352
[codex:341744] setAdmin(address) 704b6c02
[codex:341744] setFeeAccount(address) 4b023cf8
[codex:341744] setFeeMake(uint256) e913d376
[codex:341744] setFeeTake(uint256) 90f098bb
[codex:341744] setFeeRebate(uint256) f5a63266
[codex:341744] setTradingFee(uint256) b0d54bcf
[codex:341744] cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) 74e60a48
[codex:341744] order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) 7c2d0695
[codex:341744] withdraw(address,uint256) f3fef3a3
[codex:341744] withdrawToken(address,uint256) 9e281a98
[codex:341744] depositToken(address,uint256) 338b5dea
[codex:341744] withdraw(uint256) 2e1a7d4d
[codex:341744] deposit() d0e30db0
[codex:341744]
[codex:341744] thinking
[codex:341744] **Analyzing function selectors and names**
[codex:341744] exec
[codex:341744] /bin/bash -lc "python - <<'PY'
[codex:341744] from eth_utils import keccak
[codex:341744] names=[\"setAdmin(address)\",\"changeAdmin(address)\",\"updateAdmin(address)\",\"setFeeAccount(address)\",\"changeFeeAccount(address)\",\"updateFeeAccount(address)\",\"setFeeMake(uint256)\",\"changeFeeMake(uint256)\",\"setFeeTake(uint256)\",\"setFeeRebate(uint256)\",\"setTradingFee(uint256)\",\"setFeeAccount(address)\",\"setFeeMake(uint256)\",\"setFeeTake(uint256)\",\"setFeeRebate(uint256)\",\"setFeeRate(uint256)\",\"setFees(uint256,uint256,uint256)\",\"setFees(uint256,uint256,uint256,address)\",\"setFee(uint256)\",\"setFeeRebate(uint256)\"]
[codex:341744] for sig in names:
[codex:341744] print(sig, keccak(text=sig).hex()[:8])
[codex:341744] PY" in /tmp/codex-multi-gjepc61z succeeded in 207ms:
[codex:341744] setAdmin(address) 704b6c02
[codex:341744] changeAdmin(address) 8f283970
[codex:341744] updateAdmin(address) e2f273bd
[codex:341744] setFeeAccount(address) 4b023cf8
[codex:341744] changeFeeAccount(address) 71ffcb16
[codex:341744] updateFeeAccount(address) fff13ee7
[codex:341744] setFeeMake(uint256) e913d376
[codex:341744] changeFeeMake(uint256) 54d03b5c
[codex:341744] setFeeTake(uint256) 90f098bb
[codex:341744] setFeeRebate(uint256) f5a63266
[codex:341744] setTradingFee(uint256) b0d54bcf
[codex:341744] setFeeAccount(address) 4b023cf8
[codex:341744] setFeeMake(uint256) e913d376
[codex:341744] setFeeTake(uint256) 90f098bb
[codex:341744] setFeeRebate(uint256) f5a63266
[codex:341744] setFeeRate(uint256) 45596e2e
[codex:341744] setFees(uint256,uint256,uint256) cec10c11
[codex:341744] setFees(uint256,uint256,uint256,address) b1c46c9f
[codex:341744] setFee(uint256) 69fe0e2d
[codex:341744] setFeeRebate(uint256) f5a63266
[codex:341744]
[codex:341744] thinking
[codex:341744] **Identifying additional function selectors**
[codex:341744] exec
[codex:341744] /bin/bash -lc "python - <<'PY'
[codex:341744] from eth_utils import keccak
[codex:341744] sigs=[
[codex:341744] \"changeFeeTake(uint256)\",
[codex:341744] \"changeFeeRebate(uint256)\",
[codex:341744] \"changeTradingFee(uint256)\",
[codex:341744] \"changeFee(uint256)\",
[codex:341744] \"changeFee(uint256,uint256)\",
[codex:341744] \"changeFees(uint256,uint256,uint256)\",
[codex:341744] \"setFeeTake(uint256)\",
[codex:341744] \"setFeeRebate(uint256)\",
[codex:341744] \"setTradingFee(uint256)\",
[codex:341744] \"changeFeeAccount(address)\",
[codex:341744] \"changeFeeMake(uint256)\",
[codex:341744] \"changeFeeTake(uint256)\",
[codex:341744] \"changeFeeRebate(uint256)\",
[codex:341744] \"changeFee(uint256)\",
[codex:341744] \"changeFee(uint256,uint256,uint256)\",
[codex:341744] \"setFee(uint256,uint256,uint256)\",
[codex:341744] \"setFee(address,uint256,uint256,uint256)\",
[codex:341744] \"setFee(address,uint256,uint256)\",
[codex:341744] ]
[codex:341744] for sig in sigs:
[codex:341744] print(sig, keccak(text=sig).hex()[:8])
[codex:341744] PY" in /tmp/codex-multi-gjepc61z succeeded in 225ms:
[codex:341744] changeFeeTake(uint256) 8823a9c0
[codex:341744] changeFeeRebate(uint256) 5e1d7ae4
[codex:341744] changeTradingFee(uint256) aabff62b
[codex:341744] changeFee(uint256) 6a1db1bf
[codex:341744] changeFee(uint256,uint256) e3ca2d65
[codex:341744] changeFees(uint256,uint256,uint256) 7a319590
[codex:341744] setFeeTake(uint256) 90f098bb
[codex:341744] setFeeRebate(uint256) f5a63266
[codex:341744] setTradingFee(uint256) b0d54bcf
[codex:341744] changeFeeAccount(address) 71ffcb16
[codex:341744] changeFeeMake(uint256) 54d03b5c
[codex:341744] changeFeeTake(uint256) 8823a9c0
[codex:341744] changeFeeRebate(uint256) 5e1d7ae4
[codex:341744] changeFee(uint256) 6a1db1bf
[codex:341744] changeFee(uint256,uint256,uint256) e5eec444
[codex:341744] setFee(uint256,uint256,uint256) 5b65b9ab
[codex:341744] setFee(address,uint256,uint256,uint256) f06410f8
[codex:341744] setFee(address,uint256,uint256) c1b1660e
[codex:341744]
[codex:341744] thinking
[codex:341744] **Verifying function selectors**
[codex:341744] exec
[codex:341744] /bin/bash -lc "python - <<'PY'
[codex:341744] from eth_utils import keccak
[codex:341744] sigs=[
[codex:341744] \"setOwner(address)\",\"changeOwner(address)\",\"transferOwnership(address)\",\"renounceOwnership()\",\"setOperator(address)\",\"setAdmin(address)\",\"setAccount(address)\",\"changeAccount(address)\",\"changeFeeAccount(address)\",\"changeFeeAddress(address)\",\"setFeeAddress(address)\",\"setFeeCollector(address)\",\"setFeeWallet(address)\",\"setCollector(address)\",\"setExecutor(address)\",\"setDelegate(address)\",\"setRelayer(address)\",\"setFeeRecipient(address)\",\"setRelayer(address)\",\"setMatch(address)\",\"setCoordinator(address)\"
[codex:341744] ]
[codex:341744] for sig in sigs:
[codex:341744] print(sig, keccak(text=sig).hex()[:8])
[codex:341744] PY" in /tmp/codex-multi-gjepc61z succeeded in 223ms:
[codex:341744] setOwner(address) 13af4035
[codex:341744] changeOwner(address) a6f9dae1
[codex:341744] transferOwnership(address) f2fde38b
[codex:341744] renounceOwnership() 715018a6
[codex:341744] setOperator(address) b3ab15fb
[codex:341744] setAdmin(address) 704b6c02
[codex:341744] setAccount(address) 29f6d57c
[codex:341744] changeAccount(address) aa049691
[codex:341744] changeFeeAccount(address) 71ffcb16
[codex:341744] changeFeeAddress(address) 285e1406
[codex:341744] setFeeAddress(address) 8705fcd4
[codex:341744] setFeeCollector(address) a42dce80
[codex:341744] setFeeWallet(address) 90d49b9d
[codex:341744] setCollector(address) fb5b82d0
[codex:341744] setExecutor(address) 1c3c0ea8
[codex:341744] setDelegate(address) ca5eb5e1
[codex:341744] setRelayer(address) 6548e9bc
[codex:341744] setFeeRecipient(address) e74b981b
[codex:341744] setRelayer(address) 6548e9bc
[codex:341744] setMatch(address) f1664146
[codex:341744]
[codex:341744] thinking
[codex:341744] **Verifying commit reference**
[codex:341744] exec
[codex:341744] /bin/bash -lc "python - <<'PY'
[codex:341744] from eth_utils import keccak
[codex:341744] sigs=[
[codex:341744] \"changeFeeRate(uint256)\",\"changeFeePercent(uint256)\",\"changeFee(uint256)\",\"changeTradingFee(uint256)\",\"changeFee(uint256,uint256,uint256)\",\"changeFees(uint256,uint256,uint256)\",\"changeFees(uint256,uint256,uint256,uint256)\",\"setFees(uint256,uint256,uint256,uint256)\",\"setFee(uint256,uint256,uint256,uint256)\",\"setFeeRates(uint256,uint256,uint256)\"
[codex:341744] ]
[codex:341744] for sig in sigs:
[codex:341744] print(sig, keccak(text=sig).hex()[:8])
[codex:341744] PY" in /tmp/codex-multi-gjepc61z succeeded in 211ms:
[codex:341744] changeFeeRate(uint256) affca932
[codex:341744] changeFeePercent(uint256) 34eddf3e
[codex:341744] changeFee(uint256) 6a1db1bf
[codex:341744] changeTradingFee(uint256) aabff62b
[codex:341744] changeFee(uint256,uint256,uint256) e5eec444
[codex:341744] changeFees(uint256,uint256,uint256) 7a319590
[codex:341744] changeFees(uint256,uint256,uint256,uint256) 650c4226
[codex:341744] setFees(uint256,uint256,uint256,uint256) 6fcba377
[codex:341744] setFee(uint256,uint256,uint256,uint256) a2a957bb
[codex:341744] setFeeRates(uint256,uint256,uint256) e538b280
[codex:341744]
[codex:341744] thinking
[codex:341744] **Mapping functions and storage slots**
[codex:341744] exec
[codex:341744] /bin/bash -lc "python - <<'PY'
[codex:341744] from eth_utils import keccak
[codex:341744] sigs=[
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)\",
[codex:341744] \"cancel(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)\",
[codex:341744] \"cancel(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"cancel(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)\",
[codex:341744] \"order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)\",
[codex:341744] \"order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)\",
[codex:341744] \"order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address)\",
[codex:341744] \"order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256)\"
[codex:341744] ]
[codex:341744] for sig in sigs:
[codex:341744] print(sig, keccak(text=sig).hex()[:8])
[codex:341744] PY" in /tmp/codex-multi-gjepc61z succeeded in 249ms:
[codex:341744] cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256) a7d66375
[codex:341744] cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address) 0bd28cd3
[codex:341744] cancel(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256) b881bbc7
[codex:341744] cancel(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) 3216b2ce
[codex:341744] cancel(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address) 9d81e132
[codex:341744] order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256) 50197b10
[codex:341744] order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address) f102007d
[codex:341744] order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32) 7c2d0695
[codex:341744] order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address) 3822a7c1
[codex:341744] order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256) 23f8f990
[codex:341744] cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,uint256) 31b30206
[codex:341744]
[codex:341744]
[codex:341744] thinking
[codex:341744] **Analyzing contract for withdrawal and order vulnerabilities**
[codex:341744] thinking
[codex:341744] **Verifying order function parameters and user restrictions**
[codex:341744] exec
[codex:341744] /bin/bash -lc "python - <<'PY'
[codex:341744] from eth_utils import keccak
[codex:341744] sigs=[
[codex:341744] \"order(address,uint256,address,uint256,uint256,uint256)\",
[codex:341744] \"order(address,uint256,address,uint256,uint256,uint256,address)\",
[codex:341744] \"order(address,uint256,address,uint256,uint256,uint256,uint256)\",
[codex:341744] \"order(address,uint256,address,uint256,uint256,uint256,uint256,uint256)\",
[codex:341744] \"order(address,uint256,address,uint256,uint256,uint256,uint256,uint256,address)\",
[codex:341744] ]
[codex:341744] for sig in sigs:
[codex:341744] print(sig, keccak(text=sig).hex()[:8])
[codex:341744] PY" in /tmp/codex-multi-gjepc61z succeeded in 224ms:
[codex:341744] order(address,uint256,address,uint256,uint256,uint256) 0b927666
[codex:341744] order(address,uint256,address,uint256,uint256,uint256,address) 8582c5aa
[codex:341744] order(address,uint256,address,uint256,uint256,uint256,uint256) eec9d501
[codex:341744] order(address,uint256,address,uint256,uint256,uint256,uint256,uint256) a751ac44
[codex:341744] order(address,uint256,address,uint256,uint256,uint256,uint256,uint256,address) 0c2c491d
[codex:341744]
[codex:341744]
[codex:341744] thinking
[codex:341744] **Analyzing order hash and user binding**
[codex:341744]
[codex:341744] I’m carefully dissecting whether the order hash includes the user or msg.sender and how the contract maps orders per user, verifying if that prevents vulnerabilities allowing orders to be misattributed or exploited across users. It looks like the orders mapping keys by user address and order hash, which should shield against cross-user order reuse despite the hash itself excluding user explicitly. This detailed bytecode inspection helps me confirm the contract’s approach to order uniqueness and security.
[codex:341744] thinking
[codex:341744] **Investigating potential arithmetic and access issues**
[codex:341744]
[codex:341744] I'm examining if any arithmetic overflows or unchecked admin settings could cause problems, and scanning for token transfers without proper access control. The single ERC20 transfer call seems guarded by checks, and safe math is used to prevent overflows. To be thorough, I’m considering analyzing bytecode around hash inputs and storage to confirm if any exploitable gaps exist, especially in how order hashing and user parameters interplay.
[codex:341744] exec
[codex:341744] /bin/bash -lc "python - <<'PY'
[codex:341744] import binascii, textwrap
[codex:341744]
[codex:341744] # Load bytecode
[codex:341744] with open('BYTECODE_BUNDLE.txt','r') as f:
[codex:341744] data = f.read()
[codex:341744] # extract runtime_bytecode.hex content
[codex:341744] import re
[codex:341744] m = re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', data)
[codex:341744] code_hex = m.group(1)[2:]
[codex:341744] code_bytes = bytes.fromhex(code_hex)
[codex:341744]
[codex:341744] # EVM opcode table
[codex:341744] opcodes = {}
[codex:341744] # populate 0x00-0x0f basic
[codex:341744] names = [
[codex:341744] 'STOP','ADD','MUL','SUB','DIV','SDIV','MOD','SMOD','ADDMOD','MULMOD','EXP','SIGNEXTEND',
[codex:341744] 'LT','GT','SLT','SGT','EQ','ISZERO','AND','OR','XOR','NOT','BYTE','SHL','SHR','SAR',
[codex:341744] 'SHA3'
[codex:341744] ]
[codex:341744] for i,name in enumerate(names):
[codex:341744] opcodes[i]=name
[codex:341744] # environmental etc
[codex:341744] more = {
[codex:341744] 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:341744] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:341744] 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:341744] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:341744] }
[codex:341744] opcodes.update(more)
[codex:341744] # DUP, SWAP, PUSH
[codex:341744] for i in range(1,33):
[codex:341744] opcodes[0x5f+i]=f'PUSH{i}'
[codex:341744] for i in range(1,17):
[codex:341744] opcodes[0x7f+i]=f'DUP{i}'
[codex:341744] for i in range(1,17):
[codex:341744] opcodes[0x8f+i]=f'SWAP{i}'
[codex:341744] for i in range(0,5):
[codex:341744] opcodes[0x90+i]=f'LOG{i}'
[codex:341744]
[codex:341744] # simple disassembler
[codex:341744]
[codex:341744] def disasm(start, end):
[codex:341744] i=start
[codex:341744] out=[]
[codex:341744] while i < end:
[codex:341744] op = code_bytes[i]
[codex:341744] name = opcodes.get(op, f'OP{op:02x}')
[codex:341744] if name.startswith('PUSH'):
[codex:341744] n = int(name[4:])
[codex:341744] data = code_bytes[i+1:i+1+n]
[codex:341744] out.append((i,name, data.hex()))
[codex:341744] i += 1+n
[codex:341744] else:
[codex:341744] out.append((i,name,''))
[codex:341744] i += 1
[codex:341744] return out
[codex:341744]
[codex:341744] # Let's disassemble around trade function start (0x0a7a maybe?)
[codex:341744] # we need code offset; but bytecode addresses maybe in decimal? The functions in bytecode are at offsets like 0x0a7a etc.
[codex:341744] # We'll disassemble around 0x0a50-0x0b50
[codex:341744] for start,end in [(0x0a60,0x0b80),(0x0f40,0x10d0)]:
[codex:341744] print('--- disasm',hex(start),hex(end))
[codex:341744] for off,name,arg in disasm(start,end):
[codex:341744] if arg:
[codex:341744] print(f'{off:04x} {name} {arg}')
[codex:341744] else:
[codex:341744] print(f'{off:04x} {name}')
[codex:341744] print()
[codex:341744] PY" in /tmp/codex-multi-gjepc61z succeeded in 27ms:
[codex:341744] --- disasm 0xa60 0xb80
[codex:341744] 0a60 PUSH2 28b0
[codex:341744] 0a63 JUMP
[codex:341744] 0a64 JUMPDEST
[codex:341744] 0a65 PUSH1 40
[codex:341744] 0a67 MLOAD
[codex:341744] 0a68 DUP1
[codex:341744] 0a69 DUP3
[codex:341744] 0a6a DUP2
[codex:341744] 0a6b MSTORE
[codex:341744] 0a6c PUSH1 20
[codex:341744] 0a6e ADD
[codex:341744] 0a6f LOG1
[codex:341744] 0a70 POP
[codex:341744] 0a71 POP
[codex:341744] 0a72 PUSH1 40
[codex:341744] 0a74 MLOAD
[codex:341744] 0a75 DUP1
[codex:341744] 0a76 LOG1
[codex:341744] 0a77 SUB
[codex:341744]
[codex:341744] thinking
[codex:341744] **Correcting opcode mapping errors**
[codex:341744] exec
[codex:341744] /bin/bash -lc "python - <<'PY'
[codex:341744] import re
[codex:341744] from pathlib import Path
[codex:341744]
[codex:341744] with open('BYTECODE_BUNDLE.txt','r') as f:
[codex:341744] data = f.read()
[codex:341744] code_hex = re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', data).group(1)[2:]
[codex:341744] code_bytes = bytes.fromhex(code_hex)
[codex:341744]
[codex:341744] # correct opcode table
[codex:341744] opcodes = {}
[codex:341744] # 0x00-0x0b
[codex:341744] names = {
[codex:341744] 0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',
[codex:341744] 0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
[codex:341744] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',
[codex:341744] 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:341744] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:341744] 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:341744] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:341744] }
[codex:341744] opcodes.update(names)
[codex:341744] for i in range(1,33):
[codex:341744] opcodes[0x5f+i]=f'PUSH{i}'
[codex:341744] for i in range(1,17):
[codex:341744] opcodes[0x7f+i]=f'DUP{i}'
[codex:341744] for i in range(1,17):
[codex:341744] opcodes[0x8f+i]=f'SWAP{i}'
[codex:341744] for i in range(0,5):
[codex:341744] opcodes[0xa0+i]=f'LOG{i}'
[codex:341744]
[codex:341744]
[codex:341744] def disasm(start,end):
[codex:341744] i=start
[codex:341744] out=[]
[codex:341744] while i<end:
[codex:341744] op=code_bytes[i]
[codex:341744] name=opcodes.get(op,f'OP{op:02x}')
[codex:341744] if name.startswith('PUSH'):
[codex:341744] n=int(name[4:])
[codex:341744] data=code_bytes[i+1:i+1+n]
[codex:341744] out.append((i,name,data.hex()))
[codex:341744] i+=1+n
[codex:341744] else:
[codex:341744] out.append((i,name,''))
[codex:341744] i+=1
[codex:341744] return out
[codex:341744]
[codex:341744] for start,end in [(0x0a70,0x0b90),(0x0f70,0x10c0)]:
[codex:341744] print('---',hex(start),hex(end))
[codex:341744] for off,name,arg in disasm(start,end):
[codex:341744] if arg:
[codex:341744] print(f'{off:04x} {name} {arg}')
[codex:341744] else:
[codex:341744] print(f'{off:04x} {name}')
[codex:341744] print()
[codex:341744] PY" in /tmp/codex-multi-gjepc61z succeeded in 28ms:
[codex:341744] --- 0xa70 0xb90
[codex:341744] 0a70 POP
[codex:341744] 0a71 POP
[codex:341744] 0a72 PUSH1 40
[codex:341744] 0a74 MLOAD
[codex:341744] 0a75 DUP1
[codex:341744] 0a76 SWAP2
[codex:341744] 0a77 SUB
[codex:341744] 0a78 SWAP1
[codex:341744] 0a79 RETURN
[codex:341744] 0a7a JUMPDEST
[codex:341744] 0a7b PUSH1 00
[codex:341744] 0a7d PUSH1 02
[codex:341744] 0a7f ADDRESS
[codex:341744] 0a80 DUP14
[codex:341744] 0a81 DUP14
[codex:341744] 0a82 DUP14
[codex:341744] 0a83 DUP14
[codex:341744] 0a84 DUP14
[codex:341744] 0a85 DUP14
[codex:341744]
[codex:341744] thinking
[codex:341744] **Analyzing call stack and calldata setup**
[codex:341744] exec
[codex:341744] /bin/bash -lc "python - <<'PY'
[codex:341744] import re
[codex:341744] # load bytecode
[codex:341744] code_hex = re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', open('BYTECODE_BUNDLE.txt').read()).group(1)[2:]
[codex:341744] code_bytes = bytes.fromhex(code_hex)
[codex:341744] # opcode table (as above)
[codex:341744] ops={
[codex:341744] 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:341744] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',
[codex:341744] 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:341744] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:341744] 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:341744] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:341744] }
[codex:341744] for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
[codex:341744] for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
[codex:341744] for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
[codex:341744] for i in range(0,5): ops[0xa0+i]=f'LOG{i}'
[codex:341744]
[codex:341744] def disasm(start,end):
[codex:341744] i=start
[codex:341744] out=[]
[codex:341744] while i<end:
[codex:341744] op=code_bytes[i]
[codex:341744] name=ops.get(op,f'OP{op:02x}')
[codex:341744] if name.startswith('PUSH'):
[codex:341744] n=int(name[4:])
[codex:341744] data=code_bytes[i+1:i+1+n]
[codex:341744] out.append((i,name,data.hex()))
[codex:341744] i+=1+n
[codex:341744] else:
[codex:341744] out.append((i,name,''))
[codex:341744] i+=1
[codex:341744] return out
[codex:341744]
[codex:341744] # Disassemble around 0x0c00-0x0d20 (trade checks)
[codex:341744] for off,name,arg in disasm(0x0c00,0x0d50):
[codex:341744] if arg:
[codex:341744] print(f'{off:04x} {name} {arg}')
[codex:341744] else:
[codex:341744] print(f'{off:04x} {name}')
[codex:341744] PY" in /tmp/codex-multi-gjepc61z succeeded in 24ms:
[codex:341744] 0c00 SELFDESTRUCT
[codex:341744] 0c01 AND
[codex:341744] 0c02 DUP1
[codex:341744] 0c03 PUSH2 0cff
[codex:341744] 0c06 JUMPI
[codex:341744] 0c07 POP
[codex:341744] 0c08 DUP6
[codex:341744] 0c09 PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:341744] 0c1e AND
[codex:341744] 0c1f PUSH1 01
[codex:341744] 0c21 DUP3
[codex:341744] 0c22 PUSH1 40
[codex:341744] 0c24 MLOAD
[codex:341744] 0c25 DUP1
[codex:341744] 0c26 DUP1
[codex:341744] 0c27 PUSH32 19457468657265756d205369676e6564204d6573736167653a0a333200000000
[codex:341744] 0c48 DUP2
[codex:341744] 0c49 MSTORE
[codex:341744] 0c4a POP
[codex:341744] 0c4b PUSH1 1c
[codex:341744]
[codex:341744] thinking
[codex:341744] **Adjusting disassembly start point**
[codex:341744] exec
[codex:341744] /bin/bash -lc "python - <<'PY'
[codex:341744] import re
[codex:341744] code_hex = re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', open('BYTECODE_BUNDLE.txt').read()).group(1)[2:]
[codex:341744] code_bytes = bytes.fromhex(code_hex)
[codex:341744] # opcode table
[codex:341744] ops={
[codex:341744] 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:341744] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',
[codex:341744] 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:341744] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:341744] 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:341744] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:341744] }
[codex:341744] for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
[codex:341744] for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
[codex:341744] for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
[codex:341744] for i in range(0,5): ops[0xa0+i]=f'LOG{i}'
[codex:341744]
[codex:341744] def disasm(start,end):
[codex:341744] i=start
[codex:341744] while i<end:
[codex:341744] op=code_bytes[i]
[codex:341744] name=ops.get(op,f'OP{op:02x}')
[codex:341744] if name.startswith('PUSH'):
[codex:341744] n=int(name[4:])
[codex:341744] data=code_bytes[i+1:i+1+n]
[codex:341744] print(f'{i:04x} {name} {data.hex()}')
[codex:341744] i+=1+n
[codex:341744] else:
[codex:341744] print(f'{i:04x} {name}')
[codex:341744] i+=1
[codex:341744]
[codex:341744] print('--- 0xb80-0xc80')
[codex:341744] disasm(0xb80,0xc80)
[codex:341744] PY" in /tmp/codex-multi-gjepc61z succeeded in 26ms:
[codex:341744] --- 0xb80-0xc80
[codex:341744] 0b80 PUSH1 00
[codex:341744] 0b82 DUP7
[codex:341744] 0b83 PUSH2 61da
[codex:341744] 0b86 GAS
[codex:341744] 0b87 SUB
[codex:341744] 0b88 CALL
[codex:341744] 0b89 ISZERO
[codex:341744] 0b8a ISZERO
[codex:341744] 0b8b PUSH2 0b90
[codex:341744] 0b8e JUMPI
[codex:341744] 0b8f INVALID
[codex:341744] 0b90 JUMPDEST
[codex:341744] 0b91 POP
[codex:341744] 0b92 POP
[codex:341744] 0b93 PUSH1 40
[codex:341744] 0b95 MLOAD
[codex:341744] 0b96 DUP1
[codex:341744] 0b97 MLOAD
[codex:341744] 0b98 SWAP1
[codex:341744]
[codex:341744] thinking
[codex:341744] **Analyzing mapping and potential vulnerabilities**
[codex:341744] exec
[codex:341744] /bin/bash -lc "python - <<'PY'
[codex:341744] from eth_utils import keccak
[codex:341744] # try guess functions for selectors present
[codex:341744] sel_list = {
[codex:341744] '0b927666','14577c55','19774d43','278b8c0e','508493bc','6c86888b','bb5f4629','d9d412e6'}
[codex:341744]
[codex:341744] # Some candidate signatures
[codex:341744] cands=[
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,address)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,uint256)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,uint256,address)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,uint256,uint256)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,uint256,uint256,address)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,uint256,uint256,uint256)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,uint256,uint256,uint256,address)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)\",
[codex:341744] \"cancel(address,uint256,address,uint256,uint256,uint256)\",
[codex:341744] \"cancel(address,uint256,address,uint256,uint256,uint256,address)\",
[codex:341744] \"cancel(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"cancel(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)\",
[codex:341744] \"order(address,uint256,address,uint256,uint256,uint256)\",
[codex:341744] \"order(address,uint256,address,uint256,uint256,uint256,address)\",
[codex:341744] \"order(address,uint256,address,uint256,uint256,uint256,uint256)\",
[codex:341744] \"order(address,uint256,address,uint256,uint256,uint256,uint256,address)\",
[codex:341744] \"order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)\",
[codex:341744] \"trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)\",
[codex:341744] \"trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"availableVolume(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"amountFilled(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"tokenBalance(address,address)\",
[codex:341744] \"balanceOf(address,address)\",
[codex:341744] \"balanceOf(address)\",
[codex:341744] \"balanceOf(address,address,address)\",
[codex:341744] \"testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)\",
[codex:341744] \"trade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)\",
[codex:341744] \"withdraw(address,uint256)\",
[codex:341744] \"withdrawToken(address,uint256)\",
[codex:341744] \"depositToken(address,uint256)\",
[codex:341744] \"withdraw(uint256)\",
[codex:341744] \"deposit()\",
[codex:341744] ]
[codex:341744]
[codex:341744] for sig in cands:
[codex:341744] sel=keccak(text=sig).hex()[:8]
[codex:341744] if sel in sel_list:
[codex:341744] print(sig, sel)
[codex:341744] PY" in /tmp/codex-multi-gjepc61z succeeded in 202ms:
[codex:341744] order(address,uint256,address,uint256,uint256,uint256) 0b927666
[codex:341744] testTrade(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address) 6c86888b
[codex:341744]
[codex:341744] thinking
[codex:341744] **Analyzing function selectors against EtherDelta**
[codex:341744] exec
[codex:341744] /bin/bash -lc "python - <<'PY'
[codex:341744] from eth_utils import keccak
[codex:341744] sigs=[
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,address)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,uint256)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,uint256,address)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,uint256,uint256)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,uint256,uint256,address)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,uint256,uint256,uint256)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,uint256,uint256,uint256,address)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)\",
[codex:341744] \"cancel(address,uint256,address,uint256,uint256,uint256)\",
[codex:341744] \"cancel(address,uint256,address,uint256,uint256,uint256,address)\",
[codex:341744] \"cancel(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"cancel(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)\",
[codex:341744] \"cancel(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)\",
[codex:341744] \"cancel(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address)\",
[codex:341744] \"order(address,uint256,address,uint256,uint256,uint256)\",
[codex:341744] \"order(address,uint256,address,uint256,uint256,uint256,address)\",
[codex:341744] \"order(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256,address)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address,uint256)\",
[codex:341744] \"cancelOrder(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address,address)\",
[codex:341744] \"cancel(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32)\",
[codex:341744] \"cancel(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,uint256)\",
[codex:341744] \"cancel(address,uint256,address,uint256,uint256,uint256,address,uint8,bytes32,bytes32,address)\",
[codex:341744] ]
[codex:341744]
[codex:341744] sels={}
[codex:341744] for sig in sigs:
[codex:341744] sels[sig]=keccak(text=sig).hex()[:8]
[codex:341744]
[codex:341744] for sig,sel in sels.items():
[codex:341744] if sel in ['14577c55','19774d43','278b8c0e','508493bc','bb5f4629','d9d412e6']:
[codex:341744] print(sig, sel)
[codex:341744] PY" in /tmp/codex-multi-gjepc61z succeeded in 199ms:
[codex:341744]
[codex:341744]
[codex:341744] thinking
[codex:341744] **Analyzing function signatures and safety checks**
[codex:341744] exec
[codex:341744] /bin/bash -lc "python - <<'PY'
[codex:341744] import re
[codex:341744] code_hex = re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', open('BYTECODE_BUNDLE.txt').read()).group(1)[2:]
[codex:341744] code_bytes = bytes.fromhex(code_hex)
[codex:341744] # opcodes as before
[codex:341744] ops={
[codex:341744] 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:341744] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',
[codex:341744] 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:341744] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:341744] 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:341744] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:341744] }
[codex:341744] for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
[codex:341744] for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
[codex:341744] for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
[codex:341744] for i in range(0,5): ops[0xa0+i]=f'LOG{i}'
[codex:341744]
[codex:341744] def disasm(start,end):
[codex:341744] i=start
[codex:341744] while i<end:
[codex:341744] op=code_bytes[i]
[codex:341744] name=ops.get(op,f'OP{op:02x}')
[codex:341744] if name.startswith('PUSH'):
[codex:341744] n=int(name[4:])
[codex:341744] data=code_bytes[i+1:i+1+n]
[codex:341744] print(f'{i:04x} {name} {data.hex()}')
[codex:341744] i+=1+n
[codex:341744] else:
[codex:341744] print(f'{i:04x} {name}')
[codex:341744] i+=1
[codex:341744]
[codex:341744] print('--- disasm 0x1f0b-0x1fbf')
[codex:341744] disasm(0x1f0b,0x1fbf)
[codex:341744] PY" in /tmp/codex-multi-gjepc61z succeeded in 24ms:
[codex:341744] --- disasm 0x1f0b-0x1fbf
[codex:341744] 1f0b JUMPDEST
[codex:341744] 1f0c PUSH1 00
[codex:341744] 1f0e DUP3
[codex:341744] 1f0f PUSH1 05
[codex:341744] 1f11 PUSH1 00
[codex:341744] 1f13 DUP16
[codex:341744] 1f14 PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:341744] 1f29 AND
[codex:341744] 1f2a PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:341744] 1f3f AND
[codex:341744] 1f40 DUP2
[codex:341744] 1f41 MSTORE
[codex:341744] 1f42 PUSH1 20
[codex:341744] 1f44 ADD
[codex:341744] 1f45 SWAP1
[codex:341744] 1f46 DUP2
[codex:341744] 1f47 MSTORE
[codex:341744] 1f48 PUSH1 20
[codex:341744] 1f4a ADD
[codex:341744]
[codex:341744] thinking
[codex:341744] **Analyzing potential vulnerabilities**
[codex:341744] exec
[codex:341744] /bin/bash -lc "python - <<'PY'
[codex:341744] import re
[codex:341744] code_hex = re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', open('BYTECODE_BUNDLE.txt').read()).group(1)[2:]
[codex:341744] code_bytes = bytes.fromhex(code_hex)
[codex:341744]
[codex:341744] # search for delegatecall opcode 0xf4 and selfdestruct 0xff
[codex:341744] ops = {0xf4:'DELEGATECALL',0xff:'SELFDESTRUCT',0xf2:'CALLCODE'}
[codex:341744] for op,name in ops.items():
[codex:341744] offs=[i for i,b in enumerate(code_bytes) if b==op]
[codex:341744] print(name, len(offs), 'occurrences', offs[:10])
[codex:341744] PY" in /tmp/codex-multi-gjepc61z succeeded in 26ms:
[codex:341744] DELEGATECALL 2 occurrences [6954, 9836]
[codex:341744] SELFDESTRUCT 5338 occurrences [47, 48, 49, 50, 209, 377, 378, 379, 380, 381]
[codex:341744] CALLCODE 0 occurrences []
[codex:341744]
[codex:341744] thinking
[codex:341744] **Investigating 0xf4 opcode usage**
[codex:341744] exec
[codex:341744] /bin/bash -lc "python - <<'PY'
[codex:341744] import re
[codex:341744] code_hex = re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', open('BYTECODE_BUNDLE.txt').read()).group(1)[2:]
[codex:341744] code_bytes = bytes.fromhex(code_hex)
[codex:341744] # disassemble around offsets 6954 (0x1b2a) and 9836 (0x266c)
[codex:341744] # use opcode table from before
[codex:341744] ops={
[codex:341744] 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:341744] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',
[codex:341744] 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:341744] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:341744] 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:341744] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:341744] }
[codex:341744] for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
[codex:341744] for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
[codex:341744] for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
[codex:341744] for i in range(0,5): ops[0xa0+i]=f'LOG{i}'
[codex:341744]
[codex:341744] def disasm(start,end):
[codex:341744] i=start
[codex:341744] while i<end:
[codex:341744] op=code_bytes[i]
[codex:341744] name=ops.get(op,f'OP{op:02x}')
[codex:341744] if name.startswith('PUSH'):
[codex:341744] n=int(name[4:])
[codex:341744] data=code_bytes[i+1:i+1+n]
[codex:341744] print(f'{i:04x} {name} {data.hex()}')
[codex:341744] i+=1+n
[codex:341744] else:
[codex:341744] print(f'{i:04x} {name}')
[codex:341744] i+=1
[codex:341744]
[codex:341744] print('--- around 0x1b2a')
[codex:341744] disasm(0x1b10,0x1b60)
[codex:341744] print('--- around 0x266c')
[codex:341744] disasm(0x2650,0x26b0)
[codex:341744] PY" in /tmp/codex-multi-gjepc61z succeeded in 26ms:
[codex:341744] --- around 0x1b2a
[codex:341744] 1b10 SHR
[codex:341744] 1b11 SDIV
[codex:341744] 1b12 OP24
[codex:341744] 1b13 OP0f
[codex:341744] 1b14 BALANCE
[codex:341744] 1b15 SELFDESTRUCT
[codex:341744] 1b16 GASPRICE
[codex:341744] 1b17 OPd0
[codex:341744] 1b18 PUSH8 ef1ee35ce4997762
[codex:341744] 1b21 PUSH22 2e3a095284754544f4c709d7823383600560008773ff
[codex:341744] 1b38 SELFDESTRUCT
[codex:341744] 1b39 SELFDESTRUCT
[codex:341744] 1b3a SELFDESTRUCT
[codex:341744] 1b3b SELFDESTRUCT
[codex:341744] 1b3c SELFDESTRUCT
[codex:341744] 1b3d SELFDESTRUCT
[codex:341744] 1b3e SELFDESTRUCT
[codex:341744] 1b3f SELFDESTRUCT
[codex:341744] 1b40 SELFDESTRUCT
[codex:341744]
[codex:341744] thinking
[codex:341744] **Verifying potential delegatecall and access control**
[codex:341744] exec
[codex:341744] /bin/bash -lc "python - <<'PY'
[codex:341744] import re
[codex:341744] code_hex = re.search(r'FILE: runtime_bytecode.hex\\n(0x[0-9a-fA-F]+)', open('BYTECODE_BUNDLE.txt').read()).group(1)[2:]
[codex:341744] code_bytes = bytes.fromhex(code_hex)
[codex:341744] # opcodes
[codex:341744] ops={
[codex:341744] 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:341744] 0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',0x20:'SHA3',
[codex:341744] 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:341744] 0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
[codex:341744] 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:341744] 0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
[codex:341744] }
[codex:341744] for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
[codex:341744] for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
[codex:341744] for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
[codex:341744] for i in range(0,5): ops[0xa0+i]=f'LOG{i}'
[codex:341744]
[codex:341744] def disasm(start,end):
[codex:341744] i=start
[codex:341744] while i<end:
[codex:341744] op=code_bytes[i]
[codex:341744] name=ops.get(op,f'OP{op:02x}')
[codex:341744] if name.startswith('PUSH'):
[codex:341744] n=int(name[4:])
[codex:341744] data=code_bytes[i+1:i+1+n]
[codex:341744] print(f'{i:04x} {name} {data.hex()}')
[codex:341744] i+=1+n
[codex:341744] else:
[codex:341744] print(f'{i:04x} {name}')
[codex:341744] i+=1
[codex:341744]
[codex:341744] print('--- changeAdmin around 0x20f7')
[codex:341744] disasm(0x20f7,0x2155)
[codex:341744] PY" in /tmp/codex-multi-gjepc61z succeeded in 24ms:
[codex:341744] --- changeAdmin around 0x20f7
[codex:341744] 20f7 JUMPDEST
[codex:341744] 20f8 PUSH1 00
[codex:341744] 20fa PUSH1 00
[codex:341744] 20fc SWAP1
[codex:341744] 20fd SLOAD
[codex:341744] 20fe SWAP1
[codex:341744] 20ff PUSH2 0100
[codex:341744] 2102 EXP
[codex:341744] 2103 SWAP1
[codex:341744] 2104 DIV
[codex:341744] 2105 PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:341744] 211a AND
[codex:341744] 211b PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:341744] 2130 AND
[codex:341744] 2131 CALLER
[codex:341744] 2132 PUSH20 ffffffffffffffffffffffffffffffffffffffff
[codex:341744] 2147 AND
[codex:341744] 2148 EQ
[codex:341744] 2149 ISZERO
[codex:341744]
[codex:341744] thinking
[codex:341744] **Preparing final JSON output**
[codex:341744] codex
[codex:341744] {"no_findings":true,"summary":"No concrete, exploitable value-extraction paths identified from the provided bytecode bundle.","findings":[]}
[codex:341744] tokens used
[codex:341744] 121,800
[codex:341744] {"no_findings":true,"summary":"No concrete, exploitable value-extraction paths identified from the provided bytecode bundle.","findings":[]}
{
"codex": {
"ran_at": "2026-01-03T03:26:41.575431+00:00",
"returncode": 0
},
"summary": "No concrete, exploitable value-extraction paths identified from the provided bytecode bundle.",
"raw_final": {
"summary": "No concrete, exploitable value-extraction paths identified from the provided bytecode bundle.",
"findings": [],
"no_findings": true
},
"no_findings": true,
"schema_version": 1
}
00000000: PUSH1 0x60 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLDATASIZE 00000006: ISZERO 00000007: PUSH2 0x0152 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 0x0167 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0x0b927666 00000045: EQ 00000046: PUSH2 0x022e 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0x14577c55 00000050: EQ 00000051: PUSH2 0x02a7 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0x19774d43 0000005b: EQ 0000005c: PUSH2 0x02f5 0000005f: JUMPI 00000060: DUP1 00000061: PUSH4 0x278b8c0e 00000066: EQ 00000067: PUSH2 0x034c 0000006a: JUMPI 0000006b: DUP1 0000006c: PUSH4 0x2e1a7d4d 00000071: EQ 00000072: PUSH2 0x03eb 00000075: JUMPI 00000076: DUP1 00000077: PUSH4 0x338b5dea 0000007c: EQ 0000007d: PUSH2 0x040b 00000080: JUMPI 00000081: DUP1 00000082: PUSH4 0x46be96c3 00000087: EQ 00000088: PUSH2 0x044a 0000008b: JUMPI 0000008c: DUP1 0000008d: PUSH4 0x508493bc 00000092: EQ 00000093: PUSH2 0x051c 00000096: JUMPI 00000097: DUP1 00000098: PUSH4 0x54d03b5c 0000009d: EQ 0000009e: PUSH2 0x0585 000000a1: JUMPI 000000a2: DUP1 000000a3: PUSH4 0x57786394 000000a8: EQ 000000a9: PUSH2 0x05a5 000000ac: JUMPI 000000ad: DUP1 000000ae: PUSH4 0x5e1d7ae4 000000b3: EQ 000000b4: PUSH2 0x05cb 000000b7: JUMPI 000000b8: DUP1 000000b9: PUSH4 0x65e17c9d 000000be: EQ 000000bf: PUSH2 0x05eb 000000c2: JUMPI 000000c3: DUP1 000000c4: PUSH4 0x6c86888b 000000c9: EQ 000000ca: PUSH2 0x063d 000000cd: JUMPI 000000ce: DUP1 000000cf: PUSH4 0x71ffcb16 000000d4: EQ 000000d5: PUSH2 0x073b 000000d8: JUMPI 000000d9: DUP1 000000da: PUSH4 0x731c2f81 000000df: EQ 000000e0: PUSH2 0x0771 000000e3: JUMPI 000000e4: DUP1 000000e5: PUSH4 0x8823a9c0 000000ea: EQ 000000eb: PUSH2 0x0797 000000ee: JUMPI 000000ef: DUP1 000000f0: PUSH4 0x8f283970 000000f5: EQ 000000f6: PUSH2 0x07b7 000000f9: JUMPI 000000fa: DUP1 000000fb: PUSH4 0x9e281a98 00000100: EQ 00000101: PUSH2 0x07ed 00000104: JUMPI 00000105: DUP1 00000106: PUSH4 0xbb5f4629 0000010b: EQ 0000010c: PUSH2 0x082c 0000010f: JUMPI 00000110: DUP1 00000111: PUSH4 0xc281309e 00000116: EQ 00000117: PUSH2 0x0887 0000011a: JUMPI 0000011b: DUP1 0000011c: PUSH4 0xd0e30db0 00000121: EQ 00000122: PUSH2 0x08ad 00000125: JUMPI 00000126: DUP1 00000127: PUSH4 0xd9d412e6 0000012c: EQ 0000012d: PUSH2 0x08b7 00000130: JUMPI 00000131: DUP1 00000132: PUSH4 0xf7888aec 00000137: EQ 00000138: PUSH2 0x08ed 0000013b: JUMPI 0000013c: DUP1 0000013d: PUSH4 0xf851a440 00000142: EQ 00000143: PUSH2 0x0956 00000146: JUMPI 00000147: DUP1 00000148: PUSH4 0xfb6e155f 0000014d: EQ 0000014e: PUSH2 0x09a8 00000151: JUMPI 00000152: JUMPDEST 00000153: CALLVALUE 00000154: ISZERO 00000155: PUSH2 0x015a 00000158: JUMPI 00000159: INVALID 0000015a: JUMPDEST 0000015b: PUSH2 0x0165 0000015e: JUMPDEST 0000015f: PUSH2 0x0000 00000162: JUMP 00000163: JUMPDEST 00000164: JUMP 00000165: JUMPDEST 00000166: STOP 00000167: JUMPDEST 00000168: CALLVALUE 00000169: ISZERO 0000016a: PUSH2 0x016f 0000016d: JUMPI 0000016e: INVALID 0000016f: JUMPDEST 00000170: PUSH2 0x022c 00000173: PUSH1 0x04 00000175: DUP1 00000176: DUP1 00000177: CALLDATALOAD 00000178: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000018d: AND 0000018e: SWAP1 0000018f: PUSH1 0x20 00000191: ADD 00000192: SWAP1 00000193: SWAP2 00000194: SWAP1 00000195: DUP1 00000196: CALLDATALOAD 00000197: SWAP1 00000198: PUSH1 0x20 0000019a: ADD 0000019b: SWAP1 0000019c: SWAP2 0000019d: SWAP1 0000019e: DUP1 0000019f: CALLDATALOAD 000001a0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000001b5: AND 000001b6: SWAP1 000001b7: PUSH1 0x20 000001b9: ADD 000001ba: SWAP1 000001bb: SWAP2 000001bc: SWAP1 000001bd: DUP1 000001be: CALLDATALOAD 000001bf: SWAP1 000001c0: PUSH1 0x20 000001c2: ADD 000001c3: SWAP1 000001c4: SWAP2 000001c5: SWAP1 000001c6: DUP1 000001c7: CALLDATALOAD 000001c8: SWAP1 000001c9: PUSH1 0x20 000001cb: ADD 000001cc: SWAP1 000001cd: SWAP2 000001ce: SWAP1 000001cf: DUP1 000001d0: CALLDATALOAD 000001d1: SWAP1 000001d2: PUSH1 0x20 000001d4: ADD 000001d5: SWAP1 000001d6: SWAP2 000001d7: SWAP1 000001d8: DUP1 000001d9: CALLDATALOAD 000001da: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000001ef: AND 000001f0: SWAP1 000001f1: PUSH1 0x20 000001f3: ADD 000001f4: SWAP1 000001f5: SWAP2 000001f6: SWAP1 000001f7: DUP1 000001f8: CALLDATALOAD 000001f9: PUSH1 0xff 000001fb: AND 000001fc: SWAP1 000001fd: PUSH1 0x20 000001ff: ADD 00000200: SWAP1 00000201: SWAP2 00000202: SWAP1 00000203: DUP1 00000204: CALLDATALOAD 00000205: PUSH1 0x00 00000207: NOT 00000208: AND 00000209: SWAP1 0000020a: PUSH1 0x20 0000020c: ADD 0000020d: SWAP1 0000020e: SWAP2 0000020f: SWAP1 00000210: DUP1 00000211: CALLDATALOAD 00000212: PUSH1 0x00 00000214: NOT 00000215: AND 00000216: SWAP1 00000217: PUSH1 0x20 00000219: ADD 0000021a: SWAP1 0000021b: SWAP2 0000021c: SWAP1 0000021d: DUP1 0000021e: CALLDATALOAD 0000021f: SWAP1 00000220: PUSH1 0x20 00000222: ADD 00000223: SWAP1 00000224: SWAP2 00000225: SWAP1 00000226: POP 00000227: POP 00000228: PUSH2 0x0a7a 0000022b: JUMP 0000022c: JUMPDEST 0000022d: STOP 0000022e: JUMPDEST 0000022f: CALLVALUE 00000230: ISZERO 00000231: PUSH2 0x0236 00000234: JUMPI 00000235: INVALID 00000236: JUMPDEST 00000237: PUSH2 0x02a5 0000023a: PUSH1 0x04 0000023c: DUP1 0000023d: DUP1 0000023e: CALLDATALOAD 0000023f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000254: AND 00000255: SWAP1 00000256: PUSH1 0x20 00000258: ADD 00000259: SWAP1 0000025a: SWAP2 0000025b: SWAP1 0000025c: DUP1 0000025d: CALLDATALOAD 0000025e: SWAP1 0000025f: PUSH1 0x20 00000261: ADD 00000262: SWAP1 00000263: SWAP2 00000264: SWAP1 00000265: DUP1 00000266: CALLDATALOAD 00000267: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000027c: AND 0000027d: SWAP1 0000027e: PUSH1 0x20 00000280: ADD 00000281: SWAP1 00000282: SWAP2 00000283: SWAP1 00000284: DUP1 00000285: CALLDATALOAD 00000286: SWAP1 00000287: PUSH1 0x20 00000289: ADD 0000028a: SWAP1 0000028b: SWAP2 0000028c: SWAP1 0000028d: DUP1 0000028e: CALLDATALOAD 0000028f: SWAP1 00000290: PUSH1 0x20 00000292: ADD 00000293: SWAP1 00000294: SWAP2 00000295: SWAP1 00000296: DUP1 00000297: CALLDATALOAD 00000298: SWAP1 00000299: PUSH1 0x20 0000029b: ADD 0000029c: SWAP1 0000029d: SWAP2 0000029e: SWAP1 0000029f: POP 000002a0: POP 000002a1: PUSH2 0x0f7a 000002a4: JUMP 000002a5: JUMPDEST 000002a6: STOP 000002a7: JUMPDEST 000002a8: CALLVALUE 000002a9: ISZERO 000002aa: PUSH2 0x02af 000002ad: JUMPI 000002ae: INVALID 000002af: JUMPDEST 000002b0: PUSH2 0x02db 000002b3: PUSH1 0x04 000002b5: DUP1 000002b6: DUP1 000002b7: CALLDATALOAD 000002b8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000002cd: AND 000002ce: SWAP1 000002cf: PUSH1 0x20 000002d1: ADD 000002d2: SWAP1 000002d3: SWAP2 000002d4: SWAP1 000002d5: POP 000002d6: POP 000002d7: PUSH2 0x1201 000002da: JUMP 000002db: JUMPDEST 000002dc: PUSH1 0x40 000002de: MLOAD 000002df: DUP1 000002e0: DUP3 000002e1: ISZERO 000002e2: ISZERO 000002e3: ISZERO 000002e4: ISZERO 000002e5: DUP2 000002e6: MSTORE 000002e7: PUSH1 0x20 000002e9: ADD 000002ea: SWAP2 000002eb: POP 000002ec: POP 000002ed: PUSH1 0x40 000002ef: MLOAD 000002f0: DUP1 000002f1: SWAP2 000002f2: SUB 000002f3: SWAP1 000002f4: RETURN 000002f5: JUMPDEST 000002f6: CALLVALUE 000002f7: ISZERO 000002f8: PUSH2 0x02fd 000002fb: JUMPI 000002fc: INVALID 000002fd: JUMPDEST 000002fe: PUSH2 0x0336 00000301: PUSH1 0x04 00000303: DUP1 00000304: DUP1 00000305: CALLDATALOAD 00000306: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000031b: AND 0000031c: SWAP1 0000031d: PUSH1 0x20 0000031f: ADD 00000320: SWAP1 00000321: SWAP2 00000322: SWAP1 00000323: DUP1 00000324: CALLDATALOAD 00000325: PUSH1 0x00 00000327: NOT 00000328: AND 00000329: SWAP1 0000032a: PUSH1 0x20 0000032c: ADD 0000032d: SWAP1 0000032e: SWAP2 0000032f: SWAP1 00000330: POP 00000331: POP 00000332: PUSH2 0x1221 00000335: JUMP 00000336: JUMPDEST 00000337: PUSH1 0x40 00000339: MLOAD 0000033a: DUP1 0000033b: DUP3 0000033c: DUP2 0000033d: MSTORE 0000033e: PUSH1 0x20 00000340: ADD 00000341: SWAP2 00000342: POP 00000343: POP 00000344: PUSH1 0x40 00000346: MLOAD 00000347: DUP1 00000348: SWAP2 00000349: SUB 0000034a: SWAP1 0000034b: RETURN 0000034c: JUMPDEST 0000034d: CALLVALUE 0000034e: ISZERO 0000034f: PUSH2 0x0354 00000352: JUMPI 00000353: INVALID 00000354: JUMPDEST 00000355: PUSH2 0x03e9 00000358: PUSH1 0x04 0000035a: DUP1 0000035b: DUP1 0000035c: CALLDATALOAD 0000035d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000372: AND 00000373: SWAP1 00000374: PUSH1 0x20 00000376: ADD 00000377: SWAP1 00000378: SWAP2 00000379: SWAP1 0000037a: DUP1 0000037b: CALLDATALOAD 0000037c: SWAP1 0000037d: PUSH1 0x20 0000037f: ADD 00000380: SWAP1 00000381: SWAP2 00000382: SWAP1 00000383: DUP1 00000384: CALLDATALOAD 00000385: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000039a: AND 0000039b: SWAP1 0000039c: PUSH1 0x20 0000039e: ADD 0000039f: SWAP1 000003a0: SWAP2 000003a1: SWAP1 000003a2: DUP1 000003a3: CALLDATALOAD 000003a4: SWAP1 000003a5: PUSH1 0x20 000003a7: ADD 000003a8: SWAP1 000003a9: SWAP2 000003aa: SWAP1 000003ab: DUP1 000003ac: CALLDATALOAD 000003ad: SWAP1 000003ae: PUSH1 0x20 000003b0: ADD 000003b1: SWAP1 000003b2: SWAP2 000003b3: SWAP1 000003b4: DUP1 000003b5: CALLDATALOAD 000003b6: SWAP1 000003b7: PUSH1 0x20 000003b9: ADD 000003ba: SWAP1 000003bb: SWAP2 000003bc: SWAP1 000003bd: DUP1 000003be: CALLDATALOAD 000003bf: PUSH1 0xff 000003c1: AND 000003c2: SWAP1 000003c3: PUSH1 0x20 000003c5: ADD 000003c6: SWAP1 000003c7: SWAP2 000003c8: SWAP1 000003c9: DUP1 000003ca: CALLDATALOAD 000003cb: PUSH1 0x00 000003cd: NOT 000003ce: AND 000003cf: SWAP1 000003d0: PUSH1 0x20 000003d2: ADD 000003d3: SWAP1 000003d4: SWAP2 000003d5: SWAP1 000003d6: DUP1 000003d7: CALLDATALOAD 000003d8: PUSH1 0x00 000003da: NOT 000003db: AND 000003dc: SWAP1 000003dd: PUSH1 0x20 000003df: ADD 000003e0: SWAP1 000003e1: SWAP2 000003e2: SWAP1 000003e3: POP 000003e4: POP 000003e5: PUSH2 0x1246 000003e8: JUMP 000003e9: JUMPDEST 000003ea: STOP 000003eb: JUMPDEST 000003ec: CALLVALUE 000003ed: ISZERO 000003ee: PUSH2 0x03f3 000003f1: JUMPI 000003f2: INVALID 000003f3: JUMPDEST 000003f4: PUSH2 0x0409 000003f7: PUSH1 0x04 000003f9: DUP1 000003fa: DUP1 000003fb: CALLDATALOAD 000003fc: SWAP1 000003fd: PUSH1 0x20 000003ff: ADD 00000400: SWAP1 00000401: SWAP2 00000402: SWAP1 00000403: POP 00000404: POP 00000405: PUSH2 0x1659 00000408: JUMP 00000409: JUMPDEST 0000040a: STOP 0000040b: JUMPDEST 0000040c: CALLVALUE 0000040d: ISZERO 0000040e: PUSH2 0x0413 00000411: JUMPI 00000412: INVALID 00000413: JUMPDEST 00000414: PUSH2 0x0448 00000417: PUSH1 0x04 00000419: DUP1 0000041a: DUP1 0000041b: CALLDATALOAD 0000041c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000431: AND 00000432: SWAP1 00000433: PUSH1 0x20 00000435: ADD 00000436: SWAP1 00000437: SWAP2 00000438: SWAP1 00000439: DUP1 0000043a: CALLDATALOAD 0000043b: SWAP1 0000043c: PUSH1 0x20 0000043e: ADD 0000043f: SWAP1 00000440: SWAP2 00000441: SWAP1 00000442: POP 00000443: POP 00000444: PUSH2 0x18e4 00000447: JUMP 00000448: JUMPDEST 00000449: STOP 0000044a: JUMPDEST 0000044b: CALLVALUE 0000044c: ISZERO 0000044d: PUSH2 0x0452 00000450: JUMPI 00000451: INVALID 00000452: JUMPDEST 00000453: PUSH2 0x0506 00000456: PUSH1 0x04 00000458: DUP1 00000459: DUP1 0000045a: CALLDATALOAD 0000045b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000470: AND 00000471: SWAP1 00000472: PUSH1 0x20 00000474: ADD 00000475: SWAP1 00000476: SWAP2 00000477: SWAP1 00000478: DUP1 00000479: CALLDATALOAD 0000047a: SWAP1 0000047b: PUSH1 0x20 0000047d: ADD 0000047e: SWAP1 0000047f: SWAP2 00000480: SWAP1 00000481: DUP1 00000482: CALLDATALOAD 00000483: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000498: AND 00000499: SWAP1 0000049a: PUSH1 0x20 0000049c: ADD 0000049d: SWAP1 0000049e: SWAP2 0000049f: SWAP1 000004a0: DUP1 000004a1: CALLDATALOAD 000004a2: SWAP1 000004a3: PUSH1 0x20 000004a5: ADD 000004a6: SWAP1 000004a7: SWAP2 000004a8: SWAP1 000004a9: DUP1 000004aa: CALLDATALOAD 000004ab: SWAP1 000004ac: PUSH1 0x20 000004ae: ADD 000004af: SWAP1 000004b0: SWAP2 000004b1: SWAP1 000004b2: DUP1 000004b3: CALLDATALOAD 000004b4: SWAP1 000004b5: PUSH1 0x20 000004b7: ADD 000004b8: SWAP1 000004b9: SWAP2 000004ba: SWAP1 000004bb: DUP1 000004bc: CALLDATALOAD 000004bd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000004d2: AND 000004d3: SWAP1 000004d4: PUSH1 0x20 000004d6: ADD 000004d7: SWAP1 000004d8: SWAP2 000004d9: SWAP1 000004da: DUP1 000004db: CALLDATALOAD 000004dc: PUSH1 0xff 000004de: AND 000004df: SWAP1 000004e0: PUSH1 0x20 000004e2: ADD 000004e3: SWAP1 000004e4: SWAP2 000004e5: SWAP1 000004e6: DUP1 000004e7: CALLDATALOAD 000004e8: PUSH1 0x00 000004ea: NOT 000004eb: AND 000004ec: SWAP1 000004ed: PUSH1 0x20 000004ef: ADD 000004f0: SWAP1 000004f1: SWAP2 000004f2: SWAP1 000004f3: DUP1 000004f4: CALLDATALOAD 000004f5: PUSH1 0x00 000004f7: NOT 000004f8: AND 000004f9: SWAP1 000004fa: PUSH1 0x20 000004fc: ADD 000004fd: SWAP1 000004fe: SWAP2 000004ff: SWAP1 00000500: POP 00000501: POP 00000502: PUSH2 0x1c34 00000505: JUMP 00000506: JUMPDEST 00000507: PUSH1 0x40 00000509: MLOAD 0000050a: DUP1 0000050b: DUP3 0000050c: DUP2 0000050d: MSTORE 0000050e: PUSH1 0x20 00000510: ADD 00000511: SWAP2 00000512: POP 00000513: POP 00000514: PUSH1 0x40 00000516: MLOAD 00000517: DUP1 00000518: SWAP2 00000519: SUB 0000051a: SWAP1 0000051b: RETURN 0000051c: JUMPDEST 0000051d: CALLVALUE 0000051e: ISZERO 0000051f: PUSH2 0x0524 00000522: JUMPI 00000523: INVALID 00000524: JUMPDEST 00000525: PUSH2 0x056f 00000528: PUSH1 0x04 0000052a: DUP1 0000052b: DUP1 0000052c: CALLDATALOAD 0000052d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000542: AND 00000543: SWAP1 00000544: PUSH1 0x20 00000546: ADD 00000547: SWAP1 00000548: SWAP2 00000549: SWAP1 0000054a: DUP1 0000054b: CALLDATALOAD 0000054c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000561: AND 00000562: SWAP1 00000563: PUSH1 0x20 00000565: ADD 00000566: SWAP1 00000567: SWAP2 00000568: SWAP1 00000569: POP 0000056a: POP 0000056b: PUSH2 0x1dc2 0000056e: JUMP 0000056f: JUMPDEST 00000570: PUSH1 0x40 00000572: MLOAD 00000573: DUP1 00000574: DUP3 00000575: DUP2 00000576: MSTORE 00000577: PUSH1 0x20 00000579: ADD 0000057a: SWAP2 0000057b: POP 0000057c: POP 0000057d: PUSH1 0x40 0000057f: MLOAD 00000580: DUP1 00000581: SWAP2 00000582: SUB 00000583: SWAP1 00000584: RETURN 00000585: JUMPDEST 00000586: CALLVALUE 00000587: ISZERO 00000588: PUSH2 0x058d 0000058b: JUMPI 0000058c: INVALID 0000058d: JUMPDEST 0000058e: PUSH2 0x05a3 00000591: PUSH1 0x04 00000593: DUP1 00000594: DUP1 00000595: CALLDATALOAD 00000596: SWAP1 00000597: PUSH1 0x20 00000599: ADD 0000059a: SWAP1 0000059b: SWAP2 0000059c: SWAP1 0000059d: POP 0000059e: POP 0000059f: PUSH2 0x1de7 000005a2: JUMP 000005a3: JUMPDEST 000005a4: STOP 000005a5: JUMPDEST 000005a6: CALLVALUE 000005a7: ISZERO 000005a8: PUSH2 0x05ad 000005ab: JUMPI 000005ac: INVALID 000005ad: JUMPDEST 000005ae: PUSH2 0x05b5 000005b1: PUSH2 0x1e5d 000005b4: JUMP 000005b5: JUMPDEST 000005b6: PUSH1 0x40 000005b8: MLOAD 000005b9: DUP1 000005ba: DUP3 000005bb: DUP2 000005bc: MSTORE 000005bd: PUSH1 0x20 000005bf: ADD 000005c0: SWAP2 000005c1: POP 000005c2: POP 000005c3: PUSH1 0x40 000005c5: MLOAD 000005c6: DUP1 000005c7: SWAP2 000005c8: SUB 000005c9: SWAP1 000005ca: RETURN 000005cb: JUMPDEST 000005cc: CALLVALUE 000005cd: ISZERO 000005ce: PUSH2 0x05d3 000005d1: JUMPI 000005d2: INVALID 000005d3: JUMPDEST 000005d4: PUSH2 0x05e9 000005d7: PUSH1 0x04 000005d9: DUP1 000005da: DUP1 000005db: CALLDATALOAD 000005dc: SWAP1 000005dd: PUSH1 0x20 000005df: ADD 000005e0: SWAP1 000005e1: SWAP2 000005e2: SWAP1 000005e3: POP 000005e4: POP 000005e5: PUSH2 0x1e63 000005e8: JUMP 000005e9: JUMPDEST 000005ea: STOP 000005eb: JUMPDEST 000005ec: CALLVALUE 000005ed: ISZERO 000005ee: PUSH2 0x05f3 000005f1: JUMPI 000005f2: INVALID 000005f3: JUMPDEST 000005f4: PUSH2 0x05fb 000005f7: PUSH2 0x1ee5 000005fa: JUMP 000005fb: JUMPDEST 000005fc: PUSH1 0x40 000005fe: MLOAD 000005ff: DUP1 00000600: DUP3 00000601: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000616: AND 00000617: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000062c: AND 0000062d: DUP2 0000062e: MSTORE 0000062f: PUSH1 0x20 00000631: ADD 00000632: SWAP2 00000633: POP 00000634: POP 00000635: PUSH1 0x40 00000637: MLOAD 00000638: DUP1 00000639: SWAP2 0000063a: SUB 0000063b: SWAP1 0000063c: RETURN 0000063d: JUMPDEST 0000063e: CALLVALUE 0000063f: ISZERO 00000640: PUSH2 0x0645 00000643: JUMPI 00000644: INVALID 00000645: JUMPDEST 00000646: PUSH2 0x0721 00000649: PUSH1 0x04 0000064b: DUP1 0000064c: DUP1 0000064d: CALLDATALOAD 0000064e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000663: AND 00000664: SWAP1 00000665: PUSH1 0x20 00000667: ADD 00000668: SWAP1 00000669: SWAP2 0000066a: SWAP1 0000066b: DUP1 0000066c: CALLDATALOAD 0000066d: SWAP1 0000066e: PUSH1 0x20 00000670: ADD 00000671: SWAP1 00000672: SWAP2 00000673: SWAP1 00000674: DUP1 00000675: CALLDATALOAD 00000676: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000068b: AND 0000068c: SWAP1 0000068d: PUSH1 0x20 0000068f: ADD 00000690: SWAP1 00000691: SWAP2 00000692: SWAP1 00000693: DUP1 00000694: CALLDATALOAD 00000695: SWAP1 00000696: PUSH1 0x20 00000698: ADD 00000699: SWAP1 0000069a: SWAP2 0000069b: SWAP1 0000069c: DUP1 0000069d: CALLDATALOAD 0000069e: SWAP1 0000069f: PUSH1 0x20 000006a1: ADD 000006a2: SWAP1 000006a3: SWAP2 000006a4: SWAP1 000006a5: DUP1 000006a6: CALLDATALOAD 000006a7: SWAP1 000006a8: PUSH1 0x20 000006aa: ADD 000006ab: SWAP1 000006ac: SWAP2 000006ad: SWAP1 000006ae: DUP1 000006af: CALLDATALOAD 000006b0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000006c5: AND 000006c6: SWAP1 000006c7: PUSH1 0x20 000006c9: ADD 000006ca: SWAP1 000006cb: SWAP2 000006cc: SWAP1 000006cd: DUP1 000006ce: CALLDATALOAD 000006cf: PUSH1 0xff 000006d1: AND 000006d2: SWAP1 000006d3: PUSH1 0x20 000006d5: ADD 000006d6: SWAP1 000006d7: SWAP2 000006d8: SWAP1 000006d9: DUP1 000006da: CALLDATALOAD 000006db: PUSH1 0x00 000006dd: NOT 000006de: AND 000006df: SWAP1 000006e0: PUSH1 0x20 000006e2: ADD 000006e3: SWAP1 000006e4: SWAP2 000006e5: SWAP1 000006e6: DUP1 000006e7: CALLDATALOAD 000006e8: PUSH1 0x00 000006ea: NOT 000006eb: AND 000006ec: SWAP1 000006ed: PUSH1 0x20 000006ef: ADD 000006f0: SWAP1 000006f1: SWAP2 000006f2: SWAP1 000006f3: DUP1 000006f4: CALLDATALOAD 000006f5: SWAP1 000006f6: PUSH1 0x20 000006f8: ADD 000006f9: SWAP1 000006fa: SWAP2 000006fb: SWAP1 000006fc: DUP1 000006fd: CALLDATALOAD 000006fe: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000713: AND 00000714: SWAP1 00000715: PUSH1 0x20 00000717: ADD 00000718: SWAP1 00000719: SWAP2 0000071a: SWAP1 0000071b: POP 0000071c: POP 0000071d: PUSH2 0x1f0b 00000720: JUMP 00000721: JUMPDEST 00000722: PUSH1 0x40 00000724: MLOAD 00000725: DUP1 00000726: DUP3 00000727: ISZERO 00000728: ISZERO 00000729: ISZERO 0000072a: ISZERO 0000072b: DUP2 0000072c: MSTORE 0000072d: PUSH1 0x20 0000072f: ADD 00000730: SWAP2 00000731: POP 00000732: POP 00000733: PUSH1 0x40 00000735: MLOAD 00000736: DUP1 00000737: SWAP2 00000738: SUB 00000739: SWAP1 0000073a: RETURN 0000073b: JUMPDEST 0000073c: CALLVALUE 0000073d: ISZERO 0000073e: PUSH2 0x0743 00000741: JUMPI 00000742: INVALID 00000743: JUMPDEST 00000744: PUSH2 0x076f 00000747: PUSH1 0x04 00000749: DUP1 0000074a: DUP1 0000074b: CALLDATALOAD 0000074c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000761: AND 00000762: SWAP1 00000763: PUSH1 0x20 00000765: ADD 00000766: SWAP1 00000767: SWAP2 00000768: SWAP1 00000769: POP 0000076a: POP 0000076b: PUSH2 0x1fce 0000076e: JUMP 0000076f: JUMPDEST 00000770: STOP 00000771: JUMPDEST 00000772: CALLVALUE 00000773: ISZERO 00000774: PUSH2 0x0779 00000777: JUMPI 00000778: INVALID 00000779: JUMPDEST 0000077a: PUSH2 0x0781 0000077d: PUSH2 0x206f 00000780: JUMP 00000781: JUMPDEST 00000782: PUSH1 0x40 00000784: MLOAD 00000785: DUP1 00000786: DUP3 00000787: DUP2 00000788: MSTORE 00000789: PUSH1 0x20 0000078b: ADD 0000078c: SWAP2 0000078d: POP 0000078e: POP 0000078f: PUSH1 0x40 00000791: MLOAD 00000792: DUP1 00000793: SWAP2 00000794: SUB 00000795: SWAP1 00000796: RETURN 00000797: JUMPDEST 00000798: CALLVALUE 00000799: ISZERO 0000079a: PUSH2 0x079f 0000079d: JUMPI 0000079e: INVALID 0000079f: JUMPDEST 000007a0: PUSH2 0x07b5 000007a3: PUSH1 0x04 000007a5: DUP1 000007a6: DUP1 000007a7: CALLDATALOAD 000007a8: SWAP1 000007a9: PUSH1 0x20 000007ab: ADD 000007ac: SWAP1 000007ad: SWAP2 000007ae: SWAP1 000007af: POP 000007b0: POP 000007b1: PUSH2 0x2075 000007b4: JUMP 000007b5: JUMPDEST 000007b6: STOP 000007b7: JUMPDEST 000007b8: CALLVALUE 000007b9: ISZERO 000007ba: PUSH2 0x07bf 000007bd: JUMPI 000007be: INVALID 000007bf: JUMPDEST 000007c0: PUSH2 0x07eb 000007c3: PUSH1 0x04 000007c5: DUP1 000007c6: DUP1 000007c7: CALLDATALOAD 000007c8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007dd: AND 000007de: SWAP1 000007df: PUSH1 0x20 000007e1: ADD 000007e2: SWAP1 000007e3: SWAP2 000007e4: SWAP1 000007e5: POP 000007e6: POP 000007e7: PUSH2 0x20f7 000007ea: JUMP 000007eb: JUMPDEST 000007ec: STOP 000007ed: JUMPDEST 000007ee: CALLVALUE 000007ef: ISZERO 000007f0: PUSH2 0x07f5 000007f3: JUMPI 000007f4: INVALID 000007f5: JUMPDEST 000007f6: PUSH2 0x082a 000007f9: PUSH1 0x04 000007fb: DUP1 000007fc: DUP1 000007fd: CALLDATALOAD 000007fe: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000813: AND 00000814: SWAP1 00000815: PUSH1 0x20 00000817: ADD 00000818: SWAP1 00000819: SWAP2 0000081a: SWAP1 0000081b: DUP1 0000081c: CALLDATALOAD 0000081d: SWAP1 0000081e: PUSH1 0x20 00000820: ADD 00000821: SWAP1 00000822: SWAP2 00000823: SWAP1 00000824: POP 00000825: POP 00000826: PUSH2 0x2198 00000829: JUMP 0000082a: JUMPDEST 0000082b: STOP 0000082c: JUMPDEST 0000082d: CALLVALUE 0000082e: ISZERO 0000082f: PUSH2 0x0834 00000832: JUMPI 00000833: INVALID 00000834: JUMPDEST 00000835: PUSH2 0x086d 00000838: PUSH1 0x04 0000083a: DUP1 0000083b: DUP1 0000083c: CALLDATALOAD 0000083d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000852: AND 00000853: SWAP1 00000854: PUSH1 0x20 00000856: ADD 00000857: SWAP1 00000858: SWAP2 00000859: SWAP1 0000085a: DUP1 0000085b: CALLDATALOAD 0000085c: PUSH1 0x00 0000085e: NOT 0000085f: AND 00000860: SWAP1 00000861: PUSH1 0x20 00000863: ADD 00000864: SWAP1 00000865: SWAP2 00000866: SWAP1 00000867: POP 00000868: POP 00000869: PUSH2 0x253d 0000086c: JUMP 0000086d: JUMPDEST 0000086e: PUSH1 0x40 00000870: MLOAD 00000871: DUP1 00000872: DUP3 00000873: ISZERO 00000874: ISZERO 00000875: ISZERO 00000876: ISZERO 00000877: DUP2 00000878: MSTORE 00000879: PUSH1 0x20 0000087b: ADD 0000087c: SWAP2 0000087d: POP 0000087e: POP 0000087f: PUSH1 0x40 00000881: MLOAD 00000882: DUP1 00000883: SWAP2 00000884: SUB 00000885: SWAP1 00000886: RETURN 00000887: JUMPDEST 00000888: CALLVALUE 00000889: ISZERO 0000088a: PUSH2 0x088f 0000088d: JUMPI 0000088e: INVALID 0000088f: JUMPDEST 00000890: PUSH2 0x0897 00000893: PUSH2 0x256c 00000896: JUMP 00000897: JUMPDEST 00000898: PUSH1 0x40 0000089a: MLOAD 0000089b: DUP1 0000089c: DUP3 0000089d: DUP2 0000089e: MSTORE 0000089f: PUSH1 0x20 000008a1: ADD 000008a2: SWAP2 000008a3: POP 000008a4: POP 000008a5: PUSH1 0x40 000008a7: MLOAD 000008a8: DUP1 000008a9: SWAP2 000008aa: SUB 000008ab: SWAP1 000008ac: RETURN 000008ad: JUMPDEST 000008ae: PUSH2 0x08b5 000008b1: PUSH2 0x2572 000008b4: JUMP 000008b5: JUMPDEST 000008b6: STOP 000008b7: JUMPDEST 000008b8: CALLVALUE 000008b9: ISZERO 000008ba: PUSH2 0x08bf 000008bd: JUMPI 000008be: INVALID 000008bf: JUMPDEST 000008c0: PUSH2 0x08eb 000008c3: PUSH1 0x04 000008c5: DUP1 000008c6: DUP1 000008c7: CALLDATALOAD 000008c8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000008dd: AND 000008de: SWAP1 000008df: PUSH1 0x20 000008e1: ADD 000008e2: SWAP1 000008e3: SWAP2 000008e4: SWAP1 000008e5: POP 000008e6: POP 000008e7: PUSH2 0x274a 000008ea: JUMP 000008eb: JUMPDEST 000008ec: STOP 000008ed: JUMPDEST 000008ee: CALLVALUE 000008ef: ISZERO 000008f0: PUSH2 0x08f5 000008f3: JUMPI 000008f4: INVALID 000008f5: JUMPDEST 000008f6: PUSH2 0x0940 000008f9: PUSH1 0x04 000008fb: DUP1 000008fc: DUP1 000008fd: CALLDATALOAD 000008fe: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000913: AND 00000914: SWAP1 00000915: PUSH1 0x20 00000917: ADD 00000918: SWAP1 00000919: SWAP2 0000091a: SWAP1 0000091b: DUP1 0000091c: CALLDATALOAD 0000091d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000932: AND 00000933: SWAP1 00000934: PUSH1 0x20 00000936: ADD 00000937: SWAP1 00000938: SWAP2 00000939: SWAP1 0000093a: POP 0000093b: POP 0000093c: PUSH2 0x2802 0000093f: JUMP 00000940: JUMPDEST 00000941: PUSH1 0x40 00000943: MLOAD 00000944: DUP1 00000945: DUP3 00000946: DUP2 00000947: MSTORE 00000948: PUSH1 0x20 0000094a: ADD 0000094b: SWAP2 0000094c: POP 0000094d: POP 0000094e: PUSH1 0x40 00000950: MLOAD 00000951: DUP1 00000952: SWAP2 00000953: SUB 00000954: SWAP1 00000955: RETURN 00000956: JUMPDEST 00000957: CALLVALUE 00000958: ISZERO 00000959: PUSH2 0x095e 0000095c: JUMPI 0000095d: INVALID 0000095e: JUMPDEST 0000095f: PUSH2 0x0966 00000962: PUSH2 0x288a 00000965: JUMP 00000966: JUMPDEST 00000967: PUSH1 0x40 00000969: MLOAD 0000096a: DUP1 0000096b: DUP3 0000096c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000981: AND 00000982: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000997: AND 00000998: DUP2 00000999: MSTORE 0000099a: PUSH1 0x20 0000099c: ADD 0000099d: SWAP2 0000099e: POP 0000099f: POP 000009a0: PUSH1 0x40 000009a2: MLOAD 000009a3: DUP1 000009a4: SWAP2 000009a5: SUB 000009a6: SWAP1 000009a7: RETURN 000009a8: JUMPDEST 000009a9: CALLVALUE 000009aa: ISZERO 000009ab: PUSH2 0x09b0 000009ae: JUMPI 000009af: INVALID 000009b0: JUMPDEST 000009b1: PUSH2 0x0a64 000009b4: PUSH1 0x04 000009b6: DUP1 000009b7: DUP1 000009b8: CALLDATALOAD 000009b9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000009ce: AND 000009cf: SWAP1 000009d0: PUSH1 0x20 000009d2: ADD 000009d3: SWAP1 000009d4: SWAP2 000009d5: SWAP1 000009d6: DUP1 000009d7: CALLDATALOAD 000009d8: SWAP1 000009d9: PUSH1 0x20 000009db: ADD 000009dc: SWAP1 000009dd: SWAP2 000009de: SWAP1 000009df: DUP1 000009e0: CALLDATALOAD 000009e1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000009f6: AND 000009f7: SWAP1 000009f8: PUSH1 0x20 000009fa: ADD 000009fb: SWAP1 000009fc: SWAP2 000009fd: SWAP1 000009fe: DUP1 000009ff: CALLDATALOAD 00000a00: SWAP1 00000a01: PUSH1 0x20 00000a03: ADD 00000a04: SWAP1 00000a05: SWAP2 00000a06: SWAP1 00000a07: DUP1 00000a08: CALLDATALOAD 00000a09: SWAP1 00000a0a: PUSH1 0x20 00000a0c: ADD 00000a0d: SWAP1 00000a0e: SWAP2 00000a0f: SWAP1 00000a10: DUP1 00000a11: CALLDATALOAD 00000a12: SWAP1 00000a13: PUSH1 0x20 00000a15: ADD 00000a16: SWAP1 00000a17: SWAP2 00000a18: SWAP1 00000a19: DUP1 00000a1a: CALLDATALOAD 00000a1b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a30: AND 00000a31: SWAP1 00000a32: PUSH1 0x20 00000a34: ADD 00000a35: SWAP1 00000a36: SWAP2 00000a37: SWAP1 00000a38: DUP1 00000a39: CALLDATALOAD 00000a3a: PUSH1 0xff 00000a3c: AND 00000a3d: SWAP1 00000a3e: PUSH1 0x20 00000a40: ADD 00000a41: SWAP1 00000a42: SWAP2 00000a43: SWAP1 00000a44: DUP1 00000a45: CALLDATALOAD 00000a46: PUSH1 0x00 00000a48: NOT 00000a49: AND 00000a4a: SWAP1 00000a4b: PUSH1 0x20 00000a4d: ADD 00000a4e: SWAP1 00000a4f: SWAP2 00000a50: SWAP1 00000a51: DUP1 00000a52: CALLDATALOAD 00000a53: PUSH1 0x00 00000a55: NOT 00000a56: AND 00000a57: SWAP1 00000a58: PUSH1 0x20 00000a5a: ADD 00000a5b: SWAP1 00000a5c: SWAP2 00000a5d: SWAP1 00000a5e: POP 00000a5f: POP 00000a60: PUSH2 0x28b0 00000a63: JUMP 00000a64: JUMPDEST 00000a65: PUSH1 0x40 00000a67: MLOAD 00000a68: DUP1 00000a69: DUP3 00000a6a: DUP2 00000a6b: MSTORE 00000a6c: PUSH1 0x20 00000a6e: ADD 00000a6f: SWAP2 00000a70: POP 00000a71: POP 00000a72: PUSH1 0x40 00000a74: MLOAD 00000a75: DUP1 00000a76: SWAP2 00000a77: SUB 00000a78: SWAP1 00000a79: RETURN 00000a7a: JUMPDEST 00000a7b: PUSH1 0x00 00000a7d: PUSH1 0x02 00000a7f: ADDRESS 00000a80: DUP14 00000a81: DUP14 00000a82: DUP14 00000a83: DUP14 00000a84: DUP14 00000a85: DUP14 00000a86: PUSH1 0x00 00000a88: PUSH1 0x40 00000a8a: MLOAD 00000a8b: PUSH1 0x20 00000a8d: ADD 00000a8e: MSTORE 00000a8f: PUSH1 0x40 00000a91: MLOAD 00000a92: DUP1 00000a93: DUP9 00000a94: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000aa9: AND 00000aaa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000abf: AND 00000ac0: PUSH13 0x01000000000000000000000000 00000ace: MUL 00000acf: DUP2 00000ad0: MSTORE 00000ad1: PUSH1 0x14 00000ad3: ADD 00000ad4: DUP8 00000ad5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000aea: AND 00000aeb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b00: AND 00000b01: PUSH13 0x01000000000000000000000000 00000b0f: MUL 00000b10: DUP2 00000b11: MSTORE 00000b12: PUSH1 0x14 00000b14: ADD 00000b15: DUP7 00000b16: DUP2 00000b17: MSTORE 00000b18: PUSH1 0x20 00000b1a: ADD 00000b1b: DUP6 00000b1c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b31: AND 00000b32: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b47: AND 00000b48: PUSH13 0x01000000000000000000000000 00000b56: MUL 00000b57: DUP2 00000b58: MSTORE 00000b59: PUSH1 0x14 00000b5b: ADD 00000b5c: DUP5 00000b5d: DUP2 00000b5e: MSTORE 00000b5f: PUSH1 0x20 00000b61: ADD 00000b62: DUP4 00000b63: DUP2 00000b64: MSTORE 00000b65: PUSH1 0x20 00000b67: ADD 00000b68: DUP3 00000b69: DUP2 00000b6a: MSTORE 00000b6b: PUSH1 0x20 00000b6d: ADD 00000b6e: SWAP8 00000b6f: POP 00000b70: POP 00000b71: POP 00000b72: POP 00000b73: POP 00000b74: POP 00000b75: POP 00000b76: POP 00000b77: PUSH1 0x20 00000b79: PUSH1 0x40 00000b7b: MLOAD 00000b7c: DUP1 00000b7d: DUP4 00000b7e: SUB 00000b7f: DUP2 00000b80: PUSH1 0x00 00000b82: DUP7 00000b83: PUSH2 0x61da 00000b86: GAS 00000b87: SUB 00000b88: CALL 00000b89: ISZERO 00000b8a: ISZERO 00000b8b: PUSH2 0x0b90 00000b8e: JUMPI 00000b8f: INVALID 00000b90: JUMPDEST 00000b91: POP 00000b92: POP 00000b93: PUSH1 0x40 00000b95: MLOAD 00000b96: DUP1 00000b97: MLOAD 00000b98: SWAP1 00000b99: POP 00000b9a: SWAP1 00000b9b: POP 00000b9c: PUSH1 0x06 00000b9e: PUSH1 0x00 00000ba0: DUP8 00000ba1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000bb6: AND 00000bb7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000bcc: AND 00000bcd: DUP2 00000bce: MSTORE 00000bcf: PUSH1 0x20 00000bd1: ADD 00000bd2: SWAP1 00000bd3: DUP2 00000bd4: MSTORE 00000bd5: PUSH1 0x20 00000bd7: ADD 00000bd8: PUSH1 0x00 00000bda: KECCAK256 00000bdb: PUSH1 0x00 00000bdd: DUP3 00000bde: PUSH1 0x00 00000be0: NOT 00000be1: AND 00000be2: PUSH1 0x00 00000be4: NOT 00000be5: AND 00000be6: DUP2 00000be7: MSTORE 00000be8: PUSH1 0x20 00000bea: ADD 00000beb: SWAP1 00000bec: DUP2 00000bed: MSTORE 00000bee: PUSH1 0x20 00000bf0: ADD 00000bf1: PUSH1 0x00 00000bf3: KECCAK256 00000bf4: PUSH1 0x00 00000bf6: SWAP1 00000bf7: SLOAD 00000bf8: SWAP1 00000bf9: PUSH2 0x0100 00000bfc: EXP 00000bfd: SWAP1 00000bfe: DIV 00000bff: PUSH1 0xff 00000c01: AND 00000c02: DUP1 00000c03: PUSH2 0x0cff 00000c06: JUMPI 00000c07: POP 00000c08: DUP6 00000c09: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c1e: AND 00000c1f: PUSH1 0x01 00000c21: DUP3 00000c22: PUSH1 0x40 00000c24: MLOAD 00000c25: DUP1 00000c26: DUP1 00000c27: PUSH32 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000 00000c48: DUP2 00000c49: MSTORE 00000c4a: POP 00000c4b: PUSH1 0x1c 00000c4d: ADD 00000c4e: DUP3 00000c4f: PUSH1 0x00 00000c51: NOT 00000c52: AND 00000c53: PUSH1 0x00 00000c55: NOT 00000c56: AND 00000c57: DUP2 00000c58: MSTORE 00000c59: PUSH1 0x20 00000c5b: ADD 00000c5c: SWAP2 00000c5d: POP 00000c5e: POP 00000c5f: PUSH1 0x40 00000c61: MLOAD 00000c62: DUP1 00000c63: SWAP2 00000c64: SUB 00000c65: SWAP1 00000c66: KECCAK256 00000c67: DUP8 00000c68: DUP8 00000c69: DUP8 00000c6a: PUSH1 0x40 00000c6c: MLOAD 00000c6d: DUP1 00000c6e: PUSH1 0x00 00000c70: MSTORE 00000c71: PUSH1 0x20 00000c73: ADD 00000c74: PUSH1 0x40 00000c76: MSTORE 00000c77: PUSH1 0x00 00000c79: PUSH1 0x40 00000c7b: MLOAD 00000c7c: PUSH1 0x20 00000c7e: ADD 00000c7f: MSTORE 00000c80: PUSH1 0x40 00000c82: MLOAD 00000c83: DUP1 00000c84: DUP6 00000c85: PUSH1 0x00 00000c87: NOT 00000c88: AND 00000c89: PUSH1 0x00 00000c8b: NOT 00000c8c: AND 00000c8d: DUP2 00000c8e: MSTORE 00000c8f: PUSH1 0x20 00000c91: ADD 00000c92: DUP5 00000c93: PUSH1 0xff 00000c95: AND 00000c96: PUSH1 0xff 00000c98: AND 00000c99: DUP2 00000c9a: MSTORE 00000c9b: PUSH1 0x20 00000c9d: ADD 00000c9e: DUP4 00000c9f: PUSH1 0x00 00000ca1: NOT 00000ca2: AND 00000ca3: PUSH1 0x00 00000ca5: NOT 00000ca6: AND 00000ca7: DUP2 00000ca8: MSTORE 00000ca9: PUSH1 0x20 00000cab: ADD 00000cac: DUP3 00000cad: PUSH1 0x00 00000caf: NOT 00000cb0: AND 00000cb1: PUSH1 0x00 00000cb3: NOT 00000cb4: AND 00000cb5: DUP2 00000cb6: MSTORE 00000cb7: PUSH1 0x20 00000cb9: ADD 00000cba: SWAP5 00000cbb: POP 00000cbc: POP 00000cbd: POP 00000cbe: POP 00000cbf: POP 00000cc0: PUSH1 0x20 00000cc2: PUSH1 0x40 00000cc4: MLOAD 00000cc5: PUSH1 0x20 00000cc7: DUP2 00000cc8: SUB 00000cc9: SWAP1 00000cca: DUP1 00000ccb: DUP5 00000ccc: SUB 00000ccd: SWAP1 00000cce: PUSH1 0x00 00000cd0: DUP7 00000cd1: PUSH2 0x61da 00000cd4: GAS 00000cd5: SUB 00000cd6: CALL 00000cd7: ISZERO 00000cd8: ISZERO 00000cd9: PUSH2 0x0cde 00000cdc: JUMPI 00000cdd: INVALID 00000cde: JUMPDEST 00000cdf: POP 00000ce0: POP 00000ce1: PUSH1 0x20 00000ce3: PUSH1 0x40 00000ce5: MLOAD 00000ce6: SUB 00000ce7: MLOAD 00000ce8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000cfd: AND 00000cfe: EQ 00000cff: JUMPDEST 00000d00: DUP1 00000d01: ISZERO 00000d02: PUSH2 0x0d0b 00000d05: JUMPI 00000d06: POP 00000d07: DUP8 00000d08: NUMBER 00000d09: GT 00000d0a: ISZERO 00000d0b: JUMPDEST 00000d0c: DUP1 00000d0d: ISZERO 00000d0e: PUSH2 0x0d78 00000d11: JUMPI 00000d12: POP 00000d13: DUP11 00000d14: PUSH2 0x0d75 00000d17: PUSH1 0x07 00000d19: PUSH1 0x00 00000d1b: DUP10 00000d1c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d31: AND 00000d32: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d47: AND 00000d48: DUP2 00000d49: MSTORE 00000d4a: PUSH1 0x20 00000d4c: ADD 00000d4d: SWAP1 00000d4e: DUP2 00000d4f: MSTORE 00000d50: PUSH1 0x20 00000d52: ADD 00000d53: PUSH1 0x00 00000d55: KECCAK256 00000d56: PUSH1 0x00 00000d58: DUP5 00000d59: PUSH1 0x00 00000d5b: NOT 00000d5c: AND 00000d5d: PUSH1 0x00 00000d5f: NOT 00000d60: AND 00000d61: DUP2 00000d62: MSTORE 00000d63: PUSH1 0x20 00000d65: ADD 00000d66: SWAP1 00000d67: DUP2 00000d68: MSTORE 00000d69: PUSH1 0x20 00000d6b: ADD 00000d6c: PUSH1 0x00 00000d6e: KECCAK256 00000d6f: SLOAD 00000d70: DUP5 00000d71: PUSH2 0x2c72 00000d74: JUMP 00000d75: JUMPDEST 00000d76: GT 00000d77: ISZERO 00000d78: JUMPDEST 00000d79: ISZERO 00000d7a: ISZERO 00000d7b: PUSH2 0x0d83 00000d7e: JUMPI 00000d7f: PUSH2 0x0000 00000d82: JUMP 00000d83: JUMPDEST 00000d84: PUSH2 0x0d91 00000d87: DUP13 00000d88: DUP13 00000d89: DUP13 00000d8a: DUP13 00000d8b: DUP11 00000d8c: DUP8 00000d8d: PUSH2 0x2c9e 00000d90: JUMP 00000d91: JUMPDEST 00000d92: PUSH2 0x0df3 00000d95: PUSH1 0x07 00000d97: PUSH1 0x00 00000d99: DUP9 00000d9a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000daf: AND 00000db0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000dc5: AND 00000dc6: DUP2 00000dc7: MSTORE 00000dc8: PUSH1 0x20 00000dca: ADD 00000dcb: SWAP1 00000dcc: DUP2 00000dcd: MSTORE 00000dce: PUSH1 0x20 00000dd0: ADD 00000dd1: PUSH1 0x00 00000dd3: KECCAK256 00000dd4: PUSH1 0x00 00000dd6: DUP4 00000dd7: PUSH1 0x00 00000dd9: NOT 00000dda: AND 00000ddb: PUSH1 0x00 00000ddd: NOT 00000dde: AND 00000ddf: DUP2 00000de0: MSTORE 00000de1: PUSH1 0x20 00000de3: ADD 00000de4: SWAP1 00000de5: DUP2 00000de6: MSTORE 00000de7: PUSH1 0x20 00000de9: ADD 00000dea: PUSH1 0x00 00000dec: KECCAK256 00000ded: SLOAD 00000dee: DUP4 00000def: PUSH2 0x2c72 00000df2: JUMP 00000df3: JUMPDEST 00000df4: PUSH1 0x07 00000df6: PUSH1 0x00 00000df8: DUP9 00000df9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e0e: AND 00000e0f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e24: AND 00000e25: DUP2 00000e26: MSTORE 00000e27: PUSH1 0x20 00000e29: ADD 00000e2a: SWAP1 00000e2b: DUP2 00000e2c: MSTORE 00000e2d: PUSH1 0x20 00000e2f: ADD 00000e30: PUSH1 0x00 00000e32: KECCAK256 00000e33: PUSH1 0x00 00000e35: DUP4 00000e36: PUSH1 0x00 00000e38: NOT 00000e39: AND 00000e3a: PUSH1 0x00 00000e3c: NOT 00000e3d: AND 00000e3e: DUP2 00000e3f: MSTORE 00000e40: PUSH1 0x20 00000e42: ADD 00000e43: SWAP1 00000e44: DUP2 00000e45: MSTORE 00000e46: PUSH1 0x20 00000e48: ADD 00000e49: PUSH1 0x00 00000e4b: KECCAK256 00000e4c: DUP2 00000e4d: SWAP1 00000e4e: SSTORE 00000e4f: POP 00000e50: PUSH32 0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d 00000e71: DUP13 00000e72: DUP4 00000e73: DUP13 00000e74: DUP15 00000e75: DUP7 00000e76: DUP15 00000e77: MUL 00000e78: DUP2 00000e79: ISZERO 00000e7a: ISZERO 00000e7b: PUSH2 0x0e80 00000e7e: JUMPI 00000e7f: INVALID 00000e80: JUMPDEST 00000e81: DIV 00000e82: DUP11 00000e83: CALLER 00000e84: PUSH1 0x40 00000e86: MLOAD 00000e87: DUP1 00000e88: DUP8 00000e89: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e9e: AND 00000e9f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000eb4: AND 00000eb5: DUP2 00000eb6: MSTORE 00000eb7: PUSH1 0x20 00000eb9: ADD 00000eba: DUP7 00000ebb: DUP2 00000ebc: MSTORE 00000ebd: PUSH1 0x20 00000ebf: ADD 00000ec0: DUP6 00000ec1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ed6: AND 00000ed7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000eec: AND 00000eed: DUP2 00000eee: MSTORE 00000eef: PUSH1 0x20 00000ef1: ADD 00000ef2: DUP5 00000ef3: DUP2 00000ef4: MSTORE 00000ef5: PUSH1 0x20 00000ef7: ADD 00000ef8: DUP4 00000ef9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f0e: AND 00000f0f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f24: AND 00000f25: DUP2 00000f26: MSTORE 00000f27: PUSH1 0x20 00000f29: ADD 00000f2a: DUP3 00000f2b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f40: AND 00000f41: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f56: AND 00000f57: DUP2 00000f58: MSTORE 00000f59: PUSH1 0x20 00000f5b: ADD 00000f5c: SWAP7 00000f5d: POP 00000f5e: POP 00000f5f: POP 00000f60: POP 00000f61: POP 00000f62: POP 00000f63: POP 00000f64: PUSH1 0x40 00000f66: MLOAD 00000f67: DUP1 00000f68: SWAP2 00000f69: SUB 00000f6a: SWAP1 00000f6b: LOG1 00000f6c: JUMPDEST 00000f6d: POP 00000f6e: POP 00000f6f: POP 00000f70: POP 00000f71: POP 00000f72: POP 00000f73: POP 00000f74: POP 00000f75: POP 00000f76: POP 00000f77: POP 00000f78: POP 00000f79: JUMP 00000f7a: JUMPDEST 00000f7b: PUSH1 0x00 00000f7d: PUSH1 0x02 00000f7f: ADDRESS 00000f80: DUP9 00000f81: DUP9 00000f82: DUP9 00000f83: DUP9 00000f84: DUP9 00000f85: DUP9 00000f86: PUSH1 0x00 00000f88: PUSH1 0x40 00000f8a: MLOAD 00000f8b: PUSH1 0x20 00000f8d: ADD 00000f8e: MSTORE 00000f8f: PUSH1 0x40 00000f91: MLOAD 00000f92: DUP1 00000f93: DUP9 00000f94: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000fa9: AND 00000faa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000fbf: AND 00000fc0: PUSH13 0x01000000000000000000000000 00000fce: MUL 00000fcf: DUP2 00000fd0: MSTORE 00000fd1: PUSH1 0x14 00000fd3: ADD 00000fd4: DUP8 00000fd5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000fea: AND 00000feb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001000: AND 00001001: PUSH13 0x01000000000000000000000000 0000100f: MUL 00001010: DUP2 00001011: MSTORE 00001012: PUSH1 0x14 00001014: ADD 00001015: DUP7 00001016: DUP2 00001017: MSTORE 00001018: PUSH1 0x20 0000101a: ADD 0000101b: DUP6 0000101c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001031: AND 00001032: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001047: AND 00001048: PUSH13 0x01000000000000000000000000 00001056: MUL 00001057: DUP2 00001058: MSTORE 00001059: PUSH1 0x14 0000105b: ADD 0000105c: DUP5 0000105d: DUP2 0000105e: MSTORE 0000105f: PUSH1 0x20 00001061: ADD 00001062: DUP4 00001063: DUP2 00001064: MSTORE 00001065: PUSH1 0x20 00001067: ADD 00001068: DUP3 00001069: DUP2 0000106a: MSTORE 0000106b: PUSH1 0x20 0000106d: ADD 0000106e: SWAP8 0000106f: POP 00001070: POP 00001071: POP 00001072: POP 00001073: POP 00001074: POP 00001075: POP 00001076: POP 00001077: PUSH1 0x20 00001079: PUSH1 0x40 0000107b: MLOAD 0000107c: DUP1 0000107d: DUP4 0000107e: SUB 0000107f: DUP2 00001080: PUSH1 0x00 00001082: DUP7 00001083: PUSH2 0x61da 00001086: GAS 00001087: SUB 00001088: CALL 00001089: ISZERO 0000108a: ISZERO 0000108b: PUSH2 0x1090 0000108e: JUMPI 0000108f: INVALID 00001090: JUMPDEST 00001091: POP 00001092: POP 00001093: PUSH1 0x40 00001095: MLOAD 00001096: DUP1 00001097: MLOAD 00001098: SWAP1 00001099: POP 0000109a: SWAP1 0000109b: POP 0000109c: PUSH1 0x01 0000109e: PUSH1 0x06 000010a0: PUSH1 0x00 000010a2: CALLER 000010a3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000010b8: AND 000010b9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000010ce: AND 000010cf: DUP2 000010d0: MSTORE 000010d1: PUSH1 0x20 000010d3: ADD 000010d4: SWAP1 000010d5: DUP2 000010d6: MSTORE 000010d7: PUSH1 0x20 000010d9: ADD 000010da: PUSH1 0x00 000010dc: KECCAK256 000010dd: PUSH1 0x00 000010df: DUP4 000010e0: PUSH1 0x00 000010e2: NOT 000010e3: AND 000010e4: PUSH1 0x00 000010e6: NOT 000010e7: AND 000010e8: DUP2 000010e9: MSTORE 000010ea: PUSH1 0x20 000010ec: ADD 000010ed: SWAP1 000010ee: DUP2 000010ef: MSTORE 000010f0: PUSH1 0x20 000010f2: ADD 000010f3: PUSH1 0x00 000010f5: KECCAK256 000010f6: PUSH1 0x00 000010f8: PUSH2 0x0100 000010fb: EXP 000010fc: DUP2 000010fd: SLOAD 000010fe: DUP2 000010ff: PUSH1 0xff 00001101: MUL 00001102: NOT 00001103: AND 00001104: SWAP1 00001105: DUP4 00001106: ISZERO 00001107: ISZERO 00001108: MUL 00001109: OR 0000110a: SWAP1 0000110b: SSTORE 0000110c: POP 0000110d: PUSH32 0x3f7f2eda73683c21a15f9435af1028c93185b5f1fa38270762dc32be606b3e85 0000112e: DUP8 0000112f: DUP8 00001130: DUP8 00001131: DUP8 00001132: DUP8 00001133: DUP8 00001134: CALLER 00001135: PUSH1 0x40 00001137: MLOAD 00001138: DUP1 00001139: DUP9 0000113a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000114f: AND 00001150: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001165: AND 00001166: DUP2 00001167: MSTORE 00001168: PUSH1 0x20 0000116a: ADD 0000116b: DUP8 0000116c: DUP2 0000116d: MSTORE 0000116e: PUSH1 0x20 00001170: ADD 00001171: DUP7 00001172: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001187: AND 00001188: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000119d: AND 0000119e: DUP2 0000119f: MSTORE 000011a0: PUSH1 0x20 000011a2: ADD 000011a3: DUP6 000011a4: DUP2 000011a5: MSTORE 000011a6: PUSH1 0x20 000011a8: ADD 000011a9: DUP5 000011aa: DUP2 000011ab: MSTORE 000011ac: PUSH1 0x20 000011ae: ADD 000011af: DUP4 000011b0: DUP2 000011b1: MSTORE 000011b2: PUSH1 0x20 000011b4: ADD 000011b5: DUP3 000011b6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000011cb: AND 000011cc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000011e1: AND 000011e2: DUP2 000011e3: MSTORE 000011e4: PUSH1 0x20 000011e6: ADD 000011e7: SWAP8 000011e8: POP 000011e9: POP 000011ea: POP 000011eb: POP 000011ec: POP 000011ed: POP 000011ee: POP 000011ef: POP 000011f0: PUSH1 0x40 000011f2: MLOAD 000011f3: DUP1 000011f4: SWAP2 000011f5: SUB 000011f6: SWAP1 000011f7: LOG1 000011f8: JUMPDEST 000011f9: POP 000011fa: POP 000011fb: POP 000011fc: POP 000011fd: POP 000011fe: POP 000011ff: POP 00001200: JUMP 00001201: JUMPDEST 00001202: PUSH1 0x08 00001204: PUSH1 0x20 00001206: MSTORE 00001207: DUP1 00001208: PUSH1 0x00 0000120a: MSTORE 0000120b: PUSH1 0x40 0000120d: PUSH1 0x00 0000120f: KECCAK256 00001210: PUSH1 0x00 00001212: SWAP2 00001213: POP 00001214: SLOAD 00001215: SWAP1 00001216: PUSH2 0x0100 00001219: EXP 0000121a: SWAP1 0000121b: DIV 0000121c: PUSH1 0xff 0000121e: AND 0000121f: DUP2 00001220: JUMP 00001221: JUMPDEST 00001222: PUSH1 0x07 00001224: PUSH1 0x20 00001226: MSTORE 00001227: DUP2 00001228: PUSH1 0x00 0000122a: MSTORE 0000122b: PUSH1 0x40 0000122d: PUSH1 0x00 0000122f: KECCAK256 00001230: PUSH1 0x20 00001232: MSTORE 00001233: DUP1 00001234: PUSH1 0x00 00001236: MSTORE 00001237: PUSH1 0x40 00001239: PUSH1 0x00 0000123b: KECCAK256 0000123c: PUSH1 0x00 0000123e: SWAP2 0000123f: POP 00001240: SWAP2 00001241: POP 00001242: POP 00001243: SLOAD 00001244: DUP2 00001245: JUMP 00001246: JUMPDEST 00001247: PUSH1 0x00 00001249: PUSH1 0x02 0000124b: ADDRESS 0000124c: DUP12 0000124d: DUP12 0000124e: DUP12 0000124f: DUP12 00001250: DUP12 00001251: DUP12 00001252: PUSH1 0x00 00001254: PUSH1 0x40 00001256: MLOAD 00001257: PUSH1 0x20 00001259: ADD 0000125a: MSTORE 0000125b: PUSH1 0x40 0000125d: MLOAD 0000125e: DUP1 0000125f: DUP9 00001260: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001275: AND 00001276: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000128b: AND 0000128c: PUSH13 0x01000000000000000000000000 0000129a: MUL 0000129b: DUP2 0000129c: MSTORE 0000129d: PUSH1 0x14 0000129f: ADD 000012a0: DUP8 000012a1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000012b6: AND 000012b7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000012cc: AND 000012cd: PUSH13 0x01000000000000000000000000 000012db: MUL 000012dc: DUP2 000012dd: MSTORE 000012de: PUSH1 0x14 000012e0: ADD 000012e1: DUP7 000012e2: DUP2 000012e3: MSTORE 000012e4: PUSH1 0x20 000012e6: ADD 000012e7: DUP6 000012e8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000012fd: AND 000012fe: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001313: AND 00001314: PUSH13 0x01000000000000000000000000 00001322: MUL 00001323: DUP2 00001324: MSTORE 00001325: PUSH1 0x14 00001327: ADD 00001328: DUP5 00001329: DUP2 0000132a: MSTORE 0000132b: PUSH1 0x20 0000132d: ADD 0000132e: DUP4 0000132f: DUP2 00001330: MSTORE 00001331: PUSH1 0x20 00001333: ADD 00001334: DUP3 00001335: DUP2 00001336: MSTORE 00001337: PUSH1 0x20 00001339: ADD 0000133a: SWAP8 0000133b: POP 0000133c: POP 0000133d: POP 0000133e: POP 0000133f: POP 00001340: POP 00001341: POP 00001342: POP 00001343: PUSH1 0x20 00001345: PUSH1 0x40 00001347: MLOAD 00001348: DUP1 00001349: DUP4 0000134a: SUB 0000134b: DUP2 0000134c: PUSH1 0x00 0000134e: DUP7 0000134f: PUSH2 0x61da 00001352: GAS 00001353: SUB 00001354: CALL 00001355: ISZERO 00001356: ISZERO 00001357: PUSH2 0x135c 0000135a: JUMPI 0000135b: INVALID 0000135c: JUMPDEST 0000135d: POP 0000135e: POP 0000135f: PUSH1 0x40 00001361: MLOAD 00001362: DUP1 00001363: MLOAD 00001364: SWAP1 00001365: POP 00001366: SWAP1 00001367: POP 00001368: PUSH1 0x06 0000136a: PUSH1 0x00 0000136c: CALLER 0000136d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001382: AND 00001383: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001398: AND 00001399: DUP2 0000139a: MSTORE 0000139b: PUSH1 0x20 0000139d: ADD 0000139e: SWAP1 0000139f: DUP2 000013a0: MSTORE 000013a1: PUSH1 0x20 000013a3: ADD 000013a4: PUSH1 0x00 000013a6: KECCAK256 000013a7: PUSH1 0x00 000013a9: DUP3 000013aa: PUSH1 0x00 000013ac: NOT 000013ad: AND 000013ae: PUSH1 0x00 000013b0: NOT 000013b1: AND 000013b2: DUP2 000013b3: MSTORE 000013b4: PUSH1 0x20 000013b6: ADD 000013b7: SWAP1 000013b8: DUP2 000013b9: MSTORE 000013ba: PUSH1 0x20 000013bc: ADD 000013bd: PUSH1 0x00 000013bf: KECCAK256 000013c0: PUSH1 0x00 000013c2: SWAP1 000013c3: SLOAD 000013c4: SWAP1 000013c5: PUSH2 0x0100 000013c8: EXP 000013c9: SWAP1 000013ca: DIV 000013cb: PUSH1 0xff 000013cd: AND 000013ce: DUP1 000013cf: PUSH2 0x14cb 000013d2: JUMPI 000013d3: POP 000013d4: CALLER 000013d5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013ea: AND 000013eb: PUSH1 0x01 000013ed: DUP3 000013ee: PUSH1 0x40 000013f0: MLOAD 000013f1: DUP1 000013f2: DUP1 000013f3: PUSH32 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000 00001414: DUP2 00001415: MSTORE 00001416: POP 00001417: PUSH1 0x1c 00001419: ADD 0000141a: DUP3 0000141b: PUSH1 0x00 0000141d: NOT 0000141e: AND 0000141f: PUSH1 0x00 00001421: NOT 00001422: AND 00001423: DUP2 00001424: MSTORE 00001425: PUSH1 0x20 00001427: ADD 00001428: SWAP2 00001429: POP 0000142a: POP 0000142b: PUSH1 0x40 0000142d: MLOAD 0000142e: DUP1 0000142f: SWAP2 00001430: SUB 00001431: SWAP1 00001432: KECCAK256 00001433: DUP7 00001434: DUP7 00001435: DUP7 00001436: PUSH1 0x40 00001438: MLOAD 00001439: DUP1 0000143a: PUSH1 0x00 0000143c: MSTORE 0000143d: PUSH1 0x20 0000143f: ADD 00001440: PUSH1 0x40 00001442: MSTORE 00001443: PUSH1 0x00 00001445: PUSH1 0x40 00001447: MLOAD 00001448: PUSH1 0x20 0000144a: ADD 0000144b: MSTORE 0000144c: PUSH1 0x40 0000144e: MLOAD 0000144f: DUP1 00001450: DUP6 00001451: PUSH1 0x00 00001453: NOT 00001454: AND 00001455: PUSH1 0x00 00001457: NOT 00001458: AND 00001459: DUP2 0000145a: MSTORE 0000145b: PUSH1 0x20 0000145d: ADD 0000145e: DUP5 0000145f: PUSH1 0xff 00001461: AND 00001462: PUSH1 0xff 00001464: AND 00001465: DUP2 00001466: MSTORE 00001467: PUSH1 0x20 00001469: ADD 0000146a: DUP4 0000146b: PUSH1 0x00 0000146d: NOT 0000146e: AND 0000146f: PUSH1 0x00 00001471: NOT 00001472: AND 00001473: DUP2 00001474: MSTORE 00001475: PUSH1 0x20 00001477: ADD 00001478: DUP3 00001479: PUSH1 0x00 0000147b: NOT 0000147c: AND 0000147d: PUSH1 0x00 0000147f: NOT 00001480: AND 00001481: DUP2 00001482: MSTORE 00001483: PUSH1 0x20 00001485: ADD 00001486: SWAP5 00001487: POP 00001488: POP 00001489: POP 0000148a: POP 0000148b: POP 0000148c: PUSH1 0x20 0000148e: PUSH1 0x40 00001490: MLOAD 00001491: PUSH1 0x20 00001493: DUP2 00001494: SUB 00001495: SWAP1 00001496: DUP1 00001497: DUP5 00001498: SUB 00001499: SWAP1 0000149a: PUSH1 0x00 0000149c: DUP7 0000149d: PUSH2 0x61da 000014a0: GAS 000014a1: SUB 000014a2: CALL 000014a3: ISZERO 000014a4: ISZERO 000014a5: PUSH2 0x14aa 000014a8: JUMPI 000014a9: INVALID 000014aa: JUMPDEST 000014ab: POP 000014ac: POP 000014ad: PUSH1 0x20 000014af: PUSH1 0x40 000014b1: MLOAD 000014b2: SUB 000014b3: MLOAD 000014b4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000014c9: AND 000014ca: EQ 000014cb: JUMPDEST 000014cc: ISZERO 000014cd: ISZERO 000014ce: PUSH2 0x14d6 000014d1: JUMPI 000014d2: PUSH2 0x0000 000014d5: JUMP 000014d6: JUMPDEST 000014d7: DUP9 000014d8: PUSH1 0x07 000014da: PUSH1 0x00 000014dc: CALLER 000014dd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000014f2: AND 000014f3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001508: AND 00001509: DUP2 0000150a: MSTORE 0000150b: PUSH1 0x20 0000150d: ADD 0000150e: SWAP1 0000150f: DUP2 00001510: MSTORE 00001511: PUSH1 0x20 00001513: ADD 00001514: PUSH1 0x00 00001516: KECCAK256 00001517: PUSH1 0x00 00001519: DUP4 0000151a: PUSH1 0x00 0000151c: NOT 0000151d: AND 0000151e: PUSH1 0x00 00001520: NOT 00001521: AND 00001522: DUP2 00001523: MSTORE 00001524: PUSH1 0x20 00001526: ADD 00001527: SWAP1 00001528: DUP2 00001529: MSTORE 0000152a: PUSH1 0x20 0000152c: ADD 0000152d: PUSH1 0x00 0000152f: KECCAK256 00001530: DUP2 00001531: SWAP1 00001532: SSTORE 00001533: POP 00001534: PUSH32 0x1e0b760c386003e9cb9bcf4fcf3997886042859d9b6ed6320e804597fcdb28b0 00001555: DUP11 00001556: DUP11 00001557: DUP11 00001558: DUP11 00001559: DUP11 0000155a: DUP11 0000155b: CALLER 0000155c: DUP12 0000155d: DUP12 0000155e: DUP12 0000155f: PUSH1 0x40 00001561: MLOAD 00001562: DUP1 00001563: DUP12 00001564: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001579: AND 0000157a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000158f: AND 00001590: DUP2 00001591: MSTORE 00001592: PUSH1 0x20 00001594: ADD 00001595: DUP11 00001596: DUP2 00001597: MSTORE 00001598: PUSH1 0x20 0000159a: ADD 0000159b: DUP10 0000159c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000015b1: AND 000015b2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000015c7: AND 000015c8: DUP2 000015c9: MSTORE 000015ca: PUSH1 0x20 000015cc: ADD 000015cd: DUP9 000015ce: DUP2 000015cf: MSTORE 000015d0: PUSH1 0x20 000015d2: ADD 000015d3: DUP8 000015d4: DUP2 000015d5: MSTORE 000015d6: PUSH1 0x20 000015d8: ADD 000015d9: DUP7 000015da: DUP2 000015db: MSTORE 000015dc: PUSH1 0x20 000015de: ADD 000015df: DUP6 000015e0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000015f5: AND 000015f6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000160b: AND 0000160c: DUP2 0000160d: MSTORE 0000160e: PUSH1 0x20 00001610: ADD 00001611: DUP5 00001612: PUSH1 0xff 00001614: AND 00001615: PUSH1 0xff 00001617: AND 00001618: DUP2 00001619: MSTORE 0000161a: PUSH1 0x20 0000161c: ADD 0000161d: DUP4 0000161e: PUSH1 0x00 00001620: NOT 00001621: AND 00001622: PUSH1 0x00 00001624: NOT 00001625: AND 00001626: DUP2 00001627: MSTORE 00001628: PUSH1 0x20 0000162a: ADD 0000162b: DUP3 0000162c: PUSH1 0x00 0000162e: NOT 0000162f: AND 00001630: PUSH1 0x00 00001632: NOT 00001633: AND 00001634: DUP2 00001635: MSTORE 00001636: PUSH1 0x20 00001638: ADD 00001639: SWAP11 0000163a: POP 0000163b: POP 0000163c: POP 0000163d: POP 0000163e: POP 0000163f: POP 00001640: POP 00001641: POP 00001642: POP 00001643: POP 00001644: POP 00001645: PUSH1 0x40 00001647: MLOAD 00001648: DUP1 00001649: SWAP2 0000164a: SUB 0000164b: SWAP1 0000164c: LOG1 0000164d: JUMPDEST 0000164e: POP 0000164f: POP 00001650: POP 00001651: POP 00001652: POP 00001653: POP 00001654: POP 00001655: POP 00001656: POP 00001657: POP 00001658: JUMP 00001659: JUMPDEST 0000165a: DUP1 0000165b: PUSH1 0x05 0000165d: PUSH1 0x00 0000165f: PUSH1 0x00 00001661: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001676: AND 00001677: DUP2 00001678: MSTORE 00001679: PUSH1 0x20 0000167b: ADD 0000167c: SWAP1 0000167d: DUP2 0000167e: MSTORE 0000167f: PUSH1 0x20 00001681: ADD 00001682: PUSH1 0x00 00001684: KECCAK256 00001685: PUSH1 0x00 00001687: CALLER 00001688: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000169d: AND 0000169e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000016b3: AND 000016b4: DUP2 000016b5: MSTORE 000016b6: PUSH1 0x20 000016b8: ADD 000016b9: SWAP1 000016ba: DUP2 000016bb: MSTORE 000016bc: PUSH1 0x20 000016be: ADD 000016bf: PUSH1 0x00 000016c1: KECCAK256 000016c2: SLOAD 000016c3: LT 000016c4: ISZERO 000016c5: PUSH2 0x16cd 000016c8: JUMPI 000016c9: PUSH2 0x0000 000016cc: JUMP 000016cd: JUMPDEST 000016ce: PUSH2 0x173e 000016d1: PUSH1 0x05 000016d3: PUSH1 0x00 000016d5: PUSH1 0x00 000016d7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000016ec: AND 000016ed: DUP2 000016ee: MSTORE 000016ef: PUSH1 0x20 000016f1: ADD 000016f2: SWAP1 000016f3: DUP2 000016f4: MSTORE 000016f5: PUSH1 0x20 000016f7: ADD 000016f8: PUSH1 0x00 000016fa: KECCAK256 000016fb: PUSH1 0x00 000016fd: CALLER 000016fe: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001713: AND 00001714: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001729: AND 0000172a: DUP2 0000172b: MSTORE 0000172c: PUSH1 0x20 0000172e: ADD 0000172f: SWAP1 00001730: DUP2 00001731: MSTORE 00001732: PUSH1 0x20 00001734: ADD 00001735: PUSH1 0x00 00001737: KECCAK256 00001738: SLOAD 00001739: DUP3 0000173a: PUSH2 0x330b 0000173d: JUMP 0000173e: JUMPDEST 0000173f: PUSH1 0x05 00001741: PUSH1 0x00 00001743: PUSH1 0x00 00001745: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000175a: AND 0000175b: DUP2 0000175c: MSTORE 0000175d: PUSH1 0x20 0000175f: ADD 00001760: SWAP1 00001761: DUP2 00001762: MSTORE 00001763: PUSH1 0x20 00001765: ADD 00001766: PUSH1 0x00 00001768: KECCAK256 00001769: PUSH1 0x00 0000176b: CALLER 0000176c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001781: AND 00001782: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001797: AND 00001798: DUP2 00001799: MSTORE 0000179a: PUSH1 0x20 0000179c: ADD 0000179d: SWAP1 0000179e: DUP2 0000179f: MSTORE 000017a0: PUSH1 0x20 000017a2: ADD 000017a3: PUSH1 0x00 000017a5: KECCAK256 000017a6: DUP2 000017a7: SWAP1 000017a8: SSTORE 000017a9: POP 000017aa: CALLER 000017ab: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000017c0: AND 000017c1: DUP2 000017c2: PUSH1 0x40 000017c4: MLOAD 000017c5: DUP1 000017c6: SWAP1 000017c7: POP 000017c8: PUSH1 0x00 000017ca: PUSH1 0x40 000017cc: MLOAD 000017cd: DUP1 000017ce: DUP4 000017cf: SUB 000017d0: DUP2 000017d1: DUP6 000017d2: DUP8 000017d3: PUSH2 0x8502 000017d6: GAS 000017d7: SUB 000017d8: CALL 000017d9: SWAP3 000017da: POP 000017db: POP 000017dc: POP 000017dd: ISZERO 000017de: ISZERO 000017df: PUSH2 0x17e7 000017e2: JUMPI 000017e3: PUSH2 0x0000 000017e6: JUMP 000017e7: JUMPDEST 000017e8: PUSH32 0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567 00001809: PUSH1 0x00 0000180b: CALLER 0000180c: DUP4 0000180d: PUSH1 0x05 0000180f: PUSH1 0x00 00001811: PUSH1 0x00 00001813: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001828: AND 00001829: DUP2 0000182a: MSTORE 0000182b: PUSH1 0x20 0000182d: ADD 0000182e: SWAP1 0000182f: DUP2 00001830: MSTORE 00001831: PUSH1 0x20 00001833: ADD 00001834: PUSH1 0x00 00001836: KECCAK256 00001837: PUSH1 0x00 00001839: CALLER 0000183a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000184f: AND 00001850: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001865: AND 00001866: DUP2 00001867: MSTORE 00001868: PUSH1 0x20 0000186a: ADD 0000186b: SWAP1 0000186c: DUP2 0000186d: MSTORE 0000186e: PUSH1 0x20 00001870: ADD 00001871: PUSH1 0x00 00001873: KECCAK256 00001874: SLOAD 00001875: PUSH1 0x40 00001877: MLOAD 00001878: DUP1 00001879: DUP6 0000187a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000188f: AND 00001890: DUP2 00001891: MSTORE 00001892: PUSH1 0x20 00001894: ADD 00001895: DUP5 00001896: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000018ab: AND 000018ac: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000018c1: AND 000018c2: DUP2 000018c3: MSTORE 000018c4: PUSH1 0x20 000018c6: ADD 000018c7: DUP4 000018c8: DUP2 000018c9: MSTORE 000018ca: PUSH1 0x20 000018cc: ADD 000018cd: DUP3 000018ce: DUP2 000018cf: MSTORE 000018d0: PUSH1 0x20 000018d2: ADD 000018d3: SWAP5 000018d4: POP 000018d5: POP 000018d6: POP 000018d7: POP 000018d8: POP 000018d9: PUSH1 0x40 000018db: MLOAD 000018dc: DUP1 000018dd: SWAP2 000018de: SUB 000018df: SWAP1 000018e0: LOG1 000018e1: JUMPDEST 000018e2: POP 000018e3: JUMP 000018e4: JUMPDEST 000018e5: PUSH1 0x00 000018e7: DUP3 000018e8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000018fd: AND 000018fe: EQ 000018ff: ISZERO 00001900: PUSH2 0x1908 00001903: JUMPI 00001904: PUSH2 0x0000 00001907: JUMP 00001908: JUMPDEST 00001909: DUP2 0000190a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000191f: AND 00001920: PUSH4 0x23b872dd 00001925: CALLER 00001926: ADDRESS 00001927: DUP5 00001928: PUSH1 0x00 0000192a: PUSH1 0x40 0000192c: MLOAD 0000192d: PUSH1 0x20 0000192f: ADD 00001930: MSTORE 00001931: PUSH1 0x40 00001933: MLOAD 00001934: DUP5 00001935: PUSH4 0xffffffff 0000193a: AND 0000193b: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 00001959: MUL 0000195a: DUP2 0000195b: MSTORE 0000195c: PUSH1 0x04 0000195e: ADD 0000195f: DUP1 00001960: DUP5 00001961: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001976: AND 00001977: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000198c: AND 0000198d: DUP2 0000198e: MSTORE 0000198f: PUSH1 0x20 00001991: ADD 00001992: DUP4 00001993: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000019a8: AND 000019a9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000019be: AND 000019bf: DUP2 000019c0: MSTORE 000019c1: PUSH1 0x20 000019c3: ADD 000019c4: DUP3 000019c5: DUP2 000019c6: MSTORE 000019c7: PUSH1 0x20 000019c9: ADD 000019ca: SWAP4 000019cb: POP 000019cc: POP 000019cd: POP 000019ce: POP 000019cf: PUSH1 0x20 000019d1: PUSH1 0x40 000019d3: MLOAD 000019d4: DUP1 000019d5: DUP4 000019d6: SUB 000019d7: DUP2 000019d8: PUSH1 0x00 000019da: DUP8 000019db: DUP1 000019dc: EXTCODESIZE 000019dd: ISZERO 000019de: ISZERO 000019df: PUSH2 0x19e4 000019e2: JUMPI 000019e3: INVALID 000019e4: JUMPDEST 000019e5: PUSH1 0x32 000019e7: GAS 000019e8: SUB 000019e9: CALL 000019ea: ISZERO 000019eb: ISZERO 000019ec: PUSH2 0x19f1 000019ef: JUMPI 000019f0: INVALID 000019f1: JUMPDEST 000019f2: POP 000019f3: POP 000019f4: POP 000019f5: PUSH1 0x40 000019f7: MLOAD 000019f8: DUP1 000019f9: MLOAD 000019fa: SWAP1 000019fb: POP 000019fc: ISZERO 000019fd: ISZERO 000019fe: PUSH2 0x1a06 00001a01: JUMPI 00001a02: PUSH2 0x0000 00001a05: JUMP 00001a06: JUMPDEST 00001a07: PUSH2 0x1a8c 00001a0a: PUSH1 0x05 00001a0c: PUSH1 0x00 00001a0e: DUP5 00001a0f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001a24: AND 00001a25: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001a3a: AND 00001a3b: DUP2 00001a3c: MSTORE 00001a3d: PUSH1 0x20 00001a3f: ADD 00001a40: SWAP1 00001a41: DUP2 00001a42: MSTORE 00001a43: PUSH1 0x20 00001a45: ADD 00001a46: PUSH1 0x00 00001a48: KECCAK256 00001a49: PUSH1 0x00 00001a4b: CALLER 00001a4c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001a61: AND 00001a62: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001a77: AND 00001a78: DUP2 00001a79: MSTORE 00001a7a: PUSH1 0x20 00001a7c: ADD 00001a7d: SWAP1 00001a7e: DUP2 00001a7f: MSTORE 00001a80: PUSH1 0x20 00001a82: ADD 00001a83: PUSH1 0x00 00001a85: KECCAK256 00001a86: SLOAD 00001a87: DUP3 00001a88: PUSH2 0x2c72 00001a8b: JUMP 00001a8c: JUMPDEST 00001a8d: PUSH1 0x05 00001a8f: PUSH1 0x00 00001a91: DUP5 00001a92: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001aa7: AND 00001aa8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001abd: AND 00001abe: DUP2 00001abf: MSTORE 00001ac0: PUSH1 0x20 00001ac2: ADD 00001ac3: SWAP1 00001ac4: DUP2 00001ac5: MSTORE 00001ac6: PUSH1 0x20 00001ac8: ADD 00001ac9: PUSH1 0x00 00001acb: KECCAK256 00001acc: PUSH1 0x00 00001ace: CALLER 00001acf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001ae4: AND 00001ae5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001afa: AND 00001afb: DUP2 00001afc: MSTORE 00001afd: PUSH1 0x20 00001aff: ADD 00001b00: SWAP1 00001b01: DUP2 00001b02: MSTORE 00001b03: PUSH1 0x20 00001b05: ADD 00001b06: PUSH1 0x00 00001b08: KECCAK256 00001b09: DUP2 00001b0a: SWAP1 00001b0b: SSTORE 00001b0c: POP 00001b0d: PUSH32 0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7 00001b2e: DUP3 00001b2f: CALLER 00001b30: DUP4 00001b31: PUSH1 0x05 00001b33: PUSH1 0x00 00001b35: DUP8 00001b36: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b4b: AND 00001b4c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b61: AND 00001b62: DUP2 00001b63: MSTORE 00001b64: PUSH1 0x20 00001b66: ADD 00001b67: SWAP1 00001b68: DUP2 00001b69: MSTORE 00001b6a: PUSH1 0x20 00001b6c: ADD 00001b6d: PUSH1 0x00 00001b6f: KECCAK256 00001b70: PUSH1 0x00 00001b72: CALLER 00001b73: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b88: AND 00001b89: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b9e: AND 00001b9f: DUP2 00001ba0: MSTORE 00001ba1: PUSH1 0x20 00001ba3: ADD 00001ba4: SWAP1 00001ba5: DUP2 00001ba6: MSTORE 00001ba7: PUSH1 0x20 00001ba9: ADD 00001baa: PUSH1 0x00 00001bac: KECCAK256 00001bad: SLOAD 00001bae: PUSH1 0x40 00001bb0: MLOAD 00001bb1: DUP1 00001bb2: DUP6 00001bb3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001bc8: AND 00001bc9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001bde: AND 00001bdf: DUP2 00001be0: MSTORE 00001be1: PUSH1 0x20 00001be3: ADD 00001be4: DUP5 00001be5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001bfa: AND 00001bfb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001c10: AND 00001c11: DUP2 00001c12: MSTORE 00001c13: PUSH1 0x20 00001c15: ADD 00001c16: DUP4 00001c17: DUP2 00001c18: MSTORE 00001c19: PUSH1 0x20 00001c1b: ADD 00001c1c: DUP3 00001c1d: DUP2 00001c1e: MSTORE 00001c1f: PUSH1 0x20 00001c21: ADD 00001c22: SWAP5 00001c23: POP 00001c24: POP 00001c25: POP 00001c26: POP 00001c27: POP 00001c28: PUSH1 0x40 00001c2a: MLOAD 00001c2b: DUP1 00001c2c: SWAP2 00001c2d: SUB 00001c2e: SWAP1 00001c2f: LOG1 00001c30: JUMPDEST 00001c31: POP 00001c32: POP 00001c33: JUMP 00001c34: JUMPDEST 00001c35: PUSH1 0x00 00001c37: PUSH1 0x00 00001c39: PUSH1 0x02 00001c3b: ADDRESS 00001c3c: DUP14 00001c3d: DUP14 00001c3e: DUP14 00001c3f: DUP14 00001c40: DUP14 00001c41: DUP14 00001c42: PUSH1 0x00 00001c44: PUSH1 0x40 00001c46: MLOAD 00001c47: PUSH1 0x20 00001c49: ADD 00001c4a: MSTORE 00001c4b: PUSH1 0x40 00001c4d: MLOAD 00001c4e: DUP1 00001c4f: DUP9 00001c50: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001c65: AND 00001c66: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001c7b: AND 00001c7c: PUSH13 0x01000000000000000000000000 00001c8a: MUL 00001c8b: DUP2 00001c8c: MSTORE 00001c8d: PUSH1 0x14 00001c8f: ADD 00001c90: DUP8 00001c91: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001ca6: AND 00001ca7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001cbc: AND 00001cbd: PUSH13 0x01000000000000000000000000 00001ccb: MUL 00001ccc: DUP2 00001ccd: MSTORE 00001cce: PUSH1 0x14 00001cd0: ADD 00001cd1: DUP7 00001cd2: DUP2 00001cd3: MSTORE 00001cd4: PUSH1 0x20 00001cd6: ADD 00001cd7: DUP6 00001cd8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001ced: AND 00001cee: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001d03: AND 00001d04: PUSH13 0x01000000000000000000000000 00001d12: MUL 00001d13: DUP2 00001d14: MSTORE 00001d15: PUSH1 0x14 00001d17: ADD 00001d18: DUP5 00001d19: DUP2 00001d1a: MSTORE 00001d1b: PUSH1 0x20 00001d1d: ADD 00001d1e: DUP4 00001d1f: DUP2 00001d20: MSTORE 00001d21: PUSH1 0x20 00001d23: ADD 00001d24: DUP3 00001d25: DUP2 00001d26: MSTORE 00001d27: PUSH1 0x20 00001d29: ADD 00001d2a: SWAP8 00001d2b: POP 00001d2c: POP 00001d2d: POP 00001d2e: POP 00001d2f: POP 00001d30: POP 00001d31: POP 00001d32: POP 00001d33: PUSH1 0x20 00001d35: PUSH1 0x40 00001d37: MLOAD 00001d38: DUP1 00001d39: DUP4 00001d3a: SUB 00001d3b: DUP2 00001d3c: PUSH1 0x00 00001d3e: DUP7 00001d3f: PUSH2 0x61da 00001d42: GAS 00001d43: SUB 00001d44: CALL 00001d45: ISZERO 00001d46: ISZERO 00001d47: PUSH2 0x1d4c 00001d4a: JUMPI 00001d4b: INVALID 00001d4c: JUMPDEST 00001d4d: POP 00001d4e: POP 00001d4f: PUSH1 0x40 00001d51: MLOAD 00001d52: DUP1 00001d53: MLOAD 00001d54: SWAP1 00001d55: POP 00001d56: SWAP1 00001d57: POP 00001d58: PUSH1 0x07 00001d5a: PUSH1 0x00 00001d5c: DUP8 00001d5d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001d72: AND 00001d73: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001d88: AND 00001d89: DUP2 00001d8a: MSTORE 00001d8b: PUSH1 0x20 00001d8d: ADD 00001d8e: SWAP1 00001d8f: DUP2 00001d90: MSTORE 00001d91: PUSH1 0x20 00001d93: ADD 00001d94: PUSH1 0x00 00001d96: KECCAK256 00001d97: PUSH1 0x00 00001d99: DUP3 00001d9a: PUSH1 0x00 00001d9c: NOT 00001d9d: AND 00001d9e: PUSH1 0x00 00001da0: NOT 00001da1: AND 00001da2: DUP2 00001da3: MSTORE 00001da4: PUSH1 0x20 00001da6: ADD 00001da7: SWAP1 00001da8: DUP2 00001da9: MSTORE 00001daa: PUSH1 0x20 00001dac: ADD 00001dad: PUSH1 0x00 00001daf: KECCAK256 00001db0: SLOAD 00001db1: SWAP2 00001db2: POP 00001db3: JUMPDEST 00001db4: POP 00001db5: SWAP11 00001db6: SWAP10 00001db7: POP 00001db8: POP 00001db9: POP 00001dba: POP 00001dbb: POP 00001dbc: POP 00001dbd: POP 00001dbe: POP 00001dbf: POP 00001dc0: POP 00001dc1: JUMP 00001dc2: JUMPDEST 00001dc3: PUSH1 0x05 00001dc5: PUSH1 0x20 00001dc7: MSTORE 00001dc8: DUP2 00001dc9: PUSH1 0x00 00001dcb: MSTORE 00001dcc: PUSH1 0x40 00001dce: PUSH1 0x00 00001dd0: KECCAK256 00001dd1: PUSH1 0x20 00001dd3: MSTORE 00001dd4: DUP1 00001dd5: PUSH1 0x00 00001dd7: MSTORE 00001dd8: PUSH1 0x40 00001dda: PUSH1 0x00 00001ddc: KECCAK256 00001ddd: PUSH1 0x00 00001ddf: SWAP2 00001de0: POP 00001de1: SWAP2 00001de2: POP 00001de3: POP 00001de4: SLOAD 00001de5: DUP2 00001de6: JUMP 00001de7: JUMPDEST 00001de8: PUSH1 0x00 00001dea: PUSH1 0x00 00001dec: SWAP1 00001ded: SLOAD 00001dee: SWAP1 00001def: PUSH2 0x0100 00001df2: EXP 00001df3: SWAP1 00001df4: DIV 00001df5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001e0a: AND 00001e0b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001e20: AND 00001e21: CALLER 00001e22: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001e37: AND 00001e38: EQ 00001e39: ISZERO 00001e3a: ISZERO 00001e3b: PUSH2 0x1e43 00001e3e: JUMPI 00001e3f: PUSH2 0x0000 00001e42: JUMP 00001e43: JUMPDEST 00001e44: PUSH1 0x02 00001e46: SLOAD 00001e47: DUP2 00001e48: GT 00001e49: ISZERO 00001e4a: PUSH2 0x1e52 00001e4d: JUMPI 00001e4e: PUSH2 0x0000 00001e51: JUMP 00001e52: JUMPDEST 00001e53: DUP1 00001e54: PUSH1 0x02 00001e56: DUP2 00001e57: SWAP1 00001e58: SSTORE 00001e59: POP 00001e5a: JUMPDEST 00001e5b: POP 00001e5c: JUMP 00001e5d: JUMPDEST 00001e5e: PUSH1 0x02 00001e60: SLOAD 00001e61: DUP2 00001e62: JUMP 00001e63: JUMPDEST 00001e64: PUSH1 0x00 00001e66: PUSH1 0x00 00001e68: SWAP1 00001e69: SLOAD 00001e6a: SWAP1 00001e6b: PUSH2 0x0100 00001e6e: EXP 00001e6f: SWAP1 00001e70: DIV 00001e71: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001e86: AND 00001e87: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001e9c: AND 00001e9d: CALLER 00001e9e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001eb3: AND 00001eb4: EQ 00001eb5: ISZERO 00001eb6: ISZERO 00001eb7: PUSH2 0x1ebf 00001eba: JUMPI 00001ebb: PUSH2 0x0000 00001ebe: JUMP 00001ebf: JUMPDEST 00001ec0: PUSH1 0x04 00001ec2: SLOAD 00001ec3: DUP2 00001ec4: LT 00001ec5: DUP1 00001ec6: PUSH2 0x1ed0 00001ec9: JUMPI 00001eca: POP 00001ecb: PUSH1 0x03 00001ecd: SLOAD 00001ece: DUP2 00001ecf: GT 00001ed0: JUMPDEST 00001ed1: ISZERO 00001ed2: PUSH2 0x1eda 00001ed5: JUMPI 00001ed6: PUSH2 0x0000 00001ed9: JUMP 00001eda: JUMPDEST 00001edb: DUP1 00001edc: PUSH1 0x04 00001ede: DUP2 00001edf: SWAP1 00001ee0: SSTORE 00001ee1: POP 00001ee2: JUMPDEST 00001ee3: POP 00001ee4: JUMP 00001ee5: JUMPDEST 00001ee6: PUSH1 0x01 00001ee8: PUSH1 0x00 00001eea: SWAP1 00001eeb: SLOAD 00001eec: SWAP1 00001eed: PUSH2 0x0100 00001ef0: EXP 00001ef1: SWAP1 00001ef2: DIV 00001ef3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f08: AND 00001f09: DUP2 00001f0a: JUMP 00001f0b: JUMPDEST 00001f0c: PUSH1 0x00 00001f0e: DUP3 00001f0f: PUSH1 0x05 00001f11: PUSH1 0x00 00001f13: DUP16 00001f14: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f29: AND 00001f2a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f3f: AND 00001f40: DUP2 00001f41: MSTORE 00001f42: PUSH1 0x20 00001f44: ADD 00001f45: SWAP1 00001f46: DUP2 00001f47: MSTORE 00001f48: PUSH1 0x20 00001f4a: ADD 00001f4b: PUSH1 0x00 00001f4d: KECCAK256 00001f4e: PUSH1 0x00 00001f50: DUP5 00001f51: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f66: AND 00001f67: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f7c: AND 00001f7d: DUP2 00001f7e: MSTORE 00001f7f: PUSH1 0x20 00001f81: ADD 00001f82: SWAP1 00001f83: DUP2 00001f84: MSTORE 00001f85: PUSH1 0x20 00001f87: ADD 00001f88: PUSH1 0x00 00001f8a: KECCAK256 00001f8b: SLOAD 00001f8c: LT 00001f8d: ISZERO 00001f8e: DUP1 00001f8f: ISZERO 00001f90: PUSH2 0x1faa 00001f93: JUMPI 00001f94: POP 00001f95: DUP3 00001f96: PUSH2 0x1fa7 00001f99: DUP15 00001f9a: DUP15 00001f9b: DUP15 00001f9c: DUP15 00001f9d: DUP15 00001f9e: DUP15 00001f9f: DUP15 00001fa0: DUP15 00001fa1: DUP15 00001fa2: DUP15 00001fa3: PUSH2 0x28b0 00001fa6: JUMP 00001fa7: JUMPDEST 00001fa8: LT 00001fa9: ISZERO 00001faa: JUMPDEST 00001fab: ISZERO 00001fac: ISZERO 00001fad: PUSH2 0x1fb9 00001fb0: JUMPI 00001fb1: PUSH1 0x00 00001fb3: SWAP1 00001fb4: POP 00001fb5: PUSH2 0x1fbe 00001fb8: JUMP 00001fb9: JUMPDEST 00001fba: PUSH1 0x01 00001fbc: SWAP1 00001fbd: POP 00001fbe: JUMPDEST 00001fbf: SWAP13 00001fc0: SWAP12 00001fc1: POP 00001fc2: POP 00001fc3: POP 00001fc4: POP 00001fc5: POP 00001fc6: POP 00001fc7: POP 00001fc8: POP 00001fc9: POP 00001fca: POP 00001fcb: POP 00001fcc: POP 00001fcd: JUMP 00001fce: JUMPDEST 00001fcf: PUSH1 0x00 00001fd1: PUSH1 0x00 00001fd3: SWAP1 00001fd4: SLOAD 00001fd5: SWAP1 00001fd6: PUSH2 0x0100 00001fd9: EXP 00001fda: SWAP1 00001fdb: DIV 00001fdc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001ff1: AND 00001ff2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002007: AND 00002008: CALLER 00002009: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000201e: AND 0000201f: EQ 00002020: ISZERO 00002021: ISZERO 00002022: PUSH2 0x202a 00002025: JUMPI 00002026: PUSH2 0x0000 00002029: JUMP 0000202a: JUMPDEST 0000202b: DUP1 0000202c: PUSH1 0x01 0000202e: PUSH1 0x00 00002030: PUSH2 0x0100 00002033: EXP 00002034: DUP2 00002035: SLOAD 00002036: DUP2 00002037: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000204c: MUL 0000204d: NOT 0000204e: AND 0000204f: SWAP1 00002050: DUP4 00002051: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002066: AND 00002067: MUL 00002068: OR 00002069: SWAP1 0000206a: SSTORE 0000206b: POP 0000206c: JUMPDEST 0000206d: POP 0000206e: JUMP 0000206f: JUMPDEST 00002070: PUSH1 0x04 00002072: SLOAD 00002073: DUP2 00002074: JUMP 00002075: JUMPDEST 00002076: PUSH1 0x00 00002078: PUSH1 0x00 0000207a: SWAP1 0000207b: SLOAD 0000207c: SWAP1 0000207d: PUSH2 0x0100 00002080: EXP 00002081: SWAP1 00002082: DIV 00002083: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002098: AND 00002099: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000020ae: AND 000020af: CALLER 000020b0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000020c5: AND 000020c6: EQ 000020c7: ISZERO 000020c8: ISZERO 000020c9: PUSH2 0x20d1 000020cc: JUMPI 000020cd: PUSH2 0x0000 000020d0: JUMP 000020d1: JUMPDEST 000020d2: PUSH1 0x03 000020d4: SLOAD 000020d5: DUP2 000020d6: GT 000020d7: DUP1 000020d8: PUSH2 0x20e2 000020db: JUMPI 000020dc: POP 000020dd: PUSH1 0x04 000020df: SLOAD 000020e0: DUP2 000020e1: LT 000020e2: JUMPDEST 000020e3: ISZERO 000020e4: PUSH2 0x20ec 000020e7: JUMPI 000020e8: PUSH2 0x0000 000020eb: JUMP 000020ec: JUMPDEST 000020ed: DUP1 000020ee: PUSH1 0x03 000020f0: DUP2 000020f1: SWAP1 000020f2: SSTORE 000020f3: POP 000020f4: JUMPDEST 000020f5: POP 000020f6: JUMP 000020f7: JUMPDEST 000020f8: PUSH1 0x00 000020fa: PUSH1 0x00 000020fc: SWAP1 000020fd: SLOAD 000020fe: SWAP1 000020ff: PUSH2 0x0100 00002102: EXP 00002103: SWAP1 00002104: DIV 00002105: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000211a: AND 0000211b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002130: AND 00002131: CALLER 00002132: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002147: AND 00002148: EQ 00002149: ISZERO 0000214a: ISZERO 0000214b: PUSH2 0x2153 0000214e: JUMPI 0000214f: PUSH2 0x0000 00002152: JUMP 00002153: JUMPDEST 00002154: DUP1 00002155: PUSH1 0x00 00002157: PUSH1 0x00 00002159: PUSH2 0x0100 0000215c: EXP 0000215d: DUP2 0000215e: SLOAD 0000215f: DUP2 00002160: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002175: MUL 00002176: NOT 00002177: AND 00002178: SWAP1 00002179: DUP4 0000217a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000218f: AND 00002190: MUL 00002191: OR 00002192: SWAP1 00002193: SSTORE 00002194: POP 00002195: JUMPDEST 00002196: POP 00002197: JUMP 00002198: JUMPDEST 00002199: PUSH1 0x00 0000219b: DUP3 0000219c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000021b1: AND 000021b2: EQ 000021b3: ISZERO 000021b4: PUSH2 0x21bc 000021b7: JUMPI 000021b8: PUSH2 0x0000 000021bb: JUMP 000021bc: JUMPDEST 000021bd: DUP1 000021be: PUSH1 0x05 000021c0: PUSH1 0x00 000021c2: DUP5 000021c3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000021d8: AND 000021d9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000021ee: AND 000021ef: DUP2 000021f0: MSTORE 000021f1: PUSH1 0x20 000021f3: ADD 000021f4: SWAP1 000021f5: DUP2 000021f6: MSTORE 000021f7: PUSH1 0x20 000021f9: ADD 000021fa: PUSH1 0x00 000021fc: KECCAK256 000021fd: PUSH1 0x00 000021ff: CALLER 00002200: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002215: AND 00002216: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000222b: AND 0000222c: DUP2 0000222d: MSTORE 0000222e: PUSH1 0x20 00002230: ADD 00002231: SWAP1 00002232: DUP2 00002233: MSTORE 00002234: PUSH1 0x20 00002236: ADD 00002237: PUSH1 0x00 00002239: KECCAK256 0000223a: SLOAD 0000223b: LT 0000223c: ISZERO 0000223d: PUSH2 0x2245 00002240: JUMPI 00002241: PUSH2 0x0000 00002244: JUMP 00002245: JUMPDEST 00002246: PUSH2 0x22cb 00002249: PUSH1 0x05 0000224b: PUSH1 0x00 0000224d: DUP5 0000224e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002263: AND 00002264: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002279: AND 0000227a: DUP2 0000227b: MSTORE 0000227c: PUSH1 0x20 0000227e: ADD 0000227f: SWAP1 00002280: DUP2 00002281: MSTORE 00002282: PUSH1 0x20 00002284: ADD 00002285: PUSH1 0x00 00002287: KECCAK256 00002288: PUSH1 0x00 0000228a: CALLER 0000228b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000022a0: AND 000022a1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000022b6: AND 000022b7: DUP2 000022b8: MSTORE 000022b9: PUSH1 0x20 000022bb: ADD 000022bc: SWAP1 000022bd: DUP2 000022be: MSTORE 000022bf: PUSH1 0x20 000022c1: ADD 000022c2: PUSH1 0x00 000022c4: KECCAK256 000022c5: SLOAD 000022c6: DUP3 000022c7: PUSH2 0x330b 000022ca: JUMP 000022cb: JUMPDEST 000022cc: PUSH1 0x05 000022ce: PUSH1 0x00 000022d0: DUP5 000022d1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000022e6: AND 000022e7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000022fc: AND 000022fd: DUP2 000022fe: MSTORE 000022ff: PUSH1 0x20 00002301: ADD 00002302: SWAP1 00002303: DUP2 00002304: MSTORE 00002305: PUSH1 0x20 00002307: ADD 00002308: PUSH1 0x00 0000230a: KECCAK256 0000230b: PUSH1 0x00 0000230d: CALLER 0000230e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002323: AND 00002324: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002339: AND 0000233a: DUP2 0000233b: MSTORE 0000233c: PUSH1 0x20 0000233e: ADD 0000233f: SWAP1 00002340: DUP2 00002341: MSTORE 00002342: PUSH1 0x20 00002344: ADD 00002345: PUSH1 0x00 00002347: KECCAK256 00002348: DUP2 00002349: SWAP1 0000234a: SSTORE 0000234b: POP 0000234c: DUP2 0000234d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002362: AND 00002363: PUSH4 0xa9059cbb 00002368: CALLER 00002369: DUP4 0000236a: PUSH1 0x00 0000236c: PUSH1 0x40 0000236e: MLOAD 0000236f: PUSH1 0x20 00002371: ADD 00002372: MSTORE 00002373: PUSH1 0x40 00002375: MLOAD 00002376: DUP4 00002377: PUSH4 0xffffffff 0000237c: AND 0000237d: PUSH29 0x0100000000000000000000000000000000000000000000000000000000 0000239b: MUL 0000239c: DUP2 0000239d: MSTORE 0000239e: PUSH1 0x04 000023a0: ADD 000023a1: DUP1 000023a2: DUP4 000023a3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000023b8: AND 000023b9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000023ce: AND 000023cf: DUP2 000023d0: MSTORE 000023d1: PUSH1 0x20 000023d3: ADD 000023d4: DUP3 000023d5: DUP2 000023d6: MSTORE 000023d7: PUSH1 0x20 000023d9: ADD 000023da: SWAP3 000023db: POP 000023dc: POP 000023dd: POP 000023de: PUSH1 0x20 000023e0: PUSH1 0x40 000023e2: MLOAD 000023e3: DUP1 000023e4: DUP4 000023e5: SUB 000023e6: DUP2 000023e7: PUSH1 0x00 000023e9: DUP8 000023ea: DUP1 000023eb: EXTCODESIZE 000023ec: ISZERO 000023ed: ISZERO 000023ee: PUSH2 0x23f3 000023f1: JUMPI 000023f2: INVALID 000023f3: JUMPDEST 000023f4: PUSH1 0x32 000023f6: GAS 000023f7: SUB 000023f8: CALL 000023f9: ISZERO 000023fa: ISZERO 000023fb: PUSH2 0x2400 000023fe: JUMPI 000023ff: INVALID 00002400: JUMPDEST 00002401: POP 00002402: POP 00002403: POP 00002404: PUSH1 0x40 00002406: MLOAD 00002407: DUP1 00002408: MLOAD 00002409: SWAP1 0000240a: POP 0000240b: ISZERO 0000240c: ISZERO 0000240d: PUSH2 0x2415 00002410: JUMPI 00002411: PUSH2 0x0000 00002414: JUMP 00002415: JUMPDEST 00002416: PUSH32 0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567 00002437: DUP3 00002438: CALLER 00002439: DUP4 0000243a: PUSH1 0x05 0000243c: PUSH1 0x00 0000243e: DUP8 0000243f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002454: AND 00002455: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000246a: AND 0000246b: DUP2 0000246c: MSTORE 0000246d: PUSH1 0x20 0000246f: ADD 00002470: SWAP1 00002471: DUP2 00002472: MSTORE 00002473: PUSH1 0x20 00002475: ADD 00002476: PUSH1 0x00 00002478: KECCAK256 00002479: PUSH1 0x00 0000247b: CALLER 0000247c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002491: AND 00002492: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000024a7: AND 000024a8: DUP2 000024a9: MSTORE 000024aa: PUSH1 0x20 000024ac: ADD 000024ad: SWAP1 000024ae: DUP2 000024af: MSTORE 000024b0: PUSH1 0x20 000024b2: ADD 000024b3: PUSH1 0x00 000024b5: KECCAK256 000024b6: SLOAD 000024b7: PUSH1 0x40 000024b9: MLOAD 000024ba: DUP1 000024bb: DUP6 000024bc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000024d1: AND 000024d2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000024e7: AND 000024e8: DUP2 000024e9: MSTORE 000024ea: PUSH1 0x20 000024ec: ADD 000024ed: DUP5 000024ee: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002503: AND 00002504: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002519: AND 0000251a: DUP2 0000251b: MSTORE 0000251c: PUSH1 0x20 0000251e: ADD 0000251f: DUP4 00002520: DUP2 00002521: MSTORE 00002522: PUSH1 0x20 00002524: ADD 00002525: DUP3 00002526: DUP2 00002527: MSTORE 00002528: PUSH1 0x20 0000252a: ADD 0000252b: SWAP5 0000252c: POP 0000252d: POP 0000252e: POP 0000252f: POP 00002530: POP 00002531: PUSH1 0x40 00002533: MLOAD 00002534: DUP1 00002535: SWAP2 00002536: SUB 00002537: SWAP1 00002538: LOG1 00002539: JUMPDEST 0000253a: POP 0000253b: POP 0000253c: JUMP 0000253d: JUMPDEST 0000253e: PUSH1 0x06 00002540: PUSH1 0x20 00002542: MSTORE 00002543: DUP2 00002544: PUSH1 0x00 00002546: MSTORE 00002547: PUSH1 0x40 00002549: PUSH1 0x00 0000254b: KECCAK256 0000254c: PUSH1 0x20 0000254e: MSTORE 0000254f: DUP1 00002550: PUSH1 0x00 00002552: MSTORE 00002553: PUSH1 0x40 00002555: PUSH1 0x00 00002557: KECCAK256 00002558: PUSH1 0x00 0000255a: SWAP2 0000255b: POP 0000255c: SWAP2 0000255d: POP 0000255e: SWAP1 0000255f: SLOAD 00002560: SWAP1 00002561: PUSH2 0x0100 00002564: EXP 00002565: SWAP1 00002566: DIV 00002567: PUSH1 0xff 00002569: AND 0000256a: DUP2 0000256b: JUMP 0000256c: JUMPDEST 0000256d: PUSH1 0x03 0000256f: SLOAD 00002570: DUP2 00002571: JUMP 00002572: JUMPDEST 00002573: PUSH2 0x25e3 00002576: PUSH1 0x05 00002578: PUSH1 0x00 0000257a: PUSH1 0x00 0000257c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002591: AND 00002592: DUP2 00002593: MSTORE 00002594: PUSH1 0x20 00002596: ADD 00002597: SWAP1 00002598: DUP2 00002599: MSTORE 0000259a: PUSH1 0x20 0000259c: ADD 0000259d: PUSH1 0x00 0000259f: KECCAK256 000025a0: PUSH1 0x00 000025a2: CALLER 000025a3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000025b8: AND 000025b9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000025ce: AND 000025cf: DUP2 000025d0: MSTORE 000025d1: PUSH1 0x20 000025d3: ADD 000025d4: SWAP1 000025d5: DUP2 000025d6: MSTORE 000025d7: PUSH1 0x20 000025d9: ADD 000025da: PUSH1 0x00 000025dc: KECCAK256 000025dd: SLOAD 000025de: CALLVALUE 000025df: PUSH2 0x2c72 000025e2: JUMP 000025e3: JUMPDEST 000025e4: PUSH1 0x05 000025e6: PUSH1 0x00 000025e8: PUSH1 0x00 000025ea: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000025ff: AND 00002600: DUP2 00002601: MSTORE 00002602: PUSH1 0x20 00002604: ADD 00002605: SWAP1 00002606: DUP2 00002607: MSTORE 00002608: PUSH1 0x20 0000260a: ADD 0000260b: PUSH1 0x00 0000260d: KECCAK256 0000260e: PUSH1 0x00 00002610: CALLER 00002611: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002626: AND 00002627: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000263c: AND 0000263d: DUP2 0000263e: MSTORE 0000263f: PUSH1 0x20 00002641: ADD 00002642: SWAP1 00002643: DUP2 00002644: MSTORE 00002645: PUSH1 0x20 00002647: ADD 00002648: PUSH1 0x00 0000264a: KECCAK256 0000264b: DUP2 0000264c: SWAP1 0000264d: SSTORE 0000264e: POP 0000264f: PUSH32 0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7 00002670: PUSH1 0x00 00002672: CALLER 00002673: CALLVALUE 00002674: PUSH1 0x05 00002676: PUSH1 0x00 00002678: PUSH1 0x00 0000267a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000268f: AND 00002690: DUP2 00002691: MSTORE 00002692: PUSH1 0x20 00002694: ADD 00002695: SWAP1 00002696: DUP2 00002697: MSTORE 00002698: PUSH1 0x20 0000269a: ADD 0000269b: PUSH1 0x00 0000269d: KECCAK256 0000269e: PUSH1 0x00 000026a0: CALLER 000026a1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000026b6: AND 000026b7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000026cc: AND 000026cd: DUP2 000026ce: MSTORE 000026cf: PUSH1 0x20 000026d1: ADD 000026d2: SWAP1 000026d3: DUP2 000026d4: MSTORE 000026d5: PUSH1 0x20 000026d7: ADD 000026d8: PUSH1 0x00 000026da: KECCAK256 000026db: SLOAD 000026dc: PUSH1 0x40 000026de: MLOAD 000026df: DUP1 000026e0: DUP6 000026e1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000026f6: AND 000026f7: DUP2 000026f8: MSTORE 000026f9: PUSH1 0x20 000026fb: ADD 000026fc: DUP5 000026fd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002712: AND 00002713: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002728: AND 00002729: DUP2 0000272a: MSTORE 0000272b: PUSH1 0x20 0000272d: ADD 0000272e: DUP4 0000272f: DUP2 00002730: MSTORE 00002731: PUSH1 0x20 00002733: ADD 00002734: DUP3 00002735: DUP2 00002736: MSTORE 00002737: PUSH1 0x20 00002739: ADD 0000273a: SWAP5 0000273b: POP 0000273c: POP 0000273d: POP 0000273e: POP 0000273f: POP 00002740: PUSH1 0x40 00002742: MLOAD 00002743: DUP1 00002744: SWAP2 00002745: SUB 00002746: SWAP1 00002747: LOG1 00002748: JUMPDEST 00002749: JUMP 0000274a: JUMPDEST 0000274b: PUSH1 0x00 0000274d: PUSH1 0x00 0000274f: SWAP1 00002750: SLOAD 00002751: SWAP1 00002752: PUSH2 0x0100 00002755: EXP 00002756: SWAP1 00002757: DIV 00002758: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000276d: AND 0000276e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002783: AND 00002784: CALLER 00002785: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000279a: AND 0000279b: EQ 0000279c: ISZERO 0000279d: ISZERO 0000279e: PUSH2 0x27a6 000027a1: JUMPI 000027a2: PUSH2 0x0000 000027a5: JUMP 000027a6: JUMPDEST 000027a7: PUSH1 0x01 000027a9: PUSH1 0x08 000027ab: PUSH1 0x00 000027ad: DUP4 000027ae: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000027c3: AND 000027c4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000027d9: AND 000027da: DUP2 000027db: MSTORE 000027dc: PUSH1 0x20 000027de: ADD 000027df: SWAP1 000027e0: DUP2 000027e1: MSTORE 000027e2: PUSH1 0x20 000027e4: ADD 000027e5: PUSH1 0x00 000027e7: KECCAK256 000027e8: PUSH1 0x00 000027ea: PUSH2 0x0100 000027ed: EXP 000027ee: DUP2 000027ef: SLOAD 000027f0: DUP2 000027f1: PUSH1 0xff 000027f3: MUL 000027f4: NOT 000027f5: AND 000027f6: SWAP1 000027f7: DUP4 000027f8: ISZERO 000027f9: ISZERO 000027fa: MUL 000027fb: OR 000027fc: SWAP1 000027fd: SSTORE 000027fe: POP 000027ff: JUMPDEST 00002800: POP 00002801: JUMP 00002802: JUMPDEST 00002803: PUSH1 0x00 00002805: PUSH1 0x05 00002807: PUSH1 0x00 00002809: DUP5 0000280a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000281f: AND 00002820: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002835: AND 00002836: DUP2 00002837: MSTORE 00002838: PUSH1 0x20 0000283a: ADD 0000283b: SWAP1 0000283c: DUP2 0000283d: MSTORE 0000283e: PUSH1 0x20 00002840: ADD 00002841: PUSH1 0x00 00002843: KECCAK256 00002844: PUSH1 0x00 00002846: DUP4 00002847: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000285c: AND 0000285d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002872: AND 00002873: DUP2 00002874: MSTORE 00002875: PUSH1 0x20 00002877: ADD 00002878: SWAP1 00002879: DUP2 0000287a: MSTORE 0000287b: PUSH1 0x20 0000287d: ADD 0000287e: PUSH1 0x00 00002880: KECCAK256 00002881: SLOAD 00002882: SWAP1 00002883: POP 00002884: JUMPDEST 00002885: SWAP3 00002886: SWAP2 00002887: POP 00002888: POP 00002889: JUMP 0000288a: JUMPDEST 0000288b: PUSH1 0x00 0000288d: PUSH1 0x00 0000288f: SWAP1 00002890: SLOAD 00002891: SWAP1 00002892: PUSH2 0x0100 00002895: EXP 00002896: SWAP1 00002897: DIV 00002898: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000028ad: AND 000028ae: DUP2 000028af: JUMP 000028b0: JUMPDEST 000028b1: PUSH1 0x00 000028b3: PUSH1 0x00 000028b5: PUSH1 0x00 000028b7: PUSH1 0x00 000028b9: PUSH1 0x02 000028bb: ADDRESS 000028bc: DUP16 000028bd: DUP16 000028be: DUP16 000028bf: DUP16 000028c0: DUP16 000028c1: DUP16 000028c2: PUSH1 0x00 000028c4: PUSH1 0x40 000028c6: MLOAD 000028c7: PUSH1 0x20 000028c9: ADD 000028ca: MSTORE 000028cb: PUSH1 0x40 000028cd: MLOAD 000028ce: DUP1 000028cf: DUP9 000028d0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000028e5: AND 000028e6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000028fb: AND 000028fc: PUSH13 0x01000000000000000000000000 0000290a: MUL 0000290b: DUP2 0000290c: MSTORE 0000290d: PUSH1 0x14 0000290f: ADD 00002910: DUP8 00002911: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002926: AND 00002927: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000293c: AND 0000293d: PUSH13 0x01000000000000000000000000 0000294b: MUL 0000294c: DUP2 0000294d: MSTORE 0000294e: PUSH1 0x14 00002950: ADD 00002951: DUP7 00002952: DUP2 00002953: MSTORE 00002954: PUSH1 0x20 00002956: ADD 00002957: DUP6 00002958: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000296d: AND 0000296e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002983: AND 00002984: PUSH13 0x01000000000000000000000000 00002992: MUL 00002993: DUP2 00002994: MSTORE 00002995: PUSH1 0x14 00002997: ADD 00002998: DUP5 00002999: DUP2 0000299a: MSTORE 0000299b: PUSH1 0x20 0000299d: ADD 0000299e: DUP4 0000299f: DUP2 000029a0: MSTORE 000029a1: PUSH1 0x20 000029a3: ADD 000029a4: DUP3 000029a5: DUP2 000029a6: MSTORE 000029a7: PUSH1 0x20 000029a9: ADD 000029aa: SWAP8 000029ab: POP 000029ac: POP 000029ad: POP 000029ae: POP 000029af: POP 000029b0: POP 000029b1: POP 000029b2: POP 000029b3: PUSH1 0x20 000029b5: PUSH1 0x40 000029b7: MLOAD 000029b8: DUP1 000029b9: DUP4 000029ba: SUB 000029bb: DUP2 000029bc: PUSH1 0x00 000029be: DUP7 000029bf: PUSH2 0x61da 000029c2: GAS 000029c3: SUB 000029c4: CALL 000029c5: ISZERO 000029c6: ISZERO 000029c7: PUSH2 0x29cc 000029ca: JUMPI 000029cb: INVALID 000029cc: JUMPDEST 000029cd: POP 000029ce: POP 000029cf: PUSH1 0x40 000029d1: MLOAD 000029d2: DUP1 000029d3: MLOAD 000029d4: SWAP1 000029d5: POP 000029d6: SWAP3 000029d7: POP 000029d8: PUSH1 0x06 000029da: PUSH1 0x00 000029dc: DUP10 000029dd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000029f2: AND 000029f3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002a08: AND 00002a09: DUP2 00002a0a: MSTORE 00002a0b: PUSH1 0x20 00002a0d: ADD 00002a0e: SWAP1 00002a0f: DUP2 00002a10: MSTORE 00002a11: PUSH1 0x20 00002a13: ADD 00002a14: PUSH1 0x00 00002a16: KECCAK256 00002a17: PUSH1 0x00 00002a19: DUP5 00002a1a: PUSH1 0x00 00002a1c: NOT 00002a1d: AND 00002a1e: PUSH1 0x00 00002a20: NOT 00002a21: AND 00002a22: DUP2 00002a23: MSTORE 00002a24: PUSH1 0x20 00002a26: ADD 00002a27: SWAP1 00002a28: DUP2 00002a29: MSTORE 00002a2a: PUSH1 0x20 00002a2c: ADD 00002a2d: PUSH1 0x00 00002a2f: KECCAK256 00002a30: PUSH1 0x00 00002a32: SWAP1 00002a33: SLOAD 00002a34: SWAP1 00002a35: PUSH2 0x0100 00002a38: EXP 00002a39: SWAP1 00002a3a: DIV 00002a3b: PUSH1 0xff 00002a3d: AND 00002a3e: DUP1 00002a3f: PUSH2 0x2b3b 00002a42: JUMPI 00002a43: POP 00002a44: DUP8 00002a45: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002a5a: AND 00002a5b: PUSH1 0x01 00002a5d: DUP5 00002a5e: PUSH1 0x40 00002a60: MLOAD 00002a61: DUP1 00002a62: DUP1 00002a63: PUSH32 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000 00002a84: DUP2 00002a85: MSTORE 00002a86: POP 00002a87: PUSH1 0x1c 00002a89: ADD 00002a8a: DUP3 00002a8b: PUSH1 0x00 00002a8d: NOT 00002a8e: AND 00002a8f: PUSH1 0x00 00002a91: NOT 00002a92: AND 00002a93: DUP2 00002a94: MSTORE 00002a95: PUSH1 0x20 00002a97: ADD 00002a98: SWAP2 00002a99: POP 00002a9a: POP 00002a9b: PUSH1 0x40 00002a9d: MLOAD 00002a9e: DUP1 00002a9f: SWAP2 00002aa0: SUB 00002aa1: SWAP1 00002aa2: KECCAK256 00002aa3: DUP10 00002aa4: DUP10 00002aa5: DUP10 00002aa6: PUSH1 0x40 00002aa8: MLOAD 00002aa9: DUP1 00002aaa: PUSH1 0x00 00002aac: MSTORE 00002aad: PUSH1 0x20 00002aaf: ADD 00002ab0: PUSH1 0x40 00002ab2: MSTORE 00002ab3: PUSH1 0x00 00002ab5: PUSH1 0x40 00002ab7: MLOAD 00002ab8: PUSH1 0x20 00002aba: ADD 00002abb: MSTORE 00002abc: PUSH1 0x40 00002abe: MLOAD 00002abf: DUP1 00002ac0: DUP6 00002ac1: PUSH1 0x00 00002ac3: NOT 00002ac4: AND 00002ac5: PUSH1 0x00 00002ac7: NOT 00002ac8: AND 00002ac9: DUP2 00002aca: MSTORE 00002acb: PUSH1 0x20 00002acd: ADD 00002ace: DUP5 00002acf: PUSH1 0xff 00002ad1: AND 00002ad2: PUSH1 0xff 00002ad4: AND 00002ad5: DUP2 00002ad6: MSTORE 00002ad7: PUSH1 0x20 00002ad9: ADD 00002ada: DUP4 00002adb: PUSH1 0x00 00002add: NOT 00002ade: AND 00002adf: PUSH1 0x00 00002ae1: NOT 00002ae2: AND 00002ae3: DUP2 00002ae4: MSTORE 00002ae5: PUSH1 0x20 00002ae7: ADD 00002ae8: DUP3 00002ae9: PUSH1 0x00 00002aeb: NOT 00002aec: AND 00002aed: PUSH1 0x00 00002aef: NOT 00002af0: AND 00002af1: DUP2 00002af2: MSTORE 00002af3: PUSH1 0x20 00002af5: ADD 00002af6: SWAP5 00002af7: POP 00002af8: POP 00002af9: POP 00002afa: POP 00002afb: POP 00002afc: PUSH1 0x20 00002afe: PUSH1 0x40 00002b00: MLOAD 00002b01: PUSH1 0x20 00002b03: DUP2 00002b04: SUB 00002b05: SWAP1 00002b06: DUP1 00002b07: DUP5 00002b08: SUB 00002b09: SWAP1 00002b0a: PUSH1 0x00 00002b0c: DUP7 00002b0d: PUSH2 0x61da 00002b10: GAS 00002b11: SUB 00002b12: CALL 00002b13: ISZERO 00002b14: ISZERO 00002b15: PUSH2 0x2b1a 00002b18: JUMPI 00002b19: INVALID 00002b1a: JUMPDEST 00002b1b: POP 00002b1c: POP 00002b1d: PUSH1 0x20 00002b1f: PUSH1 0x40 00002b21: MLOAD 00002b22: SUB 00002b23: MLOAD 00002b24: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002b39: AND 00002b3a: EQ 00002b3b: JUMPDEST 00002b3c: DUP1 00002b3d: ISZERO 00002b3e: PUSH2 0x2b47 00002b41: JUMPI 00002b42: POP 00002b43: DUP10 00002b44: NUMBER 00002b45: GT 00002b46: ISZERO 00002b47: JUMPDEST 00002b48: ISZERO 00002b49: ISZERO 00002b4a: PUSH2 0x2b56 00002b4d: JUMPI 00002b4e: PUSH1 0x00 00002b50: SWAP4 00002b51: POP 00002b52: PUSH2 0x2c61 00002b55: JUMP 00002b56: JUMPDEST 00002b57: PUSH2 0x2bb8 00002b5a: DUP14 00002b5b: PUSH1 0x07 00002b5d: PUSH1 0x00 00002b5f: DUP12 00002b60: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002b75: AND 00002b76: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002b8b: AND 00002b8c: DUP2 00002b8d: MSTORE 00002b8e: PUSH1 0x20 00002b90: ADD 00002b91: SWAP1 00002b92: DUP2 00002b93: MSTORE 00002b94: PUSH1 0x20 00002b96: ADD 00002b97: PUSH1 0x00 00002b99: KECCAK256 00002b9a: PUSH1 0x00 00002b9c: DUP7 00002b9d: PUSH1 0x00 00002b9f: NOT 00002ba0: AND 00002ba1: PUSH1 0x00 00002ba3: NOT 00002ba4: AND 00002ba5: DUP2 00002ba6: MSTORE 00002ba7: PUSH1 0x20 00002ba9: ADD 00002baa: SWAP1 00002bab: DUP2 00002bac: MSTORE 00002bad: PUSH1 0x20 00002baf: ADD 00002bb0: PUSH1 0x00 00002bb2: KECCAK256 00002bb3: SLOAD 00002bb4: PUSH2 0x330b 00002bb7: JUMP 00002bb8: JUMPDEST 00002bb9: SWAP2 00002bba: POP 00002bbb: DUP11 00002bbc: PUSH2 0x2c41 00002bbf: PUSH1 0x05 00002bc1: PUSH1 0x00 00002bc3: DUP16 00002bc4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002bd9: AND 00002bda: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002bef: AND 00002bf0: DUP2 00002bf1: MSTORE 00002bf2: PUSH1 0x20 00002bf4: ADD 00002bf5: SWAP1 00002bf6: DUP2 00002bf7: MSTORE 00002bf8: PUSH1 0x20 00002bfa: ADD 00002bfb: PUSH1 0x00 00002bfd: KECCAK256 00002bfe: PUSH1 0x00 00002c00: DUP12 00002c01: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002c16: AND 00002c17: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002c2c: AND 00002c2d: DUP2 00002c2e: MSTORE 00002c2f: PUSH1 0x20 00002c31: ADD 00002c32: SWAP1 00002c33: DUP2 00002c34: MSTORE 00002c35: PUSH1 0x20 00002c37: ADD 00002c38: PUSH1 0x00 00002c3a: KECCAK256 00002c3b: SLOAD 00002c3c: DUP16 00002c3d: PUSH2 0x3325 00002c40: JUMP 00002c41: JUMPDEST 00002c42: DUP2 00002c43: ISZERO 00002c44: ISZERO 00002c45: PUSH2 0x2c4a 00002c48: JUMPI 00002c49: INVALID 00002c4a: JUMPDEST 00002c4b: DIV 00002c4c: SWAP1 00002c4d: POP 00002c4e: DUP1 00002c4f: DUP3 00002c50: LT 00002c51: ISZERO 00002c52: PUSH2 0x2c5d 00002c55: JUMPI 00002c56: DUP2 00002c57: SWAP4 00002c58: POP 00002c59: PUSH2 0x2c61 00002c5c: JUMP 00002c5d: JUMPDEST 00002c5e: DUP1 00002c5f: SWAP4 00002c60: POP 00002c61: JUMPDEST 00002c62: POP 00002c63: POP 00002c64: POP 00002c65: SWAP11 00002c66: SWAP10 00002c67: POP 00002c68: POP 00002c69: POP 00002c6a: POP 00002c6b: POP 00002c6c: POP 00002c6d: POP 00002c6e: POP 00002c6f: POP 00002c70: POP 00002c71: JUMP 00002c72: JUMPDEST 00002c73: PUSH1 0x00 00002c75: PUSH1 0x00 00002c77: DUP3 00002c78: DUP5 00002c79: ADD 00002c7a: SWAP1 00002c7b: POP 00002c7c: PUSH2 0x2c93 00002c7f: DUP5 00002c80: DUP3 00002c81: LT 00002c82: ISZERO 00002c83: DUP1 00002c84: ISZERO 00002c85: PUSH2 0x2c8e 00002c88: JUMPI 00002c89: POP 00002c8a: DUP4 00002c8b: DUP3 00002c8c: LT 00002c8d: ISZERO 00002c8e: JUMPDEST 00002c8f: PUSH2 0x335a 00002c92: JUMP 00002c93: JUMPDEST 00002c94: DUP1 00002c95: SWAP2 00002c96: POP 00002c97: JUMPDEST 00002c98: POP 00002c99: SWAP3 00002c9a: SWAP2 00002c9b: POP 00002c9c: POP 00002c9d: JUMP 00002c9e: JUMPDEST 00002c9f: PUSH1 0x00 00002ca1: PUSH1 0x00 00002ca3: PUSH1 0x00 00002ca5: PUSH8 0x0de0b6b3a7640000 00002cae: PUSH2 0x2cb9 00002cb1: DUP6 00002cb2: PUSH1 0x02 00002cb4: SLOAD 00002cb5: PUSH2 0x3325 00002cb8: JUMP 00002cb9: JUMPDEST 00002cba: DUP2 00002cbb: ISZERO 00002cbc: ISZERO 00002cbd: PUSH2 0x2cc2 00002cc0: JUMPI 00002cc1: INVALID 00002cc2: JUMPDEST 00002cc3: DIV 00002cc4: SWAP3 00002cc5: POP 00002cc6: PUSH8 0x0de0b6b3a7640000 00002ccf: PUSH2 0x2cda 00002cd2: DUP6 00002cd3: PUSH1 0x03 00002cd5: SLOAD 00002cd6: PUSH2 0x3325 00002cd9: JUMP 00002cda: JUMPDEST 00002cdb: DUP2 00002cdc: ISZERO 00002cdd: ISZERO 00002cde: PUSH2 0x2ce3 00002ce1: JUMPI 00002ce2: INVALID 00002ce3: JUMPDEST 00002ce4: DIV 00002ce5: SWAP2 00002ce6: POP 00002ce7: PUSH1 0x00 00002ce9: SWAP1 00002cea: POP 00002ceb: PUSH1 0x01 00002ced: ISZERO 00002cee: ISZERO 00002cef: PUSH1 0x08 00002cf1: PUSH1 0x00 00002cf3: CALLER 00002cf4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002d09: AND 00002d0a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002d1f: AND 00002d20: DUP2 00002d21: MSTORE 00002d22: PUSH1 0x20 00002d24: ADD 00002d25: SWAP1 00002d26: DUP2 00002d27: MSTORE 00002d28: PUSH1 0x20 00002d2a: ADD 00002d2b: PUSH1 0x00 00002d2d: KECCAK256 00002d2e: PUSH1 0x00 00002d30: SWAP1 00002d31: SLOAD 00002d32: SWAP1 00002d33: PUSH2 0x0100 00002d36: EXP 00002d37: SWAP1 00002d38: DIV 00002d39: PUSH1 0xff 00002d3b: AND 00002d3c: ISZERO 00002d3d: ISZERO 00002d3e: EQ 00002d3f: ISZERO 00002d40: PUSH2 0x2d48 00002d43: JUMPI 00002d44: PUSH1 0x00 00002d46: SWAP2 00002d47: POP 00002d48: JUMPDEST 00002d49: PUSH2 0x2dd7 00002d4c: PUSH1 0x05 00002d4e: PUSH1 0x00 00002d50: DUP12 00002d51: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002d66: AND 00002d67: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002d7c: AND 00002d7d: DUP2 00002d7e: MSTORE 00002d7f: PUSH1 0x20 00002d81: ADD 00002d82: SWAP1 00002d83: DUP2 00002d84: MSTORE 00002d85: PUSH1 0x20 00002d87: ADD 00002d88: PUSH1 0x00 00002d8a: KECCAK256 00002d8b: PUSH1 0x00 00002d8d: CALLER 00002d8e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002da3: AND 00002da4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002db9: AND 00002dba: DUP2 00002dbb: MSTORE 00002dbc: PUSH1 0x20 00002dbe: ADD 00002dbf: SWAP1 00002dc0: DUP2 00002dc1: MSTORE 00002dc2: PUSH1 0x20 00002dc4: ADD 00002dc5: PUSH1 0x00 00002dc7: KECCAK256 00002dc8: SLOAD 00002dc9: PUSH2 0x2dd2 00002dcc: DUP7 00002dcd: DUP6 00002dce: PUSH2 0x2c72 00002dd1: JUMP 00002dd2: JUMPDEST 00002dd3: PUSH2 0x330b 00002dd6: JUMP 00002dd7: JUMPDEST 00002dd8: PUSH1 0x05 00002dda: PUSH1 0x00 00002ddc: DUP12 00002ddd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002df2: AND 00002df3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002e08: AND 00002e09: DUP2 00002e0a: MSTORE 00002e0b: PUSH1 0x20 00002e0d: ADD 00002e0e: SWAP1 00002e0f: DUP2 00002e10: MSTORE 00002e11: PUSH1 0x20 00002e13: ADD 00002e14: PUSH1 0x00 00002e16: KECCAK256 00002e17: PUSH1 0x00 00002e19: CALLER 00002e1a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002e2f: AND 00002e30: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002e45: AND 00002e46: DUP2 00002e47: MSTORE 00002e48: PUSH1 0x20 00002e4a: ADD 00002e4b: SWAP1 00002e4c: DUP2 00002e4d: MSTORE 00002e4e: PUSH1 0x20 00002e50: ADD 00002e51: PUSH1 0x00 00002e53: KECCAK256 00002e54: DUP2 00002e55: SWAP1 00002e56: SSTORE 00002e57: POP 00002e58: PUSH2 0x2eef 00002e5b: PUSH1 0x05 00002e5d: PUSH1 0x00 00002e5f: DUP12 00002e60: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002e75: AND 00002e76: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002e8b: AND 00002e8c: DUP2 00002e8d: MSTORE 00002e8e: PUSH1 0x20 00002e90: ADD 00002e91: SWAP1 00002e92: DUP2 00002e93: MSTORE 00002e94: PUSH1 0x20 00002e96: ADD 00002e97: PUSH1 0x00 00002e99: KECCAK256 00002e9a: PUSH1 0x00 00002e9c: DUP8 00002e9d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002eb2: AND 00002eb3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002ec8: AND 00002ec9: DUP2 00002eca: MSTORE 00002ecb: PUSH1 0x20 00002ecd: ADD 00002ece: SWAP1 00002ecf: DUP2 00002ed0: MSTORE 00002ed1: PUSH1 0x20 00002ed3: ADD 00002ed4: PUSH1 0x00 00002ed6: KECCAK256 00002ed7: SLOAD 00002ed8: PUSH2 0x2eea 00002edb: PUSH2 0x2ee4 00002ede: DUP8 00002edf: DUP6 00002ee0: PUSH2 0x2c72 00002ee3: JUMP 00002ee4: JUMPDEST 00002ee5: DUP7 00002ee6: PUSH2 0x330b 00002ee9: JUMP 00002eea: JUMPDEST 00002eeb: PUSH2 0x2c72 00002eee: JUMP 00002eef: JUMPDEST 00002ef0: PUSH1 0x05 00002ef2: PUSH1 0x00 00002ef4: DUP12 00002ef5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002f0a: AND 00002f0b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002f20: AND 00002f21: DUP2 00002f22: MSTORE 00002f23: PUSH1 0x20 00002f25: ADD 00002f26: SWAP1 00002f27: DUP2 00002f28: MSTORE 00002f29: PUSH1 0x20 00002f2b: ADD 00002f2c: PUSH1 0x00 00002f2e: KECCAK256 00002f2f: PUSH1 0x00 00002f31: DUP8 00002f32: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002f47: AND 00002f48: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002f5d: AND 00002f5e: DUP2 00002f5f: MSTORE 00002f60: PUSH1 0x20 00002f62: ADD 00002f63: SWAP1 00002f64: DUP2 00002f65: MSTORE 00002f66: PUSH1 0x20 00002f68: ADD 00002f69: PUSH1 0x00 00002f6b: KECCAK256 00002f6c: DUP2 00002f6d: SWAP1 00002f6e: SSTORE 00002f6f: POP 00002f70: PUSH2 0x3029 00002f73: PUSH1 0x05 00002f75: PUSH1 0x00 00002f77: DUP12 00002f78: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002f8d: AND 00002f8e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002fa3: AND 00002fa4: DUP2 00002fa5: MSTORE 00002fa6: PUSH1 0x20 00002fa8: ADD 00002fa9: SWAP1 00002faa: DUP2 00002fab: MSTORE 00002fac: PUSH1 0x20 00002fae: ADD 00002faf: PUSH1 0x00 00002fb1: KECCAK256 00002fb2: PUSH1 0x00 00002fb4: PUSH1 0x01 00002fb6: PUSH1 0x00 00002fb8: SWAP1 00002fb9: SLOAD 00002fba: SWAP1 00002fbb: PUSH2 0x0100 00002fbe: EXP 00002fbf: SWAP1 00002fc0: DIV 00002fc1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002fd6: AND 00002fd7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002fec: AND 00002fed: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003002: AND 00003003: DUP2 00003004: MSTORE 00003005: PUSH1 0x20 00003007: ADD 00003008: SWAP1 00003009: DUP2 0000300a: MSTORE 0000300b: PUSH1 0x20 0000300d: ADD 0000300e: PUSH1 0x00 00003010: KECCAK256 00003011: SLOAD 00003012: PUSH2 0x3024 00003015: PUSH2 0x301e 00003018: DUP7 00003019: DUP7 0000301a: PUSH2 0x2c72 0000301d: JUMP 0000301e: JUMPDEST 0000301f: DUP5 00003020: PUSH2 0x330b 00003023: JUMP 00003024: JUMPDEST 00003025: PUSH2 0x2c72 00003028: JUMP 00003029: JUMPDEST 0000302a: PUSH1 0x05 0000302c: PUSH1 0x00 0000302e: DUP12 0000302f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003044: AND 00003045: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000305a: AND 0000305b: DUP2 0000305c: MSTORE 0000305d: PUSH1 0x20 0000305f: ADD 00003060: SWAP1 00003061: DUP2 00003062: MSTORE 00003063: PUSH1 0x20 00003065: ADD 00003066: PUSH1 0x00 00003068: KECCAK256 00003069: PUSH1 0x00 0000306b: PUSH1 0x01 0000306d: PUSH1 0x00 0000306f: SWAP1 00003070: SLOAD 00003071: SWAP1 00003072: PUSH2 0x0100 00003075: EXP 00003076: SWAP1 00003077: DIV 00003078: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000308d: AND 0000308e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000030a3: AND 000030a4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000030b9: AND 000030ba: DUP2 000030bb: MSTORE 000030bc: PUSH1 0x20 000030be: ADD 000030bf: SWAP1 000030c0: DUP2 000030c1: MSTORE 000030c2: PUSH1 0x20 000030c4: ADD 000030c5: PUSH1 0x00 000030c7: KECCAK256 000030c8: DUP2 000030c9: SWAP1 000030ca: SSTORE 000030cb: POP 000030cc: PUSH2 0x3165 000030cf: PUSH1 0x05 000030d1: PUSH1 0x00 000030d3: DUP10 000030d4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000030e9: AND 000030ea: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000030ff: AND 00003100: DUP2 00003101: MSTORE 00003102: PUSH1 0x20 00003104: ADD 00003105: SWAP1 00003106: DUP2 00003107: MSTORE 00003108: PUSH1 0x20 0000310a: ADD 0000310b: PUSH1 0x00 0000310d: KECCAK256 0000310e: PUSH1 0x00 00003110: DUP8 00003111: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003126: AND 00003127: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000313c: AND 0000313d: DUP2 0000313e: MSTORE 0000313f: PUSH1 0x20 00003141: ADD 00003142: SWAP1 00003143: DUP2 00003144: MSTORE 00003145: PUSH1 0x20 00003147: ADD 00003148: PUSH1 0x00 0000314a: KECCAK256 0000314b: SLOAD 0000314c: DUP10 0000314d: PUSH2 0x3156 00003150: DUP10 00003151: DUP9 00003152: PUSH2 0x3325 00003155: JUMP 00003156: JUMPDEST 00003157: DUP2 00003158: ISZERO 00003159: ISZERO 0000315a: PUSH2 0x315f 0000315d: JUMPI 0000315e: INVALID 0000315f: JUMPDEST 00003160: DIV 00003161: PUSH2 0x330b 00003164: JUMP 00003165: JUMPDEST 00003166: PUSH1 0x05 00003168: PUSH1 0x00 0000316a: DUP10 0000316b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003180: AND 00003181: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003196: AND 00003197: DUP2 00003198: MSTORE 00003199: PUSH1 0x20 0000319b: ADD 0000319c: SWAP1 0000319d: DUP2 0000319e: MSTORE 0000319f: PUSH1 0x20 000031a1: ADD 000031a2: PUSH1 0x00 000031a4: KECCAK256 000031a5: PUSH1 0x00 000031a7: DUP8 000031a8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000031bd: AND 000031be: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000031d3: AND 000031d4: DUP2 000031d5: MSTORE 000031d6: PUSH1 0x20 000031d8: ADD 000031d9: SWAP1 000031da: DUP2 000031db: MSTORE 000031dc: PUSH1 0x20 000031de: ADD 000031df: PUSH1 0x00 000031e1: KECCAK256 000031e2: DUP2 000031e3: SWAP1 000031e4: SSTORE 000031e5: POP 000031e6: PUSH2 0x327f 000031e9: PUSH1 0x05 000031eb: PUSH1 0x00 000031ed: DUP10 000031ee: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003203: AND 00003204: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003219: AND 0000321a: DUP2 0000321b: MSTORE 0000321c: PUSH1 0x20 0000321e: ADD 0000321f: SWAP1 00003220: DUP2 00003221: MSTORE 00003222: PUSH1 0x20 00003224: ADD 00003225: PUSH1 0x00 00003227: KECCAK256 00003228: PUSH1 0x00 0000322a: CALLER 0000322b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003240: AND 00003241: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003256: AND 00003257: DUP2 00003258: MSTORE 00003259: PUSH1 0x20 0000325b: ADD 0000325c: SWAP1 0000325d: DUP2 0000325e: MSTORE 0000325f: PUSH1 0x20 00003261: ADD 00003262: PUSH1 0x00 00003264: KECCAK256 00003265: SLOAD 00003266: DUP10 00003267: PUSH2 0x3270 0000326a: DUP10 0000326b: DUP9 0000326c: PUSH2 0x3325 0000326f: JUMP 00003270: JUMPDEST 00003271: DUP2 00003272: ISZERO 00003273: ISZERO 00003274: PUSH2 0x3279 00003277: JUMPI 00003278: INVALID 00003279: JUMPDEST 0000327a: DIV 0000327b: PUSH2 0x2c72 0000327e: JUMP 0000327f: JUMPDEST 00003280: PUSH1 0x05 00003282: PUSH1 0x00 00003284: DUP10 00003285: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000329a: AND 0000329b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000032b0: AND 000032b1: DUP2 000032b2: MSTORE 000032b3: PUSH1 0x20 000032b5: ADD 000032b6: SWAP1 000032b7: DUP2 000032b8: MSTORE 000032b9: PUSH1 0x20 000032bb: ADD 000032bc: PUSH1 0x00 000032be: KECCAK256 000032bf: PUSH1 0x00 000032c1: CALLER 000032c2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000032d7: AND 000032d8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000032ed: AND 000032ee: DUP2 000032ef: MSTORE 000032f0: PUSH1 0x20 000032f2: ADD 000032f3: SWAP1 000032f4: DUP2 000032f5: MSTORE 000032f6: PUSH1 0x20 000032f8: ADD 000032f9: PUSH1 0x00 000032fb: KECCAK256 000032fc: DUP2 000032fd: SWAP1 000032fe: SSTORE 000032ff: POP 00003300: JUMPDEST 00003301: POP 00003302: POP 00003303: POP 00003304: POP 00003305: POP 00003306: POP 00003307: POP 00003308: POP 00003309: POP 0000330a: JUMP 0000330b: JUMPDEST 0000330c: PUSH1 0x00 0000330e: PUSH2 0x3319 00003311: DUP4 00003312: DUP4 00003313: GT 00003314: ISZERO 00003315: PUSH2 0x335a 00003318: JUMP 00003319: JUMPDEST 0000331a: DUP2 0000331b: DUP4 0000331c: SUB 0000331d: SWAP1 0000331e: POP 0000331f: JUMPDEST 00003320: SWAP3 00003321: SWAP2 00003322: POP 00003323: POP 00003324: JUMP 00003325: JUMPDEST 00003326: PUSH1 0x00 00003328: PUSH1 0x00 0000332a: DUP3 0000332b: DUP5 0000332c: MUL 0000332d: SWAP1 0000332e: POP 0000332f: PUSH2 0x334f 00003332: PUSH1 0x00 00003334: DUP6 00003335: EQ 00003336: DUP1 00003337: PUSH2 0x334a 0000333a: JUMPI 0000333b: POP 0000333c: DUP4 0000333d: DUP6 0000333e: DUP4 0000333f: DUP2 00003340: ISZERO 00003341: ISZERO 00003342: PUSH2 0x3347 00003345: JUMPI 00003346: INVALID 00003347: JUMPDEST 00003348: DIV 00003349: EQ 0000334a: JUMPDEST 0000334b: PUSH2 0x335a 0000334e: JUMP 0000334f: JUMPDEST 00003350: DUP1 00003351: SWAP2 00003352: POP 00003353: JUMPDEST 00003354: POP 00003355: SWAP3 00003356: SWAP2 00003357: POP 00003358: POP 00003359: JUMP 0000335a: JUMPDEST 0000335b: DUP1 0000335c: ISZERO 0000335d: ISZERO 0000335e: PUSH2 0x3366 00003361: JUMPI 00003362: PUSH2 0x0000 00003365: JUMP 00003366: JUMPDEST 00003367: JUMPDEST 00003368: POP 00003369: JUMP 0000336a: STOP 0000336b: LOG1 0000336c: PUSH6 0x627a7a723058 00003373: KECCAK256 00003374: UNKNOWN(0x0E) 00003375: STOP 00003376: CODESIZE 00003377: ADDRESS 00003378: UNKNOWN(0xE0) 00003379: ADDRESS 0000337a: UNKNOWN(0xA5) 0000337b: SWAP2 0000337c: GASLIMIT 0000337d: PUSH28
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0xc556b38486aa080b41e0408b504536df71c1382089aa8183a4b928a26fb78fac
call_targets:
0xc3c12a9e63e466a3ba99e07f3ef1f38b8b81ae1b
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xc556b38486aa080b41e0408b504536df71c1382089aa8183a4b928a26fb78fac",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xc3c12a9e63e466a3ba99e07f3ef1f38b8b81ae1b"
],
"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": "0x14577c55",
"selector": "0x14577c55",
"calldata_variants": [
"0x14577c55",
"0x14577c550000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"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"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 2952,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3286,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4232,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 11,
"guards_detected": [
{
"pc": 7713,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 7837,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 8200,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 8367,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 8497,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 10116,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"untrusted_call_count": 11
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0xc556b38486aa080b41e0408b504536df71c1382089aa8183a4b928a26fb78fac
call_targets:
0xc3c12a9e63e466a3ba99e07f3ef1f38b8b81ae1b
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0xc556b38486aa080b41e0408b504536df71c1382089aa8183a4b928a26fb78fac",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xc3c12a9e63e466a3ba99e07f3ef1f38b8b81ae1b"
],
"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": "0x14577c55",
"selector": "0x14577c55",
"calldata_variants": [
"0x14577c55",
"0x14577c550000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"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"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 2952,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3286,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 4232,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 11,
"guards_detected": [
{
"pc": 7713,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 7837,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 8200,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 8367,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 8497,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 10116,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
]
}
|