019bb377-69d5-7349-915e-9672d06739b0
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 |
|---|---|---|---|---|
| 39867 | artifact.fetch | complete | 1 / 3 | 3 months ago |
| 39868 | proxy.resolve | complete | 1 / 3 | 3 months ago |
| 39869 | tool.cast_disasm | complete | 1 / 3 | 3 months ago |
| 39870 | analysis.bundle | complete | 1 / 3 | 3 months ago |
| 39871 | capability.graph | complete | 1 / 3 | 3 months ago |
| 39872 | detector.run | complete | 1 / 3 | 3 months ago |
| 39873 | validation.fork | complete | 1 / 3 | 3 months ago |
| 39975 | report.consolidate | complete | 1 / 6 | 3 months ago |
| 39976 | tool.slither | failed | 2 / 2 | 3 months ago |
{
"status": "not_proxy"
}
Traceback (most recent call last):
File "/var/www/tripwire/worker/worker.py", line 198, in main
payload = dispatch_job(job_type, job_id, job_meta, run_data, config, laravel_client)
File "/var/www/tripwire/worker/worker.py", line 114, in dispatch_job
return slither_run.run(job_id, job_meta, run_data, config, log, laravel_client)
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/www/tripwire/worker/jobs/slither_run.py", line 1056, in run
solc_path, solc_meta = _prepare_solc(chosen_version, workspace)
~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/www/tripwire/worker/jobs/slither_run.py", line 190, in _prepare_solc
raise RuntimeError(f"solc version {default_version} is too old for supported toolchain")
RuntimeError: solc version 0.3.5 is too old for supported toolchain
{"no_findings":false,"summary":"Identified 4 issues: unprotected minter initialization, weak order-signature domain separation/shared fills, arithmetic overflows in trade math, and ERC20 approve race condition.","findings":[{"severity":"high","category":"access_control","title":"Minter can be set by any address once, enabling unauthorized mint/reset","exploit_scenario":"If the deployer does not call setMinter immediately, any attacker can call it first and become the minter. They can then mint arbitrary balances, destroy user balances, or reset the version to wipe balances and totalSupply accounting.","recommendation":"Set minter in the constructor or gate setMinter behind an owner/admin. Consider removing setMinter entirely after initialization or making it one-time callable only by a trusted deployer address.","evidence":"setMinter() allows any caller to set minter when it is zero; create/destroy/reset are gated only by minter.","locations":["contracts/Contract.sol:104","contracts/Contract.sol:105","contracts/Contract.sol:111","contracts/Contract.sol:120"]},{"severity":"medium","category":"auth","title":"Order signatures lack proper domain separation and user binding in hash","exploit_scenario":"The order hash excludes the user address and contract/chain domain, so signatures are valid across identical parameter sets and can be replayed across DEX instances or chains if a user signs the same parameters. Additionally, fills are tracked per hash only, so two different users signing identical orders share the same fill bucket, enabling griefing/DoS by exhausting another user’s order capacity.","recommendation":"Adopt EIP-712/EIP-191 signatures including `address(this)`, chain id, and the user address in the hashed struct. Track fills by `(hash, user)` or include `user` in the hash input.","evidence":"Order hash is sha256 of order params without user/contract; orderFills keyed only by hash.","locations":["contracts/Contract.sol:191","contracts/Contract.sol:195","contracts/Contract.sol:205","contracts/Contract.sol:218"]},{"severity":"medium","category":"math","title":"Unchecked multiplication/division in trade and volume calculations can overflow","exploit_scenario":"Large `amountGive` and `amount` values can overflow intermediate multiplications (e.g., `amountGive * amount`), wrapping to a smaller number. This can let trades pass balance checks with insufficient collateral or miscredit balances, breaking accounting and potentially enabling value extraction.","recommendation":"Use SafeMath (or Solidity >=0.8 with checked arithmetic) and restructure calculations to minimize overflow risk (e.g., divide before multiply when safe).","evidence":"Multiplications are performed without overflow checks in trade and availableVolume calculations.","locations":["contracts/Contract.sol:197","contracts/Contract.sol:202","contracts/Contract.sol:203","contracts/Contract.sol:223","contracts/Contract.sol:224"]},{"severity":"low","category":"auth","title":"ERC20 approve race condition allows double-spend of allowance","exploit_scenario":"A spender can front-run an allowance change from a non-zero value to another non-zero value, spending both the old and new allowances.","recommendation":"Require allowance to be set to zero before changing to a new value, or use `increaseAllowance`/`decreaseAllowance` patterns.","evidence":"approve() sets allowance directly with no zero-check.","locations":["contracts/Contract.sol:76","contracts/Contract.sol:77"]}]}
OpenAI Codex v0.77.0 (research preview)
--------
workdir: /tmp/codex-81o04un7
model: gpt-5.2-codex
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: auto
session id: 019bb39b-bd24-76d0-9599-04807d1a0570
--------
user
You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
Scope rules:
- You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party Solidity sources in this workspace.
- Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
- If there are only dependency files and no first-party sources, set no_findings=true and explain in summary.
Output MUST be valid JSON matching the provided schema.
- If you find nothing meaningful: set no_findings=true and findings=[].
- Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
Output constraints (IMPORTANT):
- severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
- category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
Keep summary short and concrete.
mcp startup: no servers
thinking
**Reading AUDIT_BUNDLE file**
exec
/bin/bash -lc 'cat /tmp/codex-81o04un7/AUDIT_BUNDLE.txt' in /tmp/codex-81o04un7 succeeded in 7ms:
This file concatenates the full contents of first-party Solidity sources for auditing.
Do not treat dependency code under lib/ or @openzeppelin/ as first-party.
================================================================================
FILE: contracts/Contract.sol
================================================================================
contract Token {
/// @return total amount of tokens
function totalSupply() constant returns (uint256 supply) {}
/// @param _owner The address from which the balance will be retrieved
/// @return The balance
function balanceOf(address _owner) constant returns (uint256 balance) {}
/// @notice send `_value` token to `_to` from `msg.sender`
/// @param _to The address of the recipient
/// @param _value The amount of token to be transferred
/// @return Whether the transfer was successful or not
function transfer(address _to, uint256 _value) returns (bool success) {}
thinking
**Analyzing Solidity contract risks**
I'm carefully auditing the old Solidity contract for reentrancy, access control, signature verification, and arithmetic issues, weighing severity and categories while considering specifics like unchecked math, signature malleability, and order fill accounting problems. Next, I plan to create a findings list with file paths and line numbers for clarity.
exec
/bin/bash -lc 'nl -ba /tmp/codex-81o04un7/AUDIT_BUNDLE.txt' in /tmp/codex-81o04un7 succeeded in 5ms:
1 This file concatenates the full contents of first-party Solidity sources for auditing.
2 Do not treat dependency code under lib/ or @openzeppelin/ as first-party.
3
4 ================================================================================
5 FILE: contracts/Contract.sol
6 ================================================================================
7 contract Token {
8
9 /// @return total amount of tokens
10 function totalSupply() constant returns (uint256 supply) {}
11
12 /// @param _owner The address from which the balance will be retrieved
13 /// @return The balance
14 function balanceOf(address _owner) constant returns (uint256 balance) {}
15
16 /// @notice send `_value` token to `_to` from `msg.sender`
17 /// @param _to The address of the recipient
18 /// @param _value The amount of token to be transferred
19 /// @return Whether the transfer was successful or not
20 function transfer(address _to, uint256 _value) returns (bool success) {}
thinking
**Summarizing security findings for JSON output**
I'll organize the four security findings clearly with severity, category, titles, exploit scenarios, recommendations, and evidence including line numbers from contracts/Contract.sol to prepare a detailed JSON report for the user.
codex
{"no_findings":false,"summary":"Identified 4 issues: unprotected minter initialization, weak order-signature domain separation/shared fills, arithmetic overflows in trade math, and ERC20 approve race condition.","findings":[{"severity":"high","category":"access_control","title":"Minter can be set by any address once, enabling unauthorized mint/reset","exploit_scenario":"If the deployer does not call setMinter immediately, any attacker can call it first and become the minter. They can then mint arbitrary balances, destroy user balances, or reset the version to wipe balances and totalSupply accounting.","recommendation":"Set minter in the constructor or gate setMinter behind an owner/admin. Consider removing setMinter entirely after initialization or making it one-time callable only by a trusted deployer address.","evidence":"setMinter() allows any caller to set minter when it is zero; create/destroy/reset are gated only by minter.","locations":["contracts/Contract.sol:104","contracts/Contract.sol:105","contracts/Contract.sol:111","contracts/Contract.sol:120"]},{"severity":"medium","category":"auth","title":"Order signatures lack proper domain separation and user binding in hash","exploit_scenario":"The order hash excludes the user address and contract/chain domain, so signatures are valid across identical parameter sets and can be replayed across DEX instances or chains if a user signs the same parameters. Additionally, fills are tracked per hash only, so two different users signing identical orders share the same fill bucket, enabling griefing/DoS by exhausting another user’s order capacity.","recommendation":"Adopt EIP-712/EIP-191 signatures including `address(this)`, chain id, and the user address in the hashed struct. Track fills by `(hash, user)` or include `user` in the hash input.","evidence":"Order hash is sha256 of order params without user/contract; orderFills keyed only by hash.","locations":["contracts/Contract.sol:191","contracts/Contract.sol:195","contracts/Contract.sol:205","contracts/Contract.sol:218"]},{"severity":"medium","category":"math","title":"Unchecked multiplication/division in trade and volume calculations can overflow","exploit_scenario":"Large `amountGive` and `amount` values can overflow intermediate multiplications (e.g., `amountGive * amount`), wrapping to a smaller number. This can let trades pass balance checks with insufficient collateral or miscredit balances, breaking accounting and potentially enabling value extraction.","recommendation":"Use SafeMath (or Solidity >=0.8 with checked arithmetic) and restructure calculations to minimize overflow risk (e.g., divide before multiply when safe).","evidence":"Multiplications are performed without overflow checks in trade and availableVolume calculations.","locations":["contracts/Contract.sol:197","contracts/Contract.sol:202","contracts/Contract.sol:203","contracts/Contract.sol:223","contracts/Contract.sol:224"]},{"severity":"low","category":"auth","title":"ERC20 approve race condition allows double-spend of allowance","exploit_scenario":"A spender can front-run an allowance change from a non-zero value to another non-zero value, spending both the old and new allowances.","recommendation":"Require allowance to be set to zero before changing to a new value, or use `increaseAllowance`/`decreaseAllowance` patterns.","evidence":"approve() sets allowance directly with no zero-check.","locations":["contracts/Contract.sol:76","contracts/Contract.sol:77"]}]}
tokens used
13,797
{
"codex": {
"ran_at": "2026-01-12T19:09:19.035648+00:00",
"returncode": 0
},
"project": {
"mode": "source",
"file_count": 1,
"import_count": 0,
"first_party_contracts_count": 1
},
"summary": "Identified 4 issues: unprotected minter initialization, weak order-signature domain separation/shared fills, arithmetic overflows in trade math, and ERC20 approve race condition.",
"raw_final": {
"summary": "Identified 4 issues: unprotected minter initialization, weak order-signature domain separation/shared fills, arithmetic overflows in trade math, and ERC20 approve race condition.",
"findings": [
{
"title": "Minter can be set by any address once, enabling unauthorized mint/reset",
"category": "access_control",
"evidence": "setMinter() allows any caller to set minter when it is zero; create/destroy/reset are gated only by minter.",
"severity": "high",
"locations": [
"contracts/Contract.sol:104",
"contracts/Contract.sol:105",
"contracts/Contract.sol:111",
"contracts/Contract.sol:120"
],
"recommendation": "Set minter in the constructor or gate setMinter behind an owner/admin. Consider removing setMinter entirely after initialization or making it one-time callable only by a trusted deployer address.",
"exploit_scenario": "If the deployer does not call setMinter immediately, any attacker can call it first and become the minter. They can then mint arbitrary balances, destroy user balances, or reset the version to wipe balances and totalSupply accounting."
},
{
"title": "Order signatures lack proper domain separation and user binding in hash",
"category": "auth",
"evidence": "Order hash is sha256 of order params without user/contract; orderFills keyed only by hash.",
"severity": "medium",
"locations": [
"contracts/Contract.sol:191",
"contracts/Contract.sol:195",
"contracts/Contract.sol:205",
"contracts/Contract.sol:218"
],
"recommendation": "Adopt EIP-712/EIP-191 signatures including `address(this)`, chain id, and the user address in the hashed struct. Track fills by `(hash, user)` or include `user` in the hash input.",
"exploit_scenario": "The order hash excludes the user address and contract/chain domain, so signatures are valid across identical parameter sets and can be replayed across DEX instances or chains if a user signs the same parameters. Additionally, fills are tracked per hash only, so two different users signing identical orders share the same fill bucket, enabling griefing/DoS by exhausting another user\u2019s order capacity."
},
{
"title": "Unchecked multiplication/division in trade and volume calculations can overflow",
"category": "math",
"evidence": "Multiplications are performed without overflow checks in trade and availableVolume calculations.",
"severity": "medium",
"locations": [
"contracts/Contract.sol:197",
"contracts/Contract.sol:202",
"contracts/Contract.sol:203",
"contracts/Contract.sol:223",
"contracts/Contract.sol:224"
],
"recommendation": "Use SafeMath (or Solidity >=0.8 with checked arithmetic) and restructure calculations to minimize overflow risk (e.g., divide before multiply when safe).",
"exploit_scenario": "Large `amountGive` and `amount` values can overflow intermediate multiplications (e.g., `amountGive * amount`), wrapping to a smaller number. This can let trades pass balance checks with insufficient collateral or miscredit balances, breaking accounting and potentially enabling value extraction."
},
{
"title": "ERC20 approve race condition allows double-spend of allowance",
"category": "auth",
"evidence": "approve() sets allowance directly with no zero-check.",
"severity": "low",
"locations": [
"contracts/Contract.sol:76",
"contracts/Contract.sol:77"
],
"recommendation": "Require allowance to be set to zero before changing to a new value, or use `increaseAllowance`/`decreaseAllowance` patterns.",
"exploit_scenario": "A spender can front-run an allowance change from a non-zero value to another non-zero value, spending both the old and new allowances."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x60 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLDATASIZE 00000006: ISZERO 00000007: PUSH2 0x0098 0000000a: JUMPI 0000000b: PUSH1 0xe0 0000000d: PUSH1 0x02 0000000f: EXP 00000010: PUSH1 0x00 00000012: CALLDATALOAD 00000013: DIV 00000014: PUSH4 0x0a19b14a 00000019: DUP2 0000001a: EQ 0000001b: PUSH2 0x00a0 0000001e: JUMPI 0000001f: DUP1 00000020: PUSH4 0x2e1a7d4d 00000025: EQ 00000026: PUSH2 0x00d7 00000029: JUMPI 0000002a: DUP1 0000002b: PUSH4 0x338b5dea 00000030: EQ 00000031: PUSH2 0x00eb 00000034: JUMPI 00000035: DUP1 00000036: PUSH4 0x57786394 0000003b: EQ 0000003c: PUSH2 0x0116 0000003f: JUMPI 00000040: DUP1 00000041: PUSH4 0x65e17c9d 00000046: EQ 00000047: PUSH2 0x011f 0000004a: JUMPI 0000004b: DUP1 0000004c: PUSH4 0x6c86888b 00000051: EQ 00000052: PUSH2 0x0131 00000055: JUMPI 00000056: DUP1 00000057: PUSH4 0x93f0bb51 0000005c: EQ 0000005d: PUSH2 0x01a0 00000060: JUMPI 00000061: DUP1 00000062: PUSH4 0x9e281a98 00000067: EQ 00000068: PUSH2 0x01cd 0000006b: JUMPI 0000006c: DUP1 0000006d: PUSH4 0xc281309e 00000072: EQ 00000073: PUSH2 0x01f8 00000076: JUMPI 00000077: DUP1 00000078: PUSH4 0xd0e30db0 0000007d: EQ 0000007e: PUSH2 0x0201 00000081: JUMPI 00000082: DUP1 00000083: PUSH4 0xf7888aec 00000088: EQ 00000089: PUSH2 0x0281 0000008c: JUMPI 0000008d: DUP1 0000008e: PUSH4 0xfb6e155f 00000093: EQ 00000094: PUSH2 0x02be 00000097: JUMPI 00000098: JUMPDEST 00000099: PUSH2 0x03d0 0000009c: PUSH2 0x0002 0000009f: JUMP 000000a0: JUMPDEST 000000a1: PUSH2 0x03d0 000000a4: PUSH1 0x04 000000a6: CALLDATALOAD 000000a7: PUSH1 0x24 000000a9: CALLDATALOAD 000000aa: PUSH1 0x44 000000ac: CALLDATALOAD 000000ad: PUSH1 0x64 000000af: CALLDATALOAD 000000b0: PUSH1 0x84 000000b2: CALLDATALOAD 000000b3: PUSH1 0xa4 000000b5: CALLDATALOAD 000000b6: PUSH1 0xc4 000000b8: CALLDATALOAD 000000b9: PUSH1 0xe4 000000bb: CALLDATALOAD 000000bc: PUSH2 0x0104 000000bf: CALLDATALOAD 000000c0: PUSH2 0x0124 000000c3: CALLDATALOAD 000000c4: PUSH2 0x0144 000000c7: CALLDATALOAD 000000c8: PUSH1 0x00 000000ca: PUSH1 0x00 000000cc: CALLVALUE 000000cd: GT 000000ce: ISZERO 000000cf: PUSH2 0x0403 000000d2: JUMPI 000000d3: PUSH2 0x0002 000000d6: JUMP 000000d7: JUMPDEST 000000d8: PUSH2 0x03d0 000000db: PUSH1 0x04 000000dd: CALLDATALOAD 000000de: PUSH1 0x00 000000e0: CALLVALUE 000000e1: GT 000000e2: ISZERO 000000e3: PUSH2 0x087e 000000e6: JUMPI 000000e7: PUSH2 0x0002 000000ea: JUMP 000000eb: JUMPDEST 000000ec: PUSH2 0x03d0 000000ef: PUSH1 0x04 000000f1: CALLDATALOAD 000000f2: PUSH1 0x24 000000f4: CALLDATALOAD 000000f5: PUSH1 0x00 000000f7: CALLVALUE 000000f8: GT 000000f9: DUP1 000000fa: PUSH2 0x010c 000000fd: JUMPI 000000fe: POP 000000ff: DUP2 00000100: PUSH1 0x01 00000102: PUSH1 0xa0 00000104: PUSH1 0x02 00000106: EXP 00000107: SUB 00000108: AND 00000109: PUSH1 0x00 0000010b: EQ 0000010c: JUMPDEST 0000010d: ISZERO 0000010e: PUSH2 0x096a 00000111: JUMPI 00000112: PUSH2 0x0002 00000115: JUMP 00000116: JUMPDEST 00000117: PUSH2 0x02ac 0000011a: PUSH1 0x03 0000011c: SLOAD 0000011d: DUP2 0000011e: JUMP 0000011f: JUMPDEST 00000120: PUSH2 0x03d2 00000123: PUSH1 0x02 00000125: SLOAD 00000126: PUSH1 0x01 00000128: PUSH1 0xa0 0000012a: PUSH1 0x02 0000012c: EXP 0000012d: SUB 0000012e: AND 0000012f: DUP2 00000130: JUMP 00000131: JUMPDEST 00000132: PUSH2 0x03ef 00000135: PUSH1 0x04 00000137: CALLDATALOAD 00000138: PUSH1 0x24 0000013a: CALLDATALOAD 0000013b: PUSH1 0x44 0000013d: CALLDATALOAD 0000013e: PUSH1 0x64 00000140: CALLDATALOAD 00000141: PUSH1 0x84 00000143: CALLDATALOAD 00000144: PUSH1 0xa4 00000146: CALLDATALOAD 00000147: PUSH1 0xc4 00000149: CALLDATALOAD 0000014a: PUSH1 0xe4 0000014c: CALLDATALOAD 0000014d: PUSH2 0x0104 00000150: CALLDATALOAD 00000151: PUSH2 0x0124 00000154: CALLDATALOAD 00000155: PUSH2 0x0144 00000158: CALLDATALOAD 00000159: PUSH2 0x0164 0000015c: CALLDATALOAD 0000015d: PUSH1 0x01 0000015f: PUSH1 0xa0 00000161: PUSH1 0x02 00000163: EXP 00000164: SUB 00000165: DUP13 00000166: DUP2 00000167: AND 00000168: PUSH1 0x00 0000016a: SWAP1 0000016b: DUP2 0000016c: MSTORE 0000016d: PUSH1 0x20 0000016f: DUP2 00000170: DUP2 00000171: MSTORE 00000172: PUSH1 0x40 00000174: DUP1 00000175: DUP4 00000176: KECCAK256 00000177: SWAP4 00000178: DUP6 00000179: AND 0000017a: DUP4 0000017b: MSTORE 0000017c: SWAP3 0000017d: SWAP1 0000017e: MSTORE 0000017f: SWAP1 00000180: DUP2 00000181: KECCAK256 00000182: SLOAD 00000183: DUP4 00000184: SWAP1 00000185: LT 00000186: DUP1 00000187: ISZERO 00000188: SWAP1 00000189: PUSH2 0x0a70 0000018c: JUMPI 0000018d: POP 0000018e: DUP3 0000018f: PUSH2 0x0a6d 00000192: DUP15 00000193: DUP15 00000194: DUP15 00000195: DUP15 00000196: DUP15 00000197: DUP15 00000198: DUP15 00000199: DUP15 0000019a: DUP15 0000019b: DUP15 0000019c: PUSH2 0x02e2 0000019f: JUMP 000001a0: JUMPDEST 000001a1: PUSH2 0x03d0 000001a4: PUSH1 0x04 000001a6: CALLDATALOAD 000001a7: PUSH1 0x24 000001a9: CALLDATALOAD 000001aa: PUSH1 0x44 000001ac: CALLDATALOAD 000001ad: PUSH1 0x64 000001af: CALLDATALOAD 000001b0: PUSH1 0x84 000001b2: CALLDATALOAD 000001b3: PUSH1 0xa4 000001b5: CALLDATALOAD 000001b6: PUSH1 0xc4 000001b8: CALLDATALOAD 000001b9: PUSH1 0xe4 000001bb: CALLDATALOAD 000001bc: PUSH2 0x0104 000001bf: CALLDATALOAD 000001c0: PUSH1 0x00 000001c2: CALLVALUE 000001c3: GT 000001c4: ISZERO 000001c5: PUSH2 0x0a7e 000001c8: JUMPI 000001c9: PUSH2 0x0002 000001cc: JUMP 000001cd: JUMPDEST 000001ce: PUSH2 0x03d0 000001d1: PUSH1 0x04 000001d3: CALLDATALOAD 000001d4: PUSH1 0x24 000001d6: CALLDATALOAD 000001d7: PUSH1 0x00 000001d9: CALLVALUE 000001da: GT 000001db: DUP1 000001dc: PUSH2 0x01ee 000001df: JUMPI 000001e0: POP 000001e1: DUP2 000001e2: PUSH1 0x01 000001e4: PUSH1 0xa0 000001e6: PUSH1 0x02 000001e8: EXP 000001e9: SUB 000001ea: AND 000001eb: PUSH1 0x00 000001ed: EQ 000001ee: JUMPDEST 000001ef: ISZERO 000001f0: PUSH2 0x0b0a 000001f3: JUMPI 000001f4: PUSH2 0x0002 000001f7: JUMP 000001f8: JUMPDEST 000001f9: PUSH2 0x02ac 000001fc: PUSH1 0x04 000001fe: SLOAD 000001ff: DUP2 00000200: JUMP 00000201: JUMPDEST 00000202: CALLER 00000203: PUSH1 0x01 00000205: PUSH1 0xa0 00000207: PUSH1 0x02 00000209: EXP 0000020a: SUB 0000020b: AND 0000020c: PUSH1 0x00 0000020e: DUP2 0000020f: DUP2 00000210: MSTORE 00000211: PUSH1 0x00 00000213: DUP1 00000214: MLOAD 00000215: PUSH1 0x20 00000217: PUSH2 0x0ca9 0000021a: DUP4 0000021b: CODECOPY 0000021c: DUP2 0000021d: MLOAD 0000021e: SWAP2 0000021f: MSTORE 00000220: PUSH1 0x20 00000222: SWAP1 00000223: DUP2 00000224: MSTORE 00000225: PUSH1 0x40 00000227: DUP1 00000228: DUP4 00000229: KECCAK256 0000022a: DUP1 0000022b: SLOAD 0000022c: CALLVALUE 0000022d: SWAP1 0000022e: DUP2 0000022f: ADD 00000230: SWAP2 00000231: DUP3 00000232: SWAP1 00000233: SSTORE 00000234: DUP3 00000235: MLOAD 00000236: SWAP5 00000237: DUP6 00000238: MSTORE 00000239: SWAP3 0000023a: DUP5 0000023b: ADD 0000023c: SWAP5 0000023d: SWAP1 0000023e: SWAP5 0000023f: MSTORE 00000240: DUP3 00000241: DUP2 00000242: ADD 00000243: SWAP2 00000244: SWAP1 00000245: SWAP2 00000246: MSTORE 00000247: PUSH1 0x60 00000249: DUP3 0000024a: ADD 0000024b: SWAP3 0000024c: SWAP1 0000024d: SWAP3 0000024e: MSTORE 0000024f: SWAP1 00000250: MLOAD 00000251: PUSH2 0x03d0 00000254: SWAP2 00000255: PUSH32 0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7 00000276: SWAP2 00000277: SWAP1 00000278: DUP2 00000279: SWAP1 0000027a: SUB 0000027b: PUSH1 0x80 0000027d: ADD 0000027e: SWAP1 0000027f: LOG1 00000280: JUMP 00000281: JUMPDEST 00000282: PUSH1 0x01 00000284: PUSH1 0xa0 00000286: PUSH1 0x02 00000288: EXP 00000289: SUB 0000028a: PUSH1 0x04 0000028c: CALLDATALOAD 0000028d: DUP2 0000028e: AND 0000028f: PUSH1 0x00 00000291: SWAP1 00000292: DUP2 00000293: MSTORE 00000294: PUSH1 0x20 00000296: DUP2 00000297: DUP2 00000298: MSTORE 00000299: PUSH1 0x40 0000029b: DUP1 0000029c: DUP4 0000029d: KECCAK256 0000029e: PUSH1 0x24 000002a0: CALLDATALOAD 000002a1: SWAP5 000002a2: SWAP1 000002a3: SWAP5 000002a4: AND 000002a5: DUP4 000002a6: MSTORE 000002a7: SWAP3 000002a8: SWAP1 000002a9: MSTORE 000002aa: KECCAK256 000002ab: SLOAD 000002ac: JUMPDEST 000002ad: PUSH1 0x40 000002af: DUP1 000002b0: MLOAD 000002b1: SWAP2 000002b2: DUP3 000002b3: MSTORE 000002b4: MLOAD 000002b5: SWAP1 000002b6: DUP2 000002b7: SWAP1 000002b8: SUB 000002b9: PUSH1 0x20 000002bb: ADD 000002bc: SWAP1 000002bd: RETURN 000002be: JUMPDEST 000002bf: PUSH2 0x02ac 000002c2: PUSH1 0x04 000002c4: CALLDATALOAD 000002c5: PUSH1 0x24 000002c7: CALLDATALOAD 000002c8: PUSH1 0x44 000002ca: CALLDATALOAD 000002cb: PUSH1 0x64 000002cd: CALLDATALOAD 000002ce: PUSH1 0x84 000002d0: CALLDATALOAD 000002d1: PUSH1 0xa4 000002d3: CALLDATALOAD 000002d4: PUSH1 0xc4 000002d6: CALLDATALOAD 000002d7: PUSH1 0xe4 000002d9: CALLDATALOAD 000002da: PUSH2 0x0104 000002dd: CALLDATALOAD 000002de: PUSH2 0x0124 000002e1: CALLDATALOAD 000002e2: JUMPDEST 000002e3: PUSH1 0x00 000002e5: PUSH1 0x00 000002e7: PUSH1 0x00 000002e9: PUSH1 0x00 000002eb: PUSH1 0x02 000002ed: DUP15 000002ee: DUP15 000002ef: DUP15 000002f0: DUP15 000002f1: DUP15 000002f2: DUP15 000002f3: PUSH1 0x40 000002f5: MLOAD 000002f6: DUP1 000002f7: DUP8 000002f8: PUSH1 0x01 000002fa: PUSH1 0xa0 000002fc: PUSH1 0x02 000002fe: EXP 000002ff: SUB 00000300: AND 00000301: PUSH1 0x60 00000303: PUSH1 0x02 00000305: EXP 00000306: MUL 00000307: DUP2 00000308: MSTORE 00000309: PUSH1 0x14 0000030b: ADD 0000030c: DUP7 0000030d: DUP2 0000030e: MSTORE 0000030f: PUSH1 0x20 00000311: ADD 00000312: DUP6 00000313: PUSH1 0x01 00000315: PUSH1 0xa0 00000317: PUSH1 0x02 00000319: EXP 0000031a: SUB 0000031b: AND 0000031c: PUSH1 0x60 0000031e: PUSH1 0x02 00000320: EXP 00000321: MUL 00000322: DUP2 00000323: MSTORE 00000324: PUSH1 0x14 00000326: ADD 00000327: DUP5 00000328: DUP2 00000329: MSTORE 0000032a: PUSH1 0x20 0000032c: ADD 0000032d: DUP4 0000032e: DUP2 0000032f: MSTORE 00000330: PUSH1 0x20 00000332: ADD 00000333: DUP3 00000334: DUP2 00000335: MSTORE 00000336: PUSH1 0x20 00000338: ADD 00000339: SWAP7 0000033a: POP 0000033b: POP 0000033c: POP 0000033d: POP 0000033e: POP 0000033f: POP 00000340: POP 00000341: PUSH1 0x20 00000343: PUSH1 0x40 00000345: MLOAD 00000346: DUP1 00000347: DUP4 00000348: SUB 00000349: DUP2 0000034a: PUSH1 0x00 0000034c: DUP7 0000034d: PUSH2 0x61da 00000350: GAS 00000351: SUB 00000352: CALL 00000353: ISZERO 00000354: PUSH2 0x0002 00000357: JUMPI 00000358: POP 00000359: POP 0000035a: PUSH1 0x40 0000035c: DUP1 0000035d: MLOAD 0000035e: DUP1 0000035f: MLOAD 00000360: PUSH1 0xff 00000362: DUP11 00000363: AND 00000364: PUSH1 0x20 00000366: DUP4 00000367: DUP2 00000368: ADD 00000369: SWAP2 0000036a: SWAP1 0000036b: SWAP2 0000036c: MSTORE 0000036d: DUP3 0000036e: DUP5 0000036f: ADD 00000370: DUP11 00000371: SWAP1 00000372: MSTORE 00000373: PUSH1 0x60 00000375: DUP4 00000376: ADD 00000377: DUP10 00000378: SWAP1 00000379: MSTORE 0000037a: SWAP3 0000037b: MLOAD 0000037c: SWAP1 0000037d: SWAP6 0000037e: POP 0000037f: PUSH1 0x01 00000381: PUSH1 0xa0 00000383: PUSH1 0x02 00000385: EXP 00000386: SUB 00000387: DUP12 00000388: AND 00000389: SWAP3 0000038a: PUSH1 0x01 0000038c: SWAP3 0000038d: PUSH1 0x80 0000038f: DUP2 00000390: DUP2 00000391: ADD 00000392: SWAP4 00000393: SWAP2 00000394: DUP3 00000395: SWAP1 00000396: SUB 00000397: ADD 00000398: DUP2 00000399: DUP8 0000039a: DUP7 0000039b: PUSH2 0x61da 0000039e: GAS 0000039f: SUB 000003a0: CALL 000003a1: ISZERO 000003a2: PUSH2 0x0002 000003a5: JUMPI 000003a6: POP 000003a7: POP 000003a8: PUSH1 0x40 000003aa: MLOAD 000003ab: MLOAD 000003ac: PUSH1 0x01 000003ae: PUSH1 0xa0 000003b0: PUSH1 0x02 000003b2: EXP 000003b3: SUB 000003b4: AND 000003b5: EQ 000003b6: DUP1 000003b7: ISZERO 000003b8: PUSH2 0x03c1 000003bb: JUMPI 000003bc: POP 000003bd: DUP10 000003be: NUMBER 000003bf: GT 000003c0: ISZERO 000003c1: JUMPDEST 000003c2: ISZERO 000003c3: ISZERO 000003c4: PUSH2 0x0c5d 000003c7: JUMPI 000003c8: PUSH1 0x00 000003ca: SWAP4 000003cb: POP 000003cc: PUSH2 0x0c4c 000003cf: JUMP 000003d0: JUMPDEST 000003d1: STOP 000003d2: JUMPDEST 000003d3: PUSH1 0x40 000003d5: DUP1 000003d6: MLOAD 000003d7: PUSH1 0x01 000003d9: PUSH1 0xa0 000003db: PUSH1 0x02 000003dd: EXP 000003de: SUB 000003df: SWAP3 000003e0: SWAP1 000003e1: SWAP3 000003e2: AND 000003e3: DUP3 000003e4: MSTORE 000003e5: MLOAD 000003e6: SWAP1 000003e7: DUP2 000003e8: SWAP1 000003e9: SUB 000003ea: PUSH1 0x20 000003ec: ADD 000003ed: SWAP1 000003ee: RETURN 000003ef: JUMPDEST 000003f0: PUSH1 0x40 000003f2: DUP1 000003f3: MLOAD 000003f4: SWAP2 000003f5: ISZERO 000003f6: ISZERO 000003f7: DUP3 000003f8: MSTORE 000003f9: MLOAD 000003fa: SWAP1 000003fb: DUP2 000003fc: SWAP1 000003fd: SUB 000003fe: PUSH1 0x20 00000400: ADD 00000401: SWAP1 00000402: RETURN 00000403: JUMPDEST 00000404: PUSH1 0x02 00000406: DUP13 00000407: DUP13 00000408: DUP13 00000409: DUP13 0000040a: DUP13 0000040b: DUP13 0000040c: PUSH1 0x40 0000040e: MLOAD 0000040f: DUP1 00000410: DUP8 00000411: PUSH1 0x01 00000413: PUSH1 0xa0 00000415: PUSH1 0x02 00000417: EXP 00000418: SUB 00000419: AND 0000041a: PUSH1 0x60 0000041c: PUSH1 0x02 0000041e: EXP 0000041f: MUL 00000420: DUP2 00000421: MSTORE 00000422: PUSH1 0x14 00000424: ADD 00000425: DUP7 00000426: DUP2 00000427: MSTORE 00000428: PUSH1 0x20 0000042a: ADD 0000042b: DUP6 0000042c: PUSH1 0x01 0000042e: PUSH1 0xa0 00000430: PUSH1 0x02 00000432: EXP 00000433: SUB 00000434: AND 00000435: PUSH1 0x60 00000437: PUSH1 0x02 00000439: EXP 0000043a: MUL 0000043b: DUP2 0000043c: MSTORE 0000043d: PUSH1 0x14 0000043f: ADD 00000440: DUP5 00000441: DUP2 00000442: MSTORE 00000443: PUSH1 0x20 00000445: ADD 00000446: DUP4 00000447: DUP2 00000448: MSTORE 00000449: PUSH1 0x20 0000044b: ADD 0000044c: DUP3 0000044d: DUP2 0000044e: MSTORE 0000044f: PUSH1 0x20 00000451: ADD 00000452: SWAP7 00000453: POP 00000454: POP 00000455: POP 00000456: POP 00000457: POP 00000458: POP 00000459: POP 0000045a: PUSH1 0x20 0000045c: PUSH1 0x40 0000045e: MLOAD 0000045f: DUP1 00000460: DUP4 00000461: SUB 00000462: DUP2 00000463: PUSH1 0x00 00000465: DUP7 00000466: PUSH2 0x61da 00000469: GAS 0000046a: SUB 0000046b: CALL 0000046c: ISZERO 0000046d: PUSH2 0x0002 00000470: JUMPI 00000471: POP 00000472: POP 00000473: PUSH1 0x40 00000475: DUP1 00000476: MLOAD 00000477: DUP1 00000478: MLOAD 00000479: PUSH1 0xff 0000047b: DUP9 0000047c: AND 0000047d: PUSH1 0x20 0000047f: DUP4 00000480: DUP2 00000481: ADD 00000482: SWAP2 00000483: SWAP1 00000484: SWAP2 00000485: MSTORE 00000486: DUP3 00000487: DUP5 00000488: ADD 00000489: DUP9 0000048a: SWAP1 0000048b: MSTORE 0000048c: PUSH1 0x60 0000048e: DUP4 0000048f: ADD 00000490: DUP8 00000491: SWAP1 00000492: MSTORE 00000493: SWAP3 00000494: MLOAD 00000495: SWAP1 00000496: SWAP4 00000497: POP 00000498: PUSH1 0x01 0000049a: PUSH1 0xa0 0000049c: PUSH1 0x02 0000049e: EXP 0000049f: SUB 000004a0: DUP10 000004a1: AND 000004a2: SWAP3 000004a3: PUSH1 0x01 000004a5: SWAP3 000004a6: PUSH1 0x80 000004a8: DUP2 000004a9: DUP2 000004aa: ADD 000004ab: SWAP4 000004ac: SWAP2 000004ad: DUP3 000004ae: SWAP1 000004af: SUB 000004b0: ADD 000004b1: DUP2 000004b2: PUSH1 0x00 000004b4: DUP7 000004b5: PUSH2 0x61da 000004b8: GAS 000004b9: SUB 000004ba: CALL 000004bb: ISZERO 000004bc: PUSH2 0x0002 000004bf: JUMPI 000004c0: POP 000004c1: POP 000004c2: PUSH1 0x40 000004c4: MLOAD 000004c5: MLOAD 000004c6: PUSH1 0x01 000004c8: PUSH1 0xa0 000004ca: PUSH1 0x02 000004cc: EXP 000004cd: SUB 000004ce: AND 000004cf: EQ 000004d0: DUP1 000004d1: ISZERO 000004d2: PUSH2 0x04db 000004d5: JUMPI 000004d6: POP 000004d7: DUP8 000004d8: NUMBER 000004d9: GT 000004da: ISZERO 000004db: JUMPDEST 000004dc: DUP1 000004dd: ISZERO 000004de: PUSH2 0x04f8 000004e1: JUMPI 000004e2: POP 000004e3: PUSH1 0x00 000004e5: DUP2 000004e6: DUP2 000004e7: MSTORE 000004e8: PUSH1 0x01 000004ea: PUSH1 0x20 000004ec: MSTORE 000004ed: PUSH1 0x40 000004ef: SWAP1 000004f0: KECCAK256 000004f1: SLOAD 000004f2: DUP3 000004f3: ADD 000004f4: DUP12 000004f5: SWAP1 000004f6: GT 000004f7: ISZERO 000004f8: JUMPDEST 000004f9: DUP1 000004fa: ISZERO 000004fb: PUSH2 0x0529 000004fe: JUMPI 000004ff: POP 00000500: PUSH1 0x01 00000502: PUSH1 0xa0 00000504: PUSH1 0x02 00000506: EXP 00000507: SUB 00000508: DUP13 00000509: DUP2 0000050a: AND 0000050b: PUSH1 0x00 0000050d: SWAP1 0000050e: DUP2 0000050f: MSTORE 00000510: PUSH1 0x20 00000512: DUP2 00000513: DUP2 00000514: MSTORE 00000515: PUSH1 0x40 00000517: DUP1 00000518: DUP4 00000519: KECCAK256 0000051a: CALLER 0000051b: SWAP1 0000051c: SWAP5 0000051d: AND 0000051e: DUP4 0000051f: MSTORE 00000520: SWAP3 00000521: SWAP1 00000522: MSTORE 00000523: KECCAK256 00000524: SLOAD 00000525: DUP3 00000526: SWAP1 00000527: LT 00000528: ISZERO 00000529: JUMPDEST 0000052a: DUP1 0000052b: ISZERO 0000052c: PUSH2 0x055e 0000052f: JUMPI 00000530: POP 00000531: PUSH1 0x01 00000533: PUSH1 0xa0 00000535: PUSH1 0x02 00000537: EXP 00000538: SUB 00000539: DUP11 0000053a: DUP2 0000053b: AND 0000053c: PUSH1 0x00 0000053e: SWAP1 0000053f: DUP2 00000540: MSTORE 00000541: PUSH1 0x20 00000543: DUP2 00000544: DUP2 00000545: MSTORE 00000546: PUSH1 0x40 00000548: DUP1 00000549: DUP4 0000054a: KECCAK256 0000054b: SWAP4 0000054c: DUP11 0000054d: AND 0000054e: DUP4 0000054f: MSTORE 00000550: SWAP3 00000551: SWAP1 00000552: MSTORE 00000553: KECCAK256 00000554: SLOAD 00000555: DUP10 00000556: DUP4 00000557: MUL 00000558: DUP13 00000559: SWAP1 0000055a: DIV 0000055b: SWAP1 0000055c: LT 0000055d: ISZERO 0000055e: JUMPDEST 0000055f: ISZERO 00000560: ISZERO 00000561: PUSH2 0x0569 00000564: JUMPI 00000565: PUSH2 0x0002 00000568: JUMP 00000569: JUMPDEST 0000056a: DUP2 0000056b: PUSH1 0x00 0000056d: PUSH1 0x00 0000056f: POP 00000570: PUSH1 0x00 00000572: DUP15 00000573: PUSH1 0x01 00000575: PUSH1 0xa0 00000577: PUSH1 0x02 00000579: EXP 0000057a: SUB 0000057b: AND 0000057c: DUP2 0000057d: MSTORE 0000057e: PUSH1 0x20 00000580: ADD 00000581: SWAP1 00000582: DUP2 00000583: MSTORE 00000584: PUSH1 0x20 00000586: ADD 00000587: PUSH1 0x00 00000589: KECCAK256 0000058a: PUSH1 0x00 0000058c: POP 0000058d: PUSH1 0x00 0000058f: CALLER 00000590: PUSH1 0x01 00000592: PUSH1 0xa0 00000594: PUSH1 0x02 00000596: EXP 00000597: SUB 00000598: AND 00000599: DUP2 0000059a: MSTORE 0000059b: PUSH1 0x20 0000059d: ADD 0000059e: SWAP1 0000059f: DUP2 000005a0: MSTORE 000005a1: PUSH1 0x20 000005a3: ADD 000005a4: PUSH1 0x00 000005a6: KECCAK256 000005a7: PUSH1 0x00 000005a9: DUP3 000005aa: DUP3 000005ab: DUP3 000005ac: POP 000005ad: SLOAD 000005ae: SUB 000005af: SWAP3 000005b0: POP 000005b1: POP 000005b2: DUP2 000005b3: SWAP1 000005b4: SSTORE 000005b5: POP 000005b6: PUSH8 0x0de0b6b3a7640000 000005bf: PUSH1 0x03 000005c1: PUSH1 0x00 000005c3: POP 000005c4: SLOAD 000005c5: PUSH8 0x0de0b6b3a7640000 000005ce: SUB 000005cf: DUP4 000005d0: MUL 000005d1: DIV 000005d2: PUSH1 0x00 000005d4: PUSH1 0x00 000005d6: POP 000005d7: PUSH1 0x00 000005d9: DUP15 000005da: PUSH1 0x01 000005dc: PUSH1 0xa0 000005de: PUSH1 0x02 000005e0: EXP 000005e1: SUB 000005e2: AND 000005e3: DUP2 000005e4: MSTORE 000005e5: PUSH1 0x20 000005e7: ADD 000005e8: SWAP1 000005e9: DUP2 000005ea: MSTORE 000005eb: PUSH1 0x20 000005ed: ADD 000005ee: PUSH1 0x00 000005f0: KECCAK256 000005f1: PUSH1 0x00 000005f3: POP 000005f4: PUSH1 0x00 000005f6: DUP9 000005f7: PUSH1 0x01 000005f9: PUSH1 0xa0 000005fb: PUSH1 0x02 000005fd: EXP 000005fe: SUB 000005ff: AND 00000600: DUP2 00000601: MSTORE 00000602: PUSH1 0x20 00000604: ADD 00000605: SWAP1 00000606: DUP2 00000607: MSTORE 00000608: PUSH1 0x20 0000060a: ADD 0000060b: PUSH1 0x00 0000060d: KECCAK256 0000060e: PUSH1 0x00 00000610: DUP3 00000611: DUP3 00000612: DUP3 00000613: POP 00000614: SLOAD 00000615: ADD 00000616: SWAP3 00000617: POP 00000618: POP 00000619: DUP2 0000061a: SWAP1 0000061b: SSTORE 0000061c: POP 0000061d: PUSH8 0x0de0b6b3a7640000 00000626: PUSH1 0x03 00000628: PUSH1 0x00 0000062a: POP 0000062b: SLOAD 0000062c: DUP4 0000062d: MUL 0000062e: DIV 0000062f: PUSH1 0x00 00000631: PUSH1 0x00 00000633: POP 00000634: PUSH1 0x00 00000636: DUP15 00000637: PUSH1 0x01 00000639: PUSH1 0xa0 0000063b: PUSH1 0x02 0000063d: EXP 0000063e: SUB 0000063f: AND 00000640: DUP2 00000641: MSTORE 00000642: PUSH1 0x20 00000644: ADD 00000645: SWAP1 00000646: DUP2 00000647: MSTORE 00000648: PUSH1 0x20 0000064a: ADD 0000064b: PUSH1 0x00 0000064d: KECCAK256 0000064e: PUSH1 0x00 00000650: POP 00000651: PUSH1 0x00 00000653: PUSH1 0x02 00000655: PUSH1 0x00 00000657: SWAP1 00000658: SLOAD 00000659: SWAP1 0000065a: PUSH2 0x0100 0000065d: EXP 0000065e: SWAP1 0000065f: DIV 00000660: PUSH1 0x01 00000662: PUSH1 0xa0 00000664: PUSH1 0x02 00000666: EXP 00000667: SUB 00000668: AND 00000669: PUSH1 0x01 0000066b: PUSH1 0xa0 0000066d: PUSH1 0x02 0000066f: EXP 00000670: SUB 00000671: AND 00000672: DUP2 00000673: MSTORE 00000674: PUSH1 0x20 00000676: ADD 00000677: SWAP1 00000678: DUP2 00000679: MSTORE 0000067a: PUSH1 0x20 0000067c: ADD 0000067d: PUSH1 0x00 0000067f: KECCAK256 00000680: PUSH1 0x00 00000682: DUP3 00000683: DUP3 00000684: DUP3 00000685: POP 00000686: SLOAD 00000687: ADD 00000688: SWAP3 00000689: POP 0000068a: POP 0000068b: DUP2 0000068c: SWAP1 0000068d: SSTORE 0000068e: POP 0000068f: DUP11 00000690: DUP3 00000691: DUP11 00000692: MUL 00000693: DIV 00000694: PUSH1 0x00 00000696: PUSH1 0x00 00000698: POP 00000699: PUSH1 0x00 0000069b: DUP13 0000069c: PUSH1 0x01 0000069e: PUSH1 0xa0 000006a0: PUSH1 0x02 000006a2: EXP 000006a3: SUB 000006a4: AND 000006a5: DUP2 000006a6: MSTORE 000006a7: PUSH1 0x20 000006a9: ADD 000006aa: SWAP1 000006ab: DUP2 000006ac: MSTORE 000006ad: PUSH1 0x20 000006af: ADD 000006b0: PUSH1 0x00 000006b2: KECCAK256 000006b3: PUSH1 0x00 000006b5: POP 000006b6: PUSH1 0x00 000006b8: DUP9 000006b9: PUSH1 0x01 000006bb: PUSH1 0xa0 000006bd: PUSH1 0x02 000006bf: EXP 000006c0: SUB 000006c1: AND 000006c2: DUP2 000006c3: MSTORE 000006c4: PUSH1 0x20 000006c6: ADD 000006c7: SWAP1 000006c8: DUP2 000006c9: MSTORE 000006ca: PUSH1 0x20 000006cc: ADD 000006cd: PUSH1 0x00 000006cf: KECCAK256 000006d0: PUSH1 0x00 000006d2: DUP3 000006d3: DUP3 000006d4: DUP3 000006d5: POP 000006d6: SLOAD 000006d7: SUB 000006d8: SWAP3 000006d9: POP 000006da: POP 000006db: DUP2 000006dc: SWAP1 000006dd: SSTORE 000006de: POP 000006df: PUSH8 0x0de0b6b3a7640000 000006e8: DUP12 000006e9: DUP4 000006ea: DUP12 000006eb: PUSH1 0x04 000006ed: PUSH1 0x00 000006ef: POP 000006f0: SLOAD 000006f1: PUSH8 0x0de0b6b3a7640000 000006fa: SUB 000006fb: MUL 000006fc: MUL 000006fd: DIV 000006fe: DIV 000006ff: PUSH1 0x00 00000701: PUSH1 0x00 00000703: POP 00000704: PUSH1 0x00 00000706: DUP13 00000707: PUSH1 0x01 00000709: PUSH1 0xa0 0000070b: PUSH1 0x02 0000070d: EXP 0000070e: SUB 0000070f: AND 00000710: DUP2 00000711: MSTORE 00000712: PUSH1 0x20 00000714: ADD 00000715: SWAP1 00000716: DUP2 00000717: MSTORE 00000718: PUSH1 0x20 0000071a: ADD 0000071b: PUSH1 0x00 0000071d: KECCAK256 0000071e: PUSH1 0x00 00000720: POP 00000721: PUSH1 0x00 00000723: CALLER 00000724: PUSH1 0x01 00000726: PUSH1 0xa0 00000728: PUSH1 0x02 0000072a: EXP 0000072b: SUB 0000072c: AND 0000072d: DUP2 0000072e: MSTORE 0000072f: PUSH1 0x20 00000731: ADD 00000732: SWAP1 00000733: DUP2 00000734: MSTORE 00000735: PUSH1 0x20 00000737: ADD 00000738: PUSH1 0x00 0000073a: KECCAK256 0000073b: PUSH1 0x00 0000073d: DUP3 0000073e: DUP3 0000073f: DUP3 00000740: POP 00000741: SLOAD 00000742: ADD 00000743: SWAP3 00000744: POP 00000745: POP 00000746: DUP2 00000747: SWAP1 00000748: SSTORE 00000749: POP 0000074a: PUSH8 0x0de0b6b3a7640000 00000753: DUP12 00000754: DUP4 00000755: DUP12 00000756: PUSH1 0x04 00000758: PUSH1 0x00 0000075a: POP 0000075b: SLOAD 0000075c: MUL 0000075d: MUL 0000075e: DIV 0000075f: DIV 00000760: PUSH1 0x00 00000762: PUSH1 0x00 00000764: POP 00000765: PUSH1 0x00 00000767: DUP13 00000768: PUSH1 0x01 0000076a: PUSH1 0xa0 0000076c: PUSH1 0x02 0000076e: EXP 0000076f: SUB 00000770: AND 00000771: DUP2 00000772: MSTORE 00000773: PUSH1 0x20 00000775: ADD 00000776: SWAP1 00000777: DUP2 00000778: MSTORE 00000779: PUSH1 0x20 0000077b: ADD 0000077c: PUSH1 0x00 0000077e: KECCAK256 0000077f: PUSH1 0x00 00000781: POP 00000782: PUSH1 0x00 00000784: PUSH1 0x02 00000786: PUSH1 0x00 00000788: SWAP1 00000789: SLOAD 0000078a: SWAP1 0000078b: PUSH2 0x0100 0000078e: EXP 0000078f: SWAP1 00000790: DIV 00000791: PUSH1 0x01 00000793: PUSH1 0xa0 00000795: PUSH1 0x02 00000797: EXP 00000798: SUB 00000799: AND 0000079a: PUSH1 0x01 0000079c: PUSH1 0xa0 0000079e: PUSH1 0x02 000007a0: EXP 000007a1: SUB 000007a2: AND 000007a3: DUP2 000007a4: MSTORE 000007a5: PUSH1 0x20 000007a7: ADD 000007a8: SWAP1 000007a9: DUP2 000007aa: MSTORE 000007ab: PUSH1 0x20 000007ad: ADD 000007ae: PUSH1 0x00 000007b0: KECCAK256 000007b1: PUSH1 0x00 000007b3: DUP3 000007b4: DUP3 000007b5: DUP3 000007b6: POP 000007b7: SLOAD 000007b8: ADD 000007b9: SWAP3 000007ba: POP 000007bb: POP 000007bc: DUP2 000007bd: SWAP1 000007be: SSTORE 000007bf: POP 000007c0: DUP2 000007c1: PUSH1 0x01 000007c3: PUSH1 0x00 000007c5: POP 000007c6: PUSH1 0x00 000007c8: DUP4 000007c9: PUSH1 0x00 000007cb: NOT 000007cc: AND 000007cd: DUP2 000007ce: MSTORE 000007cf: PUSH1 0x20 000007d1: ADD 000007d2: SWAP1 000007d3: DUP2 000007d4: MSTORE 000007d5: PUSH1 0x20 000007d7: ADD 000007d8: PUSH1 0x00 000007da: KECCAK256 000007db: PUSH1 0x00 000007dd: DUP3 000007de: DUP3 000007df: DUP3 000007e0: POP 000007e1: SLOAD 000007e2: ADD 000007e3: SWAP3 000007e4: POP 000007e5: POP 000007e6: DUP2 000007e7: SWAP1 000007e8: SSTORE 000007e9: POP 000007ea: PUSH32 0x6effdda786735d5033bfad5f53e5131abcced9e52be6c507b62d639685fbed6d 0000080b: DUP13 0000080c: DUP4 0000080d: DUP13 0000080e: DUP15 0000080f: DUP7 00000810: DUP15 00000811: MUL 00000812: DIV 00000813: DUP11 00000814: CALLER 00000815: PUSH1 0x40 00000817: MLOAD 00000818: DUP1 00000819: DUP8 0000081a: PUSH1 0x01 0000081c: PUSH1 0xa0 0000081e: PUSH1 0x02 00000820: EXP 00000821: SUB 00000822: AND 00000823: DUP2 00000824: MSTORE 00000825: PUSH1 0x20 00000827: ADD 00000828: DUP7 00000829: DUP2 0000082a: MSTORE 0000082b: PUSH1 0x20 0000082d: ADD 0000082e: DUP6 0000082f: PUSH1 0x01 00000831: PUSH1 0xa0 00000833: PUSH1 0x02 00000835: EXP 00000836: SUB 00000837: AND 00000838: DUP2 00000839: MSTORE 0000083a: PUSH1 0x20 0000083c: ADD 0000083d: DUP5 0000083e: DUP2 0000083f: MSTORE 00000840: PUSH1 0x20 00000842: ADD 00000843: DUP4 00000844: PUSH1 0x01 00000846: PUSH1 0xa0 00000848: PUSH1 0x02 0000084a: EXP 0000084b: SUB 0000084c: AND 0000084d: DUP2 0000084e: MSTORE 0000084f: PUSH1 0x20 00000851: ADD 00000852: DUP3 00000853: PUSH1 0x01 00000855: PUSH1 0xa0 00000857: PUSH1 0x02 00000859: EXP 0000085a: SUB 0000085b: AND 0000085c: DUP2 0000085d: MSTORE 0000085e: PUSH1 0x20 00000860: ADD 00000861: SWAP7 00000862: POP 00000863: POP 00000864: POP 00000865: POP 00000866: POP 00000867: POP 00000868: POP 00000869: PUSH1 0x40 0000086b: MLOAD 0000086c: DUP1 0000086d: SWAP2 0000086e: SUB 0000086f: SWAP1 00000870: LOG1 00000871: POP 00000872: POP 00000873: POP 00000874: POP 00000875: POP 00000876: POP 00000877: POP 00000878: POP 00000879: POP 0000087a: POP 0000087b: POP 0000087c: POP 0000087d: JUMP 0000087e: JUMPDEST 0000087f: CALLER 00000880: PUSH1 0x01 00000882: PUSH1 0xa0 00000884: PUSH1 0x02 00000886: EXP 00000887: SUB 00000888: AND 00000889: PUSH1 0x00 0000088b: SWAP1 0000088c: DUP2 0000088d: MSTORE 0000088e: PUSH1 0x00 00000890: DUP1 00000891: MLOAD 00000892: PUSH1 0x20 00000894: PUSH2 0x0ca9 00000897: DUP4 00000898: CODECOPY 00000899: DUP2 0000089a: MLOAD 0000089b: SWAP2 0000089c: MSTORE 0000089d: PUSH1 0x20 0000089f: MSTORE 000008a0: PUSH1 0x40 000008a2: SWAP1 000008a3: KECCAK256 000008a4: SLOAD 000008a5: DUP2 000008a6: SWAP1 000008a7: LT 000008a8: ISZERO 000008a9: PUSH2 0x08b1 000008ac: JUMPI 000008ad: PUSH2 0x0002 000008b0: JUMP 000008b1: JUMPDEST 000008b2: CALLER 000008b3: PUSH1 0x01 000008b5: PUSH1 0xa0 000008b7: PUSH1 0x02 000008b9: EXP 000008ba: SUB 000008bb: AND 000008bc: PUSH1 0x00 000008be: DUP2 000008bf: DUP2 000008c0: MSTORE 000008c1: PUSH1 0x00 000008c3: DUP1 000008c4: MLOAD 000008c5: PUSH1 0x20 000008c7: PUSH2 0x0ca9 000008ca: DUP4 000008cb: CODECOPY 000008cc: DUP2 000008cd: MLOAD 000008ce: SWAP2 000008cf: MSTORE 000008d0: PUSH1 0x20 000008d2: MSTORE 000008d3: PUSH1 0x40 000008d5: DUP1 000008d6: DUP3 000008d7: KECCAK256 000008d8: DUP1 000008d9: SLOAD 000008da: DUP6 000008db: SWAP1 000008dc: SUB 000008dd: SWAP1 000008de: SSTORE 000008df: MLOAD 000008e0: DUP4 000008e1: SWAP2 000008e2: DUP2 000008e3: DUP2 000008e4: DUP2 000008e5: DUP6 000008e6: DUP8 000008e7: PUSH2 0x8502 000008ea: GAS 000008eb: SUB 000008ec: CALL 000008ed: SWAP3 000008ee: POP 000008ef: POP 000008f0: POP 000008f1: ISZERO 000008f2: ISZERO 000008f3: PUSH2 0x08fb 000008f6: JUMPI 000008f7: PUSH2 0x0002 000008fa: JUMP 000008fb: JUMPDEST 000008fc: CALLER 000008fd: PUSH1 0x01 000008ff: PUSH1 0xa0 00000901: PUSH1 0x02 00000903: EXP 00000904: SUB 00000905: AND 00000906: PUSH1 0x00 00000908: DUP2 00000909: DUP2 0000090a: MSTORE 0000090b: PUSH1 0x00 0000090d: DUP1 0000090e: MLOAD 0000090f: PUSH1 0x20 00000911: PUSH2 0x0ca9 00000914: DUP4 00000915: CODECOPY 00000916: DUP2 00000917: MLOAD 00000918: SWAP2 00000919: MSTORE 0000091a: PUSH1 0x20 0000091c: SWAP1 0000091d: DUP2 0000091e: MSTORE 0000091f: PUSH1 0x40 00000921: DUP1 00000922: DUP4 00000923: KECCAK256 00000924: SLOAD 00000925: DUP2 00000926: MLOAD 00000927: SWAP4 00000928: DUP5 00000929: MSTORE 0000092a: SWAP2 0000092b: DUP4 0000092c: ADD 0000092d: SWAP4 0000092e: SWAP1 0000092f: SWAP4 00000930: MSTORE 00000931: DUP2 00000932: DUP4 00000933: ADD 00000934: DUP5 00000935: SWAP1 00000936: MSTORE 00000937: PUSH1 0x60 00000939: DUP3 0000093a: ADD 0000093b: MSTORE 0000093c: SWAP1 0000093d: MLOAD 0000093e: PUSH32 0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567 0000095f: SWAP2 00000960: DUP2 00000961: SWAP1 00000962: SUB 00000963: PUSH1 0x80 00000965: ADD 00000966: SWAP1 00000967: LOG1 00000968: POP 00000969: JUMP 0000096a: JUMPDEST 0000096b: DUP2 0000096c: PUSH1 0x01 0000096e: PUSH1 0xa0 00000970: PUSH1 0x02 00000972: EXP 00000973: SUB 00000974: AND 00000975: PUSH4 0x23b872dd 0000097a: CALLER 0000097b: ADDRESS 0000097c: DUP5 0000097d: PUSH1 0x40 0000097f: MLOAD 00000980: DUP5 00000981: PUSH1 0xe0 00000983: PUSH1 0x02 00000985: EXP 00000986: MUL 00000987: DUP2 00000988: MSTORE 00000989: PUSH1 0x04 0000098b: ADD 0000098c: DUP1 0000098d: DUP5 0000098e: PUSH1 0x01 00000990: PUSH1 0xa0 00000992: PUSH1 0x02 00000994: EXP 00000995: SUB 00000996: AND 00000997: DUP2 00000998: MSTORE 00000999: PUSH1 0x20 0000099b: ADD 0000099c: DUP4 0000099d: PUSH1 0x01 0000099f: PUSH1 0xa0 000009a1: PUSH1 0x02 000009a3: EXP 000009a4: SUB 000009a5: AND 000009a6: DUP2 000009a7: MSTORE 000009a8: PUSH1 0x20 000009aa: ADD 000009ab: DUP3 000009ac: DUP2 000009ad: MSTORE 000009ae: PUSH1 0x20 000009b0: ADD 000009b1: SWAP4 000009b2: POP 000009b3: POP 000009b4: POP 000009b5: POP 000009b6: PUSH1 0x20 000009b8: PUSH1 0x40 000009ba: MLOAD 000009bb: DUP1 000009bc: DUP4 000009bd: SUB 000009be: DUP2 000009bf: PUSH1 0x00 000009c1: DUP8 000009c2: PUSH2 0x61da 000009c5: GAS 000009c6: SUB 000009c7: CALL 000009c8: ISZERO 000009c9: PUSH2 0x0002 000009cc: JUMPI 000009cd: POP 000009ce: POP 000009cf: PUSH1 0x40 000009d1: MLOAD 000009d2: MLOAD 000009d3: ISZERO 000009d4: ISZERO 000009d5: SWAP1 000009d6: POP 000009d7: PUSH2 0x09df 000009da: JUMPI 000009db: PUSH2 0x0002 000009de: JUMP 000009df: JUMPDEST 000009e0: PUSH1 0x01 000009e2: PUSH1 0xa0 000009e4: PUSH1 0x02 000009e6: EXP 000009e7: SUB 000009e8: DUP3 000009e9: DUP2 000009ea: AND 000009eb: PUSH1 0x00 000009ed: DUP2 000009ee: DUP2 000009ef: MSTORE 000009f0: PUSH1 0x20 000009f2: DUP2 000009f3: DUP2 000009f4: MSTORE 000009f5: PUSH1 0x40 000009f7: DUP1 000009f8: DUP4 000009f9: KECCAK256 000009fa: CALLER 000009fb: SWAP1 000009fc: SWAP6 000009fd: AND 000009fe: DUP1 000009ff: DUP5 00000a00: MSTORE 00000a01: SWAP5 00000a02: DUP3 00000a03: MSTORE 00000a04: SWAP2 00000a05: DUP3 00000a06: SWAP1 00000a07: KECCAK256 00000a08: DUP1 00000a09: SLOAD 00000a0a: DUP7 00000a0b: ADD 00000a0c: SWAP1 00000a0d: DUP2 00000a0e: SWAP1 00000a0f: SSTORE 00000a10: DUP3 00000a11: MLOAD 00000a12: SWAP4 00000a13: DUP5 00000a14: MSTORE 00000a15: SWAP1 00000a16: DUP4 00000a17: ADD 00000a18: SWAP4 00000a19: SWAP1 00000a1a: SWAP4 00000a1b: MSTORE 00000a1c: DUP2 00000a1d: DUP2 00000a1e: ADD 00000a1f: DUP5 00000a20: SWAP1 00000a21: MSTORE 00000a22: PUSH1 0x60 00000a24: DUP3 00000a25: ADD 00000a26: SWAP3 00000a27: SWAP1 00000a28: SWAP3 00000a29: MSTORE 00000a2a: SWAP1 00000a2b: MLOAD 00000a2c: PUSH32 0xdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7 00000a4d: SWAP2 00000a4e: DUP2 00000a4f: SWAP1 00000a50: SUB 00000a51: PUSH1 0x80 00000a53: ADD 00000a54: SWAP1 00000a55: LOG1 00000a56: POP 00000a57: POP 00000a58: JUMP 00000a59: JUMPDEST 00000a5a: POP 00000a5b: PUSH1 0x01 00000a5d: JUMPDEST 00000a5e: SWAP13 00000a5f: SWAP12 00000a60: POP 00000a61: POP 00000a62: POP 00000a63: POP 00000a64: POP 00000a65: POP 00000a66: POP 00000a67: POP 00000a68: POP 00000a69: POP 00000a6a: POP 00000a6b: POP 00000a6c: JUMP 00000a6d: JUMPDEST 00000a6e: LT 00000a6f: ISZERO 00000a70: JUMPDEST 00000a71: ISZERO 00000a72: ISZERO 00000a73: PUSH2 0x0a59 00000a76: JUMPI 00000a77: POP 00000a78: PUSH1 0x00 00000a7a: PUSH2 0x0a5d 00000a7d: JUMP 00000a7e: JUMPDEST 00000a7f: PUSH1 0x40 00000a81: DUP1 00000a82: MLOAD 00000a83: PUSH1 0x01 00000a85: PUSH1 0xa0 00000a87: PUSH1 0x02 00000a89: EXP 00000a8a: SUB 00000a8b: DUP12 00000a8c: DUP2 00000a8d: AND 00000a8e: DUP3 00000a8f: MSTORE 00000a90: PUSH1 0x20 00000a92: DUP3 00000a93: ADD 00000a94: DUP12 00000a95: SWAP1 00000a96: MSTORE 00000a97: DUP10 00000a98: DUP2 00000a99: AND 00000a9a: DUP3 00000a9b: DUP5 00000a9c: ADD 00000a9d: MSTORE 00000a9e: PUSH1 0x60 00000aa0: DUP3 00000aa1: ADD 00000aa2: DUP10 00000aa3: SWAP1 00000aa4: MSTORE 00000aa5: PUSH1 0x80 00000aa7: DUP3 00000aa8: ADD 00000aa9: DUP9 00000aaa: SWAP1 00000aab: MSTORE 00000aac: PUSH1 0xa0 00000aae: DUP3 00000aaf: ADD 00000ab0: DUP8 00000ab1: SWAP1 00000ab2: MSTORE 00000ab3: CALLER 00000ab4: AND 00000ab5: PUSH1 0xc0 00000ab7: DUP3 00000ab8: ADD 00000ab9: MSTORE 00000aba: PUSH1 0xff 00000abc: DUP6 00000abd: AND 00000abe: PUSH1 0xe0 00000ac0: DUP3 00000ac1: ADD 00000ac2: MSTORE 00000ac3: PUSH2 0x0100 00000ac6: DUP2 00000ac7: ADD 00000ac8: DUP5 00000ac9: SWAP1 00000aca: MSTORE 00000acb: PUSH2 0x0120 00000ace: DUP2 00000acf: ADD 00000ad0: DUP4 00000ad1: SWAP1 00000ad2: MSTORE 00000ad3: SWAP1 00000ad4: MLOAD 00000ad5: PUSH32 0x91daf02b6d1454acd74c097a67e389a9d9371da3ff51366947022dc36748ce4d 00000af6: SWAP2 00000af7: DUP2 00000af8: SWAP1 00000af9: SUB 00000afa: PUSH2 0x0140 00000afd: ADD 00000afe: SWAP1 00000aff: LOG1 00000b00: POP 00000b01: POP 00000b02: POP 00000b03: POP 00000b04: POP 00000b05: POP 00000b06: POP 00000b07: POP 00000b08: POP 00000b09: JUMP 00000b0a: JUMPDEST 00000b0b: PUSH1 0x01 00000b0d: PUSH1 0xa0 00000b0f: PUSH1 0x02 00000b11: EXP 00000b12: SUB 00000b13: DUP3 00000b14: DUP2 00000b15: AND 00000b16: PUSH1 0x00 00000b18: SWAP1 00000b19: DUP2 00000b1a: MSTORE 00000b1b: PUSH1 0x20 00000b1d: DUP2 00000b1e: DUP2 00000b1f: MSTORE 00000b20: PUSH1 0x40 00000b22: DUP1 00000b23: DUP4 00000b24: KECCAK256 00000b25: CALLER 00000b26: SWAP1 00000b27: SWAP5 00000b28: AND 00000b29: DUP4 00000b2a: MSTORE 00000b2b: SWAP3 00000b2c: SWAP1 00000b2d: MSTORE 00000b2e: KECCAK256 00000b2f: SLOAD 00000b30: DUP2 00000b31: SWAP1 00000b32: LT 00000b33: ISZERO 00000b34: PUSH2 0x0b3c 00000b37: JUMPI 00000b38: PUSH2 0x0002 00000b3b: JUMP 00000b3c: JUMPDEST 00000b3d: PUSH1 0x01 00000b3f: PUSH1 0xa0 00000b41: PUSH1 0x02 00000b43: EXP 00000b44: SUB 00000b45: DUP3 00000b46: DUP2 00000b47: AND 00000b48: PUSH1 0x00 00000b4a: DUP2 00000b4b: DUP2 00000b4c: MSTORE 00000b4d: PUSH1 0x20 00000b4f: DUP2 00000b50: DUP2 00000b51: MSTORE 00000b52: PUSH1 0x40 00000b54: DUP1 00000b55: DUP4 00000b56: KECCAK256 00000b57: CALLER 00000b58: SWAP1 00000b59: SWAP6 00000b5a: AND 00000b5b: DUP1 00000b5c: DUP5 00000b5d: MSTORE 00000b5e: SWAP5 00000b5f: DUP3 00000b60: MSTORE 00000b61: DUP1 00000b62: DUP4 00000b63: KECCAK256 00000b64: DUP1 00000b65: SLOAD 00000b66: DUP8 00000b67: SWAP1 00000b68: SUB 00000b69: SWAP1 00000b6a: SSTORE 00000b6b: DUP1 00000b6c: MLOAD 00000b6d: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 00000b8e: DUP2 00000b8f: MSTORE 00000b90: PUSH1 0x04 00000b92: DUP2 00000b93: ADD 00000b94: SWAP6 00000b95: SWAP1 00000b96: SWAP6 00000b97: MSTORE 00000b98: PUSH1 0x24 00000b9a: DUP6 00000b9b: ADD 00000b9c: DUP7 00000b9d: SWAP1 00000b9e: MSTORE 00000b9f: MLOAD 00000ba0: SWAP3 00000ba1: SWAP4 00000ba2: PUSH4 0xa9059cbb 00000ba7: SWAP4 00000ba8: PUSH1 0x44 00000baa: DUP3 00000bab: DUP2 00000bac: ADD 00000bad: SWAP5 00000bae: SWAP2 00000baf: SWAP3 00000bb0: DUP4 00000bb1: SWAP1 00000bb2: SUB 00000bb3: ADD 00000bb4: SWAP1 00000bb5: DUP3 00000bb6: SWAP1 00000bb7: DUP8 00000bb8: PUSH2 0x61da 00000bbb: GAS 00000bbc: SUB 00000bbd: CALL 00000bbe: ISZERO 00000bbf: PUSH2 0x0002 00000bc2: JUMPI 00000bc3: POP 00000bc4: POP 00000bc5: PUSH1 0x40 00000bc7: MLOAD 00000bc8: MLOAD 00000bc9: ISZERO 00000bca: ISZERO 00000bcb: SWAP1 00000bcc: POP 00000bcd: PUSH2 0x0bd5 00000bd0: JUMPI 00000bd1: PUSH2 0x0002 00000bd4: JUMP 00000bd5: JUMPDEST 00000bd6: PUSH1 0x01 00000bd8: PUSH1 0xa0 00000bda: PUSH1 0x02 00000bdc: EXP 00000bdd: SUB 00000bde: DUP3 00000bdf: DUP2 00000be0: AND 00000be1: PUSH1 0x00 00000be3: DUP2 00000be4: DUP2 00000be5: MSTORE 00000be6: PUSH1 0x20 00000be8: DUP2 00000be9: DUP2 00000bea: MSTORE 00000beb: PUSH1 0x40 00000bed: DUP1 00000bee: DUP4 00000bef: KECCAK256 00000bf0: CALLER 00000bf1: SWAP1 00000bf2: SWAP6 00000bf3: AND 00000bf4: DUP1 00000bf5: DUP5 00000bf6: MSTORE 00000bf7: SWAP5 00000bf8: DUP3 00000bf9: MSTORE 00000bfa: SWAP2 00000bfb: DUP3 00000bfc: SWAP1 00000bfd: KECCAK256 00000bfe: SLOAD 00000bff: DUP3 00000c00: MLOAD 00000c01: SWAP4 00000c02: DUP5 00000c03: MSTORE 00000c04: SWAP1 00000c05: DUP4 00000c06: ADD 00000c07: SWAP4 00000c08: SWAP1 00000c09: SWAP4 00000c0a: MSTORE 00000c0b: DUP2 00000c0c: DUP2 00000c0d: ADD 00000c0e: DUP5 00000c0f: SWAP1 00000c10: MSTORE 00000c11: PUSH1 0x60 00000c13: DUP3 00000c14: ADD 00000c15: SWAP3 00000c16: SWAP1 00000c17: SWAP3 00000c18: MSTORE 00000c19: SWAP1 00000c1a: MLOAD 00000c1b: PUSH32 0xf341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567 00000c3c: SWAP2 00000c3d: DUP2 00000c3e: SWAP1 00000c3f: SUB 00000c40: PUSH1 0x80 00000c42: ADD 00000c43: SWAP1 00000c44: LOG1 00000c45: POP 00000c46: POP 00000c47: JUMP 00000c48: JUMPDEST 00000c49: DUP1 00000c4a: SWAP4 00000c4b: POP 00000c4c: JUMPDEST 00000c4d: POP 00000c4e: POP 00000c4f: POP 00000c50: SWAP11 00000c51: SWAP10 00000c52: POP 00000c53: POP 00000c54: POP 00000c55: POP 00000c56: POP 00000c57: POP 00000c58: POP 00000c59: POP 00000c5a: POP 00000c5b: POP 00000c5c: JUMP 00000c5d: JUMPDEST 00000c5e: POP 00000c5f: POP 00000c60: PUSH1 0x00 00000c62: DUP2 00000c63: DUP2 00000c64: MSTORE 00000c65: PUSH1 0x01 00000c67: PUSH1 0x20 00000c69: SWAP1 00000c6a: DUP2 00000c6b: MSTORE 00000c6c: PUSH1 0x40 00000c6e: DUP1 00000c6f: DUP4 00000c70: KECCAK256 00000c71: SLOAD 00000c72: PUSH1 0x01 00000c74: PUSH1 0xa0 00000c76: PUSH1 0x02 00000c78: EXP 00000c79: SUB 00000c7a: DUP15 00000c7b: DUP2 00000c7c: AND 00000c7d: DUP6 00000c7e: MSTORE 00000c7f: DUP5 00000c80: DUP5 00000c81: MSTORE 00000c82: DUP3 00000c83: DUP6 00000c84: KECCAK256 00000c85: SWAP1 00000c86: DUP12 00000c87: AND 00000c88: DUP6 00000c89: MSTORE 00000c8a: SWAP1 00000c8b: SWAP3 00000c8c: MSTORE 00000c8d: SWAP1 00000c8e: SWAP2 00000c8f: KECCAK256 00000c90: SLOAD 00000c91: SWAP1 00000c92: DUP13 00000c93: SUB 00000c94: SWAP1 00000c95: DUP13 00000c96: MUL 00000c97: DUP11 00000c98: SWAP1 00000c99: DIV 00000c9a: DUP1 00000c9b: DUP3 00000c9c: LT 00000c9d: ISZERO 00000c9e: PUSH2 0x0c48 00000ca1: JUMPI 00000ca2: DUP2 00000ca3: SWAP4 00000ca4: POP 00000ca5: PUSH2 0x0c4c 00000ca8: JUMP 00000ca9: UNKNOWN(0xAD) 00000caa: ORIGIN 00000cab: UNKNOWN(0x28) 00000cac: UNKNOWN(0xB6) 00000cad: PUSH23 0xf7d3cd4284a5443f17f1962b36e491b30a40b2405849e5 00000cc5: SWAP8 00000cc6: UNKNOWN(0xBA) 00000cc7: PUSH0 00000cc8: UNKNOWN(0xB5)
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | access_control | codex | Minter can be set by any address once, enabling unauthorized mint/reset | 85 | no | — |
viewevidence_json{
"evidence": "setMinter() allows any caller to set minter when it is zero; create/destroy/reset are gated only by minter.",
"locations": [
"contracts/Contract.sol:104",
"contracts/Contract.sol:105",
"contracts/Contract.sol:111",
"contracts/Contract.sol:120"
],
"recommendation": "Set minter in the constructor or gate setMinter behind an owner/admin. Consider removing setMinter entirely after initialization or making it one-time callable only by a trusted deployer address.",
"exploit_scenario": "If the deployer does not call setMinter immediately, any attacker can call it first and become the minter. They can then mint arbitrary balances, destroy user balances, or reset the version to wipe balances and totalSupply accounting."
}
|
| high | auth | detector | Authorization based on tx.origin | 70 | no | — |
viewvalidation_json{
"reason": "missing sink mapping",
"status": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x0a19b14a",
"selector": "0x0a19b14a",
"calldata_variants": [
"0x0a19b14a",
"0x0a19b14a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2e1a7d4d",
"selector": "0x2e1a7d4d",
"calldata_variants": [
"0x2e1a7d4d",
"0x2e1a7d4d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x338b5dea",
"selector": "0x338b5dea",
"calldata_variants": [
"0x338b5dea",
"0x338b5dea0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x57786394",
"selector": "0x57786394",
"calldata_variants": [
"0x57786394",
"0x577863940000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x65e17c9d",
"selector": "0x65e17c9d",
"calldata_variants": [
"0x65e17c9d",
"0x65e17c9d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x6c86888b",
"selector": "0x6c86888b",
"calldata_variants": [
"0x6c86888b",
"0x6c86888b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x93f0bb51",
"selector": "0x93f0bb51",
"calldata_variants": [
"0x93f0bb51",
"0x93f0bb510000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9e281a98",
"selector": "0x9e281a98",
"calldata_variants": [
"0x9e281a98",
"0x9e281a980000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"guards_detected": [
{
"pc": 3242,
"type": "tx_origin_used"
}
]
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | yes | yes |
viewtrace_id: 0x802fe70eeddcbdc43bd1233a09ad4cad82efda282feb245ae9ce37e558e740fd
call_targets:
0x0000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000002, 0xc6b330df38d6ef288c953f1f2835723531073ce2
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0x802fe70eeddcbdc43bd1233a09ad4cad82efda282feb245ae9ce37e558e740fd",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x0000000000000000000000000000000000000001",
"0x0000000000000000000000000000000000000002",
"0xc6b330df38d6ef288c953f1f2835723531073ce2"
],
"matched_probe": null,
"target_varies": true,
"classification": "target_varies"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x0a19b14a",
"selector": "0x0a19b14a",
"calldata_variants": [
"0x0a19b14a",
"0x0a19b14a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2e1a7d4d",
"selector": "0x2e1a7d4d",
"calldata_variants": [
"0x2e1a7d4d",
"0x2e1a7d4d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x338b5dea",
"selector": "0x338b5dea",
"calldata_variants": [
"0x338b5dea",
"0x338b5dea0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x57786394",
"selector": "0x57786394",
"calldata_variants": [
"0x57786394",
"0x577863940000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x65e17c9d",
"selector": "0x65e17c9d",
"calldata_variants": [
"0x65e17c9d",
"0x65e17c9d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x6c86888b",
"selector": "0x6c86888b",
"calldata_variants": [
"0x6c86888b",
"0x6c86888b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x93f0bb51",
"selector": "0x93f0bb51",
"calldata_variants": [
"0x93f0bb51",
"0x93f0bb510000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9e281a98",
"selector": "0x9e281a98",
"calldata_variants": [
"0x9e281a98",
"0x9e281a980000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 850,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 928,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1131,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 7,
"guards_detected": [
{
"pc": 3242,
"type": "tx_origin_used"
}
],
"untrusted_call_count": 7
}
|
| medium | math | codex | Unchecked multiplication/division in trade and volume calculations can overflow | 75 | no | — |
viewevidence_json{
"evidence": "Multiplications are performed without overflow checks in trade and availableVolume calculations.",
"locations": [
"contracts/Contract.sol:197",
"contracts/Contract.sol:202",
"contracts/Contract.sol:203",
"contracts/Contract.sol:223",
"contracts/Contract.sol:224"
],
"recommendation": "Use SafeMath (or Solidity >=0.8 with checked arithmetic) and restructure calculations to minimize overflow risk (e.g., divide before multiply when safe).",
"exploit_scenario": "Large `amountGive` and `amount` values can overflow intermediate multiplications (e.g., `amountGive * amount`), wrapping to a smaller number. This can let trades pass balance checks with insufficient collateral or miscredit balances, breaking accounting and potentially enabling value extraction."
}
|
| medium | other | detector | ETH value transfer possible | 40 | yes | yes |
viewtrace_id: 0x802fe70eeddcbdc43bd1233a09ad4cad82efda282feb245ae9ce37e558e740fd
call_targets:
0x0000000000000000000000000000000000000001, 0x0000000000000000000000000000000000000002, 0xc6b330df38d6ef288c953f1f2835723531073ce2
target_varies:
yes
classification:
target_varies
validation_json{
"sink": "CALL",
"errors": 0,
"status": "confirmed",
"attempts": 1,
"trace_id": "0x802fe70eeddcbdc43bd1233a09ad4cad82efda282feb245ae9ce37e558e740fd",
"confirmed": true,
"trace_mode": "callTracer",
"call_targets": [
"0x0000000000000000000000000000000000000001",
"0x0000000000000000000000000000000000000002",
"0xc6b330df38d6ef288c953f1f2835723531073ce2"
],
"matched_probe": null,
"target_varies": true,
"classification": "target_varies"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0x0a19b14a",
"selector": "0x0a19b14a",
"calldata_variants": [
"0x0a19b14a",
"0x0a19b14a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x2e1a7d4d",
"selector": "0x2e1a7d4d",
"calldata_variants": [
"0x2e1a7d4d",
"0x2e1a7d4d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x338b5dea",
"selector": "0x338b5dea",
"calldata_variants": [
"0x338b5dea",
"0x338b5dea0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x57786394",
"selector": "0x57786394",
"calldata_variants": [
"0x57786394",
"0x577863940000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x65e17c9d",
"selector": "0x65e17c9d",
"calldata_variants": [
"0x65e17c9d",
"0x65e17c9d0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x6c86888b",
"selector": "0x6c86888b",
"calldata_variants": [
"0x6c86888b",
"0x6c86888b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x93f0bb51",
"selector": "0x93f0bb51",
"calldata_variants": [
"0x93f0bb51",
"0x93f0bb510000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9e281a98",
"selector": "0x9e281a98",
"calldata_variants": [
"0x9e281a98",
"0x9e281a980000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 850,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 928,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 1131,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 7,
"guards_detected": [
{
"pc": 3242,
"type": "tx_origin_used"
}
]
}
|
| medium | auth | codex | Order signatures lack proper domain separation and user binding in hash | 75 | no | — |
viewevidence_json{
"evidence": "Order hash is sha256 of order params without user/contract; orderFills keyed only by hash.",
"locations": [
"contracts/Contract.sol:191",
"contracts/Contract.sol:195",
"contracts/Contract.sol:205",
"contracts/Contract.sol:218"
],
"recommendation": "Adopt EIP-712/EIP-191 signatures including `address(this)`, chain id, and the user address in the hashed struct. Track fills by `(hash, user)` or include `user` in the hash input.",
"exploit_scenario": "The order hash excludes the user address and contract/chain domain, so signatures are valid across identical parameter sets and can be replayed across DEX instances or chains if a user signs the same parameters. Additionally, fills are tracked per hash only, so two different users signing identical orders share the same fill bucket, enabling griefing/DoS by exhausting another user\u2019s order capacity."
}
|
| low | auth | codex | ERC20 approve race condition allows double-spend of allowance | 65 | no | — |
viewevidence_json{
"evidence": "approve() sets allowance directly with no zero-check.",
"locations": [
"contracts/Contract.sol:76",
"contracts/Contract.sol:77"
],
"recommendation": "Require allowance to be set to zero before changing to a new value, or use `increaseAllowance`/`decreaseAllowance` patterns.",
"exploit_scenario": "A spender can front-run an allowance change from a non-zero value to another non-zero value, spending both the old and new allowances."
}
|