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

Analysis Run

019b3836-3fab-72b2-b454-064ea28d2ebf

complete
Chain ID
1
Address
Block Number
Created
Fri, Dec 19, 2025 8:03 PM
Review Summary

What survived the funnel

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

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

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
5087 artifact.fetch complete 1 / 3 3 months ago
5088 tool.cast_disasm complete 1 / 3 3 months ago
48252 analysis.bundle complete 1 / 3 1 week ago
48253 capability.graph complete 1 / 3 1 week ago
48254 detector.run complete 1 / 3 1 week ago
48255 validation.fork complete 1 / 3 1 week ago
113288 report.consolidate complete 1 / 6 1 week ago

Artifact

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

Slither

tool.slither

No slither job recorded yet.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 6
Findings
3
No findings?
no
Summary
Runtime bytecode matches an Oraclize/Provable-style oracle client with a public `update()` path, a `__callback(bytes32,string,bytes)` entrypoint, and a privileged `kill()` path. Based on runtime-only evidence, the main issues are missing callback/query correlation, public spending of contract ETH on oracle calls, and a retained owner kill switch. Selector names are inferred best-effort from bytecode/4byte matches.
View stdout
{"no_findings":false,"summary":"Runtime bytecode matches an Oraclize/Provable-style oracle client with a public `update()` path, a `__callback(bytes32,string,bytes)` entrypoint, and a privileged `kill()` path. Based on runtime-only evidence, the main issues are missing callback/query correlation, public spending of contract ETH on oracle calls, and a retained owner kill switch. Selector names are inferred best-effort from bytecode/4byte matches.","findings":[{"severity":"medium","category":"oracle","title":"Oracle callback accepts any authorized sender response without validating a pending query id","exploit_scenario":"An attacker can trigger multiple outstanding oracle updates through the public query path. Because the callback appears to authenticate only the oracle sender and not the `bytes32` request id, a stale or later oracle reply can overwrite the currently stored result in slot 3. If the oracle/resolver side is ever misconfigured or compromised, arbitrary callback data would be accepted as long as it comes from the resolved oracle address.","recommendation":"Persist the returned query id from the query call and require `_queryId` to match an expected pending id before accepting callback data. If multiple requests are allowed, track them explicitly and clear them after use.","evidence":"Selector `0x38bbfa50` matches `__callback(bytes32,string,bytes)`. The callback path decodes three arguments, then at `pc:0x036c` checks only that `CALLER` matches the resolved oracle address before entering the string-storage routine at `pc:0x038b`. The public oracle-query path at `selector:0xa2e62045` performs `query(uint256,string,string)` via selector `0xadf59f99` at `pc:0x0703`, but the returned request id is not written to storage; storage writes are limited to slots 0/1/3 and dynamic string data.","locations":["selector:0x38bbfa50","selector:0xa2e62045","pc:0x036c","pc:0x0703"]},{"severity":"medium","category":"access_control","title":"Public `update()` path can spend ETH from contract balance on oracle queries","exploit_scenario":"If this contract holds ETH to subsidize oracle usage, any external account can call the public update function and force the contract to pay oracle fees. Repeated calls can drain the balance into oracle payments or trigger unwanted offchain queries, even if the caller is not otherwise trusted.","recommendation":"Restrict the query-triggering function to an authorized operator, or require the caller to supply and account for the exact oracle fee so existing contract balance cannot be consumed by arbitrary users.","evidence":"Selector `0xa2e62045` resolves to a public `update()` entrypoint. Its body builds a fixed Kraken URL query, calls the oracle pricing path (`getPrice(...)`) around `pc:0x065c`, and then performs the actual oracle query call at `pc:0x0703`. The artifact reports no auth guards for this function, and detector validation confirmed reachable `CALL` sites with possible nonzero ETH value and varying external targets. There is no visible `CALLVALUE`-based accounting or owner check in runtime bytecode.","locations":["selector:0xa2e62045","pc:0x065c","pc:0x0703"]},{"severity":"low","category":"auth","title":"Privileged kill switch can sweep balance via `SELFDESTRUCT`","exploit_scenario":"Whoever controls the address stored in slot 2 can invoke the kill function and force a terminal balance sweep to themselves. Even if this is intended admin functionality, compromise or abuse of that key breaks trust assumptions for funds held by the contract.","recommendation":"Remove the kill path if it is unnecessary, or gate it behind a multisig/timelock and document the administrative trust model clearly.","evidence":"Selector `0x41c0e1b5` matches `kill()`. At `pc:0x0155` the function reads slot 2, masks it to 160 bits, and compares it to `CALLER`. If equal, execution reaches `SELFDESTRUCT` at `pc:0x0174`, sending funds to the caller.","locations":["selector:0x41c0e1b5","pc:0x0155","pc:0x0174"]}]}
View stderr
OpenAI Codex v0.118.0 (research preview)
--------
workdir: /tmp/codex-4oykfrvc
model: gpt-5.4
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: none
session id: 019d5c24-ec5d-7da3-879e-2b3b96476531
--------
user
You are a security auditor. You ONLY have runtime bytecode + analysis artifacts.
You MUST read `BYTECODE_BUNDLE.json` before concluding; it contains the bytecode summary,
evidence bundle, callsites, storage slots, and detector findings.

Special cases when reasoning from bytecode (be explicit about uncertainty):
- Selector inference is best-effort; missing selectors are common.
- Fallback/receive paths may be the only entrypoints.
- CALL vs DELEGATECALL semantics differ; DELEGATECALL executes in caller storage.
- Proxy patterns (EIP-1967, minimal proxies, beacon) change which storage is authoritative.
- Storage slots are raw; mappings/arrays appear via keccak patterns, names are unknown.
- Guard detection is heuristic; absence of guards does NOT mean unguarded.
- Returndata checking is unknown unless explicitly shown in evidence.
- Precompiles (0x1..0x9) and common ERC20 transfer selectors may appear; do not over-claim.

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.
- Locations can be pc references like "pc:0x123" or selectors like "selector:0xa9059cbb".

Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation,
accounting/invariant breaks, dangerous delegatecall, and untrusted external calls.
Be conservative: if evidence is weak, mark severity low/medium and explain why.
warning: Codex could not find system bubblewrap on PATH. Please install bubblewrap with your package manager. Codex will use the vendored bubblewrap in the meantime.
exec
/bin/bash -lc 'rg --files' in /tmp/codex-4oykfrvc
exec
/bin/bash -lc pwd in /tmp/codex-4oykfrvc
 succeeded in 0ms:
codex-output-schema.json
BYTECODE_BUNDLE.json

 succeeded in 0ms:
/tmp/codex-4oykfrvc

exec
/bin/bash -lc "sed -n '1,260p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
 succeeded in 0ms:
{
  "analysis_artifact": {
    "address": "0xcad333e2f7ec4058aa5ba825a5de8af4139490c9",
    "artifact_hash": "0x8cf0c38f88b751b08b36e028c964f71544e1a1a9425672f5c2602b18bf20ce5a",
    "artifact_json": {
      "auth": {
        "guards": []
      },
      "basic_blocks": [
        {
          "end_pc": 24,
          "hash": "0xaba4830113ff2124e4b6a56fb4cfc8c5d6f2466d3699d3483873d02fa6ee240c",
          "opcodes": [
            "PUSH1",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "EXP",
            "PUSH1",
            "CALLDATALOAD",
            "DIV",
            "PUSH4",
            "OP_81",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 0
        },
        {
          "end_pc": 35,
          "hash": "0x99b2a2927468c03598ed9e86e395f81bbb1de1e50b894115719c77f42c8db86e",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 25
        },
        {
          "end_pc": 46,
          "hash": "0x7ab05ed8a8217d9221b8c6c23b1a1e0ea323cf904dd426a553fb69955c0fd8a7",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 36
        },
        {
          "end_pc": 57,
          "hash": "0x9e9c917038db261021607bac81bffd81dba62db76dff4cdb53466c66f46088c0",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 47
        },
        {
          "end_pc": 59,
          "hash": "0x7c03713fe289920bcbc645467e3c26e308b928c57f7f20b00dcee82e881fecf3",
          "opcodes": [
            "JUMPDEST",
            "STOP"
          ],
          "start_pc": 58
        },
        {
          "end_pc": 270,
          "hash": "0xac3f2029b8f76aef3e42fcd68633851e454b9703183ad77faf6ebb18516f2bbe",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "OP_80",
            "MLOAD",
            "PUSH1",
            "PUSH1",
            "OP_80",
            "CALLDATALOAD",
            "PUSH1",
            "OP_81",
            "OP_81",
            "ADD",
            "CALLDATALOAD",
            "PUSH1",
            "OP_81",
            "ADD",
            "OP_85",
            "OP_90",
            "DIV",
            "OP_85",
            "MUL",
            "OP_86",
            "ADD",
            "OP_85",
            "ADD",
            "OP_90",
            "OP_96",
            "MSTORE",
            "OP_85",
            "OP_85",
            "MSTORE",
            "PUSH2",
            "OP_95",
            "OP_81",
            "CALLDATALOAD",
            "OP_95",
            "OP_91",
            "OP_94",
            "PUSH1",
            "OP_94",
            "OP_92",
            "OP_93",
            "OP_90",
            "OP_92",
            "ADD",
            "OP_91",
            "OP_81",
            "OP_90",
            "OP_84",
            "ADD",
            "OP_83",
            "OP_82",
            "OP_80",
            "OP_82",
            "OP_84",
            "CALLDATACOPY",
            "POP",
            "POP",
            "PUSH1",
            "OP_80",
            "MLOAD",
            "PUSH1",
            "OP_97",
            "CALLDATALOAD",
            "OP_80",
            "OP_8A",
            "ADD",
            "CALLDATALOAD",
            "PUSH1",
            "OP_81",
            "ADD",
            "OP_8A",
            "OP_90",
            "DIV",
            "OP_8A",
            "MUL",
            "OP_83",
            "ADD",
            "OP_8A",
            "ADD",
            "OP_90",
            "OP_93",
            "MSTORE",
            "OP_82",
            "OP_82",
            "MSTORE",
            "OP_96",
            "OP_98",
            "OP_97",
            "PUSH1",
            "OP_97",
            "OP_91",
            "OP_96",
            "POP",
            "PUSH1",
            "OP_91",
            "OP_90",
            "OP_91",
            "ADD",
            "OP_94",
            "POP",
            "OP_90",
            "OP_92",
            "POP",
            "OP_82",
            "OP_91",
            "POP",
            "OP_84",
            "ADD",
            "OP_83",
            "OP_82",
            "OP_80",
            "OP_82",
            "OP_84",
            "CALLDATACOPY",
            "POP",
            "OP_94",
            "OP_96",
            "POP",
            "POP",
            "POP",
            "POP",
            "POP",
            "POP",
            "POP",
            "PUSH2",
            "PUSH1",
            "OP_80",
            "SLOAD",
            "PUSH1",
            "OP_80",
            "MLOAD",
            "PUSH1",
            "PUSH1",
            "EXP",
            "PUSH4",
            "MUL",
            "OP_81",
            "MSTORE",
            "OP_90",
            "MLOAD",
            "OP_83",
            "OP_92",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "OP_91",
            "PUSH4",
            "OP_91",
            "PUSH1",
            "OP_82",
            "OP_81",
            "ADD",
            "OP_92",
            "PUSH1",
            "OP_92",
            "OP_91",
            "OP_90",
            "OP_82",
            "OP_90",
            "SUB",
            "ADD",
            "OP_81",
            "OP_87",
            "OP_87",
            "PUSH2",
            "GAS",
            "SUB",
            "CALL",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 60
        },
        {
          "end_pc": 296,
          "hash": "0x211e3765757daf201f1b70081aec9a7306c21cc484627fd16e4bf11765a3dcbf",

exec
/bin/bash -lc "sed -n '261,520p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
 succeeded in 0ms:
          "opcodes": [
            "POP",
            "POP",
            "PUSH1",
            "MLOAD",
            "MLOAD",
            "OP_91",
            "POP",
            "POP",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_81",
            "AND",
            "OP_82",
            "EQ",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 271
        },
        {
          "end_pc": 300,
          "hash": "0x668aa9cdddb113ba7060294e573dc513608a91c364b12941519a8767bb9cc765",
          "opcodes": [
            "PUSH2",
            "PUSH1"
          ],
          "start_pc": 297
        },
        {
          "end_pc": 310,
          "hash": "0x92b9fb0700a02977615b94995915864fa8855c1250f6813615c9d726d4739464",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "PUSH2",
            "PUSH20"
          ],
          "start_pc": 302
        },
        {
          "end_pc": 334,
          "hash": "0xd9e173bf5a4bae3d012ac8f57221aca7ae8afd3cb7f4d5fcc09467d117a6a019",
          "opcodes": [
            "JUMPDEST",
            "EXTCODESIZE",
            "OP_90",
            "JUMP"
          ],
          "start_pc": 331
        },
        {
          "end_pc": 361,
          "hash": "0xaac8cf5520663acb0a77f19acbb813107ad0a429d956ca2f83b24df23eb19016",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "SLOAD",
            "CALLER",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_90",
            "OP_81",
            "AND",
            "OP_91",
            "AND",
            "EQ",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 335
        },
        {
          "end_pc": 372,
          "hash": "0x58bc5002fea31bfdae3addd849b6ddc13de55f92292ec08a2fd43282676e9b58",
          "opcodes": [
            "CALLER",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "SELFDESTRUCT"
          ],
          "start_pc": 362
        },
        {
          "end_pc": 634,
          "hash": "0x5066432d4453dd2e8e71cb6f74d701b6fb4e714e412ad23bfd673a40513b78e5",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "OP_80",
            "MLOAD",
            "OP_80",
            "OP_82",
            "ADD",
            "OP_82",
            "MSTORE",
            "PUSH1",
            "OP_81",
            "MSTORE",
            "PUSH32",
            "PUSH1",
            "OP_82",
            "OP_81",
            "ADD",
            "OP_91",
            "OP_90",
            "OP_91",
            "MSTORE",
            "OP_82",
            "MLOAD",
            "PUSH1",
            "OP_81",
            "ADD",
            "OP_84",
            "MSTORE",
            "PUSH1",
            "OP_81",
            "MSTORE",
            "PUSH32",
            "OP_81",
            "OP_83",
            "ADD",
            "MSTORE",
            "PUSH32",
            "OP_81",
            "OP_85",
            "ADD",
            "MSTORE",
            "PUSH32",
            "PUSH1",
            "OP_82",
            "ADD",
            "MSTORE",
            "OP_83",
            "MLOAD",
            "PUSH1",
            "OP_80",
            "SLOAD",
            "PUSH1",
            "PUSH1",
            "EXP",
            "PUSH4",
            "MUL",
            "OP_83",
            "MSTORE",
            "OP_95",
            "MLOAD",
            "PUSH2",
            "OP_96",
            "PUSH2",
            "OP_96",
            "OP_92",
            "OP_95",
            "OP_92",
            "OP_94",
            "OP_93",
            "OP_86",
            "OP_93",
            "OP_84",
            "OP_93",
            "OP_84",
            "OP_93",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "OP_92",
            "PUSH4",
            "OP_92",
            "PUSH1",
            "OP_82",
            "OP_81",
            "ADD",
            "OP_93",
            "OP_91",
            "OP_92",
            "OP_82",
            "OP_90",
            "SUB",
            "ADD",
            "OP_81",
            "OP_87",
            "OP_87",
            "PUSH2",
            "GAS",
            "SUB",
            "CALL",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 373
        },
        {
          "end_pc": 660,
          "hash": "0x5d5b06fe26a45dee4a94b0285d5be969620920d6cb84b84e2912f8192fcc01d8",
          "opcodes": [
            "POP",
            "POP",
            "PUSH1",
            "MLOAD",
            "MLOAD",
            "OP_91",
            "POP",
            "POP",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_81",
            "AND",
            "OP_82",
            "EQ",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 635
        },
        {
          "end_pc": 669,
          "hash": "0x46ec6fe8edc26ddada2f8ce8bd63637f88df67a3455ec56701e7740e7e3830e8",
          "opcodes": [
            "PUSH2",
            "PUSH1",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 661
        },
        {
          "end_pc": 738,
          "hash": "0x59419d4ace83aec0c5dc262ed8d45261be9b17b2da79daa76ebd1b785bf12c66",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "OP_80",
            "SLOAD",
            "PUSH1",
            "OP_80",
            "MLOAD",
            "PUSH1",

exec
/bin/bash -lc "sed -n '521,780p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
 succeeded in 0ms:
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "NOT",
            "PUSH2",
            "PUSH1",
            "OP_88",
            "AND",
            "ISZERO",
            "MUL",
            "ADD",
            "OP_90",
            "OP_95",
            "AND",
            "OP_94",
            "OP_90",
            "OP_94",
            "DIV",
            "OP_93",
            "OP_84",
            "ADD",
            "OP_81",
            "OP_90",
            "DIV",
            "OP_81",
            "MUL",
            "OP_82",
            "ADD",
            "OP_81",
            "ADD",
            "OP_90",
            "OP_92",
            "MSTORE",
            "OP_82",
            "OP_81",
            "MSTORE",
            "OP_92",
            "OP_91",
            "OP_90",
            "OP_83",
            "ADD",
            "OP_82",
            "OP_82",
            "OP_80",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 670
        },
        {
          "end_pc": 746,
          "hash": "0xf6224713c9e2a0b8e9f1f13c5e17ac17b5b8c63d447f7a413c3d277abcb2dbc8",
          "opcodes": [
            "OP_80",
            "PUSH1",
            "LT",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 739
        },
        {
          "end_pc": 765,
          "hash": "0x9869ac8e4b803e7e3a7f154e14d21bbac6410a3195f0113213ef37aceb275c92",
          "opcodes": [
            "PUSH2",
            "OP_80",
            "OP_83",
            "SLOAD",
            "DIV",
            "MUL",
            "OP_83",
            "MSTORE",
            "OP_91",
            "PUSH1",
            "ADD",
            "OP_91",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 747
        },
        {
          "end_pc": 836,
          "hash": "0x5346a9a196bb9b2840e18d0722700a6870e3a294a7db63b0d21e43514fab1117",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "MLOAD",
            "OP_80",
            "OP_80",
            "PUSH1",
            "ADD",
            "OP_82",
            "OP_81",
            "SUB",
            "OP_82",
            "MSTORE",
            "OP_83",
            "OP_81",
            "OP_81",
            "MLOAD",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_91",
            "POP",
            "OP_80",
            "MLOAD",
            "OP_90",
            "PUSH1",
            "ADD",
            "OP_90",
            "OP_80",
            "OP_83",
            "OP_83",
            "OP_82",
            "OP_90",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "OP_84",
            "PUSH1",
            "ADD",
            "DIV",
            "PUSH1",
            "MUL",
            "PUSH1",
            "ADD",
            "CALL",
            "POP",
            "OP_90",
            "POP",
            "OP_90",
            "OP_81",
            "ADD",
            "OP_90",
            "PUSH1",
            "AND",
            "OP_80",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 766
        },
        {
          "end_pc": 861,
          "hash": "0x30c56ad98d50fea7e336250e442e13018c59281f4490843a71eb90067b653adb",
          "opcodes": [
            "OP_80",
            "OP_82",
            "SUB",
            "OP_80",
            "MLOAD",
            "PUSH1",
            "OP_83",
            "PUSH1",
            "SUB",
            "PUSH2",
            "EXP",
            "SUB",
            "NOT",
            "AND",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_91",
            "POP"
          ],
          "start_pc": 837
        },
        {
          "end_pc": 875,
          "hash": "0x74089c7f1bde6f9723ef0e54be25f4aff3bf410c8d4fc6b5554ac53671f713e4",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "OP_92",
            "POP",
            "POP",
            "POP",
            "PUSH1",
            "MLOAD",
            "OP_80",
            "OP_91",
            "SUB",
            "OP_90",
            "RETURN"
          ],
          "start_pc": 862
        },
        {
          "end_pc": 902,
          "hash": "0x2031d0ece65c888ea24611f294776fe07d34aa33ba02e9696b523835cf07a37a",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "CALLER",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "EQ",
            "ISZERO",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 876
        },
        {
          "end_pc": 906,
          "hash": "0xcfcaf3284c036394e35a787ec2b1ca8ef7a86a3129d7b69fac82494789e00fb3",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 903
        },
        {
          "end_pc": 969,
          "hash": "0x4a0732c9db70459222f2e9e27b5cdf03b2937fce1f3009cca0c771f25fbe00ee",
          "opcodes": [
            "JUMPDEST",
            "OP_81",
            "PUSH1",
            "PUSH1",
            "POP",
            "OP_90",
            "OP_80",
            "MLOAD",
            "OP_90",
            "PUSH1",
            "ADD",
            "OP_90",
            "OP_82",
            "OP_80",
            "SLOAD",
            "PUSH1",
            "OP_81",
            "PUSH1",
            "AND",
            "ISZERO",
            "PUSH2",
            "MUL",
            "SUB",
            "AND",
            "PUSH1",
            "OP_90",

exec
/bin/bash -lc "sed -n '781,1040p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
 succeeded in 0ms:
            "DIV",
            "OP_90",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "SHA3",
            "OP_90",
            "PUSH1",
            "ADD",
            "PUSH1",
            "OP_90",
            "DIV",
            "OP_81",
            "ADD",
            "OP_92",
            "OP_82",
            "PUSH1",
            "LT",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 907
        },
        {
          "end_pc": 981,
          "hash": "0x77eaadf555e4e72a4151fbb36d3b6305908c31fe2ed981d6d8d90080a2a8aca7",
          "opcodes": [
            "OP_80",
            "MLOAD",
            "PUSH1",
            "NOT",
            "AND",
            "OP_83",
            "OP_80",
            "ADD",
            "OR",
            "OP_85",
            "SSTORE"
          ],
          "start_pc": 970
        },
        {
          "end_pc": 989,
          "hash": "0x50aea7be739d40bd88f23a02762b18f3c391a2575c8292289b01b25adea7116b",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "PUSH2",
            "OP_92",
            "OP_91",
            "POP"
          ],
          "start_pc": 982
        },
        {
          "end_pc": 998,
          "hash": "0x9bba9bb5b0bddd231b0503f2852c402ada6de77ab33fabca7797bc5457ea54ab",
          "opcodes": [
            "JUMPDEST",
            "OP_80",
            "OP_82",
            "GT",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 990
        },
        {
          "end_pc": 1009,
          "hash": "0x515ecc94bd36edbc1690b24deff926d69af9979053538ec613240a06fb4cc8c9",
          "opcodes": [
            "PUSH1",
            "OP_81",
            "SSTORE",
            "PUSH1",
            "ADD",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 999
        },
        {
          "end_pc": 1024,
          "hash": "0x895ac74a8ea1e8c264b01b11a7664cf3efbf4b60f3f6500fdae1c8426818e443",
          "opcodes": [
            "JUMPDEST",
            "OP_82",
            "OP_80",
            "ADD",
            "PUSH1",
            "ADD",
            "OP_85",
            "SSTORE",
            "OP_82",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1010
        },
        {
          "end_pc": 1027,
          "hash": "0xc89d53925d96de1319566417ca70c5d3665146babc73edcb788c8fd7fab9bfeb",
          "opcodes": [
            "OP_91",
            "OP_82",
            "ADD"
          ],
          "start_pc": 1025
        },
        {
          "end_pc": 1036,
          "hash": "0x944a980703b91331e4536aca3b3c414aa402d32809291fdef02c5fe09d02c9cc",
          "opcodes": [
            "JUMPDEST",
            "OP_82",
            "OP_81",
            "GT",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1028
        },
        {
          "end_pc": 1057,
          "hash": "0xfec70d6fbba1fdbb4179eb356eb2d71a5245c8f3d03e9bf705bd26fed2034a29",
          "opcodes": [
            "OP_82",
            "MLOAD",
            "OP_82",
            "PUSH1",
            "POP",
            "SSTORE",
            "OP_91",
            "PUSH1",
            "ADD",
            "OP_91",
            "OP_90",
            "PUSH1",
            "ADD",
            "OP_90",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 1037
        },
        {
          "end_pc": 1064,
          "hash": "0x577ac534db6ed3582b8a2880caf73beba61d3a701a4fd4e38ab860a063c5ee4b",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "POP",
            "POP",
            "POP",
            "POP",
            "JUMP"
          ],
          "start_pc": 1058
        },
        {
          "end_pc": 1068,
          "hash": "0x642535916eb378472b24848aff66be4eec048882a5da58a7177f407e75de6c36",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "OP_90",
            "JUMP"
          ],
          "start_pc": 1065
        },
        {
          "end_pc": 1070,
          "hash": "0xe388197184fa05ae9254d944206dab4c7134b33a335dbdbcbe3583b613e9f2f3",
          "opcodes": [
            "JUMPDEST",
            "JUMP"
          ],
          "start_pc": 1069
        },
        {
          "end_pc": 1073,
          "hash": "0x682955ccb1ab4fa2d3ca4a6a002238d2d89e812fe1b897e3bc5d965f55ccf699",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "JUMP"
          ],
          "start_pc": 1071
        },
        {
          "end_pc": 1087,
          "hash": "0x54a030bf364c8b28adfd542d2e67d75842e3dbc9327825ebac5fb226b42744bb",
          "opcodes": [
            "JUMPDEST",
            "OP_82",
            "ADD",
            "OP_91",
            "OP_90",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "SHA3",
            "OP_90"
          ],
          "start_pc": 1074
        },
        {
          "end_pc": 1107,
          "hash": "0x52b3de7930de8f47ae70130c0ce53b97ef1ececf3acf5387ee67d79848f0c767",
          "opcodes": [
            "JUMPDEST",
            "OP_81",
            "SLOAD",
            "OP_81",
            "MSTORE",
            "OP_90",
            "PUSH1",
            "ADD",
            "OP_90",
            "PUSH1",
            "ADD",
            "OP_80",
            "OP_83",
            "GT",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1088
        },
        {
          "end_pc": 1116,
          "hash": "0x126869c0d1ef5adcc020ecaaad212d70cac8a1b6582b393e9dd77dfad7836fac",
          "opcodes": [
            "OP_82",
            "OP_90",
            "SUB",
            "PUSH1",
            "AND",
            "OP_82",
            "ADD",
            "OP_91"
          ],
          "start_pc": 1108
        },
        {
          "end_pc": 1124,
          "hash": "0x1cdb8578c9f82d92d60885ba0c8552affef2a29f4d3dead47d7e55061469cb53",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "POP",
            "POP",
            "POP",
            "POP",
            "OP_81",

exec
/bin/bash -lc "sed -n '1041,1300p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
 succeeded in 0ms:
            "JUMP"
          ],
          "start_pc": 1117
        },
        {
          "end_pc": 1203,
          "hash": "0x8d07044fe4e2d1a301004e967054a46d2c4676aa7a0c0f823fc940e8a2eb119d",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "PUSH1",
            "PUSH1",
            "OP_90",
            "SLOAD",
            "OP_90",
            "PUSH2",
            "EXP",
            "OP_90",
            "DIV",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "PUSH4",
            "PUSH1",
            "MLOAD",
            "OP_81",
            "PUSH1",
            "PUSH1",
            "EXP",
            "MUL",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_80",
            "OP_90",
            "POP",
            "PUSH1",
            "PUSH1",
            "MLOAD",
            "OP_80",
            "OP_83",
            "SUB",
            "OP_81",
            "PUSH1",
            "OP_87",
            "PUSH2",
            "GAS",
            "SUB",
            "CALL",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1125
        },
        {
          "end_pc": 1212,
          "hash": "0xb8e60042fb97943d1fcc0b32d8a537473d6082ad5cc4ed4a0e8ea9540c8e28f6",
          "opcodes": [
            "POP",
            "POP",
            "PUSH1",
            "MLOAD",
            "MLOAD",
            "OP_91",
            "POP",
            "POP"
          ],
          "start_pc": 1204
        },
        {
          "end_pc": 1324,
          "hash": "0x5153c47a50bb64727503e05367e565b66b351f60bb7c76a5a1408ce43c7ded1c",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "OP_80",
            "SLOAD",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "NOT",
            "AND",
            "OP_82",
            "OR",
            "OP_90",
            "OP_81",
            "OP_90",
            "SSTORE",
            "PUSH1",
            "OP_80",
            "MLOAD",
            "PUSH32",
            "OP_81",
            "MSTORE",
            "OP_90",
            "MLOAD",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_92",
            "OP_90",
            "OP_92",
            "AND",
            "OP_91",
            "PUSH4",
            "OP_91",
            "PUSH1",
            "OP_81",
            "OP_81",
            "ADD",
            "OP_92",
            "PUSH1",
            "OP_92",
            "OP_90",
            "OP_91",
            "OP_90",
            "OP_82",
            "OP_90",
            "SUB",
            "ADD",
            "OP_81",
            "PUSH1",
            "OP_87",
            "PUSH2",
            "GAS",
            "SUB",
            "CALL",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1213
        },
        {
          "end_pc": 1336,
          "hash": "0xd032b2aae1e519f1ecef8628dcc1651749a8917fff5a07f39fa866e564f260f2",
          "opcodes": [
            "POP",
            "POP",
            "PUSH1",
            "MLOAD",
            "MLOAD",
            "OP_92",
            "POP",
            "POP",
            "POP",
            "OP_90",
            "JUMP"
          ],
          "start_pc": 1325
        },
        {
          "end_pc": 1415,
          "hash": "0x0232e337ceb5555f1eeb4020946bb8091cf11f1dc51928215169647607245b4c",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "PUSH1",
            "PUSH1",
            "OP_90",
            "SLOAD",
            "OP_90",
            "PUSH2",
            "EXP",
            "OP_90",
            "DIV",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "PUSH4",
            "PUSH1",
            "MLOAD",
            "OP_81",
            "PUSH1",
            "PUSH1",
            "EXP",
            "MUL",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_80",
            "OP_90",
            "POP",
            "PUSH1",
            "PUSH1",
            "MLOAD",
            "OP_80",
            "OP_83",
            "SUB",
            "OP_81",
            "PUSH1",
            "OP_87",
            "PUSH2",
            "GAS",
            "SUB",
            "CALL",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1337
        },
        {
          "end_pc": 1424,
          "hash": "0x2b5de16672d29c00853df0d4ede8db9b14a0700763d18c949f666cd5cac99cce",
          "opcodes": [
            "POP",
            "POP",
            "PUSH1",
            "MLOAD",
            "MLOAD",
            "OP_91",
            "POP",
            "POP"
          ],
          "start_pc": 1416
        },
        {
          "end_pc": 1579,
          "hash": "0x040d2e271dbda0cb239606af7428173b882718b283f38e05b414b7c19f90193d",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "OP_80",
            "SLOAD",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "NOT",
            "AND",
            "OP_82",
            "OR",
            "OP_90",

exec
/bin/bash -lc "sed -n '1301,1560p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
 succeeded in 0ms:
            "OP_81",
            "OP_90",
            "SSTORE",
            "PUSH1",
            "MLOAD",
            "PUSH32",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "OP_82",
            "OP_81",
            "ADD",
            "OP_82",
            "OP_81",
            "MSTORE",
            "OP_89",
            "MLOAD",
            "PUSH1",
            "OP_85",
            "ADD",
            "MSTORE",
            "OP_89",
            "MLOAD",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_95",
            "OP_90",
            "OP_95",
            "AND",
            "OP_94",
            "PUSH4",
            "OP_94",
            "OP_8B",
            "OP_94",
            "OP_92",
            "OP_93",
            "OP_84",
            "OP_93",
            "PUSH1",
            "OP_92",
            "OP_90",
            "OP_92",
            "ADD",
            "OP_92",
            "OP_86",
            "OP_83",
            "ADD",
            "OP_92",
            "OP_90",
            "OP_91",
            "OP_82",
            "OP_91",
            "OP_85",
            "OP_91",
            "OP_83",
            "OP_91",
            "OP_86",
            "OP_91",
            "PUSH1",
            "OP_91",
            "PUSH1",
            "OP_85",
            "ADD",
            "DIV",
            "PUSH1",
            "MUL",
            "PUSH1",
            "ADD",
            "CALL",
            "POP",
            "OP_90",
            "POP",
            "OP_90",
            "OP_81",
            "ADD",
            "OP_90",
            "PUSH1",
            "AND",
            "OP_80",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1425
        },
        {
          "end_pc": 1604,
          "hash": "0x93e1414178a108c51c449c4410a64b84b6d2e084829b59f57ef83985f07a89ae",
          "opcodes": [
            "OP_80",
            "OP_82",
            "SUB",
            "OP_80",
            "MLOAD",
            "PUSH1",
            "OP_83",
            "PUSH1",
            "SUB",
            "PUSH2",
            "EXP",
            "SUB",
            "NOT",
            "AND",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_91",
            "POP"
          ],
          "start_pc": 1580
        },
        {
          "end_pc": 1633,
          "hash": "0x62b82eb97950d0365e8b092322caafd55057ebd7a3793e72298f06a3774a91a6",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "OP_92",
            "POP",
            "POP",
            "POP",
            "PUSH1",
            "PUSH1",
            "MLOAD",
            "OP_80",
            "OP_83",
            "SUB",
            "OP_81",
            "PUSH1",
            "OP_87",
            "PUSH2",
            "GAS",
            "SUB",
            "CALL",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1605
        },
        {
          "end_pc": 1665,
          "hash": "0xa0bc5852373a9fde229a3f7e5f1a78374d41b2ddef8734e1a855f69f927ba82b",
          "opcodes": [
            "POP",
            "POP",
            "PUSH1",
            "MLOAD",
            "MLOAD",
            "OP_92",
            "POP",
            "POP",
            "PUSH8",
            "PUSH3",
            "OP_3A",
            "MUL",
            "ADD",
            "OP_82",
            "GT",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1634
        },
        {
          "end_pc": 1670,
          "hash": "0xd2fb0dd23d9c64752c07bd12c44134f7bf87dd7ee9b41f5a6e0b6cd08c33fe48",
          "opcodes": [
            "POP",
            "PUSH1",
            "OP_91",
            "POP"
          ],
          "start_pc": 1666
        },
        {
          "end_pc": 1678,
          "hash": "0xf3f421656605ff93ced962e97162d12158c7433435308f9025ef181141585677",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "OP_93",
            "OP_92",
            "POP",
            "POP",
            "POP",
            "JUMP"
          ],
          "start_pc": 1671
        },
        {
          "end_pc": 1811,
          "hash": "0x8e511d014826225042535114d8923b821a07d480d6f6de9ce02350095f3b023b",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "OP_90",
            "SLOAD",
            "OP_90",
            "PUSH2",
            "EXP",
            "OP_90",
            "DIV",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "PUSH4",
            "OP_83",
            "OP_88",
            "OP_88",
            "OP_88",
            "PUSH1",
            "MLOAD",
            "OP_85",
            "PUSH1",
            "PUSH1",
            "EXP",
            "MUL",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_80",
            "OP_84",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_80",
            "PUSH1",
            "ADD",
            "OP_80",
            "PUSH1",
            "ADD",
            "OP_83",
            "OP_81",
            "SUB",
            "OP_83",
            "MSTORE",
            "OP_85",
            "OP_81",
            "OP_81",
            "MLOAD",
            "OP_81",

exec
/bin/bash -lc "sed -n '1561,1820p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
 succeeded in 0ms:
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_91",
            "POP",
            "OP_80",
            "MLOAD",
            "OP_90",
            "PUSH1",
            "ADD",
            "OP_90",
            "OP_80",
            "OP_83",
            "OP_83",
            "OP_82",
            "OP_90",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "OP_84",
            "PUSH1",
            "ADD",
            "DIV",
            "PUSH1",
            "MUL",
            "PUSH1",
            "ADD",
            "CALL",
            "POP",
            "OP_90",
            "POP",
            "OP_90",
            "OP_81",
            "ADD",
            "OP_90",
            "PUSH1",
            "AND",
            "OP_80",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1679
        },
        {
          "end_pc": 1836,
          "hash": "0x0fbe6329ef683dc2100ad50f1fbb416847d003fa358f4c076508ac3d454820d9",
          "opcodes": [
            "OP_80",
            "OP_82",
            "SUB",
            "OP_80",
            "MLOAD",
            "PUSH1",
            "OP_83",
            "PUSH1",
            "SUB",
            "PUSH2",
            "EXP",
            "SUB",
            "NOT",
            "AND",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_91",
            "POP"
          ],
          "start_pc": 1812
        },
        {
          "end_pc": 1900,
          "hash": "0x21bc3c4ad3b7b5a1c504b0d546a05cb3ed213ef5abacba9565755428c3234bda",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "OP_83",
            "OP_81",
            "SUB",
            "OP_82",
            "MSTORE",
            "OP_84",
            "OP_81",
            "OP_81",
            "MLOAD",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_91",
            "POP",
            "OP_80",
            "MLOAD",
            "OP_90",
            "PUSH1",
            "ADD",
            "OP_90",
            "OP_80",
            "OP_83",
            "OP_83",
            "OP_82",
            "OP_90",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "OP_84",
            "PUSH1",
            "ADD",
            "DIV",
            "PUSH1",
            "MUL",
            "PUSH1",
            "ADD",
            "CALL",
            "POP",
            "OP_90",
            "POP",
            "OP_90",
            "OP_81",
            "ADD",
            "OP_90",
            "PUSH1",
            "AND",
            "OP_80",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1837
        },
        {
          "end_pc": 1925,
          "hash": "0x815742a77240d5366e4e6fd9577c86fd1c0f790d7f119ac0d533dce6eefd5de4",
          "opcodes": [
            "OP_80",
            "OP_82",
            "SUB",
            "OP_80",
            "MLOAD",
            "PUSH1",
            "OP_83",
            "PUSH1",
            "SUB",
            "PUSH2",
            "EXP",
            "SUB",
            "NOT",
            "AND",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_91",
            "POP"
          ],
          "start_pc": 1901
        },
        {
          "end_pc": 1956,
          "hash": "0x10575e5245e3c74a6f6596e1e1cb7241a8eb25b2412626c142b9b9418cd86594",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "OP_95",
            "POP",
            "POP",
            "POP",
            "POP",
            "POP",
            "POP",
            "PUSH1",
            "PUSH1",
            "MLOAD",
            "OP_80",
            "OP_83",
            "SUB",
            "OP_81",
            "OP_85",
            "OP_88",
            "PUSH2",
            "GAS",
            "SUB",
            "CALL",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1926
        },
        {
          "end_pc": 1972,
          "hash": "0x850af865e51ff0a73025e2cf811ced241dcd418a29c661f7d20c1eb909527a3f",
          "opcodes": [
            "POP",
            "POP",
            "PUSH1",
            "MLOAD",
            "MLOAD",
            "OP_94",
            "POP",
            "PUSH2",
            "OP_92",
            "POP",
            "POP",
            "POP",
            "JUMP"
          ],
          "start_pc": 1957
        },
        {
          "end_pc": 1975,
          "hash": "0xb2e6121a2f6ab63394b8175340abfe0d03a101697bae37348318b68cb7f45f82",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "PUSH1"
          ],
          "start_pc": 1973
        },
        {
          "end_pc": 1981,
          "hash": "0xe4194e3e0a14cfaad6a3740b86815a587592b48d942c6c95f8de485ec89f6713",
          "opcodes": [
            "JUMPDEST",
            "OP_91",
            "OP_90",
            "POP",
            "JUMP"
          ],
          "start_pc": 1977
        },
        {
          "end_pc": 1988,
          "hash": "0xd0a3078f3776851fb284190573d8411c7a45c74c62714b16b686a69da2bcbc93",
          "opcodes": [
            "JUMPDEST",
            "GT",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1982
        },
        {
          "end_pc": 2033,
          "hash": "0x0d02bf081005303d5897b8e3823b651448050c2f67849e133e34bde7573e631b",
          "opcodes": [
            "POP",
            "PUSH1",
            "OP_80",
            "SLOAD",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "NOT",
            "AND",
            "PUSH20",

exec
/bin/bash -lc "sed -n '1821,2080p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
 succeeded in 0ms:
            "OR",
            "OP_90",
            "SSTORE",
            "PUSH1",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 1989
        },
        {
          "end_pc": 2064,
          "hash": "0x7607ee9f3b447f0bef515c82693372367131b6ad757de2100033c6b7883ad7ac",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH2",
            "PUSH20",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 2034
        },
        {
          "end_pc": 2071,
          "hash": "0x27468012cd2c4e6a4785e651ab0ad51142805c845a9bfdaf051cba49612bbe6d",
          "opcodes": [
            "JUMPDEST",
            "GT",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 2065
        },
        {
          "end_pc": 2118,
          "hash": "0xed44d886591b935cf6c7c660459d036a8678ac5271991fc52b4368a346556587",
          "opcodes": [
            "POP",
            "PUSH1",
            "OP_80",
            "SLOAD",
            "PUSH20",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "NOT",
            "OP_90",
            "OP_91",
            "AND",
            "OR",
            "OP_90",
            "SSTORE",
            "PUSH1",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 2072
        },
        {
          "end_pc": 2149,
          "hash": "0xb0ade73ebbf7365a8901eb9286a458e0e140a7883bccfd5d8f7bbdae67bd035a",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH2",
            "PUSH20",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 2119
        },
        {
          "end_pc": 2156,
          "hash": "0xfe8ac693858f299b9c4ac41f6c71a81fbf4f4f4b5992c19fd8fdbe5f1599a91c",
          "opcodes": [
            "JUMPDEST",
            "GT",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 2150
        },
        {
          "end_pc": 2203,
          "hash": "0xc81ec5bd94bfbaea925ecd557116b765db19758176097c09ac51d99ed39e80f5",
          "opcodes": [
            "POP",
            "PUSH1",
            "OP_80",
            "SLOAD",
            "PUSH20",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "NOT",
            "OP_90",
            "OP_91",
            "AND",
            "OR",
            "OP_90",
            "SSTORE",
            "PUSH1",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 2157
        }
      ],
      "callsites": [
        {
          "opcode": "CALL",
          "pc": 265,
          "returndata_checked": null,
          "target_expression_category": "computed",
          "value_expression_category": "computed"
        },
        {
          "opcode": "CALL",
          "pc": 629,
          "returndata_checked": null,
          "target_expression_category": "computed",
          "value_expression_category": "computed"
        },
        {
          "opcode": "CALL",
          "pc": 820,
          "returndata_checked": null,
          "target_expression_category": "computed",
          "value_expression_category": "computed"
        },
        {
          "opcode": "CALL",
          "pc": 1198,
          "returndata_checked": null,
          "target_expression_category": "computed",
          "value_expression_category": "computed"
        },
        {
          "opcode": "CALL",
          "pc": 1319,
          "returndata_checked": null,
          "target_expression_category": "computed",
          "value_expression_category": "computed"
        },
        {
          "opcode": "CALL",
          "pc": 1410,
          "returndata_checked": null,
          "target_expression_category": "computed",
          "value_expression_category": "computed"
        },
        {
          "opcode": "CALL",
          "pc": 1563,
          "returndata_checked": null,
          "target_expression_category": "computed",
          "value_expression_category": "computed"
        },
        {
          "opcode": "CALL",
          "pc": 1628,
          "returndata_checked": null,
          "target_expression_category": "computed",
          "value_expression_category": "computed"
        },
        {
          "opcode": "CALL",
          "pc": 1795,
          "returndata_checked": null,
          "target_expression_category": "computed",
          "value_expression_category": "computed"
        },
        {
          "opcode": "CALL",
          "pc": 1884,
          "returndata_checked": null,
          "target_expression_category": "computed",
          "value_expression_category": "computed"
        },
        {
          "opcode": "CALL",
          "pc": 1951,
          "returndata_checked": null,
          "target_expression_category": "computed",
          "value_expression_category": "computed"
        }
      ],
      "cfg_edges": [
        {
          "from": "bb:0",
          "to": "bb:60",
          "type": "control_flow"
        },
        {
          "from": "bb:0",
          "to": "bb:25",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:25",
          "to": "bb:335",
          "type": "control_flow"
        },
        {
          "from": "bb:25",
          "to": "bb:36",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:36",
          "to": "bb:373",
          "type": "control_flow"
        },
        {
          "from": "bb:36",
          "to": "bb:47",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:47",
          "to": "bb:670",
          "type": "control_flow"
        },
        {
          "from": "bb:47",
          "to": "bb:58",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:60",
          "to": "bb:271",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:271",
          "to": "bb:1213",
          "type": "control_flow"
        },
        {
          "from": "bb:271",
          "to": "bb:297",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:297",
          "to": "bb:302",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:302",
          "to": "bb:331",
          "type": "control_flow_fallthrough"
        },
        {

exec
/bin/bash -lc "sed -n '2081,2340p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
 succeeded in 0ms:
          "from": "bb:335",
          "to": "bb:1069",
          "type": "control_flow"
        },
        {
          "from": "bb:335",
          "to": "bb:362",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:373",
          "to": "bb:635",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:635",
          "to": "bb:1425",
          "type": "control_flow"
        },
        {
          "from": "bb:635",
          "to": "bb:661",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:661",
          "to": "bb:302",
          "type": "control_flow"
        },
        {
          "from": "bb:670",
          "to": "bb:1117",
          "type": "control_flow"
        },
        {
          "from": "bb:670",
          "to": "bb:739",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:739",
          "to": "bb:1074",
          "type": "control_flow"
        },
        {
          "from": "bb:739",
          "to": "bb:747",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:747",
          "to": "bb:1117",
          "type": "control_flow"
        },
        {
          "from": "bb:766",
          "to": "bb:862",
          "type": "control_flow"
        },
        {
          "from": "bb:766",
          "to": "bb:837",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:837",
          "to": "bb:862",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:876",
          "to": "bb:907",
          "type": "control_flow"
        },
        {
          "from": "bb:876",
          "to": "bb:903",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:907",
          "to": "bb:1010",
          "type": "control_flow"
        },
        {
          "from": "bb:907",
          "to": "bb:970",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:970",
          "to": "bb:982",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:982",
          "to": "bb:990",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:990",
          "to": "bb:1065",
          "type": "control_flow"
        },
        {
          "from": "bb:990",
          "to": "bb:999",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:999",
          "to": "bb:990",
          "type": "control_flow"
        },
        {
          "from": "bb:1010",
          "to": "bb:982",
          "type": "control_flow"
        },
        {
          "from": "bb:1010",
          "to": "bb:1025",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1025",
          "to": "bb:1028",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1028",
          "to": "bb:982",
          "type": "control_flow"
        },
        {
          "from": "bb:1028",
          "to": "bb:1037",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1037",
          "to": "bb:1028",
          "type": "control_flow"
        },
        {
          "from": "bb:1074",
          "to": "bb:1088",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1088",
          "to": "bb:1088",
          "type": "control_flow"
        },
        {
          "from": "bb:1088",
          "to": "bb:1108",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1108",
          "to": "bb:1117",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1125",
          "to": "bb:1204",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1204",
          "to": "bb:1213",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1213",
          "to": "bb:1325",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1337",
          "to": "bb:1416",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1416",
          "to": "bb:1425",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1425",
          "to": "bb:1605",
          "type": "control_flow"
        },
        {
          "from": "bb:1425",
          "to": "bb:1580",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1580",
          "to": "bb:1605",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1605",
          "to": "bb:1634",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1634",
          "to": "bb:1679",
          "type": "control_flow"
        },
        {
          "from": "bb:1634",
          "to": "bb:1666",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1666",
          "to": "bb:1671",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1679",
          "to": "bb:1837",
          "type": "control_flow"
        },
        {
          "from": "bb:1679",
          "to": "bb:1812",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1812",
          "to": "bb:1837",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1837",
          "to": "bb:1926",
          "type": "control_flow"
        },
        {
          "from": "bb:1837",
          "to": "bb:1901",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1901",
          "to": "bb:1926",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1926",
          "to": "bb:1957",
          "type": "control_flow_fallthrough"
        },
        {

exec
/bin/bash -lc "sed -n '2341,2600p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
 succeeded in 0ms:
          "from": "bb:1973",
          "to": "bb:1977",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1982",
          "to": "bb:2034",
          "type": "control_flow"
        },
        {
          "from": "bb:1982",
          "to": "bb:1989",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1989",
          "to": "bb:1977",
          "type": "control_flow"
        },
        {
          "from": "bb:2034",
          "to": "bb:331",
          "type": "control_flow"
        },
        {
          "from": "bb:2065",
          "to": "bb:2119",
          "type": "control_flow"
        },
        {
          "from": "bb:2065",
          "to": "bb:2072",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:2072",
          "to": "bb:1977",
          "type": "control_flow"
        },
        {
          "from": "bb:2119",
          "to": "bb:331",
          "type": "control_flow"
        },
        {
          "from": "bb:2150",
          "to": "bb:1973",
          "type": "control_flow"
        },
        {
          "from": "bb:2150",
          "to": "bb:2157",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:2157",
          "to": "bb:1977",
          "type": "control_flow"
        }
      ],
      "cfg_hash": "0x181fd8642c647cddc003382d07ba656cb2061fb8a1ebe3bc3d78bd4569244c90",
      "dispatcher_type": "selector_jump_table",
      "function_entries": [
        {
          "entry_pc": null,
          "selector": "0x38bbfa50"
        },
        {
          "entry_pc": 2732990533,
          "selector": "0x41c0e1b5"
        },
        {
          "entry_pc": 3077981301,
          "selector": "0xa2e62045"
        },
        {
          "entry_pc": null,
          "selector": "0xb7764475"
        }
      ],
      "functions": [
        {
          "auth": {
            "guards": []
          },
          "entry_pc": null,
          "selector": "0x38bbfa50",
          "sinks": {
            "call": 11,
            "delegatecall": 0,
            "selfdestruct": 1,
            "staticcall": 0
          },
          "storage": {
            "reads": 15,
            "slots": [
              {
                "op": "SLOAD",
                "pc": 204,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 341,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              },
              {
                "op": "SLOAD",
                "pc": 558,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 677,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
              },
              {
                "op": "SLOAD",
                "pc": 752,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SLOAD",
                "pc": 1132,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1217,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 1344,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1429,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 1685,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1993,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 2076,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 2161,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              }
            ],
            "writes": 9
          }
        },
        {
          "auth": {
            "guards": []
          },
          "entry_pc": 2732990533,
          "selector": "0x41c0e1b5",
          "sinks": {
            "call": 11,
            "delegatecall": 0,
            "selfdestruct": 1,
            "staticcall": 0
          },
          "storage": {
            "reads": 15,
            "slots": [
              {
                "op": "SLOAD",
                "pc": 204,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 341,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              },
              {
                "op": "SLOAD",
                "pc": 558,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 677,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
              },
              {
                "op": "SLOAD",
                "pc": 752,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SLOAD",
                "pc": 1132,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1217,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 1344,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1429,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 1685,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1993,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 2076,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 2161,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              }
            ],
            "writes": 9
          }
        },
        {
          "auth": {
            "guards": []
          },
          "entry_pc": 3077981301,
          "selector": "0xa2e62045",
          "sinks": {
            "call": 11,
            "delegatecall": 0,
            "selfdestruct": 1,
            "staticcall": 0

exec
/bin/bash -lc "sed -n '2601,2860p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
 succeeded in 0ms:
          },
          "storage": {
            "reads": 15,
            "slots": [
              {
                "op": "SLOAD",
                "pc": 204,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 341,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              },
              {
                "op": "SLOAD",
                "pc": 558,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 677,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
              },
              {
                "op": "SLOAD",
                "pc": 752,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SLOAD",
                "pc": 1132,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1217,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 1344,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1429,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 1685,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1993,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 2076,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 2161,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              }
            ],
            "writes": 9
          }
        },
        {
          "auth": {
            "guards": []
          },
          "entry_pc": null,
          "selector": "0xb7764475",
          "sinks": {
            "call": 11,
            "delegatecall": 0,
            "selfdestruct": 1,
            "staticcall": 0
          },
          "storage": {
            "reads": 15,
            "slots": [
              {
                "op": "SLOAD",
                "pc": 204,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 341,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              },
              {
                "op": "SLOAD",
                "pc": 558,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 677,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
              },
              {
                "op": "SLOAD",
                "pc": 752,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SLOAD",
                "pc": 1132,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1217,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 1344,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1429,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 1685,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1993,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 2076,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 2161,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              }
            ],
            "writes": 9
          }
        }
      ],
      "selectors": [
        "0x38bbfa50",
        "0x41c0e1b5",
        "0xa2e62045",
        "0xb7764475"
      ],
      "sinks": {
        "call": 11,
        "create": 0,
        "create2": 0,
        "delegatecall": 0,
        "selfdestruct": 1,
        "staticcall": 0,
        "upgrade_slot_write_suspected": false
      },
      "storage": {
        "keccak_count": 2,
        "reads": 15,
        "slots": [
          {
            "op": "SLOAD",
            "pc": 204,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
          },
          {
            "op": "SLOAD",
            "pc": 341,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
          },
          {
            "op": "SLOAD",
            "pc": 558,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
          },
          {
            "op": "SLOAD",
            "pc": 677,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000003"
          },
          {
            "op": "SLOAD",
            "pc": 752,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
          },
          {
            "op": "SLOAD",
            "pc": 1132,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
          },
          {
            "op": "SLOAD",
            "pc": 1217,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
          },
          {
            "op": "SLOAD",
            "pc": 1344,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
          },
          {
            "op": "SLOAD",
            "pc": 1429,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
          },
          {
            "op": "SLOAD",
            "pc": 1685,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
          },
          {
            "op": "SLOAD",
            "pc": 1993,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
          },
          {
            "op": "SLOAD",
            "pc": 2076,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
          },
          {
            "op": "SLOAD",
            "pc": 2161,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
          }
        ],
        "writes": 9
      },
      "version": "analysis_artifact_v1"
    },
    "block_number": null,
    "chain_id": 1,
    "codehash": "0xb1fc278728ff61b8338d41c1c1eba823f11bbb815560a5d95a88c6fa6cee18bf",
    "created_at": "2026-04-04T19:58:14.000000Z",
    "id": 2564,
    "updated_at": "2026-04-04T19:58:14.000000Z",
    "version": "analysis_artifact_v1"
  },
  "analysis_run": {
    "address": "0xcad333e2f7ec4058aa5ba825a5de8af4139490c9",
    "block_number": null,
    "chain_id": 1,
    "child_links": [],

exec
/bin/bash -lc "sed -n '2861,3120p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
 succeeded in 0ms:
    "created_at": "2025-12-19T20:03:57.000000Z",
    "id": "019b3836-3fab-72b2-b454-064ea28d2ebf",
    "parent_links": [],
    "status": "running",
    "updated_at": "2026-04-04T19:58:14.000000Z"
  },
  "artifact": {
    "codehash": "0xb1fc278728ff61b8338d41c1c1eba823f11bbb815560a5d95a88c6fa6cee18bf",
    "compiler_json": {
      "etherscan": {
        "skipped": true
      }
    },
    "implementation_address": null,
    "is_proxy": false,
    "runtime_bytecode": {
      "full": "0x606060405260e060020a600035046338bbfa50811461003c57806341c0e1b51461014f578063a2e6204514610175578063b77644751461029e575b005b60408051602060248035600481810135601f810185900485028601850190965285855261003a9581359591946044949293909201918190840183828082843750506040805160209735808a0135601f81018a90048a0283018a01909352828252969897606497919650602491909101945090925082915084018382808284375094965050505050505061036c600080546040805160e060020a6338cc483102815290518392600160a060020a0316916338cc4831916004828101926020929190829003018187876161da5a03f11561000257505060405151915050600160a060020a0381168214156104bd5761046560005b600060006107be731d11e5eae3112dbd44f99266872ff1d07c77dce85b3b90565b61003a60025433600160a060020a039081169116141561042d5733600160a060020a0316ff5b604080518082018252600381527f55524c00000000000000000000000000000000000000000000000000000000006020828101919091528251608081018452604c81527f6a736f6e2868747470733a2f2f6170692e6b72616b656e2e636f6d2f302f7075818301527f626c69632f5469636b65723f706169723d455448584254292e726573756c742e818501527f58455448585842542e632e300000000000000000000000000000000000000000606082015283516000805460e060020a6338cc4831028352955161003a9661042f969295929493869384938493600160a060020a0316926338cc4831926004828101939192829003018187876161da5a03f11561000257505060405151915050600160a060020a03811682141561059157610539600061012e565b6102fe60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815292919083018282801561045d5780601f106104325761010080835404028352916020019161045d565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561035e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600160a060020a031633600160a060020a031614151561038b57610002565b8160036000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106103f257805160ff19168380011785555b506104229291505b8082111561042957600081556001016103de565b828001600101855582156103d6579182015b828111156103d6578251826000505591602001919060010190610404565b5050505050565b5090565b565b50565b820191906000526020600020905b81548152906001019060200180831161044057829003601f168201915b505050505081565b50600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050604051519150505b60018054600160a060020a031916821790819055604080517fc281d19e0000000000000000000000000000000000000000000000000000000081529051600160a060020a03929092169163c281d19e9160048181019260209290919082900301816000876161da5a03f115610002575050604051519250505090565b50600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050604051519150505b60018054600160a060020a0319168217908190556040517f524f388900000000000000000000000000000000000000000000000000000000815260206004828101828152895160248501528951600160a060020a03959095169463524f3889948b9492938493604492909201928683019290918291859183918691600091601f850104600f02600301f150905090810190601f1680156106455780820380516001836020036101000a031916815260200191505b50925050506020604051808303816000876161da5a03f11561000257505060405151925050670de0b6b3a764000062030d403a020182111561068f5750600091505b509392505050565b600160009054906101000a9004600160a060020a0316600160a060020a031663adf59f99838888886040518560e060020a0281526004018084815260200180602001806020018381038352858181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561072d5780820380516001836020036101000a031916815260200191505b508381038252848181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156107865780820380516001836020036101000a031916815260200191505b509550505050505060206040518083038185886185025a03f11561000257505060405151945061068792505050565b5060005b919050565b11156107f2575060008054600160a060020a031916731d11e5eae3112dbd44f99266872ff1d07c77dce817905560016107b9565b6000610811739efbea6358bed926b293d2ce63a730d6d98d43dd61014b565b1115610847575060008054739efbea6358bed926b293d2ce63a730d6d98d43dd600160a060020a031990911617905560016107b9565b60006108667320e12a1f859b3feae5fb2a0a32c18f5a65555bbf61014b565b11156107b55750600080547320e12a1f859b3feae5fb2a0a32c18f5a65555bbf600160a060020a031990911617905560016107b956",
      "head": null,
      "length": 4410,
      "tail": null,
      "truncated": false
    },
    "verified_source": false
  },
  "capability_graph": {
    "address": "0xcad333e2f7ec4058aa5ba825a5de8af4139490c9",
    "block_number": null,
    "chain_id": 1,
    "codehash": "0xb1fc278728ff61b8338d41c1c1eba823f11bbb815560a5d95a88c6fa6cee18bf",
    "created_at": "2026-04-04T19:58:14.000000Z",
    "graph_hash": "0x98109a53e919091c6f4beb478bcb3a6239020ce8fe67c5453369625adb89c980",
    "graph_json": {
      "edges": [
        {
          "from": "bb:0",
          "to": "bb:60",
          "type": "control_flow"
        },
        {
          "from": "bb:0",
          "to": "bb:25",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:25",
          "to": "bb:335",
          "type": "control_flow"
        },
        {
          "from": "bb:25",
          "to": "bb:36",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:36",
          "to": "bb:373",
          "type": "control_flow"
        },
        {
          "from": "bb:36",
          "to": "bb:47",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:47",
          "to": "bb:670",
          "type": "control_flow"
        },
        {
          "from": "bb:47",
          "to": "bb:58",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:60",
          "to": "bb:271",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:271",
          "to": "bb:1213",
          "type": "control_flow"
        },
        {
          "from": "bb:271",
          "to": "bb:297",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:297",
          "to": "bb:302",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:302",
          "to": "bb:331",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:335",
          "to": "bb:1069",
          "type": "control_flow"
        },
        {
          "from": "bb:335",
          "to": "bb:362",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:373",
          "to": "bb:635",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:635",
          "to": "bb:1425",
          "type": "control_flow"
        },
        {
          "from": "bb:635",
          "to": "bb:661",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:661",
          "to": "bb:302",
          "type": "control_flow"
        },
        {
          "from": "bb:670",
          "to": "bb:1117",
          "type": "control_flow"
        },
        {
          "from": "bb:670",
          "to": "bb:739",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:739",
          "to": "bb:1074",
          "type": "control_flow"
        },
        {
          "from": "bb:739",
          "to": "bb:747",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:747",
          "to": "bb:1117",
          "type": "control_flow"
        },
        {
          "from": "bb:766",
          "to": "bb:862",
          "type": "control_flow"
        },
        {
          "from": "bb:766",
          "to": "bb:837",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:837",
          "to": "bb:862",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:876",
          "to": "bb:907",
          "type": "control_flow"
        },
        {
          "from": "bb:876",
          "to": "bb:903",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:907",
          "to": "bb:1010",
          "type": "control_flow"
        },
        {
          "from": "bb:907",
          "to": "bb:970",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:970",
          "to": "bb:982",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:982",
          "to": "bb:990",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:990",
          "to": "bb:1065",
          "type": "control_flow"
        },
        {
          "from": "bb:990",
          "to": "bb:999",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:999",
          "to": "bb:990",
          "type": "control_flow"
        },
        {
          "from": "bb:1010",
          "to": "bb:982",
          "type": "control_flow"
        },
        {
          "from": "bb:1010",
          "to": "bb:1025",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1025",
          "to": "bb:1028",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1028",
          "to": "bb:982",
          "type": "control_flow"
        },
        {
          "from": "bb:1028",
          "to": "bb:1037",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1037",
          "to": "bb:1028",
          "type": "control_flow"
        },
        {
          "from": "bb:1074",
          "to": "bb:1088",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1088",
          "to": "bb:1088",
          "type": "control_flow"
        },
        {
          "from": "bb:1088",
          "to": "bb:1108",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1108",

exec
/bin/bash -lc "rg -n 'detector|evidence|selector_map|summary|finding|selfdestruct|38cc4831|524f3889|c281d19e|adf59f99' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
 succeeded in 0ms:
2431:            "selfdestruct": 1,
2515:            "selfdestruct": 1,
2599:            "selfdestruct": 1,
2683:            "selfdestruct": 1,
2770:        "selfdestruct": 1,
2877:      "full": "0x606060405260e060020a600035046338bbfa50811461003c57806341c0e1b51461014f578063a2e6204514610175578063b77644751461029e575b005b60408051602060248035600481810135601f810185900485028601850190965285855261003a9581359591946044949293909201918190840183828082843750506040805160209735808a0135601f81018a90048a0283018a01909352828252969897606497919650602491909101945090925082915084018382808284375094965050505050505061036c600080546040805160e060020a6338cc483102815290518392600160a060020a0316916338cc4831916004828101926020929190829003018187876161da5a03f11561000257505060405151915050600160a060020a0381168214156104bd5761046560005b600060006107be731d11e5eae3112dbd44f99266872ff1d07c77dce85b3b90565b61003a60025433600160a060020a039081169116141561042d5733600160a060020a0316ff5b604080518082018252600381527f55524c00000000000000000000000000000000000000000000000000000000006020828101919091528251608081018452604c81527f6a736f6e2868747470733a2f2f6170692e6b72616b656e2e636f6d2f302f7075818301527f626c69632f5469636b65723f706169723d455448584254292e726573756c742e818501527f58455448585842542e632e300000000000000000000000000000000000000000606082015283516000805460e060020a6338cc4831028352955161003a9661042f969295929493869384938493600160a060020a0316926338cc4831926004828101939192829003018187876161da5a03f11561000257505060405151915050600160a060020a03811682141561059157610539600061012e565b6102fe60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815292919083018282801561045d5780601f106104325761010080835404028352916020019161045d565b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561035e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b600160a060020a031633600160a060020a031614151561038b57610002565b8160036000509080519060200190828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106103f257805160ff19168380011785555b506104229291505b8082111561042957600081556001016103de565b828001600101855582156103d6579182015b828111156103d6578251826000505591602001919060010190610404565b5050505050565b5090565b565b50565b820191906000526020600020905b81548152906001019060200180831161044057829003601f168201915b505050505081565b50600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050604051519150505b60018054600160a060020a031916821790819055604080517fc281d19e0000000000000000000000000000000000000000000000000000000081529051600160a060020a03929092169163c281d19e9160048181019260209290919082900301816000876161da5a03f115610002575050604051519250505090565b50600060009054906101000a9004600160a060020a0316600160a060020a03166338cc48316040518160e060020a0281526004018090506020604051808303816000876161da5a03f115610002575050604051519150505b60018054600160a060020a0319168217908190556040517f524f388900000000000000000000000000000000000000000000000000000000815260206004828101828152895160248501528951600160a060020a03959095169463524f3889948b9492938493604492909201928683019290918291859183918691600091601f850104600f02600301f150905090810190601f1680156106455780820380516001836020036101000a031916815260200191505b50925050506020604051808303816000876161da5a03f11561000257505060405151925050670de0b6b3a764000062030d403a020182111561068f5750600091505b509392505050565b600160009054906101000a9004600160a060020a0316600160a060020a031663adf59f99838888886040518560e060020a0281526004018084815260200180602001806020018381038352858181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561072d5780820380516001836020036101000a031916815260200191505b508381038252848181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156107865780820380516001836020036101000a031916815260200191505b509550505050505060206040518083038185886185025a03f11561000257505060405151945061068792505050565b5060005b919050565b11156107f2575060008054600160a060020a031916731d11e5eae3112dbd44f99266872ff1d07c77dce817905560016107b9565b6000610811739efbea6358bed926b293d2ce63a730d6d98d43dd61014b565b1115610847575060008054739efbea6358bed926b293d2ce63a730d6d98d43dd600160a060020a031990911617905560016107b9565b60006108667320e12a1f859b3feae5fb2a0a32c18f5a65555bbf61014b565b11156107b55750600080547320e12a1f859b3feae5fb2a0a32c18f5a65555bbf600160a060020a031990911617905560016107b956",
3978:  "detector_findings": [
3981:      "evidence_json": {
4035:      "evidence_json": {
4089:      "evidence_json": {
4091:        "selfdestruct_count": 1
4114:  "heuristics_summary": {
4118:      "selfdestruct_present"
4120:    "selfdestruct_count": 1

exec
/bin/bash -lc "sed -n '3960,4145p' BYTECODE_BUNDLE.json" in /tmp/codex-4oykfrvc
 succeeded in 0ms:
          "entry_pc": 3077981301,
          "id": "fn:0xa2e62045",
          "selector": "0xa2e62045",
          "type": "function"
        },
        {
          "entry_pc": null,
          "id": "fn:0xb7764475",
          "selector": "0xb7764475",
          "type": "function"
        }
      ],
      "version": "capability_graph_v1"
    },
    "id": 2563,
    "updated_at": "2026-04-04T19:58:14.000000Z",
    "version": "capability_graph_v1"
  },
  "detector_findings": [
    {
      "confidence": 60,
      "evidence_json": {
        "call_count": 11,
        "examples": [
          {
            "opcode": "CALL",
            "pc": 265,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          },
          {
            "opcode": "CALL",
            "pc": 629,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          },
          {
            "opcode": "CALL",
            "pc": 820,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          }
        ],
        "guards_detected": [],
        "untrusted_call_count": 11
      },
      "normalized_json": {
        "sink": "CALL"
      },
      "severity": "high",
      "title": "Untrusted CALL target/value reachable",
      "validated": true,
      "validation_json": {
        "attempts": 1,
        "call_targets": [
          "0x1d11e5eae3112dbd44f99266872ff1d07c77dce8",
          "0x6f28b146804dba2d6f944c03528a8fdbc673df2c",
          "0xcad333e2f7ec4058aa5ba825a5de8af4139490c9"
        ],
        "classification": "target_varies",
        "confirmed": true,
        "errors": 0,
        "matched_probe": null,
        "sink": "CALL",
        "status": "confirmed",
        "target_varies": true,
        "trace_id": "0xa610ea7ab559e7dcce75486dcb3f321a203ad3c967f254df8a60d1db8186a1f5",
        "trace_mode": "callTracer"
      }
    },
    {
      "confidence": 55,
      "evidence_json": {
        "eth_value_calls": 11,
        "examples": [
          {
            "opcode": "CALL",
            "pc": 265,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          },
          {
            "opcode": "CALL",
            "pc": 629,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          },
          {
            "opcode": "CALL",
            "pc": 820,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          }
        ],
        "guards_detected": []
      },
      "normalized_json": {
        "sink": "CALL",
        "value": "nonzero"
      },
      "severity": "high",
      "title": "ETH value transfer possible",
      "validated": true,
      "validation_json": {
        "attempts": 1,
        "call_targets": [
          "0x1d11e5eae3112dbd44f99266872ff1d07c77dce8",
          "0x6f28b146804dba2d6f944c03528a8fdbc673df2c",
          "0xcad333e2f7ec4058aa5ba825a5de8af4139490c9"
        ],
        "classification": "target_varies",
        "confirmed": true,
        "errors": 0,
        "matched_probe": null,
        "sink": "CALL",
        "status": "confirmed",
        "target_varies": true,
        "trace_id": "0xa610ea7ab559e7dcce75486dcb3f321a203ad3c967f254df8a60d1db8186a1f5",
        "trace_mode": "callTracer"
      }
    },
    {
      "confidence": 65,
      "evidence_json": {
        "guards_detected": [],
        "selfdestruct_count": 1
      },
      "normalized_json": {
        "sink": "SELFDESTRUCT"
      },
      "severity": "high",
      "title": "SELFDESTRUCT reachable",
      "validated": false,
      "validation_json": {
        "attempts": 8,
        "call_targets": null,
        "classification": "no_sink",
        "confirmed": false,
        "errors": 0,
        "matched_probe": null,
        "sink": "SELFDESTRUCT",
        "status": "unknown",
        "target_varies": null,
        "trace_id": "0x15f197da33be53f322e49b04a4d543d589a4f2ad2e4c3695dc2468ea867783b3",
        "trace_mode": "structLogs"
      }
    }
  ],
  "heuristics_summary": {
    "create2_count": 0,
    "delegatecall_count": 0,
    "flags": [
      "selfdestruct_present"
    ],
    "selfdestruct_count": 1
  }
}
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
j=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
code=j['artifact']['runtime_bytecode']['full'][2:]
bs=bytes.fromhex(code)
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',
0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x1b:'SHL',0x1c:'SHR',0x1d:'SAR',
0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',
0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',
0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',
0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
for i in range(0,5): ops[0xa0+i]=f'LOG{i}'

def disasm(start,end):
    pc=start
    out=[]
    while pc<=end and pc<len(bs):
        op=bs[pc]
        name=ops.get(op,f'OP_{op:02x}')
        if name.startswith('PUSH'):
            n=int(name[4:])
            data=bs[pc+1:pc+1+n]
            out.append((pc,name,'0x'+data.hex()))
            pc+=1+n
        else:
            out.append((pc,name,''))
            pc+=1
    return out
for start,end in [(335,372),(373,420),(560,650),(670,875),(1125,1336),(1425,1678),(1679,1972),(1982,2203)]:
    print('\\nBLOCK',start,end)
    for pc,name,arg in disasm(start,end):
        print(f'{pc:04x}: {name} {arg}'.rstrip())
PY" in /tmp/codex-4oykfrvc
 succeeded in 0ms:

BLOCK 335 372
014f: JUMPDEST
0150: PUSH2 0x003a
0153: PUSH1 0x02
0155: SLOAD
0156: CALLER
0157: PUSH1 0x01
0159: PUSH1 0xa0
015b: PUSH1 0x02
015d: EXP
015e: SUB
015f: SWAP1
0160: DUP2
0161: AND
0162: SWAP2
0163: AND
0164: EQ
0165: ISZERO
0166: PUSH2 0x042d
0169: JUMPI
016a: CALLER
016b: PUSH1 0x01
016d: PUSH1 0xa0
016f: PUSH1 0x02
0171: EXP
0172: SUB
0173: AND
0174: SELFDESTRUCT

BLOCK 373 420
0175: JUMPDEST
0176: PUSH1 0x40
0178: DUP1
0179: MLOAD
017a: DUP1
017b: DUP3
017c: ADD
017d: DUP3
017e: MSTORE
017f: PUSH1 0x03
0181: DUP2
0182: MSTORE
0183: PUSH32 0x55524c0000000000000000000000000000000000000000000000000000000000
01a4: PUSH1 0x20

BLOCK 560 650
0230: OP_e0
0231: PUSH1 0x02
0233: EXP
0234: PUSH4 0x38cc4831
0239: MUL
023a: DUP4
023b: MSTORE
023c: SWAP6
023d: MLOAD
023e: PUSH2 0x003a
0241: SWAP7
0242: PUSH2 0x042f
0245: SWAP7
0246: SWAP3
0247: SWAP6
0248: SWAP3
0249: SWAP5
024a: SWAP4
024b: DUP7
024c: SWAP4
024d: DUP5
024e: SWAP4
024f: DUP5
0250: SWAP4
0251: PUSH1 0x01
0253: PUSH1 0xa0
0255: PUSH1 0x02
0257: EXP
0258: SUB
0259: AND
025a: SWAP3
025b: PUSH4 0x38cc4831
0260: SWAP3
0261: PUSH1 0x04
0263: DUP3
0264: DUP2
0265: ADD
0266: SWAP4
0267: SWAP2
0268: SWAP3
0269: DUP3
026a: SWAP1
026b: SUB
026c: ADD
026d: DUP2
026e: DUP8
026f: DUP8
0270: PUSH2 0x61da
0273: GAS
0274: SUB
0275: CALL
0276: ISZERO
0277: PUSH2 0x0002
027a: JUMPI
027b: POP
027c: POP
027d: PUSH1 0x40
027f: MLOAD
0280: MLOAD
0281: SWAP2
0282: POP
0283: POP
0284: PUSH1 0x01
0286: PUSH1 0xa0
0288: PUSH1 0x02
028a: EXP

BLOCK 670 875
029e: JUMPDEST
029f: PUSH2 0x02fe
02a2: PUSH1 0x03
02a4: DUP1
02a5: SLOAD
02a6: PUSH1 0x40
02a8: DUP1
02a9: MLOAD
02aa: PUSH1 0x20
02ac: PUSH1 0x1f
02ae: PUSH1 0x02
02b0: PUSH1 0x00
02b2: NOT
02b3: PUSH2 0x0100
02b6: PUSH1 0x01
02b8: DUP9
02b9: AND
02ba: ISZERO
02bb: MUL
02bc: ADD
02bd: SWAP1
02be: SWAP6
02bf: AND
02c0: SWAP5
02c1: SWAP1
02c2: SWAP5
02c3: DIV
02c4: SWAP4
02c5: DUP5
02c6: ADD
02c7: DUP2
02c8: SWAP1
02c9: DIV
02ca: DUP2
02cb: MUL
02cc: DUP3
02cd: ADD
02ce: DUP2
02cf: ADD
02d0: SWAP1
02d1: SWAP3
02d2: MSTORE
02d3: DUP3
02d4: DUP2
02d5: MSTORE
02d6: SWAP3
02d7: SWAP2
02d8: SWAP1
02d9: DUP4
02da: ADD
02db: DUP3
02dc: DUP3
02dd: DUP1
02de: ISZERO
02df: PUSH2 0x045d
02e2: JUMPI
02e3: DUP1
02e4: PUSH1 0x1f
02e6: LT
02e7: PUSH2 0x0432
02ea: JUMPI
02eb: PUSH2 0x0100
02ee: DUP1
02ef: DUP4
02f0: SLOAD
02f1: DIV
02f2: MUL
02f3: DUP4
02f4: MSTORE
02f5: SWAP2
02f6: PUSH1 0x20
02f8: ADD
02f9: SWAP2
02fa: PUSH2 0x045d
02fd: JUMP
02fe: JUMPDEST
02ff: PUSH1 0x40
0301: MLOAD
0302: DUP1
0303: DUP1
0304: PUSH1 0x20
0306: ADD
0307: DUP3
0308: DUP2
0309: SUB
030a: DUP3
030b: MSTORE
030c: DUP4
030d: DUP2
030e: DUP2
030f: MLOAD
0310: DUP2
0311: MSTORE
0312: PUSH1 0x20
0314: ADD
0315: SWAP2
0316: POP
0317: DUP1
0318: MLOAD
0319: SWAP1
031a: PUSH1 0x20
031c: ADD
031d: SWAP1
031e: DUP1
031f: DUP4
0320: DUP4
0321: DUP3
0322: SWAP1
0323: PUSH1 0x00
0325: PUSH1 0x04
0327: PUSH1 0x20
0329: DUP5
032a: PUSH1 0x1f
032c: ADD
032d: DIV
032e: PUSH1 0x0f
0330: MUL
0331: PUSH1 0x03
0333: ADD
0334: CALL
0335: POP
0336: SWAP1
0337: POP
0338: SWAP1
0339: DUP2
033a: ADD
033b: SWAP1
033c: PUSH1 0x1f
033e: AND
033f: DUP1
0340: ISZERO
0341: PUSH2 0x035e
0344: JUMPI
0345: DUP1
0346: DUP3
0347: SUB
0348: DUP1
0349: MLOAD
034a: PUSH1 0x01
034c: DUP4
034d: PUSH1 0x20
034f: SUB
0350: PUSH2 0x0100
0353: EXP
0354: SUB
0355: NOT
0356: AND
0357: DUP2
0358: MSTORE
0359: PUSH1 0x20
035b: ADD
035c: SWAP2
035d: POP
035e: JUMPDEST
035f: POP
0360: SWAP3
0361: POP
0362: POP
0363: POP
0364: PUSH1 0x40
0366: MLOAD
0367: DUP1
0368: SWAP2
0369: SUB
036a: SWAP1
036b: RETURN

BLOCK 1125 1336
0465: JUMPDEST
0466: POP
0467: PUSH1 0x00
0469: PUSH1 0x00
046b: SWAP1
046c: SLOAD
046d: SWAP1
046e: PUSH2 0x0100
0471: EXP
0472: SWAP1
0473: DIV
0474: PUSH1 0x01
0476: PUSH1 0xa0
0478: PUSH1 0x02
047a: EXP
047b: SUB
047c: AND
047d: PUSH1 0x01
047f: PUSH1 0xa0
0481: PUSH1 0x02
0483: EXP
0484: SUB
0485: AND
0486: PUSH4 0x38cc4831
048b: PUSH1 0x40
048d: MLOAD
048e: DUP2
048f: PUSH1 0xe0
0491: PUSH1 0x02
0493: EXP
0494: MUL
0495: DUP2
0496: MSTORE
0497: PUSH1 0x04
0499: ADD
049a: DUP1
049b: SWAP1
049c: POP
049d: PUSH1 0x20
049f: PUSH1 0x40
04a1: MLOAD
04a2: DUP1
04a3: DUP4
04a4: SUB
04a5: DUP2
04a6: PUSH1 0x00
04a8: DUP8
04a9: PUSH2 0x61da
04ac: GAS
04ad: SUB
04ae: CALL
04af: ISZERO
04b0: PUSH2 0x0002
04b3: JUMPI
04b4: POP
04b5: POP
04b6: PUSH1 0x40
04b8: MLOAD
04b9: MLOAD
04ba: SWAP2
04bb: POP
04bc: POP
04bd: JUMPDEST
04be: PUSH1 0x01
04c0: DUP1
04c1: SLOAD
04c2: PUSH1 0x01
04c4: PUSH1 0xa0
04c6: PUSH1 0x02
04c8: EXP
04c9: SUB
04ca: NOT
04cb: AND
04cc: DUP3
04cd: OR
04ce: SWAP1
04cf: DUP2
04d0: SWAP1
04d1: SSTORE
04d2: PUSH1 0x40
04d4: DUP1
04d5: MLOAD
04d6: PUSH32 0xc281d19e00000000000000000000000000000000000000000000000000000000
04f7: DUP2
04f8: MSTORE
04f9: SWAP1
04fa: MLOAD
04fb: PUSH1 0x01
04fd: PUSH1 0xa0
04ff: PUSH1 0x02
0501: EXP
0502: SUB
0503: SWAP3
0504: SWAP1
0505: SWAP3
0506: AND
0507: SWAP2
0508: PUSH4 0xc281d19e
050d: SWAP2
050e: PUSH1 0x04
0510: DUP2
0511: DUP2
0512: ADD
0513: SWAP3
0514: PUSH1 0x20
0516: SWAP3
0517: SWAP1
0518: SWAP2
0519: SWAP1
051a: DUP3
051b: SWAP1
051c: SUB
051d: ADD
051e: DUP2
051f: PUSH1 0x00
0521: DUP8
0522: PUSH2 0x61da
0525: GAS
0526: SUB
0527: CALL
0528: ISZERO
0529: PUSH2 0x0002
052c: JUMPI
052d: POP
052e: POP
052f: PUSH1 0x40
0531: MLOAD
0532: MLOAD
0533: SWAP3
0534: POP
0535: POP
0536: POP
0537: SWAP1
0538: JUMP

BLOCK 1425 1678
0591: JUMPDEST
0592: PUSH1 0x01
0594: DUP1
0595: SLOAD
0596: PUSH1 0x01
0598: PUSH1 0xa0
059a: PUSH1 0x02
059c: EXP
059d: SUB
059e: NOT
059f: AND
05a0: DUP3
05a1: OR
05a2: SWAP1
05a3: DUP2
05a4: SWAP1
05a5: SSTORE
05a6: PUSH1 0x40
05a8: MLOAD
05a9: PUSH32 0x524f388900000000000000000000000000000000000000000000000000000000
05ca: DUP2
05cb: MSTORE
05cc: PUSH1 0x20
05ce: PUSH1 0x04
05d0: DUP3
05d1: DUP2
05d2: ADD
05d3: DUP3
05d4: DUP2
05d5: MSTORE
05d6: DUP10
05d7: MLOAD
05d8: PUSH1 0x24
05da: DUP6
05db: ADD
05dc: MSTORE
05dd: DUP10
05de: MLOAD
05df: PUSH1 0x01
05e1: PUSH1 0xa0
05e3: PUSH1 0x02
05e5: EXP
05e6: SUB
05e7: SWAP6
05e8: SWAP1
05e9: SWAP6
05ea: AND
05eb: SWAP5
05ec: PUSH4 0x524f3889
05f1: SWAP5
05f2: DUP12
05f3: SWAP5
05f4: SWAP3
05f5: SWAP4
05f6: DUP5
05f7: SWAP4
05f8: PUSH1 0x44
05fa: SWAP3
05fb: SWAP1
05fc: SWAP3
05fd: ADD
05fe: SWAP3
05ff: DUP7
0600: DUP4
0601: ADD
0602: SWAP3
0603: SWAP1
0604: SWAP2
0605: DUP3
0606: SWAP2
0607: DUP6
0608: SWAP2
0609: DUP4
060a: SWAP2
060b: DUP7
060c: SWAP2
060d: PUSH1 0x00
060f: SWAP2
0610: PUSH1 0x1f
0612: DUP6
0613: ADD
0614: DIV
0615: PUSH1 0x0f
0617: MUL
0618: PUSH1 0x03
061a: ADD
061b: CALL
061c: POP
061d: SWAP1
061e: POP
061f: SWAP1
0620: DUP2
0621: ADD
0622: SWAP1
0623: PUSH1 0x1f
0625: AND
0626: DUP1
0627: ISZERO
0628: PUSH2 0x0645
062b: JUMPI
062c: DUP1
062d: DUP3
062e: SUB
062f: DUP1
0630: MLOAD
0631: PUSH1 0x01
0633: DUP4
0634: PUSH1 0x20
0636: SUB
0637: PUSH2 0x0100
063a: EXP
063b: SUB
063c: NOT
063d: AND
063e: DUP2
063f: MSTORE
0640: PUSH1 0x20
0642: ADD
0643: SWAP2
0644: POP
0645: JUMPDEST
0646: POP
0647: SWAP3
0648: POP
0649: POP
064a: POP
064b: PUSH1 0x20
064d: PUSH1 0x40
064f: MLOAD
0650: DUP1
0651: DUP4
0652: SUB
0653: DUP2
0654: PUSH1 0x00
0656: DUP8
0657: PUSH2 0x61da
065a: GAS
065b: SUB
065c: CALL
065d: ISZERO
065e: PUSH2 0x0002
0661: JUMPI
0662: POP
0663: POP
0664: PUSH1 0x40
0666: MLOAD
0667: MLOAD
0668: SWAP3
0669: POP
066a: POP
066b: PUSH8 0x0de0b6b3a7640000
0674: PUSH3 0x030d40
0678: GASPRICE
0679: MUL
067a: ADD
067b: DUP3
067c: GT
067d: ISZERO
067e: PUSH2 0x068f
0681: JUMPI
0682: POP
0683: PUSH1 0x00
0685: SWAP2
0686: POP
0687: JUMPDEST
0688: POP
0689: SWAP4
068a: SWAP3
068b: POP
068c: POP
068d: POP
068e: JUMP

BLOCK 1679 1972
068f: JUMPDEST
0690: PUSH1 0x01
0692: PUSH1 0x00
0694: SWAP1
0695: SLOAD
0696: SWAP1
0697: PUSH2 0x0100
069a: EXP
069b: SWAP1
069c: DIV
069d: PUSH1 0x01
069f: PUSH1 0xa0
06a1: PUSH1 0x02
06a3: EXP
06a4: SUB
06a5: AND
06a6: PUSH1 0x01
06a8: PUSH1 0xa0
06aa: PUSH1 0x02
06ac: EXP
06ad: SUB
06ae: AND
06af: PUSH4 0xadf59f99
06b4: DUP4
06b5: DUP9
06b6: DUP9
06b7: DUP9
06b8: PUSH1 0x40
06ba: MLOAD
06bb: DUP6
06bc: PUSH1 0xe0
06be: PUSH1 0x02
06c0: EXP
06c1: MUL
06c2: DUP2
06c3: MSTORE
06c4: PUSH1 0x04
06c6: ADD
06c7: DUP1
06c8: DUP5
06c9: DUP2
06ca: MSTORE
06cb: PUSH1 0x20
06cd: ADD
06ce: DUP1
06cf: PUSH1 0x20
06d1: ADD
06d2: DUP1
06d3: PUSH1 0x20
06d5: ADD
06d6: DUP4
06d7: DUP2
06d8: SUB
06d9: DUP4
06da: MSTORE
06db: DUP6
06dc: DUP2
06dd: DUP2
06de: MLOAD
06df: DUP2
06e0: MSTORE
06e1: PUSH1 0x20
06e3: ADD
06e4: SWAP2
06e5: POP
06e6: DUP1
06e7: MLOAD
06e8: SWAP1
06e9: PUSH1 0x20
06eb: ADD
06ec: SWAP1
06ed: DUP1
06ee: DUP4
06ef: DUP4
06f0: DUP3
06f1: SWAP1
06f2: PUSH1 0x00
06f4: PUSH1 0x04
06f6: PUSH1 0x20
06f8: DUP5
06f9: PUSH1 0x1f
06fb: ADD
06fc: DIV
06fd: PUSH1 0x0f
06ff: MUL
0700: PUSH1 0x03
0702: ADD
0703: CALL
0704: POP
0705: SWAP1
0706: POP
0707: SWAP1
0708: DUP2
0709: ADD
070a: SWAP1
070b: PUSH1 0x1f
070d: AND
070e: DUP1
070f: ISZERO
0710: PUSH2 0x072d
0713: JUMPI
0714: DUP1
0715: DUP3
0716: SUB
0717: DUP1
0718: MLOAD
0719: PUSH1 0x01
071b: DUP4
071c: PUSH1 0x20
071e: SUB
071f: PUSH2 0x0100
0722: EXP
0723: SUB
0724: NOT
0725: AND
0726: DUP2
0727: MSTORE
0728: PUSH1 0x20
072a: ADD
072b: SWAP2
072c: POP
072d: JUMPDEST
072e: POP
072f: DUP4
0730: DUP2
0731: SUB
0732: DUP3
0733: MSTORE
0734: DUP5
0735: DUP2
0736: DUP2
0737: MLOAD
0738: DUP2
0739: MSTORE
073a: PUSH1 0x20
073c: ADD
073d: SWAP2
073e: POP
073f: DUP1
0740: MLOAD
0741: SWAP1
0742: PUSH1 0x20
0744: ADD
0745: SWAP1
0746: DUP1
0747: DUP4
0748: DUP4
0749: DUP3
074a: SWAP1
074b: PUSH1 0x00
074d: PUSH1 0x04
074f: PUSH1 0x20
0751: DUP5
0752: PUSH1 0x1f
0754: ADD
0755: DIV
0756: PUSH1 0x0f
0758: MUL
0759: PUSH1 0x03
075b: ADD
075c: CALL
075d: POP
075e: SWAP1
075f: POP
0760: SWAP1
0761: DUP2
0762: ADD
0763: SWAP1
0764: PUSH1 0x1f
0766: AND
0767: DUP1
0768: ISZERO
0769: PUSH2 0x0786
076c: JUMPI
076d: DUP1
076e: DUP3
076f: SUB
0770: DUP1
0771: MLOAD
0772: PUSH1 0x01
0774: DUP4
0775: PUSH1 0x20
0777: SUB
0778: PUSH2 0x0100
077b: EXP
077c: SUB
077d: NOT
077e: AND
077f: DUP2
0780: MSTORE
0781: PUSH1 0x20
0783: ADD
0784: SWAP2
0785: POP
0786: JUMPDEST
0787: POP
0788: SWAP6
0789: POP
078a: POP
078b: POP
078c: POP
078d: POP
078e: POP
078f: PUSH1 0x20
0791: PUSH1 0x40
0793: MLOAD
0794: DUP1
0795: DUP4
0796: SUB
0797: DUP2
0798: DUP6
0799: DUP9
079a: PUSH2 0x8502
079d: GAS
079e: SUB
079f: CALL
07a0: ISZERO
07a1: PUSH2 0x0002
07a4: JUMPI
07a5: POP
07a6: POP
07a7: PUSH1 0x40
07a9: MLOAD
07aa: MLOAD
07ab: SWAP5
07ac: POP
07ad: PUSH2 0x0687
07b0: SWAP3
07b1: POP
07b2: POP
07b3: POP
07b4: JUMP

BLOCK 1982 2203
07be: JUMPDEST
07bf: GT
07c0: ISZERO
07c1: PUSH2 0x07f2
07c4: JUMPI
07c5: POP
07c6: PUSH1 0x00
07c8: DUP1
07c9: SLOAD
07ca: PUSH1 0x01
07cc: PUSH1 0xa0
07ce: PUSH1 0x02
07d0: EXP
07d1: SUB
07d2: NOT
07d3: AND
07d4: PUSH20 0x1d11e5eae3112dbd44f99266872ff1d07c77dce8
07e9: OR
07ea: SWAP1
07eb: SSTORE
07ec: PUSH1 0x01
07ee: PUSH2 0x07b9
07f1: JUMP
07f2: JUMPDEST
07f3: PUSH1 0x00
07f5: PUSH2 0x0811
07f8: PUSH20 0x9efbea6358bed926b293d2ce63a730d6d98d43dd
080d: PUSH2 0x014b
0810: JUMP
0811: JUMPDEST
0812: GT
0813: ISZERO
0814: PUSH2 0x0847
0817: JUMPI
0818: POP
0819: PUSH1 0x00
081b: DUP1
081c: SLOAD
081d: PUSH20 0x9efbea6358bed926b293d2ce63a730d6d98d43dd
0832: PUSH1 0x01
0834: PUSH1 0xa0
0836: PUSH1 0x02
0838: EXP
0839: SUB
083a: NOT
083b: SWAP1
083c: SWAP2
083d: AND
083e: OR
083f: SWAP1
0840: SSTORE
0841: PUSH1 0x01
0843: PUSH2 0x07b9
0846: JUMP
0847: JUMPDEST
0848: PUSH1 0x00
084a: PUSH2 0x0866
084d: PUSH20 0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf
0862: PUSH2 0x014b
0865: JUMP
0866: JUMPDEST
0867: GT
0868: ISZERO
0869: PUSH2 0x07b5
086c: JUMPI
086d: POP
086e: PUSH1 0x00
0870: DUP1
0871: SLOAD
0872: PUSH20 0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf
0887: PUSH1 0x01
0889: PUSH1 0xa0
088b: PUSH1 0x02
088d: EXP
088e: SUB
088f: NOT
0890: SWAP1
0891: SWAP2
0892: AND
0893: OR
0894: SWAP1
0895: SSTORE
0896: PUSH1 0x01
0898: PUSH2 0x07b9
089b: JUMP

exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
j=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
bs=bytes.fromhex(j['artifact']['runtime_bytecode']['full'][2:])
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
for i in range(0,5): ops[0xa0+i]=f'LOG{i}'
pc=0
while pc<373:
    op=bs[pc]; name=ops.get(op,f'OP_{op:02x}')
    if name.startswith('PUSH'):
        n=int(name[4:]); data='0x'+bs[pc+1:pc+1+n].hex();
        print(f'{pc:04x}: {name} {data}')
        pc+=1+n
    else:
        print(f'{pc:04x}: {name}')
        pc+=1
PY" in /tmp/codex-4oykfrvc
 succeeded in 0ms:
0000: PUSH1 0x60
0002: PUSH1 0x40
0004: MSTORE
0005: PUSH1 0xe0
0007: PUSH1 0x02
0009: EXP
000a: PUSH1 0x00
000c: CALLDATALOAD
000d: DIV
000e: PUSH4 0x38bbfa50
0013: DUP2
0014: EQ
0015: PUSH2 0x003c
0018: JUMPI
0019: DUP1
001a: PUSH4 0x41c0e1b5
001f: EQ
0020: PUSH2 0x014f
0023: JUMPI
0024: DUP1
0025: PUSH4 0xa2e62045
002a: EQ
002b: PUSH2 0x0175
002e: JUMPI
002f: DUP1
0030: PUSH4 0xb7764475
0035: EQ
0036: PUSH2 0x029e
0039: JUMPI
003a: JUMPDEST
003b: STOP
003c: JUMPDEST
003d: PUSH1 0x40
003f: DUP1
0040: MLOAD
0041: PUSH1 0x20
0043: PUSH1 0x24
0045: DUP1
0046: CALLDATALOAD
0047: PUSH1 0x04
0049: DUP2
004a: DUP2
004b: ADD
004c: CALLDATALOAD
004d: PUSH1 0x1f
004f: DUP2
0050: ADD
0051: DUP6
0052: SWAP1
0053: DIV
0054: DUP6
0055: MUL
0056: DUP7
0057: ADD
0058: DUP6
0059: ADD
005a: SWAP1
005b: SWAP7
005c: MSTORE
005d: DUP6
005e: DUP6
005f: MSTORE
0060: PUSH2 0x003a
0063: SWAP6
0064: DUP2
0065: CALLDATALOAD
0066: SWAP6
0067: SWAP2
0068: SWAP5
0069: PUSH1 0x44
006b: SWAP5
006c: SWAP3
006d: SWAP4
006e: SWAP1
006f: SWAP3
0070: ADD
0071: SWAP2
0072: DUP2
0073: SWAP1
0074: DUP5
0075: ADD
0076: DUP4
0077: DUP3
0078: DUP1
0079: DUP3
007a: DUP5
007b: CALLDATACOPY
007c: POP
007d: POP
007e: PUSH1 0x40
0080: DUP1
0081: MLOAD
0082: PUSH1 0x20
0084: SWAP8
0085: CALLDATALOAD
0086: DUP1
0087: DUP11
0088: ADD
0089: CALLDATALOAD
008a: PUSH1 0x1f
008c: DUP2
008d: ADD
008e: DUP11
008f: SWAP1
0090: DIV
0091: DUP11
0092: MUL
0093: DUP4
0094: ADD
0095: DUP11
0096: ADD
0097: SWAP1
0098: SWAP4
0099: MSTORE
009a: DUP3
009b: DUP3
009c: MSTORE
009d: SWAP7
009e: SWAP9
009f: SWAP8
00a0: PUSH1 0x64
00a2: SWAP8
00a3: SWAP2
00a4: SWAP7
00a5: POP
00a6: PUSH1 0x24
00a8: SWAP2
00a9: SWAP1
00aa: SWAP2
00ab: ADD
00ac: SWAP5
00ad: POP
00ae: SWAP1
00af: SWAP3
00b0: POP
00b1: DUP3
00b2: SWAP2
00b3: POP
00b4: DUP5
00b5: ADD
00b6: DUP4
00b7: DUP3
00b8: DUP1
00b9: DUP3
00ba: DUP5
00bb: CALLDATACOPY
00bc: POP
00bd: SWAP5
00be: SWAP7
00bf: POP
00c0: POP
00c1: POP
00c2: POP
00c3: POP
00c4: POP
00c5: POP
00c6: PUSH2 0x036c
00c9: PUSH1 0x00
00cb: DUP1
00cc: SLOAD
00cd: PUSH1 0x40
00cf: DUP1
00d0: MLOAD
00d1: PUSH1 0xe0
00d3: PUSH1 0x02
00d5: EXP
00d6: PUSH4 0x38cc4831
00db: MUL
00dc: DUP2
00dd: MSTORE
00de: SWAP1
00df: MLOAD
00e0: DUP4
00e1: SWAP3
00e2: PUSH1 0x01
00e4: PUSH1 0xa0
00e6: PUSH1 0x02
00e8: EXP
00e9: SUB
00ea: AND
00eb: SWAP2
00ec: PUSH4 0x38cc4831
00f1: SWAP2
00f2: PUSH1 0x04
00f4: DUP3
00f5: DUP2
00f6: ADD
00f7: SWAP3
00f8: PUSH1 0x20
00fa: SWAP3
00fb: SWAP2
00fc: SWAP1
00fd: DUP3
00fe: SWAP1
00ff: SUB
0100: ADD
0101: DUP2
0102: DUP8
0103: DUP8
0104: PUSH2 0x61da
0107: GAS
0108: SUB
0109: CALL
010a: ISZERO
010b: PUSH2 0x0002
010e: JUMPI
010f: POP
0110: POP
0111: PUSH1 0x40
0113: MLOAD
0114: MLOAD
0115: SWAP2
0116: POP
0117: POP
0118: PUSH1 0x01
011a: PUSH1 0xa0
011c: PUSH1 0x02
011e: EXP
011f: SUB
0120: DUP2
0121: AND
0122: DUP3
0123: EQ
0124: ISZERO
0125: PUSH2 0x04bd
0128: JUMPI
0129: PUSH2 0x0465
012c: PUSH1 0x00
012e: JUMPDEST
012f: PUSH1 0x00
0131: PUSH1 0x00
0133: PUSH2 0x07be
0136: PUSH20 0x1d11e5eae3112dbd44f99266872ff1d07c77dce8
014b: JUMPDEST
014c: EXTCODESIZE
014d: SWAP1
014e: JUMP
014f: JUMPDEST
0150: PUSH2 0x003a
0153: PUSH1 0x02
0155: SLOAD
0156: CALLER
0157: PUSH1 0x01
0159: PUSH1 0xa0
015b: PUSH1 0x02
015d: EXP
015e: SUB
015f: SWAP1
0160: DUP2
0161: AND
0162: SWAP2
0163: AND
0164: EQ
0165: ISZERO
0166: PUSH2 0x042d
0169: JUMPI
016a: CALLER
016b: PUSH1 0x01
016d: PUSH1 0xa0
016f: PUSH1 0x02
0171: EXP
0172: SUB
0173: AND
0174: SELFDESTRUCT

web search: 
web search: 4byte 38cc4831 c281d19e 524f3889 adf59f99
web search: 
web search: "c281d19e" "4byte"
web search: 
web search: site:4byte.directory/event-signatures/?bytes4_signature= c281d19e
web search: 
web search: 
web search: 
web search: "https://www.4byte.directory/api/v1/signatures/?hex_signature=0xc281d19e"
web search: 
web search: "https://www.4byte.directory/api/v1/signatures/?hex_signature=0xc281d19e" site:github.com OR site:4byte.directory
web search: 
web search: site:4byte.directory/signatures/ "0xc281d19e"
web search: 
web search: site:4byte.directory/signatures/ "0xc281d19e"
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
j=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
bs=bytes.fromhex(j['artifact']['runtime_bytecode']['full'][2:])
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
for i in range(0,5): ops[0xa0+i]=f'LOG{i}'
pc=373
while pc<670:
    op=bs[pc]; name=ops.get(op,f'OP_{op:02x}')
    if name.startswith('PUSH'):
        n=int(name[4:]); data='0x'+bs[pc+1:pc+1+n].hex();
        print(f'{pc:04x}: {name} {data}')
        pc+=1+n
    else:
        print(f'{pc:04x}: {name}')
        pc+=1
PY" in /tmp/codex-4oykfrvc
 succeeded in 0ms:
0175: JUMPDEST
0176: PUSH1 0x40
0178: DUP1
0179: MLOAD
017a: DUP1
017b: DUP3
017c: ADD
017d: DUP3
017e: MSTORE
017f: PUSH1 0x03
0181: DUP2
0182: MSTORE
0183: PUSH32 0x55524c0000000000000000000000000000000000000000000000000000000000
01a4: PUSH1 0x20
01a6: DUP3
01a7: DUP2
01a8: ADD
01a9: SWAP2
01aa: SWAP1
01ab: SWAP2
01ac: MSTORE
01ad: DUP3
01ae: MLOAD
01af: PUSH1 0x80
01b1: DUP2
01b2: ADD
01b3: DUP5
01b4: MSTORE
01b5: PUSH1 0x4c
01b7: DUP2
01b8: MSTORE
01b9: PUSH32 0x6a736f6e2868747470733a2f2f6170692e6b72616b656e2e636f6d2f302f7075
01da: DUP2
01db: DUP4
01dc: ADD
01dd: MSTORE
01de: PUSH32 0x626c69632f5469636b65723f706169723d455448584254292e726573756c742e
01ff: DUP2
0200: DUP6
0201: ADD
0202: MSTORE
0203: PUSH32 0x58455448585842542e632e300000000000000000000000000000000000000000
0224: PUSH1 0x60
0226: DUP3
0227: ADD
0228: MSTORE
0229: DUP4
022a: MLOAD
022b: PUSH1 0x00
022d: DUP1
022e: SLOAD
022f: PUSH1 0xe0
0231: PUSH1 0x02
0233: EXP
0234: PUSH4 0x38cc4831
0239: MUL
023a: DUP4
023b: MSTORE
023c: SWAP6
023d: MLOAD
023e: PUSH2 0x003a
0241: SWAP7
0242: PUSH2 0x042f
0245: SWAP7
0246: SWAP3
0247: SWAP6
0248: SWAP3
0249: SWAP5
024a: SWAP4
024b: DUP7
024c: SWAP4
024d: DUP5
024e: SWAP4
024f: DUP5
0250: SWAP4
0251: PUSH1 0x01
0253: PUSH1 0xa0
0255: PUSH1 0x02
0257: EXP
0258: SUB
0259: AND
025a: SWAP3
025b: PUSH4 0x38cc4831
0260: SWAP3
0261: PUSH1 0x04
0263: DUP3
0264: DUP2
0265: ADD
0266: SWAP4
0267: SWAP2
0268: SWAP3
0269: DUP3
026a: SWAP1
026b: SUB
026c: ADD
026d: DUP2
026e: DUP8
026f: DUP8
0270: PUSH2 0x61da
0273: GAS
0274: SUB
0275: CALL
0276: ISZERO
0277: PUSH2 0x0002
027a: JUMPI
027b: POP
027c: POP
027d: PUSH1 0x40
027f: MLOAD
0280: MLOAD
0281: SWAP2
0282: POP
0283: POP
0284: PUSH1 0x01
0286: PUSH1 0xa0
0288: PUSH1 0x02
028a: EXP
028b: SUB
028c: DUP2
028d: AND
028e: DUP3
028f: EQ
0290: ISZERO
0291: PUSH2 0x0591
0294: JUMPI
0295: PUSH2 0x0539
0298: PUSH1 0x00
029a: PUSH2 0x012e
029d: JUMP

exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
j=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
bs=bytes.fromhex(j['artifact']['runtime_bytecode']['full'][2:])
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x3f:'EXTCODEHASH',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x46:'CHAINID',0x47:'SELFBALANCE',0x48:'BASEFEE',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
for i in range(0,5): ops[0xa0+i]=f'LOG{i}'
for start,end in [(876,910),(907,1068),(1074,1124)]:
    print('\\n',start,end)
    pc=start
    while pc<=end:
        op=bs[pc]; name=ops.get(op,f'OP_{op:02x}')
        if name.startswith('PUSH'):
            n=int(name[4:]); data='0x'+bs[pc+1:pc+1+n].hex(); print(f'{pc:04x}: {name} {data}'); pc+=1+n
        else:
            print(f'{pc:04x}: {name}'); pc+=1
PY" in /tmp/codex-4oykfrvc
 succeeded in 0ms:

 876 910
036c: JUMPDEST
036d: PUSH1 0x01
036f: PUSH1 0xa0
0371: PUSH1 0x02
0373: EXP
0374: SUB
0375: AND
0376: CALLER
0377: PUSH1 0x01
0379: PUSH1 0xa0
037b: PUSH1 0x02
037d: EXP
037e: SUB
037f: AND
0380: EQ
0381: ISZERO
0382: ISZERO
0383: PUSH2 0x038b
0386: JUMPI
0387: PUSH2 0x0002
038a: JUMP
038b: JUMPDEST
038c: DUP2
038d: PUSH1 0x03

 907 1068
038b: JUMPDEST
038c: DUP2
038d: PUSH1 0x03
038f: PUSH1 0x00
0391: POP
0392: SWAP1
0393: DUP1
0394: MLOAD
0395: SWAP1
0396: PUSH1 0x20
0398: ADD
0399: SWAP1
039a: DUP3
039b: DUP1
039c: SLOAD
039d: PUSH1 0x01
039f: DUP2
03a0: PUSH1 0x01
03a2: AND
03a3: ISZERO
03a4: PUSH2 0x0100
03a7: MUL
03a8: SUB
03a9: AND
03aa: PUSH1 0x02
03ac: SWAP1
03ad: DIV
03ae: SWAP1
03af: PUSH1 0x00
03b1: MSTORE
03b2: PUSH1 0x20
03b4: PUSH1 0x00
03b6: SHA3
03b7: SWAP1
03b8: PUSH1 0x1f
03ba: ADD
03bb: PUSH1 0x20
03bd: SWAP1
03be: DIV
03bf: DUP2
03c0: ADD
03c1: SWAP3
03c2: DUP3
03c3: PUSH1 0x1f
03c5: LT
03c6: PUSH2 0x03f2
03c9: JUMPI
03ca: DUP1
03cb: MLOAD
03cc: PUSH1 0xff
03ce: NOT
03cf: AND
03d0: DUP4
03d1: DUP1
03d2: ADD
03d3: OR
03d4: DUP6
03d5: SSTORE
03d6: JUMPDEST
03d7: POP
03d8: PUSH2 0x0422
03db: SWAP3
03dc: SWAP2
03dd: POP
03de: JUMPDEST
03df: DUP1
03e0: DUP3
03e1: GT
03e2: ISZERO
03e3: PUSH2 0x0429
03e6: JUMPI
03e7: PUSH1 0x00
03e9: DUP2
03ea: SSTORE
03eb: PUSH1 0x01
03ed: ADD
03ee: PUSH2 0x03de
03f1: JUMP
03f2: JUMPDEST
03f3: DUP3
03f4: DUP1
03f5: ADD
03f6: PUSH1 0x01
03f8: ADD
03f9: DUP6
03fa: SSTORE
03fb: DUP3
03fc: ISZERO
03fd: PUSH2 0x03d6
0400: JUMPI
0401: SWAP2
0402: DUP3
0403: ADD
0404: JUMPDEST
0405: DUP3
0406: DUP2
0407: GT
0408: ISZERO
0409: PUSH2 0x03d6
040c: JUMPI
040d: DUP3
040e: MLOAD
040f: DUP3
0410: PUSH1 0x00
0412: POP
0413: SSTORE
0414: SWAP2
0415: PUSH1 0x20
0417: ADD
0418: SWAP2
0419: SWAP1
041a: PUSH1 0x01
041c: ADD
041d: SWAP1
041e: PUSH2 0x0404
0421: JUMP
0422: JUMPDEST
0423: POP
0424: POP
0425: POP
0426: POP
0427: POP
0428: JUMP
0429: JUMPDEST
042a: POP
042b: SWAP1
042c: JUMP

 1074 1124
0432: JUMPDEST
0433: DUP3
0434: ADD
0435: SWAP2
0436: SWAP1
0437: PUSH1 0x00
0439: MSTORE
043a: PUSH1 0x20
043c: PUSH1 0x00
043e: SHA3
043f: SWAP1
0440: JUMPDEST
0441: DUP2
0442: SLOAD
0443: DUP2
0444: MSTORE
0445: SWAP1
0446: PUSH1 0x01
0448: ADD
0449: SWAP1
044a: PUSH1 0x20
044c: ADD
044d: DUP1
044e: DUP4
044f: GT
0450: PUSH2 0x0440
0453: JUMPI
0454: DUP3
0455: SWAP1
0456: SUB
0457: PUSH1 0x1f
0459: AND
045a: DUP3
045b: ADD
045c: SWAP2
045d: JUMPDEST
045e: POP
045f: POP
0460: POP
0461: POP
0462: POP
0463: DUP2
0464: JUMP

web search: 
web search: EIP-6780 SELFDESTRUCT semantics Cancun mainnet
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
j=json.loads(Path('BYTECODE_BUNDLE.json').read_text())
code=j['artifact']['runtime_bytecode']['full'][2:]
bs=bytes.fromhex(code)
print('CALLVALUE count', bs.count(bytes([0x34])))
for i,b in enumerate(bs):
    if b==0x34:
        print(i)
PY" in /tmp/codex-4oykfrvc
 succeeded in 0ms:
CALLVALUE count 0

web search: 
web search: site:4byte.directory/signatures/ "0x41c0e1b5"
web search: 
web search: site:4byte.directory/signatures/ "0xb7764475"
web search: 
web search: site:4byte.directory/signatures/ "0xc281d19e" "oraclize"
web search: 
web search: "api.kraken.com/0/public/Ticker?pair=ETHXBT" solidity oraclize
exec
/bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-4oykfrvc
 succeeded in 0ms:
{"type": "object", "additionalProperties": false, "required": ["no_findings", "summary", "findings"], "properties": {"no_findings": {"type": "boolean"}, "summary": {"type": "string"}, "findings": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["severity", "category", "title", "evidence", "locations", "exploit_scenario", "recommendation"], "properties": {"severity": {"type": "string", "enum": ["info", "low", "medium", "high", "critical"]}, "category": {"type": "string", "enum": ["access_control", "reentrancy", "math", "oracle", "upgradeability", "auth", "other"]}, "title": {"type": "string"}, "exploit_scenario": {"type": "string"}, "recommendation": {"type": "string"}, "evidence": {"type": "string"}, "locations": {"type": "array", "items": {"type": "string"}}}}}}}
web search: 
web search: site:4byte.directory/signatures/ "0xa2e62045" "update()" "oraclize"
web search: 
web search: site:4byte.directory/signatures/ "0x41c0e1b5" "kill()"
web search: 
web search: site:4byte.directory/signatures/ "0xb7764475"
web search: 
web search: site:4byte.directory/signatures/ "0x38cc4831"
web search: 
web search: oraclize resolver getAddress() 38cc4831
codex
{"no_findings":false,"summary":"Runtime bytecode matches an Oraclize/Provable-style oracle client with a public `update()` path, a `__callback(bytes32,string,bytes)` entrypoint, and a privileged `kill()` path. Based on runtime-only evidence, the main issues are missing callback/query correlation, public spending of contract ETH on oracle calls, and a retained owner kill switch. Selector names are inferred best-effort from bytecode/4byte matches.","findings":[{"severity":"medium","category":"oracle","title":"Oracle callback accepts any authorized sender response without validating a pending query id","exploit_scenario":"An attacker can trigger multiple outstanding oracle updates through the public query path. Because the callback appears to authenticate only the oracle sender and not the `bytes32` request id, a stale or later oracle reply can overwrite the currently stored result in slot 3. If the oracle/resolver side is ever misconfigured or compromised, arbitrary callback data would be accepted as long as it comes from the resolved oracle address.","recommendation":"Persist the returned query id from the query call and require `_queryId` to match an expected pending id before accepting callback data. If multiple requests are allowed, track them explicitly and clear them after use.","evidence":"Selector `0x38bbfa50` matches `__callback(bytes32,string,bytes)`. The callback path decodes three arguments, then at `pc:0x036c` checks only that `CALLER` matches the resolved oracle address before entering the string-storage routine at `pc:0x038b`. The public oracle-query path at `selector:0xa2e62045` performs `query(uint256,string,string)` via selector `0xadf59f99` at `pc:0x0703`, but the returned request id is not written to storage; storage writes are limited to slots 0/1/3 and dynamic string data.","locations":["selector:0x38bbfa50","selector:0xa2e62045","pc:0x036c","pc:0x0703"]},{"severity":"medium","category":"access_control","title":"Public `update()` path can spend ETH from contract balance on oracle queries","exploit_scenario":"If this contract holds ETH to subsidize oracle usage, any external account can call the public update function and force the contract to pay oracle fees. Repeated calls can drain the balance into oracle payments or trigger unwanted offchain queries, even if the caller is not otherwise trusted.","recommendation":"Restrict the query-triggering function to an authorized operator, or require the caller to supply and account for the exact oracle fee so existing contract balance cannot be consumed by arbitrary users.","evidence":"Selector `0xa2e62045` resolves to a public `update()` entrypoint. Its body builds a fixed Kraken URL query, calls the oracle pricing path (`getPrice(...)`) around `pc:0x065c`, and then performs the actual oracle query call at `pc:0x0703`. The artifact reports no auth guards for this function, and detector validation confirmed reachable `CALL` sites with possible nonzero ETH value and varying external targets. There is no visible `CALLVALUE`-based accounting or owner check in runtime bytecode.","locations":["selector:0xa2e62045","pc:0x065c","pc:0x0703"]},{"severity":"low","category":"auth","title":"Privileged kill switch can sweep balance via `SELFDESTRUCT`","exploit_scenario":"Whoever controls the address stored in slot 2 can invoke the kill function and force a terminal balance sweep to themselves. Even if this is intended admin functionality, compromise or abuse of that key breaks trust assumptions for funds held by the contract.","recommendation":"Remove the kill path if it is unnecessary, or gate it behind a multisig/timelock and document the administrative trust model clearly.","evidence":"Selector `0x41c0e1b5` matches `kill()`. At `pc:0x0155` the function reads slot 2, masks it to 160 bits, and compares it to `CALLER`. If equal, execution reaches `SELFDESTRUCT` at `pc:0x0174`, sending funds to the caller.","locations":["selector:0x41c0e1b5","pc:0x0155","pc:0x0174"]}]}
tokens used
136,754
Metadata
{
    "codex": {
        "ran_at": "2026-04-05T05:42:36.896248+00:00",
        "returncode": 0
    },
    "project": {
        "mode": "bytecode",
        "bytecode_length": 4410,
        "bytecode_truncated": false,
        "capability_graph_present": true,
        "analysis_artifact_present": true
    },
    "summary": "Runtime bytecode matches an Oraclize/Provable-style oracle client with a public `update()` path, a `__callback(bytes32,string,bytes)` entrypoint, and a privileged `kill()` path. Based on runtime-only evidence, the main issues are missing callback/query correlation, public spending of contract ETH on oracle calls, and a retained owner kill switch. Selector names are inferred best-effort from bytecode/4byte matches.",
    "raw_final": {
        "summary": "Runtime bytecode matches an Oraclize/Provable-style oracle client with a public `update()` path, a `__callback(bytes32,string,bytes)` entrypoint, and a privileged `kill()` path. Based on runtime-only evidence, the main issues are missing callback/query correlation, public spending of contract ETH on oracle calls, and a retained owner kill switch. Selector names are inferred best-effort from bytecode/4byte matches.",
        "findings": [
            {
                "title": "Oracle callback accepts any authorized sender response without validating a pending query id",
                "category": "oracle",
                "evidence": "Selector `0x38bbfa50` matches `__callback(bytes32,string,bytes)`. The callback path decodes three arguments, then at `pc:0x036c` checks only that `CALLER` matches the resolved oracle address before entering the string-storage routine at `pc:0x038b`. The public oracle-query path at `selector:0xa2e62045` performs `query(uint256,string,string)` via selector `0xadf59f99` at `pc:0x0703`, but the returned request id is not written to storage; storage writes are limited to slots 0/1/3 and dynamic string data.",
                "severity": "medium",
                "locations": [
                    "selector:0x38bbfa50",
                    "selector:0xa2e62045",
                    "pc:0x036c",
                    "pc:0x0703"
                ],
                "recommendation": "Persist the returned query id from the query call and require `_queryId` to match an expected pending id before accepting callback data. If multiple requests are allowed, track them explicitly and clear them after use.",
                "exploit_scenario": "An attacker can trigger multiple outstanding oracle updates through the public query path. Because the callback appears to authenticate only the oracle sender and not the `bytes32` request id, a stale or later oracle reply can overwrite the currently stored result in slot 3. If the oracle/resolver side is ever misconfigured or compromised, arbitrary callback data would be accepted as long as it comes from the resolved oracle address."
            },
            {
                "title": "Public `update()` path can spend ETH from contract balance on oracle queries",
                "category": "access_control",
                "evidence": "Selector `0xa2e62045` resolves to a public `update()` entrypoint. Its body builds a fixed Kraken URL query, calls the oracle pricing path (`getPrice(...)`) around `pc:0x065c`, and then performs the actual oracle query call at `pc:0x0703`. The artifact reports no auth guards for this function, and detector validation confirmed reachable `CALL` sites with possible nonzero ETH value and varying external targets. There is no visible `CALLVALUE`-based accounting or owner check in runtime bytecode.",
                "severity": "medium",
                "locations": [
                    "selector:0xa2e62045",
                    "pc:0x065c",
                    "pc:0x0703"
                ],
                "recommendation": "Restrict the query-triggering function to an authorized operator, or require the caller to supply and account for the exact oracle fee so existing contract balance cannot be consumed by arbitrary users.",
                "exploit_scenario": "If this contract holds ETH to subsidize oracle usage, any external account can call the public update function and force the contract to pay oracle fees. Repeated calls can drain the balance into oracle payments or trigger unwanted offchain queries, even if the caller is not otherwise trusted."
            },
            {
                "title": "Privileged kill switch can sweep balance via `SELFDESTRUCT`",
                "category": "auth",
                "evidence": "Selector `0x41c0e1b5` matches `kill()`. At `pc:0x0155` the function reads slot 2, masks it to 160 bits, and compares it to `CALLER`. If equal, execution reaches `SELFDESTRUCT` at `pc:0x0174`, sending funds to the caller.",
                "severity": "low",
                "locations": [
                    "selector:0x41c0e1b5",
                    "pc:0x0155",
                    "pc:0x0174"
                ],
                "recommendation": "Remove the kill path if it is unnecessary, or gate it behind a multisig/timelock and document the administrative trust model clearly.",
                "exploit_scenario": "Whoever controls the address stored in slot 2 can invoke the kill function and force a terminal balance sweep to themselves. Even if this is intended admin functionality, compromise or abuse of that key breaks trust assumptions for funds held by the contract."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
1
CREATE2
0
CALL-family (heavy)
11
EXT*/BALANCE
1
Total opcodes
1448
Flags
selfdestruct_present
View cast disassembly output
00000000: PUSH1 0x60
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0xe0
00000007: PUSH1 0x02
00000009: EXP
0000000a: PUSH1 0x00
0000000c: CALLDATALOAD
0000000d: DIV
0000000e: PUSH4 0x38bbfa50
00000013: DUP2
00000014: EQ
00000015: PUSH2 0x003c
00000018: JUMPI
00000019: DUP1
0000001a: PUSH4 0x41c0e1b5
0000001f: EQ
00000020: PUSH2 0x014f
00000023: JUMPI
00000024: DUP1
00000025: PUSH4 0xa2e62045
0000002a: EQ
0000002b: PUSH2 0x0175
0000002e: JUMPI
0000002f: DUP1
00000030: PUSH4 0xb7764475
00000035: EQ
00000036: PUSH2 0x029e
00000039: JUMPI
0000003a: JUMPDEST
0000003b: STOP
0000003c: JUMPDEST
0000003d: PUSH1 0x40
0000003f: DUP1
00000040: MLOAD
00000041: PUSH1 0x20
00000043: PUSH1 0x24
00000045: DUP1
00000046: CALLDATALOAD
00000047: PUSH1 0x04
00000049: DUP2
0000004a: DUP2
0000004b: ADD
0000004c: CALLDATALOAD
0000004d: PUSH1 0x1f
0000004f: DUP2
00000050: ADD
00000051: DUP6
00000052: SWAP1
00000053: DIV
00000054: DUP6
00000055: MUL
00000056: DUP7
00000057: ADD
00000058: DUP6
00000059: ADD
0000005a: SWAP1
0000005b: SWAP7
0000005c: MSTORE
0000005d: DUP6
0000005e: DUP6
0000005f: MSTORE
00000060: PUSH2 0x003a
00000063: SWAP6
00000064: DUP2
00000065: CALLDATALOAD
00000066: SWAP6
00000067: SWAP2
00000068: SWAP5
00000069: PUSH1 0x44
0000006b: SWAP5
0000006c: SWAP3
0000006d: SWAP4
0000006e: SWAP1
0000006f: SWAP3
00000070: ADD
00000071: SWAP2
00000072: DUP2
00000073: SWAP1
00000074: DUP5
00000075: ADD
00000076: DUP4
00000077: DUP3
00000078: DUP1
00000079: DUP3
0000007a: DUP5
0000007b: CALLDATACOPY
0000007c: POP
0000007d: POP
0000007e: PUSH1 0x40
00000080: DUP1
00000081: MLOAD
00000082: PUSH1 0x20
00000084: SWAP8
00000085: CALLDATALOAD
00000086: DUP1
00000087: DUP11
00000088: ADD
00000089: CALLDATALOAD
0000008a: PUSH1 0x1f
0000008c: DUP2
0000008d: ADD
0000008e: DUP11
0000008f: SWAP1
00000090: DIV
00000091: DUP11
00000092: MUL
00000093: DUP4
00000094: ADD
00000095: DUP11
00000096: ADD
00000097: SWAP1
00000098: SWAP4
00000099: MSTORE
0000009a: DUP3
0000009b: DUP3
0000009c: MSTORE
0000009d: SWAP7
0000009e: SWAP9
0000009f: SWAP8
000000a0: PUSH1 0x64
000000a2: SWAP8
000000a3: SWAP2
000000a4: SWAP7
000000a5: POP
000000a6: PUSH1 0x24
000000a8: SWAP2
000000a9: SWAP1
000000aa: SWAP2
000000ab: ADD
000000ac: SWAP5
000000ad: POP
000000ae: SWAP1
000000af: SWAP3
000000b0: POP
000000b1: DUP3
000000b2: SWAP2
000000b3: POP
000000b4: DUP5
000000b5: ADD
000000b6: DUP4
000000b7: DUP3
000000b8: DUP1
000000b9: DUP3
000000ba: DUP5
000000bb: CALLDATACOPY
000000bc: POP
000000bd: SWAP5
000000be: SWAP7
000000bf: POP
000000c0: POP
000000c1: POP
000000c2: POP
000000c3: POP
000000c4: POP
000000c5: POP
000000c6: PUSH2 0x036c
000000c9: PUSH1 0x00
000000cb: DUP1
000000cc: SLOAD
000000cd: PUSH1 0x40
000000cf: DUP1
000000d0: MLOAD
000000d1: PUSH1 0xe0
000000d3: PUSH1 0x02
000000d5: EXP
000000d6: PUSH4 0x38cc4831
000000db: MUL
000000dc: DUP2
000000dd: MSTORE
000000de: SWAP1
000000df: MLOAD
000000e0: DUP4
000000e1: SWAP3
000000e2: PUSH1 0x01
000000e4: PUSH1 0xa0
000000e6: PUSH1 0x02
000000e8: EXP
000000e9: SUB
000000ea: AND
000000eb: SWAP2
000000ec: PUSH4 0x38cc4831
000000f1: SWAP2
000000f2: PUSH1 0x04
000000f4: DUP3
000000f5: DUP2
000000f6: ADD
000000f7: SWAP3
000000f8: PUSH1 0x20
000000fa: SWAP3
000000fb: SWAP2
000000fc: SWAP1
000000fd: DUP3
000000fe: SWAP1
000000ff: SUB
00000100: ADD
00000101: DUP2
00000102: DUP8
00000103: DUP8
00000104: PUSH2 0x61da
00000107: GAS
00000108: SUB
00000109: CALL
0000010a: ISZERO
0000010b: PUSH2 0x0002
0000010e: JUMPI
0000010f: POP
00000110: POP
00000111: PUSH1 0x40
00000113: MLOAD
00000114: MLOAD
00000115: SWAP2
00000116: POP
00000117: POP
00000118: PUSH1 0x01
0000011a: PUSH1 0xa0
0000011c: PUSH1 0x02
0000011e: EXP
0000011f: SUB
00000120: DUP2
00000121: AND
00000122: DUP3
00000123: EQ
00000124: ISZERO
00000125: PUSH2 0x04bd
00000128: JUMPI
00000129: PUSH2 0x0465
0000012c: PUSH1 0x00
0000012e: JUMPDEST
0000012f: PUSH1 0x00
00000131: PUSH1 0x00
00000133: PUSH2 0x07be
00000136: PUSH20 0x1d11e5eae3112dbd44f99266872ff1d07c77dce8
0000014b: JUMPDEST
0000014c: EXTCODESIZE
0000014d: SWAP1
0000014e: JUMP
0000014f: JUMPDEST
00000150: PUSH2 0x003a
00000153: PUSH1 0x02
00000155: SLOAD
00000156: CALLER
00000157: PUSH1 0x01
00000159: PUSH1 0xa0
0000015b: PUSH1 0x02
0000015d: EXP
0000015e: SUB
0000015f: SWAP1
00000160: DUP2
00000161: AND
00000162: SWAP2
00000163: AND
00000164: EQ
00000165: ISZERO
00000166: PUSH2 0x042d
00000169: JUMPI
0000016a: CALLER
0000016b: PUSH1 0x01
0000016d: PUSH1 0xa0
0000016f: PUSH1 0x02
00000171: EXP
00000172: SUB
00000173: AND
00000174: SELFDESTRUCT
00000175: JUMPDEST
00000176: PUSH1 0x40
00000178: DUP1
00000179: MLOAD
0000017a: DUP1
0000017b: DUP3
0000017c: ADD
0000017d: DUP3
0000017e: MSTORE
0000017f: PUSH1 0x03
00000181: DUP2
00000182: MSTORE
00000183: PUSH32 0x55524c0000000000000000000000000000000000000000000000000000000000
000001a4: PUSH1 0x20
000001a6: DUP3
000001a7: DUP2
000001a8: ADD
000001a9: SWAP2
000001aa: SWAP1
000001ab: SWAP2
000001ac: MSTORE
000001ad: DUP3
000001ae: MLOAD
000001af: PUSH1 0x80
000001b1: DUP2
000001b2: ADD
000001b3: DUP5
000001b4: MSTORE
000001b5: PUSH1 0x4c
000001b7: DUP2
000001b8: MSTORE
000001b9: PUSH32 0x6a736f6e2868747470733a2f2f6170692e6b72616b656e2e636f6d2f302f7075
000001da: DUP2
000001db: DUP4
000001dc: ADD
000001dd: MSTORE
000001de: PUSH32 0x626c69632f5469636b65723f706169723d455448584254292e726573756c742e
000001ff: DUP2
00000200: DUP6
00000201: ADD
00000202: MSTORE
00000203: PUSH32 0x58455448585842542e632e300000000000000000000000000000000000000000
00000224: PUSH1 0x60
00000226: DUP3
00000227: ADD
00000228: MSTORE
00000229: DUP4
0000022a: MLOAD
0000022b: PUSH1 0x00
0000022d: DUP1
0000022e: SLOAD
0000022f: PUSH1 0xe0
00000231: PUSH1 0x02
00000233: EXP
00000234: PUSH4 0x38cc4831
00000239: MUL
0000023a: DUP4
0000023b: MSTORE
0000023c: SWAP6
0000023d: MLOAD
0000023e: PUSH2 0x003a
00000241: SWAP7
00000242: PUSH2 0x042f
00000245: SWAP7
00000246: SWAP3
00000247: SWAP6
00000248: SWAP3
00000249: SWAP5
0000024a: SWAP4
0000024b: DUP7
0000024c: SWAP4
0000024d: DUP5
0000024e: SWAP4
0000024f: DUP5
00000250: SWAP4
00000251: PUSH1 0x01
00000253: PUSH1 0xa0
00000255: PUSH1 0x02
00000257: EXP
00000258: SUB
00000259: AND
0000025a: SWAP3
0000025b: PUSH4 0x38cc4831
00000260: SWAP3
00000261: PUSH1 0x04
00000263: DUP3
00000264: DUP2
00000265: ADD
00000266: SWAP4
00000267: SWAP2
00000268: SWAP3
00000269: DUP3
0000026a: SWAP1
0000026b: SUB
0000026c: ADD
0000026d: DUP2
0000026e: DUP8
0000026f: DUP8
00000270: PUSH2 0x61da
00000273: GAS
00000274: SUB
00000275: CALL
00000276: ISZERO
00000277: PUSH2 0x0002
0000027a: JUMPI
0000027b: POP
0000027c: POP
0000027d: PUSH1 0x40
0000027f: MLOAD
00000280: MLOAD
00000281: SWAP2
00000282: POP
00000283: POP
00000284: PUSH1 0x01
00000286: PUSH1 0xa0
00000288: PUSH1 0x02
0000028a: EXP
0000028b: SUB
0000028c: DUP2
0000028d: AND
0000028e: DUP3
0000028f: EQ
00000290: ISZERO
00000291: PUSH2 0x0591
00000294: JUMPI
00000295: PUSH2 0x0539
00000298: PUSH1 0x00
0000029a: PUSH2 0x012e
0000029d: JUMP
0000029e: JUMPDEST
0000029f: PUSH2 0x02fe
000002a2: PUSH1 0x03
000002a4: DUP1
000002a5: SLOAD
000002a6: PUSH1 0x40
000002a8: DUP1
000002a9: MLOAD
000002aa: PUSH1 0x20
000002ac: PUSH1 0x1f
000002ae: PUSH1 0x02
000002b0: PUSH1 0x00
000002b2: NOT
000002b3: PUSH2 0x0100
000002b6: PUSH1 0x01
000002b8: DUP9
000002b9: AND
000002ba: ISZERO
000002bb: MUL
000002bc: ADD
000002bd: SWAP1
000002be: SWAP6
000002bf: AND
000002c0: SWAP5
000002c1: SWAP1
000002c2: SWAP5
000002c3: DIV
000002c4: SWAP4
000002c5: DUP5
000002c6: ADD
000002c7: DUP2
000002c8: SWAP1
000002c9: DIV
000002ca: DUP2
000002cb: MUL
000002cc: DUP3
000002cd: ADD
000002ce: DUP2
000002cf: ADD
000002d0: SWAP1
000002d1: SWAP3
000002d2: MSTORE
000002d3: DUP3
000002d4: DUP2
000002d5: MSTORE
000002d6: SWAP3
000002d7: SWAP2
000002d8: SWAP1
000002d9: DUP4
000002da: ADD
000002db: DUP3
000002dc: DUP3
000002dd: DUP1
000002de: ISZERO
000002df: PUSH2 0x045d
000002e2: JUMPI
000002e3: DUP1
000002e4: PUSH1 0x1f
000002e6: LT
000002e7: PUSH2 0x0432
000002ea: JUMPI
000002eb: PUSH2 0x0100
000002ee: DUP1
000002ef: DUP4
000002f0: SLOAD
000002f1: DIV
000002f2: MUL
000002f3: DUP4
000002f4: MSTORE
000002f5: SWAP2
000002f6: PUSH1 0x20
000002f8: ADD
000002f9: SWAP2
000002fa: PUSH2 0x045d
000002fd: JUMP
000002fe: JUMPDEST
000002ff: PUSH1 0x40
00000301: MLOAD
00000302: DUP1
00000303: DUP1
00000304: PUSH1 0x20
00000306: ADD
00000307: DUP3
00000308: DUP2
00000309: SUB
0000030a: DUP3
0000030b: MSTORE
0000030c: DUP4
0000030d: DUP2
0000030e: DUP2
0000030f: MLOAD
00000310: DUP2
00000311: MSTORE
00000312: PUSH1 0x20
00000314: ADD
00000315: SWAP2
00000316: POP
00000317: DUP1
00000318: MLOAD
00000319: SWAP1
0000031a: PUSH1 0x20
0000031c: ADD
0000031d: SWAP1
0000031e: DUP1
0000031f: DUP4
00000320: DUP4
00000321: DUP3
00000322: SWAP1
00000323: PUSH1 0x00
00000325: PUSH1 0x04
00000327: PUSH1 0x20
00000329: DUP5
0000032a: PUSH1 0x1f
0000032c: ADD
0000032d: DIV
0000032e: PUSH1 0x0f
00000330: MUL
00000331: PUSH1 0x03
00000333: ADD
00000334: CALL
00000335: POP
00000336: SWAP1
00000337: POP
00000338: SWAP1
00000339: DUP2
0000033a: ADD
0000033b: SWAP1
0000033c: PUSH1 0x1f
0000033e: AND
0000033f: DUP1
00000340: ISZERO
00000341: PUSH2 0x035e
00000344: JUMPI
00000345: DUP1
00000346: DUP3
00000347: SUB
00000348: DUP1
00000349: MLOAD
0000034a: PUSH1 0x01
0000034c: DUP4
0000034d: PUSH1 0x20
0000034f: SUB
00000350: PUSH2 0x0100
00000353: EXP
00000354: SUB
00000355: NOT
00000356: AND
00000357: DUP2
00000358: MSTORE
00000359: PUSH1 0x20
0000035b: ADD
0000035c: SWAP2
0000035d: POP
0000035e: JUMPDEST
0000035f: POP
00000360: SWAP3
00000361: POP
00000362: POP
00000363: POP
00000364: PUSH1 0x40
00000366: MLOAD
00000367: DUP1
00000368: SWAP2
00000369: SUB
0000036a: SWAP1
0000036b: RETURN
0000036c: JUMPDEST
0000036d: PUSH1 0x01
0000036f: PUSH1 0xa0
00000371: PUSH1 0x02
00000373: EXP
00000374: SUB
00000375: AND
00000376: CALLER
00000377: PUSH1 0x01
00000379: PUSH1 0xa0
0000037b: PUSH1 0x02
0000037d: EXP
0000037e: SUB
0000037f: AND
00000380: EQ
00000381: ISZERO
00000382: ISZERO
00000383: PUSH2 0x038b
00000386: JUMPI
00000387: PUSH2 0x0002
0000038a: JUMP
0000038b: JUMPDEST
0000038c: DUP2
0000038d: PUSH1 0x03
0000038f: PUSH1 0x00
00000391: POP
00000392: SWAP1
00000393: DUP1
00000394: MLOAD
00000395: SWAP1
00000396: PUSH1 0x20
00000398: ADD
00000399: SWAP1
0000039a: DUP3
0000039b: DUP1
0000039c: SLOAD
0000039d: PUSH1 0x01
0000039f: DUP2
000003a0: PUSH1 0x01
000003a2: AND
000003a3: ISZERO
000003a4: PUSH2 0x0100
000003a7: MUL
000003a8: SUB
000003a9: AND
000003aa: PUSH1 0x02
000003ac: SWAP1
000003ad: DIV
000003ae: SWAP1
000003af: PUSH1 0x00
000003b1: MSTORE
000003b2: PUSH1 0x20
000003b4: PUSH1 0x00
000003b6: KECCAK256
000003b7: SWAP1
000003b8: PUSH1 0x1f
000003ba: ADD
000003bb: PUSH1 0x20
000003bd: SWAP1
000003be: DIV
000003bf: DUP2
000003c0: ADD
000003c1: SWAP3
000003c2: DUP3
000003c3: PUSH1 0x1f
000003c5: LT
000003c6: PUSH2 0x03f2
000003c9: JUMPI
000003ca: DUP1
000003cb: MLOAD
000003cc: PUSH1 0xff
000003ce: NOT
000003cf: AND
000003d0: DUP4
000003d1: DUP1
000003d2: ADD
000003d3: OR
000003d4: DUP6
000003d5: SSTORE
000003d6: JUMPDEST
000003d7: POP
000003d8: PUSH2 0x0422
000003db: SWAP3
000003dc: SWAP2
000003dd: POP
000003de: JUMPDEST
000003df: DUP1
000003e0: DUP3
000003e1: GT
000003e2: ISZERO
000003e3: PUSH2 0x0429
000003e6: JUMPI
000003e7: PUSH1 0x00
000003e9: DUP2
000003ea: SSTORE
000003eb: PUSH1 0x01
000003ed: ADD
000003ee: PUSH2 0x03de
000003f1: JUMP
000003f2: JUMPDEST
000003f3: DUP3
000003f4: DUP1
000003f5: ADD
000003f6: PUSH1 0x01
000003f8: ADD
000003f9: DUP6
000003fa: SSTORE
000003fb: DUP3
000003fc: ISZERO
000003fd: PUSH2 0x03d6
00000400: JUMPI
00000401: SWAP2
00000402: DUP3
00000403: ADD
00000404: JUMPDEST
00000405: DUP3
00000406: DUP2
00000407: GT
00000408: ISZERO
00000409: PUSH2 0x03d6
0000040c: JUMPI
0000040d: DUP3
0000040e: MLOAD
0000040f: DUP3
00000410: PUSH1 0x00
00000412: POP
00000413: SSTORE
00000414: SWAP2
00000415: PUSH1 0x20
00000417: ADD
00000418: SWAP2
00000419: SWAP1
0000041a: PUSH1 0x01
0000041c: ADD
0000041d: SWAP1
0000041e: PUSH2 0x0404
00000421: JUMP
00000422: JUMPDEST
00000423: POP
00000424: POP
00000425: POP
00000426: POP
00000427: POP
00000428: JUMP
00000429: JUMPDEST
0000042a: POP
0000042b: SWAP1
0000042c: JUMP
0000042d: JUMPDEST
0000042e: JUMP
0000042f: JUMPDEST
00000430: POP
00000431: JUMP
00000432: JUMPDEST
00000433: DUP3
00000434: ADD
00000435: SWAP2
00000436: SWAP1
00000437: PUSH1 0x00
00000439: MSTORE
0000043a: PUSH1 0x20
0000043c: PUSH1 0x00
0000043e: KECCAK256
0000043f: SWAP1
00000440: JUMPDEST
00000441: DUP2
00000442: SLOAD
00000443: DUP2
00000444: MSTORE
00000445: SWAP1
00000446: PUSH1 0x01
00000448: ADD
00000449: SWAP1
0000044a: PUSH1 0x20
0000044c: ADD
0000044d: DUP1
0000044e: DUP4
0000044f: GT
00000450: PUSH2 0x0440
00000453: JUMPI
00000454: DUP3
00000455: SWAP1
00000456: SUB
00000457: PUSH1 0x1f
00000459: AND
0000045a: DUP3
0000045b: ADD
0000045c: SWAP2
0000045d: JUMPDEST
0000045e: POP
0000045f: POP
00000460: POP
00000461: POP
00000462: POP
00000463: DUP2
00000464: JUMP
00000465: JUMPDEST
00000466: POP
00000467: PUSH1 0x00
00000469: PUSH1 0x00
0000046b: SWAP1
0000046c: SLOAD
0000046d: SWAP1
0000046e: PUSH2 0x0100
00000471: EXP
00000472: SWAP1
00000473: DIV
00000474: PUSH1 0x01
00000476: PUSH1 0xa0
00000478: PUSH1 0x02
0000047a: EXP
0000047b: SUB
0000047c: AND
0000047d: PUSH1 0x01
0000047f: PUSH1 0xa0
00000481: PUSH1 0x02
00000483: EXP
00000484: SUB
00000485: AND
00000486: PUSH4 0x38cc4831
0000048b: PUSH1 0x40
0000048d: MLOAD
0000048e: DUP2
0000048f: PUSH1 0xe0
00000491: PUSH1 0x02
00000493: EXP
00000494: MUL
00000495: DUP2
00000496: MSTORE
00000497: PUSH1 0x04
00000499: ADD
0000049a: DUP1
0000049b: SWAP1
0000049c: POP
0000049d: PUSH1 0x20
0000049f: PUSH1 0x40
000004a1: MLOAD
000004a2: DUP1
000004a3: DUP4
000004a4: SUB
000004a5: DUP2
000004a6: PUSH1 0x00
000004a8: DUP8
000004a9: PUSH2 0x61da
000004ac: GAS
000004ad: SUB
000004ae: CALL
000004af: ISZERO
000004b0: PUSH2 0x0002
000004b3: JUMPI
000004b4: POP
000004b5: POP
000004b6: PUSH1 0x40
000004b8: MLOAD
000004b9: MLOAD
000004ba: SWAP2
000004bb: POP
000004bc: POP
000004bd: JUMPDEST
000004be: PUSH1 0x01
000004c0: DUP1
000004c1: SLOAD
000004c2: PUSH1 0x01
000004c4: PUSH1 0xa0
000004c6: PUSH1 0x02
000004c8: EXP
000004c9: SUB
000004ca: NOT
000004cb: AND
000004cc: DUP3
000004cd: OR
000004ce: SWAP1
000004cf: DUP2
000004d0: SWAP1
000004d1: SSTORE
000004d2: PUSH1 0x40
000004d4: DUP1
000004d5: MLOAD
000004d6: PUSH32 0xc281d19e00000000000000000000000000000000000000000000000000000000
000004f7: DUP2
000004f8: MSTORE
000004f9: SWAP1
000004fa: MLOAD
000004fb: PUSH1 0x01
000004fd: PUSH1 0xa0
000004ff: PUSH1 0x02
00000501: EXP
00000502: SUB
00000503: SWAP3
00000504: SWAP1
00000505: SWAP3
00000506: AND
00000507: SWAP2
00000508: PUSH4 0xc281d19e
0000050d: SWAP2
0000050e: PUSH1 0x04
00000510: DUP2
00000511: DUP2
00000512: ADD
00000513: SWAP3
00000514: PUSH1 0x20
00000516: SWAP3
00000517: SWAP1
00000518: SWAP2
00000519: SWAP1
0000051a: DUP3
0000051b: SWAP1
0000051c: SUB
0000051d: ADD
0000051e: DUP2
0000051f: PUSH1 0x00
00000521: DUP8
00000522: PUSH2 0x61da
00000525: GAS
00000526: SUB
00000527: CALL
00000528: ISZERO
00000529: PUSH2 0x0002
0000052c: JUMPI
0000052d: POP
0000052e: POP
0000052f: PUSH1 0x40
00000531: MLOAD
00000532: MLOAD
00000533: SWAP3
00000534: POP
00000535: POP
00000536: POP
00000537: SWAP1
00000538: JUMP
00000539: JUMPDEST
0000053a: POP
0000053b: PUSH1 0x00
0000053d: PUSH1 0x00
0000053f: SWAP1
00000540: SLOAD
00000541: SWAP1
00000542: PUSH2 0x0100
00000545: EXP
00000546: SWAP1
00000547: DIV
00000548: PUSH1 0x01
0000054a: PUSH1 0xa0
0000054c: PUSH1 0x02
0000054e: EXP
0000054f: SUB
00000550: AND
00000551: PUSH1 0x01
00000553: PUSH1 0xa0
00000555: PUSH1 0x02
00000557: EXP
00000558: SUB
00000559: AND
0000055a: PUSH4 0x38cc4831
0000055f: PUSH1 0x40
00000561: MLOAD
00000562: DUP2
00000563: PUSH1 0xe0
00000565: PUSH1 0x02
00000567: EXP
00000568: MUL
00000569: DUP2
0000056a: MSTORE
0000056b: PUSH1 0x04
0000056d: ADD
0000056e: DUP1
0000056f: SWAP1
00000570: POP
00000571: PUSH1 0x20
00000573: PUSH1 0x40
00000575: MLOAD
00000576: DUP1
00000577: DUP4
00000578: SUB
00000579: DUP2
0000057a: PUSH1 0x00
0000057c: DUP8
0000057d: PUSH2 0x61da
00000580: GAS
00000581: SUB
00000582: CALL
00000583: ISZERO
00000584: PUSH2 0x0002
00000587: JUMPI
00000588: POP
00000589: POP
0000058a: PUSH1 0x40
0000058c: MLOAD
0000058d: MLOAD
0000058e: SWAP2
0000058f: POP
00000590: POP
00000591: JUMPDEST
00000592: PUSH1 0x01
00000594: DUP1
00000595: SLOAD
00000596: PUSH1 0x01
00000598: PUSH1 0xa0
0000059a: PUSH1 0x02
0000059c: EXP
0000059d: SUB
0000059e: NOT
0000059f: AND
000005a0: DUP3
000005a1: OR
000005a2: SWAP1
000005a3: DUP2
000005a4: SWAP1
000005a5: SSTORE
000005a6: PUSH1 0x40
000005a8: MLOAD
000005a9: PUSH32 0x524f388900000000000000000000000000000000000000000000000000000000
000005ca: DUP2
000005cb: MSTORE
000005cc: PUSH1 0x20
000005ce: PUSH1 0x04
000005d0: DUP3
000005d1: DUP2
000005d2: ADD
000005d3: DUP3
000005d4: DUP2
000005d5: MSTORE
000005d6: DUP10
000005d7: MLOAD
000005d8: PUSH1 0x24
000005da: DUP6
000005db: ADD
000005dc: MSTORE
000005dd: DUP10
000005de: MLOAD
000005df: PUSH1 0x01
000005e1: PUSH1 0xa0
000005e3: PUSH1 0x02
000005e5: EXP
000005e6: SUB
000005e7: SWAP6
000005e8: SWAP1
000005e9: SWAP6
000005ea: AND
000005eb: SWAP5
000005ec: PUSH4 0x524f3889
000005f1: SWAP5
000005f2: DUP12
000005f3: SWAP5
000005f4: SWAP3
000005f5: SWAP4
000005f6: DUP5
000005f7: SWAP4
000005f8: PUSH1 0x44
000005fa: SWAP3
000005fb: SWAP1
000005fc: SWAP3
000005fd: ADD
000005fe: SWAP3
000005ff: DUP7
00000600: DUP4
00000601: ADD
00000602: SWAP3
00000603: SWAP1
00000604: SWAP2
00000605: DUP3
00000606: SWAP2
00000607: DUP6
00000608: SWAP2
00000609: DUP4
0000060a: SWAP2
0000060b: DUP7
0000060c: SWAP2
0000060d: PUSH1 0x00
0000060f: SWAP2
00000610: PUSH1 0x1f
00000612: DUP6
00000613: ADD
00000614: DIV
00000615: PUSH1 0x0f
00000617: MUL
00000618: PUSH1 0x03
0000061a: ADD
0000061b: CALL
0000061c: POP
0000061d: SWAP1
0000061e: POP
0000061f: SWAP1
00000620: DUP2
00000621: ADD
00000622: SWAP1
00000623: PUSH1 0x1f
00000625: AND
00000626: DUP1
00000627: ISZERO
00000628: PUSH2 0x0645
0000062b: JUMPI
0000062c: DUP1
0000062d: DUP3
0000062e: SUB
0000062f: DUP1
00000630: MLOAD
00000631: PUSH1 0x01
00000633: DUP4
00000634: PUSH1 0x20
00000636: SUB
00000637: PUSH2 0x0100
0000063a: EXP
0000063b: SUB
0000063c: NOT
0000063d: AND
0000063e: DUP2
0000063f: MSTORE
00000640: PUSH1 0x20
00000642: ADD
00000643: SWAP2
00000644: POP
00000645: JUMPDEST
00000646: POP
00000647: SWAP3
00000648: POP
00000649: POP
0000064a: POP
0000064b: PUSH1 0x20
0000064d: PUSH1 0x40
0000064f: MLOAD
00000650: DUP1
00000651: DUP4
00000652: SUB
00000653: DUP2
00000654: PUSH1 0x00
00000656: DUP8
00000657: PUSH2 0x61da
0000065a: GAS
0000065b: SUB
0000065c: CALL
0000065d: ISZERO
0000065e: PUSH2 0x0002
00000661: JUMPI
00000662: POP
00000663: POP
00000664: PUSH1 0x40
00000666: MLOAD
00000667: MLOAD
00000668: SWAP3
00000669: POP
0000066a: POP
0000066b: PUSH8 0x0de0b6b3a7640000
00000674: PUSH3 0x030d40
00000678: GASPRICE
00000679: MUL
0000067a: ADD
0000067b: DUP3
0000067c: GT
0000067d: ISZERO
0000067e: PUSH2 0x068f
00000681: JUMPI
00000682: POP
00000683: PUSH1 0x00
00000685: SWAP2
00000686: POP
00000687: JUMPDEST
00000688: POP
00000689: SWAP4
0000068a: SWAP3
0000068b: POP
0000068c: POP
0000068d: POP
0000068e: JUMP
0000068f: JUMPDEST
00000690: PUSH1 0x01
00000692: PUSH1 0x00
00000694: SWAP1
00000695: SLOAD
00000696: SWAP1
00000697: PUSH2 0x0100
0000069a: EXP
0000069b: SWAP1
0000069c: DIV
0000069d: PUSH1 0x01
0000069f: PUSH1 0xa0
000006a1: PUSH1 0x02
000006a3: EXP
000006a4: SUB
000006a5: AND
000006a6: PUSH1 0x01
000006a8: PUSH1 0xa0
000006aa: PUSH1 0x02
000006ac: EXP
000006ad: SUB
000006ae: AND
000006af: PUSH4 0xadf59f99
000006b4: DUP4
000006b5: DUP9
000006b6: DUP9
000006b7: DUP9
000006b8: PUSH1 0x40
000006ba: MLOAD
000006bb: DUP6
000006bc: PUSH1 0xe0
000006be: PUSH1 0x02
000006c0: EXP
000006c1: MUL
000006c2: DUP2
000006c3: MSTORE
000006c4: PUSH1 0x04
000006c6: ADD
000006c7: DUP1
000006c8: DUP5
000006c9: DUP2
000006ca: MSTORE
000006cb: PUSH1 0x20
000006cd: ADD
000006ce: DUP1
000006cf: PUSH1 0x20
000006d1: ADD
000006d2: DUP1
000006d3: PUSH1 0x20
000006d5: ADD
000006d6: DUP4
000006d7: DUP2
000006d8: SUB
000006d9: DUP4
000006da: MSTORE
000006db: DUP6
000006dc: DUP2
000006dd: DUP2
000006de: MLOAD
000006df: DUP2
000006e0: MSTORE
000006e1: PUSH1 0x20
000006e3: ADD
000006e4: SWAP2
000006e5: POP
000006e6: DUP1
000006e7: MLOAD
000006e8: SWAP1
000006e9: PUSH1 0x20
000006eb: ADD
000006ec: SWAP1
000006ed: DUP1
000006ee: DUP4
000006ef: DUP4
000006f0: DUP3
000006f1: SWAP1
000006f2: PUSH1 0x00
000006f4: PUSH1 0x04
000006f6: PUSH1 0x20
000006f8: DUP5
000006f9: PUSH1 0x1f
000006fb: ADD
000006fc: DIV
000006fd: PUSH1 0x0f
000006ff: MUL
00000700: PUSH1 0x03
00000702: ADD
00000703: CALL
00000704: POP
00000705: SWAP1
00000706: POP
00000707: SWAP1
00000708: DUP2
00000709: ADD
0000070a: SWAP1
0000070b: PUSH1 0x1f
0000070d: AND
0000070e: DUP1
0000070f: ISZERO
00000710: PUSH2 0x072d
00000713: JUMPI
00000714: DUP1
00000715: DUP3
00000716: SUB
00000717: DUP1
00000718: MLOAD
00000719: PUSH1 0x01
0000071b: DUP4
0000071c: PUSH1 0x20
0000071e: SUB
0000071f: PUSH2 0x0100
00000722: EXP
00000723: SUB
00000724: NOT
00000725: AND
00000726: DUP2
00000727: MSTORE
00000728: PUSH1 0x20
0000072a: ADD
0000072b: SWAP2
0000072c: POP
0000072d: JUMPDEST
0000072e: POP
0000072f: DUP4
00000730: DUP2
00000731: SUB
00000732: DUP3
00000733: MSTORE
00000734: DUP5
00000735: DUP2
00000736: DUP2
00000737: MLOAD
00000738: DUP2
00000739: MSTORE
0000073a: PUSH1 0x20
0000073c: ADD
0000073d: SWAP2
0000073e: POP
0000073f: DUP1
00000740: MLOAD
00000741: SWAP1
00000742: PUSH1 0x20
00000744: ADD
00000745: SWAP1
00000746: DUP1
00000747: DUP4
00000748: DUP4
00000749: DUP3
0000074a: SWAP1
0000074b: PUSH1 0x00
0000074d: PUSH1 0x04
0000074f: PUSH1 0x20
00000751: DUP5
00000752: PUSH1 0x1f
00000754: ADD
00000755: DIV
00000756: PUSH1 0x0f
00000758: MUL
00000759: PUSH1 0x03
0000075b: ADD
0000075c: CALL
0000075d: POP
0000075e: SWAP1
0000075f: POP
00000760: SWAP1
00000761: DUP2
00000762: ADD
00000763: SWAP1
00000764: PUSH1 0x1f
00000766: AND
00000767: DUP1
00000768: ISZERO
00000769: PUSH2 0x0786
0000076c: JUMPI
0000076d: DUP1
0000076e: DUP3
0000076f: SUB
00000770: DUP1
00000771: MLOAD
00000772: PUSH1 0x01
00000774: DUP4
00000775: PUSH1 0x20
00000777: SUB
00000778: PUSH2 0x0100
0000077b: EXP
0000077c: SUB
0000077d: NOT
0000077e: AND
0000077f: DUP2
00000780: MSTORE
00000781: PUSH1 0x20
00000783: ADD
00000784: SWAP2
00000785: POP
00000786: JUMPDEST
00000787: POP
00000788: SWAP6
00000789: POP
0000078a: POP
0000078b: POP
0000078c: POP
0000078d: POP
0000078e: POP
0000078f: PUSH1 0x20
00000791: PUSH1 0x40
00000793: MLOAD
00000794: DUP1
00000795: DUP4
00000796: SUB
00000797: DUP2
00000798: DUP6
00000799: DUP9
0000079a: PUSH2 0x8502
0000079d: GAS
0000079e: SUB
0000079f: CALL
000007a0: ISZERO
000007a1: PUSH2 0x0002
000007a4: JUMPI
000007a5: POP
000007a6: POP
000007a7: PUSH1 0x40
000007a9: MLOAD
000007aa: MLOAD
000007ab: SWAP5
000007ac: POP
000007ad: PUSH2 0x0687
000007b0: SWAP3
000007b1: POP
000007b2: POP
000007b3: POP
000007b4: JUMP
000007b5: JUMPDEST
000007b6: POP
000007b7: PUSH1 0x00
000007b9: JUMPDEST
000007ba: SWAP2
000007bb: SWAP1
000007bc: POP
000007bd: JUMP
000007be: JUMPDEST
000007bf: GT
000007c0: ISZERO
000007c1: PUSH2 0x07f2
000007c4: JUMPI
000007c5: POP
000007c6: PUSH1 0x00
000007c8: DUP1
000007c9: SLOAD
000007ca: PUSH1 0x01
000007cc: PUSH1 0xa0
000007ce: PUSH1 0x02
000007d0: EXP
000007d1: SUB
000007d2: NOT
000007d3: AND
000007d4: PUSH20 0x1d11e5eae3112dbd44f99266872ff1d07c77dce8
000007e9: OR
000007ea: SWAP1
000007eb: SSTORE
000007ec: PUSH1 0x01
000007ee: PUSH2 0x07b9
000007f1: JUMP
000007f2: JUMPDEST
000007f3: PUSH1 0x00
000007f5: PUSH2 0x0811
000007f8: PUSH20 0x9efbea6358bed926b293d2ce63a730d6d98d43dd
0000080d: PUSH2 0x014b
00000810: JUMP
00000811: JUMPDEST
00000812: GT
00000813: ISZERO
00000814: PUSH2 0x0847
00000817: JUMPI
00000818: POP
00000819: PUSH1 0x00
0000081b: DUP1
0000081c: SLOAD
0000081d: PUSH20 0x9efbea6358bed926b293d2ce63a730d6d98d43dd
00000832: PUSH1 0x01
00000834: PUSH1 0xa0
00000836: PUSH1 0x02
00000838: EXP
00000839: SUB
0000083a: NOT
0000083b: SWAP1
0000083c: SWAP2
0000083d: AND
0000083e: OR
0000083f: SWAP1
00000840: SSTORE
00000841: PUSH1 0x01
00000843: PUSH2 0x07b9
00000846: JUMP
00000847: JUMPDEST
00000848: PUSH1 0x00
0000084a: PUSH2 0x0866
0000084d: PUSH20 0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf
00000862: PUSH2 0x014b
00000865: JUMP
00000866: JUMPDEST
00000867: GT
00000868: ISZERO
00000869: PUSH2 0x07b5
0000086c: JUMPI
0000086d: POP
0000086e: PUSH1 0x00
00000870: DUP1
00000871: SLOAD
00000872: PUSH20 0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf
00000887: PUSH1 0x01
00000889: PUSH1 0xa0
0000088b: PUSH1 0x02
0000088d: EXP
0000088e: SUB
0000088f: NOT
00000890: SWAP1
00000891: SWAP2
00000892: AND
00000893: OR
00000894: SWAP1
00000895: SSTORE
00000896: PUSH1 0x01
00000898: PUSH2 0x07b9
0000089b: JUMP
View stderr
Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment.

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high other detector Untrusted CALL target/value reachable 60 yes yes
view
trace_id: 0xa610ea7ab559e7dcce75486dcb3f321a203ad3c967f254df8a60d1db8186a1f5
call_targets: 0x1d11e5eae3112dbd44f99266872ff1d07c77dce8, 0x6f28b146804dba2d6f944c03528a8fdbc673df2c, 0xcad333e2f7ec4058aa5ba825a5de8af4139490c9
target_varies: yes
classification: target_varies
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "confirmed",
    "attempts": 1,
    "trace_id": "0xa610ea7ab559e7dcce75486dcb3f321a203ad3c967f254df8a60d1db8186a1f5",
    "confirmed": true,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x1d11e5eae3112dbd44f99266872ff1d07c77dce8",
        "0x6f28b146804dba2d6f944c03528a8fdbc673df2c",
        "0xcad333e2f7ec4058aa5ba825a5de8af4139490c9"
    ],
    "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": "0x38bbfa50",
            "selector": "0x38bbfa50",
            "calldata_variants": [
                "0x38bbfa50",
                "0x38bbfa500000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x41c0e1b5",
            "selector": "0x41c0e1b5",
            "calldata_variants": [
                "0x41c0e1b5",
                "0x41c0e1b50000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa2e62045",
            "selector": "0xa2e62045",
            "calldata_variants": [
                "0xa2e62045",
                "0xa2e620450000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb7764475",
            "selector": "0xb7764475",
            "calldata_variants": [
                "0xb7764475",
                "0xb77644750000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 265,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 629,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 820,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 11,
    "guards_detected": [],
    "untrusted_call_count": 11
}
high other detector ETH value transfer possible 55 yes yes
view
trace_id: 0xa610ea7ab559e7dcce75486dcb3f321a203ad3c967f254df8a60d1db8186a1f5
call_targets: 0x1d11e5eae3112dbd44f99266872ff1d07c77dce8, 0x6f28b146804dba2d6f944c03528a8fdbc673df2c, 0xcad333e2f7ec4058aa5ba825a5de8af4139490c9
target_varies: yes
classification: target_varies
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "confirmed",
    "attempts": 1,
    "trace_id": "0xa610ea7ab559e7dcce75486dcb3f321a203ad3c967f254df8a60d1db8186a1f5",
    "confirmed": true,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x1d11e5eae3112dbd44f99266872ff1d07c77dce8",
        "0x6f28b146804dba2d6f944c03528a8fdbc673df2c",
        "0xcad333e2f7ec4058aa5ba825a5de8af4139490c9"
    ],
    "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": "0x38bbfa50",
            "selector": "0x38bbfa50",
            "calldata_variants": [
                "0x38bbfa50",
                "0x38bbfa500000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x41c0e1b5",
            "selector": "0x41c0e1b5",
            "calldata_variants": [
                "0x41c0e1b5",
                "0x41c0e1b50000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa2e62045",
            "selector": "0xa2e62045",
            "calldata_variants": [
                "0xa2e62045",
                "0xa2e620450000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb7764475",
            "selector": "0xb7764475",
            "calldata_variants": [
                "0xb7764475",
                "0xb77644750000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 265,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 629,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 820,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 11,
    "guards_detected": []
}
high other detector SELFDESTRUCT reachable 65 no no
view
trace_id: 0x15f197da33be53f322e49b04a4d543d589a4f2ad2e4c3695dc2468ea867783b3
validation_json
{
    "sink": "SELFDESTRUCT",
    "errors": 0,
    "status": "unknown",
    "attempts": 8,
    "trace_id": "0x15f197da33be53f322e49b04a4d543d589a4f2ad2e4c3695dc2468ea867783b3",
    "confirmed": false,
    "trace_mode": "structLogs",
    "call_targets": null,
    "matched_probe": null,
    "target_varies": null,
    "classification": "no_sink"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0x38bbfa50",
            "selector": "0x38bbfa50",
            "calldata_variants": [
                "0x38bbfa50",
                "0x38bbfa500000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x41c0e1b5",
            "selector": "0x41c0e1b5",
            "calldata_variants": [
                "0x41c0e1b5",
                "0x41c0e1b50000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa2e62045",
            "selector": "0xa2e62045",
            "calldata_variants": [
                "0xa2e62045",
                "0xa2e620450000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xb7764475",
            "selector": "0xb7764475",
            "calldata_variants": [
                "0xb7764475",
                "0xb77644750000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "guards_detected": [],
    "selfdestruct_count": 1
}
medium oracle codex Oracle callback accepts any authorized sender response without validating a pending query id 75 no
view
evidence_json
{
    "evidence": "Selector `0x38bbfa50` matches `__callback(bytes32,string,bytes)`. The callback path decodes three arguments, then at `pc:0x036c` checks only that `CALLER` matches the resolved oracle address before entering the string-storage routine at `pc:0x038b`. The public oracle-query path at `selector:0xa2e62045` performs `query(uint256,string,string)` via selector `0xadf59f99` at `pc:0x0703`, but the returned request id is not written to storage; storage writes are limited to slots 0/1/3 and dynamic string data.",
    "locations": [
        "selector:0x38bbfa50",
        "selector:0xa2e62045",
        "pc:0x036c",
        "pc:0x0703"
    ],
    "recommendation": "Persist the returned query id from the query call and require `_queryId` to match an expected pending id before accepting callback data. If multiple requests are allowed, track them explicitly and clear them after use.",
    "exploit_scenario": "An attacker can trigger multiple outstanding oracle updates through the public query path. Because the callback appears to authenticate only the oracle sender and not the `bytes32` request id, a stale or later oracle reply can overwrite the currently stored result in slot 3. If the oracle/resolver side is ever misconfigured or compromised, arbitrary callback data would be accepted as long as it comes from the resolved oracle address."
}
medium access_control codex Public `update()` path can spend ETH from contract balance on oracle queries 75 no
view
evidence_json
{
    "evidence": "Selector `0xa2e62045` resolves to a public `update()` entrypoint. Its body builds a fixed Kraken URL query, calls the oracle pricing path (`getPrice(...)`) around `pc:0x065c`, and then performs the actual oracle query call at `pc:0x0703`. The artifact reports no auth guards for this function, and detector validation confirmed reachable `CALL` sites with possible nonzero ETH value and varying external targets. There is no visible `CALLVALUE`-based accounting or owner check in runtime bytecode.",
    "locations": [
        "selector:0xa2e62045",
        "pc:0x065c",
        "pc:0x0703"
    ],
    "recommendation": "Restrict the query-triggering function to an authorized operator, or require the caller to supply and account for the exact oracle fee so existing contract balance cannot be consumed by arbitrary users.",
    "exploit_scenario": "If this contract holds ETH to subsidize oracle usage, any external account can call the public update function and force the contract to pay oracle fees. Repeated calls can drain the balance into oracle payments or trigger unwanted offchain queries, even if the caller is not otherwise trusted."
}
low auth codex Privileged kill switch can sweep balance via `SELFDESTRUCT` 65 no
view
evidence_json
{
    "evidence": "Selector `0x41c0e1b5` matches `kill()`. At `pc:0x0155` the function reads slot 2, masks it to 160 bits, and compares it to `CALLER`. If equal, execution reaches `SELFDESTRUCT` at `pc:0x0174`, sending funds to the caller.",
    "locations": [
        "selector:0x41c0e1b5",
        "pc:0x0155",
        "pc:0x0174"
    ],
    "recommendation": "Remove the kill path if it is unnecessary, or gate it behind a multisig/timelock and document the administrative trust model clearly.",
    "exploit_scenario": "Whoever controls the address stored in slot 2 can invoke the kill function and force a terminal balance sweep to themselves. Even if this is intended admin functionality, compromise or abuse of that key breaks trust assumptions for funds held by the contract."
}