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

Analysis Run

019b3836-22ec-70fe-bb44-362659c898ea

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 0 direct contract
Review Checklist
1. Read the findings table first. Ignore raw jobs until the result looks real.
2. Confirm attacker control, not just the existence of a sink.
3. Confirm money or privilege impact.
4. Keep it if the behavior is real. Kill it if this is normal proxy, admin, or upgrade plumbing.

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
377 artifact.fetch complete 1 / 3 3 months ago
378 tool.cast_disasm complete 1 / 3 3 months ago
43739 analysis.bundle complete 1 / 3 1 week ago
43740 capability.graph complete 1 / 3 1 week ago
43741 detector.run complete 1 / 3 1 week ago
43742 validation.fork complete 1 / 3 1 week ago
102187 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
2
No findings?
no
Summary
Bytecode-only review found meaningful unchecked ETH-transfer risks. The main payout path uses fixed-gas CALLs to computed recipient addresses, ignores the success flag, and then clears storage-backed entitlement state; this can silently burn payouts or desynchronize accounting when a recipient is a contract or intentionally reverts. A second, lower-confidence issue exists in the overpayment/refund branch, which also ignores refund failure and appears to return a sentinel value instead of reverting, potentially trapping excess ETH.
View stdout
{"no_findings":false,"summary":"Bytecode-only review found meaningful unchecked ETH-transfer risks. The main payout path uses fixed-gas CALLs to computed recipient addresses, ignores the success flag, and then clears storage-backed entitlement state; this can silently burn payouts or desynchronize accounting when a recipient is a contract or intentionally reverts. A second, lower-confidence issue exists in the overpayment/refund branch, which also ignores refund failure and appears to return a sentinel value instead of reverting, potentially trapping excess ETH.","findings":[{"severity":"medium","category":"other","title":"Unchecked fixed-gas payout CALLs can fail silently while entitlement state is cleared","exploit_scenario":"In the best-effort selector path at `0xf2e497ae`, payouts are sent to computed storage-derived addresses. If one of those recipients is a contract wallet, has a reverting `receive`/fallback, or simply needs more than the hard-coded 5000 gas stipend, the CALL can fail. The bytecode then continues, and later zeroes multiple storage slots associated with the same account/round, so the recipient can lose their claim while the ETH remains in the contract.","recommendation":"Do not ignore CALL results on value transfers. Revert on failed payouts, or convert this logic to a pull-payment model that records unpaid balances for later withdrawal. Avoid fixed 5000-gas value pushes unless contract recipients are intentionally unsupported and that restriction is enforced/documented.","evidence":"At `pc:0x82d` and `pc:0x89c`, the contract performs `CALL` after pushing gas `0x1388` (5000). The success bit is immediately discarded with `POP` at the next instruction (`pc:0x82e` / `pc:0x89d`). After the later payout path, the bytecode emits an event and clears storage with `SSTORE` at `pc:0x8e5`, `pc:0x8f3`, `pc:0x901`, `pc:0x932`, `pc:0x951`, `pc:0x960`, `pc:0x96f`, `pc:0x97e`, `pc:0x98d`, and `pc:0x9cf`. Slot names are unknown from bytecode, but the sequence is consistent with state cleanup after unverified external value transfers.","locations":["selector:0xf2e497ae","pc:0x82d","pc:0x89c","pc:0x8e5","pc:0x932","pc:0x9cf"]},{"severity":"low","category":"other","title":"Overpayment refund branch ignores refund failure and appears to leave excess ETH trapped","exploit_scenario":"In the payable entry selector `0x5a9809ed`, an overpayment branch sends `msg.value` back to `msg.sender` with a raw CALL. If the caller is a contract that rejects ETH or needs more gas than provided, that refund can fail silently. The function then returns a sentinel value instead of reverting, so the excess ETH may remain stuck in the contract with no visible recovery path in the bytecode.","recommendation":"Treat refund failure as a hard failure and revert, or store refundable balances and require users to withdraw explicitly. Avoid push-style refunds to arbitrary callers when failure is ignored.","evidence":"The branch at `pc:0x6e`-`pc:0x74` compares a calldata-derived amount against `CALLVALUE` and jumps into the refund path. The refund itself occurs at `pc:0x82` via `CALL` to `CALLER` with `CALLVALUE`; the return status is discarded by `POP` at `pc:0x83`, and the function returns a sentinel all-ones value through `pc:0x84`-`pc:0x92` instead of reverting. Because this is bytecode-only analysis, selector semantics are uncertain, but the unchecked refund pattern is explicit.","locations":["selector:0x5a9809ed","pc:0x6e","pc:0x82","pc:0x83"]}]}
View stderr
OpenAI Codex v0.118.0 (research preview)
--------
workdir: /tmp/codex-728_ya93
model: gpt-5.4
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: none
session id: 019d5b2d-b24a-7c63-873d-d77ead4028ab
--------
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 "pwd && rg --files -g 'BYTECODE_BUNDLE.json' -g 'AGENTS.md' -g '*.json'" in /tmp/codex-728_ya93
 succeeded in 0ms:
/tmp/codex-728_ya93
codex-output-schema.json
BYTECODE_BUNDLE.json

exec
/bin/bash -lc "sed -n '1,260p' BYTECODE_BUNDLE.json" in /tmp/codex-728_ya93
 succeeded in 0ms:
{
  "analysis_artifact": {
    "address": "0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8",
    "artifact_hash": "0xd2a403fdc71e331e4afdc99378557bfeec5f7b924211662e7cca390cfaf90ed4",
    "artifact_json": {
      "auth": {
        "guards": [
          {
            "pc": 1453,
            "type": "msg_sender_eq_storage"
          },
          {
            "pc": 1535,
            "type": "msg_sender_eq_storage"
          },
          {
            "pc": 1582,
            "type": "msg_sender_eq_storage"
          }
        ]
      },
      "basic_blocks": [
        {
          "end_pc": 51,
          "hash": "0x5723e7b581a74915e4bb870d0de7cef828473daa28271a75e0901edf45dba1f4",
          "opcodes": [
            "PUSH1",
            "PUSH2",
            "MSTORE8",
            "PUSH29",
            "PUSH1",
            "CALLDATALOAD",
            "DIV",
            "PUSH4",
            "OP_81",
            "EQ",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 0
        },
        {
          "end_pc": 116,
          "hash": "0xc64afa52a6ed8bede3d748810a7ce462e4981d12064d05e580e91fca3c57f64e",
          "opcodes": [
            "CALLDATASIZE",
            "MSIZE",
            "OP_90",
            "MSIZE",
            "ADD",
            "PUSH1",
            "OP_90",
            "MSTORE",
            "CALLDATASIZE",
            "PUSH1",
            "OP_82",
            "CALLDATACOPY",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "OP_82",
            "ADD",
            "ADD",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "OP_82",
            "ADD",
            "ADD",
            "PUSH1",
            "MSTORE",
            "POP",
            "PUSH1",
            "MLOAD",
            "CALLVALUE",
            "SLT",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 52
        },
        {
          "end_pc": 146,
          "hash": "0x95d0c443df0c99f8a354fb812005646077227c41ffc97c4664d745bfc7492010",
          "opcodes": [
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "CALLVALUE",
            "CALLER",
            "PUSH2",
            "CALL",
            "POP",
            "PUSH1",
            "PUSH1",
            "SUB",
            "PUSH2",
            "MSTORE",
            "PUSH1",
            "PUSH2",
            "RETURN"
          ],
          "start_pc": 117
        },
        {
          "end_pc": 218,
          "hash": "0xb9ce58bbe35e398f5c2229dc30c044b46aaa7239b0fb94f3c9bb027c4002249b",
          "opcodes": [
            "JUMPDEST",
            "PUSH15",
            "SLOAD",
            "PUSH2",
            "MSTORE",
            "PUSH1",
            "MLOAD",
            "CALLVALUE",
            "SUB",
            "PUSH2",
            "PUSH2",
            "MLOAD",
            "MUL",
            "SSTORE",
            "PUSH1",
            "MLOAD",
            "PUSH2",
            "PUSH2",
            "MLOAD",
            "MUL",
            "PUSH1",
            "ADD",
            "SSTORE",
            "PUSH1",
            "MLOAD",
            "PUSH2",
            "PUSH2",
            "MLOAD",
            "MUL",
            "PUSH1",
            "ADD",
            "SSTORE",
            "PUSH1",
            "PUSH2",
            "MSTORE"
          ],
          "start_pc": 147
        },
        {
          "end_pc": 236,
          "hash": "0x995d1a31fd400d8af3a2d04aceb99954c5bd7a6681dde9f2c81ec11ed124e370",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "MLOAD",
            "SUB",
            "MLOAD",
            "PUSH2",
            "MLOAD",
            "SLT",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 219
        },
        {
          "end_pc": 347,
          "hash": "0x3e990b6c38dc198ae8495684638192469132e758e31727ee2aef2318d12cb651",
          "opcodes": [
            "PUSH2",
            "MLOAD",
            "PUSH1",
            "MUL",
            "PUSH1",
            "MLOAD",
            "ADD",
            "MLOAD",
            "PUSH2",
            "MLOAD",
            "PUSH2",
            "PUSH2",
            "MLOAD",
            "MUL",
            "PUSH1",
            "ADD",
            "ADD",
            "SSTORE",
            "PUSH1",
            "PUSH1",
            "MSIZE",
            "OP_90",
            "MSIZE",
            "ADD",
            "PUSH1",
            "OP_90",
            "MSTORE",
            "ADD",
            "PUSH2",
            "MLOAD",
            "PUSH1",
            "MUL",
            "PUSH1",
            "MLOAD",
            "ADD",
            "MLOAD",
            "PUSH2",
            "MLOAD",
            "PUSH32",
            "PUSH1",
            "OP_84",
            "OP_A3",
            "POP",
            "PUSH1",
            "PUSH2",
            "MLOAD",
            "ADD",
            "PUSH2",
            "MSTORE",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 237
        },
        {
          "end_pc": 410,
          "hash": "0x4f5fe04325200d70b49280d95a20c5c825946d7dd27bd922b0f3729ac923e317",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "MLOAD",
            "SUB",
            "MLOAD",
            "PUSH2",
            "PUSH2",
            "MLOAD",
            "MUL",
            "PUSH2",
            "ADD",
            "SSTORE",
            "PUSH1",
            "MLOAD",
            "PUSH2",

exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json | keys' BYTECODE_BUNDLE.json" in /tmp/codex-728_ya93
 succeeded in 0ms:
[
  "auth",
  "basic_blocks",
  "callsites",
  "cfg_edges",
  "cfg_hash",
  "dispatcher_type",
  "function_entries",
  "functions",
  "selectors",
  "sinks",
  "storage",
  "version"
]

exec
/bin/bash -lc "jq 'keys' BYTECODE_BUNDLE.json" in /tmp/codex-728_ya93
 succeeded in 0ms:
[
  "analysis_artifact",
  "analysis_run",
  "artifact",
  "capability_graph",
  "detector_findings",
  "heuristics_summary"
]

exec
/bin/bash -lc "jq '{analysis_run, heuristics_summary, detector_findings}' BYTECODE_BUNDLE.json" in /tmp/codex-728_ya93
 succeeded in 0ms:
{
  "analysis_run": {
    "address": "0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8",
    "block_number": null,
    "chain_id": 1,
    "child_links": [],
    "created_at": "2025-12-19T20:03:50.000000Z",
    "id": "019b3836-22ec-70fe-bb44-362659c898ea",
    "parent_links": [],
    "status": "running",
    "updated_at": "2026-04-04T19:45:51.000000Z"
  },
  "heuristics_summary": {
    "create2_count": 0,
    "delegatecall_count": 0,
    "flags": [],
    "selfdestruct_count": 0
  },
  "detector_findings": [
    {
      "confidence": 45,
      "evidence_json": {
        "call_count": 6,
        "examples": [
          {
            "opcode": "CALL",
            "pc": 652,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "constant"
          },
          {
            "opcode": "CALL",
            "pc": 691,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          },
          {
            "opcode": "CALL",
            "pc": 731,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          }
        ],
        "guards_detected": [
          {
            "pc": 1453,
            "type": "msg_sender_eq_storage"
          },
          {
            "pc": 1535,
            "type": "msg_sender_eq_storage"
          },
          {
            "pc": 1582,
            "type": "msg_sender_eq_storage"
          }
        ],
        "untrusted_call_count": 3
      },
      "normalized_json": {
        "sink": "CALL"
      },
      "severity": "medium",
      "title": "Untrusted CALL target/value reachable",
      "validated": true,
      "validation_json": {
        "attempts": 1,
        "call_targets": [
          "0x0000000000000000000000000000000000000004",
          "0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8"
        ],
        "classification": "target_varies",
        "confirmed": true,
        "errors": 0,
        "matched_probe": null,
        "sink": "CALL",
        "status": "confirmed",
        "target_varies": true,
        "trace_id": "0x3b0a391c422c78338b0f0787124bdb437bd53db775c371d87fbbdcb63c23b604",
        "trace_mode": "callTracer"
      }
    },
    {
      "confidence": 40,
      "evidence_json": {
        "eth_value_calls": 3,
        "examples": [
          {
            "opcode": "CALL",
            "pc": 652,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "constant"
          },
          {
            "opcode": "CALL",
            "pc": 691,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          },
          {
            "opcode": "CALL",
            "pc": 731,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          }
        ],
        "guards_detected": [
          {
            "pc": 1453,
            "type": "msg_sender_eq_storage"
          },
          {
            "pc": 1535,
            "type": "msg_sender_eq_storage"
          },
          {
            "pc": 1582,
            "type": "msg_sender_eq_storage"
          }
        ]
      },
      "normalized_json": {
        "sink": "CALL",
        "value": "nonzero"
      },
      "severity": "medium",
      "title": "ETH value transfer possible",
      "validated": true,
      "validation_json": {
        "attempts": 1,
        "call_targets": [
          "0x0000000000000000000000000000000000000004",
          "0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8"
        ],
        "classification": "target_varies",
        "confirmed": true,
        "errors": 0,
        "matched_probe": null,
        "sink": "CALL",
        "status": "confirmed",
        "target_varies": true,
        "trace_id": "0x3b0a391c422c78338b0f0787124bdb437bd53db775c371d87fbbdcb63c23b604",
        "trace_mode": "callTracer"
      }
    }
  ]
}

exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.selectors' BYTECODE_BUNDLE.json" in /tmp/codex-728_ya93
 succeeded in 0ms:
[
  "0x5a9809ed",
  "0xd5f39e24",
  "0xa11af387",
  "0x7b0ae934",
  "0xd966f799",
  "0x3cd86b77",
  "0x8f26e0fe",
  "0xf2e497ae"
]

exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.function_entries' BYTECODE_BUNDLE.json" in /tmp/codex-728_ya93
 succeeded in 0ms:
[
  {
    "entry_pc": null,
    "selector": "0x5a9809ed"
  },
  {
    "entry_pc": null,
    "selector": "0xd5f39e24"
  },
  {
    "entry_pc": null,
    "selector": "0xa11af387"
  },
  {
    "entry_pc": null,
    "selector": "0x7b0ae934"
  },
  {
    "entry_pc": null,
    "selector": "0xd966f799"
  },
  {
    "entry_pc": null,
    "selector": "0x3cd86b77"
  },
  {
    "entry_pc": null,
    "selector": "0x8f26e0fe"
  },
  {
    "entry_pc": null,
    "selector": "0xf2e497ae"
  }
]

exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.callsites' BYTECODE_BUNDLE.json" in /tmp/codex-728_ya93
 succeeded in 0ms:
[
  {
    "opcode": "CALL",
    "pc": 130,
    "returndata_checked": null,
    "target_expression_category": "constant",
    "value_expression_category": "constant_zero"
  },
  {
    "opcode": "CALL",
    "pc": 652,
    "returndata_checked": null,
    "target_expression_category": "computed",
    "value_expression_category": "constant"
  },
  {
    "opcode": "CALL",
    "pc": 691,
    "returndata_checked": null,
    "target_expression_category": "computed",
    "value_expression_category": "computed"
  },
  {
    "opcode": "CALL",
    "pc": 731,
    "returndata_checked": null,
    "target_expression_category": "computed",
    "value_expression_category": "computed"
  },
  {
    "opcode": "CALL",
    "pc": 2093,
    "returndata_checked": null,
    "target_expression_category": "constant",
    "value_expression_category": "constant_zero"
  },
  {
    "opcode": "CALL",
    "pc": 2204,
    "returndata_checked": null,
    "target_expression_category": "constant",
    "value_expression_category": "constant_zero"
  }
]

exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.storage' BYTECODE_BUNDLE.json" in /tmp/codex-728_ya93
 succeeded in 0ms:
{
  "keccak_count": 0,
  "reads": 34,
  "slots": [
    {
      "op": "SLOAD",
      "pc": 164,
      "slot": "0x0000000000000000000000000000000000027220000000000000000000000000"
    },
    {
      "op": "SSTORE",
      "pc": 197,
      "slot": "0x0000000000000000000000000000000000000000000000000000000000000060"
    },
    {
      "op": "SSTORE",
      "pc": 212,
      "slot": "0x0000000000000000000000000000000000000000000000000000000000000080"
    },
    {
      "op": "SSTORE",
      "pc": 384,
      "slot": "0x00000000000000000000000000000000000000000000000000000000000000c0"
    },
    {
      "op": "SLOAD",
      "pc": 1343,
      "slot": "0x0000000000000000000000000000000000027220000000000000000000000000"
    },
    {
      "op": "SSTORE",
      "pc": 2277,
      "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
    },
    {
      "op": "SSTORE",
      "pc": 2291,
      "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
    },
    {
      "op": "SSTORE",
      "pc": 2305,
      "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
    },
    {
      "op": "SSTORE",
      "pc": 2354,
      "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
    },
    {
      "op": "SSTORE",
      "pc": 2385,
      "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
    },
    {
      "op": "SSTORE",
      "pc": 2400,
      "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
    },
    {
      "op": "SSTORE",
      "pc": 2415,
      "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
    },
    {
      "op": "SSTORE",
      "pc": 2430,
      "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
    },
    {
      "op": "SSTORE",
      "pc": 2445,
      "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
    },
    {
      "op": "SSTORE",
      "pc": 2511,
      "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
    }
  ],
  "writes": 22
}

exec
/bin/bash -lc "jq '.artifact | keys' BYTECODE_BUNDLE.json" in /tmp/codex-728_ya93
 succeeded in 0ms:
[
  "codehash",
  "compiler_json",
  "implementation_address",
  "is_proxy",
  "runtime_bytecode",
  "verified_source"
]

exec
/bin/bash -lc "jq '.capability_graph' BYTECODE_BUNDLE.json" in /tmp/codex-728_ya93
 succeeded in 0ms:
{
  "address": "0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8",
  "block_number": null,
  "chain_id": 1,
  "codehash": "0x06e903f07f386313bdba0219bcb54efb28e6665f749fca5175eda524771cb2e7",
  "created_at": "2026-04-04T19:45:51.000000Z",
  "graph_hash": "0x509f47bb336e6e7fae48949762d31f9d051456fc385e64cf541e807f198a56a6",
  "graph_json": {
    "edges": [
      {
        "from": "bb:0",
        "to": "bb:812",
        "type": "control_flow"
      },
      {
        "from": "bb:0",
        "to": "bb:52",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:52",
        "to": "bb:147",
        "type": "control_flow"
      },
      {
        "from": "bb:52",
        "to": "bb:117",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:147",
        "to": "bb:219",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:219",
        "to": "bb:348",
        "type": "control_flow"
      },
      {
        "from": "bb:219",
        "to": "bb:237",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:237",
        "to": "bb:219",
        "type": "control_flow"
      },
      {
        "from": "bb:348",
        "to": "bb:411",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:411",
        "to": "bb:480",
        "type": "control_flow"
      },
      {
        "from": "bb:411",
        "to": "bb:432",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:432",
        "to": "bb:411",
        "type": "control_flow"
      },
      {
        "from": "bb:480",
        "to": "bb:658",
        "type": "control_flow"
      },
      {
        "from": "bb:480",
        "to": "bb:657",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:658",
        "to": "bb:697",
        "type": "control_flow"
      },
      {
        "from": "bb:658",
        "to": "bb:696",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:697",
        "to": "bb:737",
        "type": "control_flow"
      },
      {
        "from": "bb:697",
        "to": "bb:736",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:812",
        "to": "bb:851",
        "type": "control_flow"
      },
      {
        "from": "bb:812",
        "to": "bb:825",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:851",
        "to": "bb:949",
        "type": "control_flow"
      },
      {
        "from": "bb:851",
        "to": "bb:864",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:948",
        "to": "bb:949",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:949",
        "to": "bb:1103",
        "type": "control_flow"
      },
      {
        "from": "bb:949",
        "to": "bb:962",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:962",
        "to": "bb:1007",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1007",
        "to": "bb:1071",
        "type": "control_flow"
      },
      {
        "from": "bb:1007",
        "to": "bb:1023",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1023",
        "to": "bb:1007",
        "type": "control_flow"
      },
      {
        "from": "bb:1102",
        "to": "bb:1103",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1103",
        "to": "bb:1146",
        "type": "control_flow"
      },
      {
        "from": "bb:1103",
        "to": "bb:1116",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1146",
        "to": "bb:1314",
        "type": "control_flow"
      },
      {
        "from": "bb:1146",
        "to": "bb:1159",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1159",
        "to": "bb:1205",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1205",
        "to": "bb:1276",
        "type": "control_flow"
      },
      {
        "from": "bb:1205",
        "to": "bb:1224",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1224",
        "to": "bb:1205",
        "type": "control_flow"
      },
      {
        "from": "bb:1313",
        "to": "bb:1314",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1314",
        "to": "bb:1354",
        "type": "control_flow"
      },
      {
        "from": "bb:1314",
        "to": "bb:1327",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1354",
        "to": "bb:2542",
        "type": "control_flow"
      },
      {
        "from": "bb:1354",
        "to": "bb:1367",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1367",
        "to": "bb:1411",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1411",
        "to": "bb:1521",
        "type": "control_flow"
      },
      {
        "from": "bb:1411",
        "to": "bb:1435",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1435",
        "to": "bb:1505",
        "type": "control_flow"
      },
      {
        "from": "bb:1435",
        "to": "bb:1459",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1459",
        "to": "bb:1504",
        "type": "control_flow"
      },
      {
        "from": "bb:1459",
        "to": "bb:1496",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1496",
        "to": "bb:1504",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1504",
        "to": "bb:1505",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1505",
        "to": "bb:1411",
        "type": "control_flow"
      },
      {
        "from": "bb:1521",
        "to": "bb:1552",
        "type": "control_flow"
      },
      {
        "from": "bb:1521",
        "to": "bb:1541",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1541",
        "to": "bb:1555",
        "type": "control_flow"
      },
      {
        "from": "bb:1552",
        "to": "bb:1555",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1555",
        "to": "bb:1568",
        "type": "control_flow"
      },
      {
        "from": "bb:1555",
        "to": "bb:1561",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1561",
        "to": "bb:1568",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1568",
        "to": "bb:1599",
        "type": "control_flow"
      },
      {
        "from": "bb:1568",
        "to": "bb:1588",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1588",
        "to": "bb:1602",
        "type": "control_flow"
      },
      {
        "from": "bb:1599",
        "to": "bb:1602",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1602",
        "to": "bb:1615",
        "type": "control_flow"
      },
      {
        "from": "bb:1602",
        "to": "bb:1608",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1608",
        "to": "bb:1615",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1615",
        "to": "bb:1643",
        "type": "control_flow"
      },
      {
        "from": "bb:1615",
        "to": "bb:1631",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1643",
        "to": "bb:1918",
        "type": "control_flow"
      },
      {
        "from": "bb:1643",
        "to": "bb:1757",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1757",
        "to": "bb:1841",
        "type": "control_flow"
      },
      {
        "from": "bb:1757",
        "to": "bb:1766",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1766",
        "to": "bb:1836",
        "type": "control_flow"
      },
      {
        "from": "bb:1766",
        "to": "bb:1830",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1830",
        "to": "bb:1836",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1836",
        "to": "bb:1913",
        "type": "control_flow"
      },
      {
        "from": "bb:1841",
        "to": "bb:1912",
        "type": "control_flow"
      },
      {
        "from": "bb:1841",
        "to": "bb:1906",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1906",
        "to": "bb:1912",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1912",
        "to": "bb:1913",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1913",
        "to": "bb:1942",
        "type": "control_flow"
      },
      {
        "from": "bb:1918",
        "to": "bb:1934",
        "type": "control_flow"
      },
      {
        "from": "bb:1918",
        "to": "bb:1928",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1928",
        "to": "bb:1937",
        "type": "control_flow"
      },
      {
        "from": "bb:1934",
        "to": "bb:1937",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1937",
        "to": "bb:1942",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1942",
        "to": "bb:2529",
        "type": "control_flow"
      },
      {
        "from": "bb:1942",
        "to": "bb:1952",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:1952",
        "to": "bb:2011",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:2011",
        "to": "bb:2111",
        "type": "control_flow"
      },
      {
        "from": "bb:2011",
        "to": "bb:2035",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:2035",
        "to": "bb:2095",
        "type": "control_flow"
      },
      {
        "from": "bb:2035",
        "to": "bb:2061",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:2061",
        "to": "bb:2095",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:2095",
        "to": "bb:2011",
        "type": "control_flow"
      },
      {
        "from": "bb:2111",
        "to": "bb:2140",
        "type": "control_flow"
      },
      {
        "from": "bb:2111",
        "to": "bb:2124",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:2124",
        "to": "bb:2153",
        "type": "control_flow"
      },
      {
        "from": "bb:2140",
        "to": "bb:2153",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:2153",
        "to": "bb:2312",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:2312",
        "to": "bb:2370",
        "type": "control_flow"
      },
      {
        "from": "bb:2312",
        "to": "bb:2336",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:2336",
        "to": "bb:2312",
        "type": "control_flow"
      },
      {
        "from": "bb:2370",
        "to": "bb:2452",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:2452",
        "to": "bb:2528",
        "type": "control_flow"
      },
      {
        "from": "bb:2452",
        "to": "bb:2465",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:2465",
        "to": "bb:2512",
        "type": "control_flow"
      },
      {
        "from": "bb:2465",
        "to": "bb:2492",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:2492",
        "to": "bb:2512",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:2512",
        "to": "bb:2452",
        "type": "control_flow"
      },
      {
        "from": "bb:2528",
        "to": "bb:2529",
        "type": "control_flow_fallthrough"
      },
      {
        "from": "bb:117",
        "to": "call:130",
        "type": "contains"
      },
      {
        "from": "call:130",
        "to": "sink:call",
        "type": "capability"
      },
      {
        "from": "bb:480",
        "to": "call:652",
        "type": "contains"
      },
      {
        "from": "call:652",
        "to": "sink:call",
        "type": "capability"
      },
      {
        "from": "bb:658",
        "to": "call:691",
        "type": "contains"
      },
      {
        "from": "call:691",
        "to": "sink:call",
        "type": "capability"
      },
      {
        "from": "bb:697",
        "to": "call:731",
        "type": "contains"
      },
      {
        "from": "call:731",
        "to": "sink:call",
        "type": "capability"
      },
      {
        "from": "bb:2061",
        "to": "call:2093",
        "type": "contains"
      },
      {
        "from": "call:2093",
        "to": "sink:call",
        "type": "capability"
      },
      {
        "from": "bb:2153",
        "to": "call:2204",
        "type": "contains"
      },
      {
        "from": "call:2204",
        "to": "sink:call",
        "type": "capability"
      }
    ],
    "nodes": [
      {
        "end_pc": 51,
        "hash": "0x5723e7b581a74915e4bb870d0de7cef828473daa28271a75e0901edf45dba1f4",
        "id": "bb:0",
        "start_pc": 0,
        "type": "basic_block"
      },
      {
        "end_pc": 116,
        "hash": "0xc64afa52a6ed8bede3d748810a7ce462e4981d12064d05e580e91fca3c57f64e",
        "id": "bb:52",
        "start_pc": 52,
        "type": "basic_block"
      },
      {
        "end_pc": 146,
        "hash": "0x95d0c443df0c99f8a354fb812005646077227c41ffc97c4664d745bfc7492010",
        "id": "bb:117",
        "start_pc": 117,
        "type": "basic_block"
      },
      {
        "end_pc": 218,
        "hash": "0xb9ce58bbe35e398f5c2229dc30c044b46aaa7239b0fb94f3c9bb027c4002249b",
        "id": "bb:147",
        "start_pc": 147,
        "type": "basic_block"
      },
      {
        "end_pc": 236,
        "hash": "0x995d1a31fd400d8af3a2d04aceb99954c5bd7a6681dde9f2c81ec11ed124e370",
        "id": "bb:219",
        "start_pc": 219,
        "type": "basic_block"
      },
      {
        "end_pc": 347,
        "hash": "0x3e990b6c38dc198ae8495684638192469132e758e31727ee2aef2318d12cb651",
        "id": "bb:237",
        "start_pc": 237,
        "type": "basic_block"
      },
      {
        "end_pc": 410,
        "hash": "0x4f5fe04325200d70b49280d95a20c5c825946d7dd27bd922b0f3729ac923e317",
        "id": "bb:348",
        "start_pc": 348,
        "type": "basic_block"
      },
      {
        "end_pc": 431,
        "hash": "0xbb5eaa7d8ade37dfdbe2fd7fc17d1f46146c144d8a78ce12a3703db2924e4581",
        "id": "bb:411",
        "start_pc": 411,
        "type": "basic_block"
      },
      {
        "end_pc": 479,
        "hash": "0x8ce3febd87531c167b39638f21ff3277425467da4f9abeb9f8e71582433c17b2",
        "id": "bb:432",
        "start_pc": 432,
        "type": "basic_block"
      },
      {
        "end_pc": 656,
        "hash": "0xdc6cde18a506eb8fcca268f7dbd46f64cc981f13ceea8af6eb02d3b402a4ea3a",
        "id": "bb:480",
        "start_pc": 480,
        "type": "basic_block"
      },
      {
        "end_pc": 657,
        "hash": "0x3bfb78486b215386193bd29d00dbe4ac6b0cc2bb4333a925f2ffeeb14de05570",
        "id": "bb:657",
        "start_pc": 657,
        "type": "basic_block"
      },
      {
        "end_pc": 695,
        "hash": "0xa9dd62bb1a7afd457f24065aad81d2301267c39581238ecde5f642358d7e955b",
        "id": "bb:658",
        "start_pc": 658,
        "type": "basic_block"
      },
      {
        "end_pc": 696,
        "hash": "0xdec2f753288586d9e2ce2cd344f33f06fcf14bccb3208cceebacfc21dd4026f9",
        "id": "bb:696",
        "start_pc": 696,
        "type": "basic_block"
      },
      {
        "end_pc": 735,
        "hash": "0x8521eca7a6ee9c51f0f220f240e6ab0af81ff23e025699bba01827bd52c56284",
        "id": "bb:697",
        "start_pc": 697,
        "type": "basic_block"
      },
      {
        "end_pc": 736,
        "hash": "0x78b379482b810b0e2ed777c9e81b1a10f5bcc0b4527db810231d4b5ad42a71d6",
        "id": "bb:736",
        "start_pc": 736,
        "type": "basic_block"
      },
      {
        "end_pc": 811,
        "hash": "0xc70880fb03365c6bd80352c76c51a7d5e6e37db0b3dd8b4d6e6013aa1eb982ca",
        "id": "bb:737",
        "start_pc": 737,
        "type": "basic_block"
      },
      {
        "end_pc": 824,
        "hash": "0x46e7c7733ecb5418befbaa55330483d9fa2b50ebf3a842180e5daae87abee271",
        "id": "bb:812",
        "start_pc": 812,
        "type": "basic_block"
      },
      {
        "end_pc": 850,
        "hash": "0x2d36bfbb744e530c24d7278c75a29770a36639e23d42fafae7bc3bc9fe78e867",
        "id": "bb:825",
        "start_pc": 825,
        "type": "basic_block"
      },
      {
        "end_pc": 863,
        "hash": "0xd2bd1cf66a9f14b968652acb6f14b10449e5a0f14626d360c36513b0a3c6ada1",
        "id": "bb:851",
        "start_pc": 851,
        "type": "basic_block"
      },
      {
        "end_pc": 947,
        "hash": "0x069b40b273d1b688084652d5ee7fb91552c7bb0d4a46d99e69eb9a561151db5d",
        "id": "bb:864",
        "start_pc": 864,
        "type": "basic_block"
      },
      {
        "end_pc": 948,
        "hash": "0xbcc65cc92732a07883cb9111bde4c1fa5a6f371bf7dccf29ef65f0cbb4063e68",
        "id": "bb:948",
        "start_pc": 948,
        "type": "basic_block"
      },
      {
        "end_pc": 961,
        "hash": "0xba51cd9d0179eb293bf7c31b56b9e9b23895a653c3e3d044204ace2b8f1b9a79",
        "id": "bb:949",
        "start_pc": 949,
        "type": "basic_block"
      },
      {
        "end_pc": 1006,
        "hash": "0x0aeae1e0355e00ca3dc45c15921adb98c7049a27d94f4acfcd258c431b04846d",
        "id": "bb:962",
        "start_pc": 962,
        "type": "basic_block"
      },
      {
        "end_pc": 1022,
        "hash": "0xfb81baa1ccd845b16cb09169ca0973cf932576a0013c77c423a60af062911223",
        "id": "bb:1007",
        "start_pc": 1007,
        "type": "basic_block"
      },
      {
        "end_pc": 1070,
        "hash": "0xced929f1f813864818c1eb52a43224e774d0906e859f60343897eba7dcab87b9",
        "id": "bb:1023",
        "start_pc": 1023,
        "type": "basic_block"
      },
      {
        "end_pc": 1101,
        "hash": "0xac371ab0ac073e3c33c7337ec7cea7c46b1ccf013ba45a35ca39192519fbd147",
        "id": "bb:1071",
        "start_pc": 1071,
        "type": "basic_block"
      },
      {
        "end_pc": 1102,
        "hash": "0xfdb3064c6afbc844b1b59aa429f73fc8ca8bebb6dedcb8be354695e1cd608cc7",
        "id": "bb:1102",
        "start_pc": 1102,
        "type": "basic_block"
      },
      {
        "end_pc": 1115,
        "hash": "0x878c0ac6a1c54b02ef506a8d94ccae7536a94be422594b0b12a194aea0e9eb41",
        "id": "bb:1103",
        "start_pc": 1103,
        "type": "basic_block"
      },
      {
        "end_pc": 1145,
        "hash": "0x1ac9669ea15371da163d55ad1efc1794eadd4aac2e7c029edb29ff0040b1bb1b",
        "id": "bb:1116",
        "start_pc": 1116,
        "type": "basic_block"
      },
      {
        "end_pc": 1158,
        "hash": "0xee0450e91529a68bdfcda9bab942ec2a2bd885d3b07cb32733dfe91285167ea1",
        "id": "bb:1146",
        "start_pc": 1146,
        "type": "basic_block"
      },
      {
        "end_pc": 1204,
        "hash": "0xc3855da757179a9777c7376267eda3023b77a9fa1ddd88466a776f0bb3cd1dfa",
        "id": "bb:1159",
        "start_pc": 1159,
        "type": "basic_block"
      },
      {
        "end_pc": 1223,
        "hash": "0x98d99eb414bfe6e7f52d6571a3ad4cb79249f7c61db1e06485ce2b48603e552e",
        "id": "bb:1205",
        "start_pc": 1205,
        "type": "basic_block"
      },
      {
        "end_pc": 1275,
        "hash": "0x4e8d35feabba534bd714be260c1735d52eeb21bfeb54bf9ac5ec41097815be8e",
        "id": "bb:1224",
        "start_pc": 1224,
        "type": "basic_block"
      },
      {
        "end_pc": 1312,
        "hash": "0x41c11aed06fdfef02e3ae6e48b98599c9c16c27cf49afc2805f848859e93e3a2",
        "id": "bb:1276",
        "start_pc": 1276,
        "type": "basic_block"
      },
      {
        "end_pc": 1313,
        "hash": "0x322f08406cdb67a1dfad5403143175f427654f135688990e8a661f59182705f5",
        "id": "bb:1313",
        "start_pc": 1313,
        "type": "basic_block"
      },
      {
        "end_pc": 1326,
        "hash": "0xcd971c88892faf823ef6b0f464328baf11cd30375e5d8a0bdb7c5ae5395b21e9",
        "id": "bb:1314",
        "start_pc": 1314,
        "type": "basic_block"
      },
      {
        "end_pc": 1353,
        "hash": "0xc429efdb539523877e3ec082f9dce562e0cc73beba8b0a10f6b10e37a21c94da",
        "id": "bb:1327",
        "start_pc": 1327,
        "type": "basic_block"
      },
      {
        "end_pc": 1366,
        "hash": "0xbf93d4f2c0fc5a767d92b348f445be0892942316e6ae24f8d73540d67500bd2e",
        "id": "bb:1354",
        "start_pc": 1354,
        "type": "basic_block"
      },
      {
        "end_pc": 1410,
        "hash": "0xa243201e35e077b4f1d5d155568156b32911b16dc91e1469047a89c1c3d319b8",
        "id": "bb:1367",
        "start_pc": 1367,
        "type": "basic_block"
      },
      {
        "end_pc": 1434,
        "hash": "0x34cf6ddbf2ecde259e77fa3f68b4a4e9c439543593329bb556fc6c3ad4b9e44e",
        "id": "bb:1411",
        "start_pc": 1411,
        "type": "basic_block"
      },
      {
        "end_pc": 1458,
        "hash": "0x4070326fdf4c2d3b74e6b1c5b856b9463840245062c1ee85d2e020c7637ab667",
        "id": "bb:1435",
        "start_pc": 1435,
        "type": "basic_block"
      },
      {
        "end_pc": 1495,
        "hash": "0x6f695bc6cc3c204d49f1006db097756855af68512350430a62cdc3ed54894723",
        "id": "bb:1459",
        "start_pc": 1459,
        "type": "basic_block"
      },
      {
        "end_pc": 1503,
        "hash": "0xd79f80a8855e4dd6935e807b75f231c31c2ede67cb95bc066f775d9a611c26ba",
        "id": "bb:1496",
        "start_pc": 1496,
        "type": "basic_block"
      },
      {
        "end_pc": 1504,
        "hash": "0xf8a0f5a98beadf8f2f0b15991e3c49914b03898cd58375df58e028ecaed3aba6",
        "id": "bb:1504",
        "start_pc": 1504,
        "type": "basic_block"
      },
      {
        "end_pc": 1520,
        "hash": "0xe3891146d668a92d37a5f8956c1b68950adb4322cbd02abfcde926ed1743c456",
        "id": "bb:1505",
        "start_pc": 1505,
        "type": "basic_block"
      },
      {
        "end_pc": 1540,
        "hash": "0x034b682c8fca7f8e2e61544b4069ea970ead3010a413d7db9ad058dcef0a328d",
        "id": "bb:1521",
        "start_pc": 1521,
        "type": "basic_block"
      },
      {
        "end_pc": 1551,
        "hash": "0x70bf7a2e1418f90ed84439bf1f857f4cdc48f0a7ec5dc15676e7c6196ee7de9d",
        "id": "bb:1541",
        "start_pc": 1541,
        "type": "basic_block"
      },
      {
        "end_pc": 1553,
        "hash": "0x4843abda37db57888a978b8506e6099579af0460f1999a9afb2f3d0e6cfbcfa8",
        "id": "bb:1552",
        "start_pc": 1552,
        "type": "basic_block"
      },
      {
        "end_pc": 1560,
        "hash": "0x722f2a7cf63fd4078b19b4695c0994ca512afdb46d4e26bb3d4c6cfe225943e7",
        "id": "bb:1555",
        "start_pc": 1555,
        "type": "basic_block"
      },
      {
        "end_pc": 1567,
        "hash": "0xdea805b369cb267983325890728a0bc13c2e11b05ba9275fcfdcd36993106446",
        "id": "bb:1561",
        "start_pc": 1561,
        "type": "basic_block"
      },
      {
        "end_pc": 1587,
        "hash": "0xd4f9d07bfef67cef493f5adc5666626e006277fa6f31e4c509a02cdd7215b49d",
        "id": "bb:1568",
        "start_pc": 1568,
        "type": "basic_block"
      },
      {
        "end_pc": 1598,
        "hash": "0x565a7967da32dfa95a961771c3f1a97055cdca73994e49f52ad0a4d93183dfde",
        "id": "bb:1588",
        "start_pc": 1588,
        "type": "basic_block"
      },
      {
        "end_pc": 1600,
        "hash": "0xb42ee911e3b3470b89c1745396371117532b98187109774a0a0e9f5de704bae5",
        "id": "bb:1599",
        "start_pc": 1599,
        "type": "basic_block"
      },
      {
        "end_pc": 1607,
        "hash": "0x718387923d96916713451da1bcc9302fba604f39b801f4dfb2f73ef183aaa679",
        "id": "bb:1602",
        "start_pc": 1602,
        "type": "basic_block"
      },
      {
        "end_pc": 1614,
        "hash": "0x97d9d397e689432c8afa8181a70f2a9a4a1e2df73e90a6be434bbd981db77af3",
        "id": "bb:1608",
        "start_pc": 1608,
        "type": "basic_block"
      },
      {
        "end_pc": 1630,
        "hash": "0x87f91d1302ef3894f0ba69a8326fb08c8518be0367f901b9b33623acee3f65af",
        "id": "bb:1615",
        "start_pc": 1615,
        "type": "basic_block"
      },
      {
        "end_pc": 1642,
        "hash": "0x540b6864389e2a568c3fa6696f6fb977e3b96b21b011510b5700b9bf31e69619",
        "id": "bb:1631",
        "start_pc": 1631,
        "type": "basic_block"
      },
      {
        "end_pc": 1756,
        "hash": "0x4fd70c58ac628034d969f5545db2075a21dae2b7d6ef585cd531f2dd912de634",
        "id": "bb:1643",
        "start_pc": 1643,
        "type": "basic_block"
      },
      {
        "end_pc": 1765,
        "hash": "0xbbf1b53b9e59f3e87269964c734c9d9da5fa60e2ec8d5484ce40598e89067e0a",
        "id": "bb:1757",
        "start_pc": 1757,
        "type": "basic_block"
      },
      {
        "end_pc": 1829,
        "hash": "0xc4684678509ef8b7bcd2e9df853f4fec54e5914feac8c3bb4dfc9a815b551c2f",
        "id": "bb:1766",
        "start_pc": 1766,
        "type": "basic_block"
      },
      {
        "end_pc": 1835,
        "hash": "0x5310ad09bf805c4e419b645896601ed24c5919c0ea0601f2ea8f05b7081ed1fc",
        "id": "bb:1830",
        "start_pc": 1830,
        "type": "basic_block"
      },
      {
        "end_pc": 1840,
        "hash": "0x093b0046e8aa1a7047a0ee7e7a4db084b9ff3b7a4e05a7e35cfe22a90f761bf6",
        "id": "bb:1836",
        "start_pc": 1836,
        "type": "basic_block"
      },
      {
        "end_pc": 1905,
        "hash": "0xd5d1c69f1093459add85a328f8f65b1b6643834847b0a147738f59474ab067fe",
        "id": "bb:1841",
        "start_pc": 1841,
        "type": "basic_block"
      },
      {
        "end_pc": 1911,
        "hash": "0x6ae22c81a626dc8fd4729f09ddbdf37f933f9a3bef0888692118c6ede57ed4c2",
        "id": "bb:1906",
        "start_pc": 1906,
        "type": "basic_block"
      },
      {
        "end_pc": 1912,
        "hash": "0x34fe9165c95ab3aa838787d3e44f9b39525c1686c2cf3b2639691aabd2b8acf0",
        "id": "bb:1912",
        "start_pc": 1912,
        "type": "basic_block"
      },
      {
        "end_pc": 1917,
        "hash": "0x70ecfe3424c2a9276a82415606b6b490c99227df654c56b4be532440c49f3091",
        "id": "bb:1913",
        "start_pc": 1913,
        "type": "basic_block"
      },
      {
        "end_pc": 1927,
        "hash": "0x58fb84486744040f33249763c5ed64f1921ef6317155314c5eacbe4a9f2f0701",
        "id": "bb:1918",
        "start_pc": 1918,
        "type": "basic_block"
      },
      {
        "end_pc": 1933,
        "hash": "0xfba84a5b5d4501bf5affa9de3a469096346a899161477dd0d7d83b81460f155a",
        "id": "bb:1928",
        "start_pc": 1928,
        "type": "basic_block"
      },
      {
        "end_pc": 1935,
        "hash": "0x40f33ce5dd6b6d1fb0afdc58e80a33989ce581511cd6017a084aa4c0256cbb84",
        "id": "bb:1934",
        "start_pc": 1934,
        "type": "basic_block"
      },
      {
        "end_pc": 1941,
        "hash": "0xbb1a3cc93750d1406d846cb4959daa3a2db3ccec9066bcadbab21079b26c2658",
        "id": "bb:1937",
        "start_pc": 1937,
        "type": "basic_block"
      },
      {
        "end_pc": 1951,
        "hash": "0x83afc05bf893dc878104a31a02f517913b0d9e19b945e1e73b1965d48eddaffa",
        "id": "bb:1942",
        "start_pc": 1942,
        "type": "basic_block"
      },
      {
        "end_pc": 2010,
        "hash": "0xee9bca1be50b575e13d3813ff0967a06a01d7693fb635f54452fa68164fb47a8",
        "id": "bb:1952",
        "start_pc": 1952,
        "type": "basic_block"
      },
      {
        "end_pc": 2034,
        "hash": "0x5bb0d9457e267eb56ecda8fbd920a074f062262c5a29d0200aeca7c827ccef06",
        "id": "bb:2011",
        "start_pc": 2011,
        "type": "basic_block"
      },
      {
        "end_pc": 2060,
        "hash": "0x224863a61fef07c89053db252c212d527f8f73a545edb193cb8c26394cd98b8a",
        "id": "bb:2035",
        "start_pc": 2035,
        "type": "basic_block"
      },
      {
        "end_pc": 2094,
        "hash": "0x42ff6bf526478becaacafde6c6e0d0f3f370e1ebf0d61a13437902461514c791",
        "id": "bb:2061",
        "start_pc": 2061,
        "type": "basic_block"
      },
      {
        "end_pc": 2110,
        "hash": "0x463a7ebc012d07596a116301308dd880ef8fddc0346076964aad6798e36f9905",
        "id": "bb:2095",
        "start_pc": 2095,
        "type": "basic_block"
      },
      {
        "end_pc": 2123,
        "hash": "0xe0a12b150e74b8c3124681fdfaf5972423579fd7624c973e32d67c125a1b1128",
        "id": "bb:2111",
        "start_pc": 2111,
        "type": "basic_block"
      },
      {
        "end_pc": 2139,
        "hash": "0x21630389780de18cfbbd499d2dff5a00151757b8a4af9eba62c101981a4909b2",
        "id": "bb:2124",
        "start_pc": 2124,
        "type": "basic_block"
      },
      {
        "end_pc": 2152,
        "hash": "0x9872c244e66f103dbe658d67fa280684f999cce4de30efe1e6978f1c8f65dd07",
        "id": "bb:2140",
        "start_pc": 2140,
        "type": "basic_block"
      },
      {
        "end_pc": 2311,
        "hash": "0xde4a74deb9464a524892f8e2a414174277c0b02690ee80cf5a3c7acfea5882f7",
        "id": "bb:2153",
        "start_pc": 2153,
        "type": "basic_block"
      },
      {
        "end_pc": 2335,
        "hash": "0x84ad4e3879f351974821c23343925ead2f24285487f95772d35af8afde47fcf8",
        "id": "bb:2312",
        "start_pc": 2312,
        "type": "basic_block"
      },
      {
        "end_pc": 2369,
        "hash": "0xc014eeeaac836d24ac7d7aec0de501e439b37805428276b54488b80fe7ee51ce",
        "id": "bb:2336",
        "start_pc": 2336,
        "type": "basic_block"
      },
      {
        "end_pc": 2451,
        "hash": "0x0a75b3c389144eead7a444c405ac74ede33df4c4906c44ae1761352f3b3221f2",
        "id": "bb:2370",
        "start_pc": 2370,
        "type": "basic_block"
      },
      {
        "end_pc": 2464,
        "hash": "0xc4926b055e59535368159e21dd71ec23857206c0dd307d066d9928538b0d546e",
        "id": "bb:2452",
        "start_pc": 2452,
        "type": "basic_block"
      },
      {
        "end_pc": 2491,
        "hash": "0x8e07c885c5107e93d28add3203f9abe07a3801f348830a819265bbd24760d709",
        "id": "bb:2465",
        "start_pc": 2465,
        "type": "basic_block"
      },
      {
        "end_pc": 2511,
        "hash": "0x06a16bbdc912edc24e20f6f28a636e4ac35fc762f0af4bc0145dc88e27d42b27",
        "id": "bb:2492",
        "start_pc": 2492,
        "type": "basic_block"
      },
      {
        "end_pc": 2527,
        "hash": "0x070950c975e6973b8898d2347b96ac0931d5c967a20616c3e8149dfeed229fbf",
        "id": "bb:2512",
        "start_pc": 2512,
        "type": "basic_block"
      },
      {
        "end_pc": 2528,
        "hash": "0xe3bf256cfab860436a52357043f0436c7af07a3b7afffecbe8b2e36791bf7d6e",
        "id": "bb:2528",
        "start_pc": 2528,
        "type": "basic_block"
      },
      {
        "end_pc": 2541,
        "hash": "0x1c6609552e96255244721b70fa03a761fea1affdb274664803810e6f48a5761f",
        "id": "bb:2529",
        "start_pc": 2529,
        "type": "basic_block"
      },
      {
        "end_pc": 2543,
        "hash": "0xca34432540a8da9e726ee419a126785b71a57ecb0d06b7b4058b65a83db669b1",
        "id": "bb:2542",
        "start_pc": 2542,
        "type": "basic_block"
      },
      {
        "id": "call:130",
        "opcode": "CALL",
        "pc": 130,
        "type": "callsite"
      },
      {
        "id": "call:652",
        "opcode": "CALL",
        "pc": 652,
        "type": "callsite"
      },
      {
        "id": "call:691",
        "opcode": "CALL",
        "pc": 691,
        "type": "callsite"
      },
      {
        "id": "call:731",
        "opcode": "CALL",
        "pc": 731,
        "type": "callsite"
      },
      {
        "id": "call:2093",
        "opcode": "CALL",
        "pc": 2093,
        "type": "callsite"
      },
      {
        "id": "call:2204",
        "opcode": "CALL",
        "pc": 2204,
        "type": "callsite"
      },
      {
        "id": "sink:call",
        "type": "sink"
      },
      {
        "entry_pc": null,
        "id": "fn:0x5a9809ed",
        "selector": "0x5a9809ed",
        "type": "function"
      },
      {
        "entry_pc": null,
        "id": "fn:0xd5f39e24",
        "selector": "0xd5f39e24",
        "type": "function"
      },
      {
        "entry_pc": null,
        "id": "fn:0xa11af387",
        "selector": "0xa11af387",
        "type": "function"
      },
      {
        "entry_pc": null,
        "id": "fn:0x7b0ae934",
        "selector": "0x7b0ae934",
        "type": "function"
      },
      {
        "entry_pc": null,
        "id": "fn:0xd966f799",
        "selector": "0xd966f799",
        "type": "function"
      },
      {
        "entry_pc": null,
        "id": "fn:0x3cd86b77",
        "selector": "0x3cd86b77",
        "type": "function"
      },
      {
        "entry_pc": null,
        "id": "fn:0x8f26e0fe",
        "selector": "0x8f26e0fe",
        "type": "function"
      },
      {
        "entry_pc": null,
        "id": "fn:0xf2e497ae",
        "selector": "0xf2e497ae",
        "type": "function"
      }
    ],
    "version": "capability_graph_v1"
  },
  "id": 1595,
  "updated_at": "2026-04-04T19:45:51.000000Z",
  "version": "capability_graph_v1"
}

exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.functions' BYTECODE_BUNDLE.json" in /tmp/codex-728_ya93
 succeeded in 0ms:
[
  {
    "auth": {
      "guards": [
        {
          "pc": 1453,
          "type": "msg_sender_eq_storage"
        },
        {
          "pc": 1535,
          "type": "msg_sender_eq_storage"
        },
        {
          "pc": 1582,
          "type": "msg_sender_eq_storage"
        }
      ]
    },
    "entry_pc": null,
    "selector": "0x5a9809ed",
    "sinks": {
      "call": 6,
      "delegatecall": 0,
      "selfdestruct": 0,
      "staticcall": 0
    },
    "storage": {
      "reads": 34,
      "slots": [
        {
          "op": "SLOAD",
          "pc": 164,
          "slot": "0x0000000000000000000000000000000000027220000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 197,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000060"
        },
        {
          "op": "SSTORE",
          "pc": 212,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000080"
        },
        {
          "op": "SSTORE",
          "pc": 384,
          "slot": "0x00000000000000000000000000000000000000000000000000000000000000c0"
        },
        {
          "op": "SLOAD",
          "pc": 1343,
          "slot": "0x0000000000000000000000000000000000027220000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2277,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2291,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2305,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2354,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2385,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2400,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2415,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2430,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2445,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2511,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        }
      ],
      "writes": 22
    }
  },
  {
    "auth": {
      "guards": [
        {
          "pc": 1453,
          "type": "msg_sender_eq_storage"
        },
        {
          "pc": 1535,
          "type": "msg_sender_eq_storage"
        },
        {
          "pc": 1582,
          "type": "msg_sender_eq_storage"
        }
      ]
    },
    "entry_pc": null,
    "selector": "0xd5f39e24",
    "sinks": {
      "call": 6,
      "delegatecall": 0,
      "selfdestruct": 0,
      "staticcall": 0
    },
    "storage": {
      "reads": 34,
      "slots": [
        {
          "op": "SLOAD",
          "pc": 164,
          "slot": "0x0000000000000000000000000000000000027220000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 197,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000060"
        },
        {
          "op": "SSTORE",
          "pc": 212,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000080"
        },
        {
          "op": "SSTORE",
          "pc": 384,
          "slot": "0x00000000000000000000000000000000000000000000000000000000000000c0"
        },
        {
          "op": "SLOAD",
          "pc": 1343,
          "slot": "0x0000000000000000000000000000000000027220000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2277,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2291,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2305,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2354,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2385,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2400,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2415,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2430,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2445,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2511,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        }
      ],
      "writes": 22
    }
  },
  {
    "auth": {
      "guards": [
        {
          "pc": 1453,
          "type": "msg_sender_eq_storage"
        },
        {
          "pc": 1535,
          "type": "msg_sender_eq_storage"
        },
        {
          "pc": 1582,
          "type": "msg_sender_eq_storage"
        }
      ]
    },
    "entry_pc": null,
    "selector": "0xa11af387",
    "sinks": {
      "call": 6,
      "delegatecall": 0,
      "selfdestruct": 0,
      "staticcall": 0
    },
    "storage": {
      "reads": 34,
      "slots": [
        {
          "op": "SLOAD",
          "pc": 164,
          "slot": "0x0000000000000000000000000000000000027220000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 197,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000060"
        },
        {
          "op": "SSTORE",
          "pc": 212,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000080"
        },
        {
          "op": "SSTORE",
          "pc": 384,
          "slot": "0x00000000000000000000000000000000000000000000000000000000000000c0"
        },
        {
          "op": "SLOAD",
          "pc": 1343,
          "slot": "0x0000000000000000000000000000000000027220000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2277,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2291,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2305,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2354,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2385,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2400,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2415,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2430,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2445,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2511,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        }
      ],
      "writes": 22
    }
  },
  {
    "auth": {
      "guards": [
        {
          "pc": 1453,
          "type": "msg_sender_eq_storage"
        },
        {
          "pc": 1535,
          "type": "msg_sender_eq_storage"
        },
        {
          "pc": 1582,
          "type": "msg_sender_eq_storage"
        }
      ]
    },
    "entry_pc": null,
    "selector": "0x7b0ae934",
    "sinks": {
      "call": 6,
      "delegatecall": 0,
      "selfdestruct": 0,
      "staticcall": 0
    },
    "storage": {
      "reads": 34,
      "slots": [
        {
          "op": "SLOAD",
          "pc": 164,
          "slot": "0x0000000000000000000000000000000000027220000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 197,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000060"
        },
        {
          "op": "SSTORE",
          "pc": 212,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000080"
        },
        {
          "op": "SSTORE",
          "pc": 384,
          "slot": "0x00000000000000000000000000000000000000000000000000000000000000c0"
        },
        {
          "op": "SLOAD",
          "pc": 1343,
          "slot": "0x0000000000000000000000000000000000027220000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2277,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2291,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2305,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2354,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2385,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2400,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2415,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2430,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2445,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2511,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        }
      ],
      "writes": 22
    }
  },
  {
    "auth": {
      "guards": [
        {
          "pc": 1453,
          "type": "msg_sender_eq_storage"
        },
        {
          "pc": 1535,
          "type": "msg_sender_eq_storage"
        },
        {
          "pc": 1582,
          "type": "msg_sender_eq_storage"
        }
      ]
    },
    "entry_pc": null,
    "selector": "0xd966f799",
    "sinks": {
      "call": 6,
      "delegatecall": 0,
      "selfdestruct": 0,
      "staticcall": 0
    },
    "storage": {
      "reads": 34,
      "slots": [
        {
          "op": "SLOAD",
          "pc": 164,
          "slot": "0x0000000000000000000000000000000000027220000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 197,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000060"
        },
        {
          "op": "SSTORE",
          "pc": 212,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000080"
        },
        {
          "op": "SSTORE",
          "pc": 384,
          "slot": "0x00000000000000000000000000000000000000000000000000000000000000c0"
        },
        {
          "op": "SLOAD",
          "pc": 1343,
          "slot": "0x0000000000000000000000000000000000027220000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2277,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2291,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2305,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2354,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2385,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2400,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2415,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2430,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2445,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2511,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        }
      ],
      "writes": 22
    }
  },
  {
    "auth": {
      "guards": [
        {
          "pc": 1453,
          "type": "msg_sender_eq_storage"
        },
        {
          "pc": 1535,
          "type": "msg_sender_eq_storage"
        },
        {
          "pc": 1582,
          "type": "msg_sender_eq_storage"
        }
      ]
    },
    "entry_pc": null,
    "selector": "0x3cd86b77",
    "sinks": {
      "call": 6,
      "delegatecall": 0,
      "selfdestruct": 0,
      "staticcall": 0
    },
    "storage": {
      "reads": 34,
      "slots": [
        {
          "op": "SLOAD",
          "pc": 164,
          "slot": "0x0000000000000000000000000000000000027220000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 197,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000060"
        },
        {
          "op": "SSTORE",
          "pc": 212,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000080"
        },
        {
          "op": "SSTORE",
          "pc": 384,
          "slot": "0x00000000000000000000000000000000000000000000000000000000000000c0"
        },
        {
          "op": "SLOAD",
          "pc": 1343,
          "slot": "0x0000000000000000000000000000000000027220000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2277,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2291,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2305,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2354,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2385,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2400,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2415,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2430,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2445,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2511,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        }
      ],
      "writes": 22
    }
  },
  {
    "auth": {
      "guards": [
        {
          "pc": 1453,
          "type": "msg_sender_eq_storage"
        },
        {
          "pc": 1535,
          "type": "msg_sender_eq_storage"
        },
        {
          "pc": 1582,
          "type": "msg_sender_eq_storage"
        }
      ]
    },
    "entry_pc": null,
    "selector": "0x8f26e0fe",
    "sinks": {
      "call": 6,
      "delegatecall": 0,
      "selfdestruct": 0,
      "staticcall": 0
    },
    "storage": {
      "reads": 34,
      "slots": [
        {
          "op": "SLOAD",
          "pc": 164,
          "slot": "0x0000000000000000000000000000000000027220000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 197,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000060"
        },
        {
          "op": "SSTORE",
          "pc": 212,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000080"
        },
        {
          "op": "SSTORE",
          "pc": 384,
          "slot": "0x00000000000000000000000000000000000000000000000000000000000000c0"
        },
        {
          "op": "SLOAD",
          "pc": 1343,
          "slot": "0x0000000000000000000000000000000000027220000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2277,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2291,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2305,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2354,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2385,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2400,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2415,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2430,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2445,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2511,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        }
      ],
      "writes": 22
    }
  },
  {
    "auth": {
      "guards": [
        {
          "pc": 1453,
          "type": "msg_sender_eq_storage"
        },
        {
          "pc": 1535,
          "type": "msg_sender_eq_storage"
        },
        {
          "pc": 1582,
          "type": "msg_sender_eq_storage"
        }
      ]
    },
    "entry_pc": null,
    "selector": "0xf2e497ae",
    "sinks": {
      "call": 6,
      "delegatecall": 0,
      "selfdestruct": 0,
      "staticcall": 0
    },
    "storage": {
      "reads": 34,
      "slots": [
        {
          "op": "SLOAD",
          "pc": 164,
          "slot": "0x0000000000000000000000000000000000027220000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 197,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000060"
        },
        {
          "op": "SSTORE",
          "pc": 212,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000080"
        },
        {
          "op": "SSTORE",
          "pc": 384,
          "slot": "0x00000000000000000000000000000000000000000000000000000000000000c0"
        },
        {
          "op": "SLOAD",
          "pc": 1343,
          "slot": "0x0000000000000000000000000000000000027220000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2277,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2291,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2305,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2354,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2385,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2400,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2415,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2430,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2445,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        },
        {
          "op": "SSTORE",
          "pc": 2511,
          "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
        }
      ],
      "writes": 22
    }
  }
]

exec
/bin/bash -lc "jq '.artifact.compiler_json, .artifact.is_proxy, .artifact.implementation_address, .artifact.verified_source' BYTECODE_BUNDLE.json" in /tmp/codex-728_ya93
 succeeded in 0ms:
{
  "etherscan": {
    "skipped": true
  }
}
false
null
false

exec
/bin/bash -lc "jq '.analysis_artifact.artifact_json.dispatcher_type, .analysis_artifact.artifact_json.sinks' BYTECODE_BUNDLE.json" in /tmp/codex-728_ya93
 succeeded in 0ms:
"selector_jump_table"
{
  "call": 6,
  "create": 0,
  "create2": 0,
  "delegatecall": 0,
  "selfdestruct": 0,
  "staticcall": 0,
  "upgrade_slot_write_suspected": false
}

exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
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',
0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',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,17): ops[0xa0+i]=f'LOG{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}'

bytecode = json.loads(Path('BYTECODE_BUNDLE.json').read_text())['artifact']['runtime_bytecode']
code = bytes.fromhex(bytecode[2:] if bytecode.startswith('0x') else bytecode)
# disassemble full with indexed pcs
instrs=[]
pc=0
while pc < len(code):
    op=code[pc]
    name=ops.get(op,f'OP_{op:02x}')
    arg=None
    size=1
    if 0x60 <= op <= 0x7f:
        n=op-0x5f
        arg=code[pc+1:pc+1+n]
        size+=n
    instrs.append((pc,name,arg))
    pc += size
# print windows around key pcs
keys=[117,130,147,480,652,691,731,1314,1343,1435,1453,1521,1535,1568,1582,1643,1918,1942,2061,2093,2153,2204,2277,2354,2452,2511]
for key in keys:
    print(f'===== around {key} =====')
    for pc,name,arg in instrs:
        if key-20 <= pc <= key+25:
            if arg is None:
                print(f'{pc:04d}: {name}')
            else:
                print(f'{pc:04d}: {name} 0x{arg.hex()}')
PY" in /tmp/codex-728_ya93
 exited 1 in 0ms:
Traceback (most recent call last):
  File "<stdin>", line 19, in <module>
AttributeError: 'dict' object has no attribute 'startswith'

exec
/bin/bash -lc "jq '.artifact.runtime_bytecode | type, .' BYTECODE_BUNDLE.json | sed -n '1,40p'" in /tmp/codex-728_ya93
 succeeded in 0ms:
"object"
{
  "full": "0x600061047f537c010000000000000000000000000000000000000000000000000000000060003504635a9809ed81141561032c573659905901600090523660048237600435606052602435608052604435602082010160a05260643560c052608435602082010160e0525060c0513412156100935760006000600060003433611388f1506001600003610100526020610100f35b6e027220000000000000000000000000546101205260c05134036127226101205102556060516127226101205102600101556080516127226101205102600201556000610140525b602060a051035161014051121561015c576101405160200260a05101516101405161272261012051026003010155601c60205990590160009052016101405160200260a0510151610120517f1250e52636eed438f884679df55d2911cf41764cf8b2da1bd22d29b0eb14f80e600084a35060016101405101610140526100db565b602060a05103516127226101205102612713015560c05161272261012051026127170155602060e0510351612722610120510261271801556000610140525b602060e05103516020610140510212156101e0576101405160200260e0510151600161014051016127226101205102612718010155600161014051016101405261019b565b600161012051016e027220000000000000000000000000556080601c6101a059905901600090520160c0513403815260a05160208103516020026020018360208401526020820360a0840152806101208401528084019350505060c051604082015260e0516020601f602083035101046020026020018360608401526020820360e0840152806101608401528084019350505081600401599059016000905260808160808460006004601ef161029257fe5b6080810192506101208201518080858260a087015160006004600a8705601201f16102b957fe5b508084019350506101608201518080858260e087015160006004600a8705601201f16102e157fe5b50808401935050808303610120516080516060517f8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dba8486a45050505061012051610220526020610220f35b63d5f39e248114156103535760043561012052612722610120510254610240526020610240f35b63a11af3878114156103b5576004356101205260605990590160009052600281526127226101205102600101546020820152612722610120510260020154604082015260208101905060206040820352602060208203510260400160408203f3505b637b0ae93481141561044f576004356101205260c859905901600090526102a052612722610120510261271301546102a051526000610140525b6102a0515161014051121561042f576101405161272261012051026003010154600161014051016020026102a051015260016101405101610140526103ef565b60206102a0510160206040820352602060208203510260400160408203f3505b63d966f79981141561047a5760043561012052612722610120510261271701546102e05260206102e0f35b633cd86b7781141561052257600435610120526101405990590160009052610300526000610140526127226101205102612718015461030051525b61030051516020610140510212156104fc576001610140510161272261012051026127180101546001610140510160200261030051015260016101405101610140526104b5565b60206103005101602060408203526020601f6020830351604001010460200260408203f3505b638f26e0fe81141561054a576e02722000000000000000000000000054610340526020610340f35b63f2e497ae8114156109ee5736599059016000905236600482376004356101205260243561036052506001600003610380526000610140525b612722610120510261271301546101405112156105f15733610140516127226101205102600301015414156105e1576101405160020a6103a0526000612722610120510261271401546103a0511614156105e05761014051610380525b5b6001610140510161014052610583565b3361272261012051026001015414156106105760006103605114610613565b60005b15610620576103e7610380525b33612722610120510260020154141561063f5760016103605114610642565b60005b1561064f576103e7610380525b600160000361038051141561066b5760006103c05260206103c0f35b60006103e0526103a051612722610120510261271401541761272261012051026127140155601c604059905901600090520161036051815233610120517fcfa82ef0390c8f3e57ebe6c0665352a383667e792af012d350d9786ee5173d26602084a3506103e76103805114151561077e5761036051156107315760016127226101205102612715015401612722610120510261271501556127226101205102612713015460026127226101205102612715015402131561072c5760016103e0525b610779565b6001612722610120510261271601540161272261012051026127160155612722610120510261271301546002612722610120510261271601540213156107785760026103e0525b5b610796565b610360511561078e576001610791565b60025b6103e0525b6103e051156109e15760006101405261272261012051026127160154612722610120510261271501540161040052610400516127226101205102612717015405610420525b6127226101205102612713015461014051121561083f57612722610120510261271401546101405160020a161561082f576000600060006000610420516101405161272261012051026003010154611388f1505b60016101405101610140526107db565b60016103e051141561085c57612722610120510260010154610869565b6127226101205102600201545b6104405260006000600060006000610400511461272261012051026127170154026127226101205102540161044051611388f150601c6040599059016000905201610440518152610120517fd73429fe3d5eae9e487e60af3e9befceddbdbd53695543a735e2d8face8269d3602083a2506000612722610120510255600061272261012051026001015560006127226101205102600201556000610140525b6127226101205102612713015461014051121561094257600061014051612722610120510260030101556001610140510161014052610908565b6000612722610120510261271301556000612722610120510261271401556000612722610120510261271501556000612722610120510261271601556000612722610120510261271701556000610140525b600a6101405112156109e05760006101405161272261012051026127180101541415156109d05760006101405161272261012051026127180101555b6001610140510161014052610994565b5b6001610460526020610460f35b50",
  "head": null,
  "length": 5090,
  "tail": null,
  "truncated": false
}

exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
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',
0x60:'PUSH1',0x61:'PUSH2',0x62:'PUSH3',0x63:'PUSH4',0x64:'PUSH5',0x65:'PUSH6',0x66:'PUSH7',0x67:'PUSH8',0x68:'PUSH9',0x69:'PUSH10',0x6a:'PUSH11',0x6b:'PUSH12',0x6c:'PUSH13',0x6d:'PUSH14',0x6e:'PUSH15',0x6f:'PUSH16',0x70:'PUSH17',0x71:'PUSH18',0x72:'PUSH19',0x73:'PUSH20',0x74:'PUSH21',0x75:'PUSH22',0x76:'PUSH23',0x77:'PUSH24',0x78:'PUSH25',0x79:'PUSH26',0x7a:'PUSH27',0x7b:'PUSH28',0x7c:'PUSH29',0x7d:'PUSH30',0x7e:'PUSH31',0x7f:'PUSH32',
0x80:'DUP1',0x81:'DUP2',0x82:'DUP3',0x83:'DUP4',0x84:'DUP5',0x85:'DUP6',0x86:'DUP7',0x87:'DUP8',0x88:'DUP9',0x89:'DUP10',0x8a:'DUP11',0x8b:'DUP12',0x8c:'DUP13',0x8d:'DUP14',0x8e:'DUP15',0x8f:'DUP16',
0x90:'SWAP1',0x91:'SWAP2',0x92:'SWAP3',0x93:'SWAP4',0x94:'SWAP5',0x95:'SWAP6',0x96:'SWAP7',0x97:'SWAP8',0x98:'SWAP9',0x99:'SWAP10',0x9a:'SWAP11',0x9b:'SWAP12',0x9c:'SWAP13',0x9d:'SWAP14',0x9e:'SWAP15',0x9f:'SWAP16',
0xa0:'LOG0',0xa1:'LOG1',0xa2:'LOG2',0xa3:'LOG3',0xa4:'LOG4',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'
}
bytecode = json.loads(Path('BYTECODE_BUNDLE.json').read_text())['artifact']['runtime_bytecode']['full']
code = bytes.fromhex(bytecode[2:])
instrs=[]
pc=0
while pc < len(code):
    op=code[pc]
    name=ops.get(op,f'OP_{op:02x}')
    arg=None
    size=1
    if 0x60 <= op <= 0x7f:
        n=op-0x5f
        arg=code[pc+1:pc+1+n]
        size+=n
    instrs.append((pc,name,arg))
    pc += size
keys=[0,52,117,130,147,219,237,348,411,432,480,652,658,691,697,731,737,812,851,949,1103,1146,1314,1343,1411,1435,1453,1521,1535,1568,1582,1643,1918,1942,1952,2011,2061,2093,2111,2153,2204,2277,2354,2452,2511,2529]
for key in keys:
    print(f'===== around {key} =====')
    for pc,name,arg in instrs:
        if key-20 <= pc <= key+30:
            if arg is None:
                print(f'{pc:04d}: {name}')
            else:
                print(f'{pc:04d}: {name} 0x{arg.hex()}')
PY" in /tmp/codex-728_ya93
 succeeded in 0ms:
===== around 0 =====
0000: PUSH1 0x00
0002: PUSH2 0x047f
0005: MSTORE8
0006: PUSH29 0x0100000000000000000000000000000000000000000000000000000000
===== around 52 =====
0036: PUSH1 0x00
0038: CALLDATALOAD
0039: DIV
0040: PUSH4 0x5a9809ed
0045: DUP2
0046: EQ
0047: ISZERO
0048: PUSH2 0x032c
0051: JUMPI
0052: CALLDATASIZE
0053: MSIZE
0054: SWAP1
0055: MSIZE
0056: ADD
0057: PUSH1 0x00
0059: SWAP1
0060: MSTORE
0061: CALLDATASIZE
0062: PUSH1 0x04
0064: DUP3
0065: CALLDATACOPY
0066: PUSH1 0x04
0068: CALLDATALOAD
0069: PUSH1 0x60
0071: MSTORE
0072: PUSH1 0x24
0074: CALLDATALOAD
0075: PUSH1 0x80
0077: MSTORE
0078: PUSH1 0x44
0080: CALLDATALOAD
0081: PUSH1 0x20
===== around 117 =====
0097: CALLDATALOAD
0098: PUSH1 0x20
0100: DUP3
0101: ADD
0102: ADD
0103: PUSH1 0xe0
0105: MSTORE
0106: POP
0107: PUSH1 0xc0
0109: MLOAD
0110: CALLVALUE
0111: SLT
0112: ISZERO
0113: PUSH2 0x0093
0116: JUMPI
0117: PUSH1 0x00
0119: PUSH1 0x00
0121: PUSH1 0x00
0123: PUSH1 0x00
0125: CALLVALUE
0126: CALLER
0127: PUSH2 0x1388
0130: CALL
0131: POP
0132: PUSH1 0x01
0134: PUSH1 0x00
0136: SUB
0137: PUSH2 0x0100
0140: MSTORE
0141: PUSH1 0x20
0143: PUSH2 0x0100
0146: RETURN
0147: JUMPDEST
===== around 130 =====
0110: CALLVALUE
0111: SLT
0112: ISZERO
0113: PUSH2 0x0093
0116: JUMPI
0117: PUSH1 0x00
0119: PUSH1 0x00
0121: PUSH1 0x00
0123: PUSH1 0x00
0125: CALLVALUE
0126: CALLER
0127: PUSH2 0x1388
0130: CALL
0131: POP
0132: PUSH1 0x01
0134: PUSH1 0x00
0136: SUB
0137: PUSH2 0x0100
0140: MSTORE
0141: PUSH1 0x20
0143: PUSH2 0x0100
0146: RETURN
0147: JUMPDEST
0148: PUSH15 0x027220000000000000000000000000
===== around 147 =====
0127: PUSH2 0x1388
0130: CALL
0131: POP
0132: PUSH1 0x01
0134: PUSH1 0x00
0136: SUB
0137: PUSH2 0x0100
0140: MSTORE
0141: PUSH1 0x20
0143: PUSH2 0x0100
0146: RETURN
0147: JUMPDEST
0148: PUSH15 0x027220000000000000000000000000
0164: SLOAD
0165: PUSH2 0x0120
0168: MSTORE
0169: PUSH1 0xc0
0171: MLOAD
0172: CALLVALUE
0173: SUB
0174: PUSH2 0x2722
0177: PUSH2 0x0120
===== around 219 =====
0200: MLOAD
0201: PUSH2 0x2722
0204: PUSH2 0x0120
0207: MLOAD
0208: MUL
0209: PUSH1 0x02
0211: ADD
0212: SSTORE
0213: PUSH1 0x00
0215: PUSH2 0x0140
0218: MSTORE
0219: JUMPDEST
0220: PUSH1 0x20
0222: PUSH1 0xa0
0224: MLOAD
0225: SUB
0226: MLOAD
0227: PUSH2 0x0140
0230: MLOAD
0231: SLT
0232: ISZERO
0233: PUSH2 0x015c
0236: JUMPI
0237: PUSH2 0x0140
0240: MLOAD
0241: PUSH1 0x20
0243: MUL
0244: PUSH1 0xa0
0246: MLOAD
0247: ADD
0248: MLOAD
0249: PUSH2 0x0140
===== around 237 =====
0218: MSTORE
0219: JUMPDEST
0220: PUSH1 0x20
0222: PUSH1 0xa0
0224: MLOAD
0225: SUB
0226: MLOAD
0227: PUSH2 0x0140
0230: MLOAD
0231: SLT
0232: ISZERO
0233: PUSH2 0x015c
0236: JUMPI
0237: PUSH2 0x0140
0240: MLOAD
0241: PUSH1 0x20
0243: MUL
0244: PUSH1 0xa0
0246: MLOAD
0247: ADD
0248: MLOAD
0249: PUSH2 0x0140
0252: MLOAD
0253: PUSH2 0x2722
0256: PUSH2 0x0120
0259: MLOAD
0260: MUL
0261: PUSH1 0x03
0263: ADD
0264: ADD
0265: SSTORE
0266: PUSH1 0x1c
===== around 348 =====
0328: PUSH1 0x00
0330: DUP5
0331: LOG3
0332: POP
0333: PUSH1 0x01
0335: PUSH2 0x0140
0338: MLOAD
0339: ADD
0340: PUSH2 0x0140
0343: MSTORE
0344: PUSH2 0x00db
0347: JUMP
0348: JUMPDEST
0349: PUSH1 0x20
0351: PUSH1 0xa0
0353: MLOAD
0354: SUB
0355: MLOAD
0356: PUSH2 0x2722
0359: PUSH2 0x0120
0362: MLOAD
0363: MUL
0364: PUSH2 0x2713
0367: ADD
0368: SSTORE
0369: PUSH1 0xc0
0371: MLOAD
0372: PUSH2 0x2722
0375: PUSH2 0x0120
0378: MLOAD
===== around 411 =====
0391: MLOAD
0392: PUSH2 0x2722
0395: PUSH2 0x0120
0398: MLOAD
0399: MUL
0400: PUSH2 0x2718
0403: ADD
0404: SSTORE
0405: PUSH1 0x00
0407: PUSH2 0x0140
0410: MSTORE
0411: JUMPDEST
0412: PUSH1 0x20
0414: PUSH1 0xe0
0416: MLOAD
0417: SUB
0418: MLOAD
0419: PUSH1 0x20
0421: PUSH2 0x0140
0424: MLOAD
0425: MUL
0426: SLT
0427: ISZERO
0428: PUSH2 0x01e0
0431: JUMPI
0432: PUSH2 0x0140
0435: MLOAD
0436: PUSH1 0x20
0438: MUL
0439: PUSH1 0xe0
0441: MLOAD
===== around 432 =====
0412: PUSH1 0x20
0414: PUSH1 0xe0
0416: MLOAD
0417: SUB
0418: MLOAD
0419: PUSH1 0x20
0421: PUSH2 0x0140
0424: MLOAD
0425: MUL
0426: SLT
0427: ISZERO
0428: PUSH2 0x01e0
0431: JUMPI
0432: PUSH2 0x0140
0435: MLOAD
0436: PUSH1 0x20
0438: MUL
0439: PUSH1 0xe0
0441: MLOAD
0442: ADD
0443: MLOAD
0444: PUSH1 0x01
0446: PUSH2 0x0140
0449: MLOAD
0450: ADD
0451: PUSH2 0x2722
0454: PUSH2 0x0120
0457: MLOAD
0458: MUL
0459: PUSH2 0x2718
0462: ADD
===== around 480 =====
0462: ADD
0463: ADD
0464: SSTORE
0465: PUSH1 0x01
0467: PUSH2 0x0140
0470: MLOAD
0471: ADD
0472: PUSH2 0x0140
0475: MSTORE
0476: PUSH2 0x019b
0479: JUMP
0480: JUMPDEST
0481: PUSH1 0x01
0483: PUSH2 0x0120
0486: MLOAD
0487: ADD
0488: PUSH15 0x027220000000000000000000000000
0504: SSTORE
0505: PUSH1 0x80
0507: PUSH1 0x1c
0509: PUSH2 0x01a0
===== around 652 =====
0632: MSIZE
0633: SWAP1
0634: MSIZE
0635: ADD
0636: PUSH1 0x00
0638: SWAP1
0639: MSTORE
0640: PUSH1 0x80
0642: DUP2
0643: PUSH1 0x80
0645: DUP5
0646: PUSH1 0x00
0648: PUSH1 0x04
0650: PUSH1 0x1e
0652: CALL
0653: PUSH2 0x0292
0656: JUMPI
0657: INVALID
0658: JUMPDEST
0659: PUSH1 0x80
0661: DUP2
0662: ADD
0663: SWAP3
0664: POP
0665: PUSH2 0x0120
0668: DUP3
0669: ADD
0670: MLOAD
0671: DUP1
0672: DUP1
0673: DUP6
0674: DUP3
0675: PUSH1 0xa0
0677: DUP8
0678: ADD
0679: MLOAD
0680: PUSH1 0x00
0682: PUSH1 0x04
===== around 658 =====
0638: SWAP1
0639: MSTORE
0640: PUSH1 0x80
0642: DUP2
0643: PUSH1 0x80
0645: DUP5
0646: PUSH1 0x00
0648: PUSH1 0x04
0650: PUSH1 0x1e
0652: CALL
0653: PUSH2 0x0292
0656: JUMPI
0657: INVALID
0658: JUMPDEST
0659: PUSH1 0x80
0661: DUP2
0662: ADD
0663: SWAP3
0664: POP
0665: PUSH2 0x0120
0668: DUP3
0669: ADD
0670: MLOAD
0671: DUP1
0672: DUP1
0673: DUP6
0674: DUP3
0675: PUSH1 0xa0
0677: DUP8
0678: ADD
0679: MLOAD
0680: PUSH1 0x00
0682: PUSH1 0x04
0684: PUSH1 0x0a
0686: DUP8
0687: SDIV
0688: PUSH1 0x12
===== around 691 =====
0671: DUP1
0672: DUP1
0673: DUP6
0674: DUP3
0675: PUSH1 0xa0
0677: DUP8
0678: ADD
0679: MLOAD
0680: PUSH1 0x00
0682: PUSH1 0x04
0684: PUSH1 0x0a
0686: DUP8
0687: SDIV
0688: PUSH1 0x12
0690: ADD
0691: CALL
0692: PUSH2 0x02b9
0695: JUMPI
0696: INVALID
0697: JUMPDEST
0698: POP
0699: DUP1
0700: DUP5
0701: ADD
0702: SWAP4
0703: POP
0704: POP
0705: PUSH2 0x0160
0708: DUP3
0709: ADD
0710: MLOAD
0711: DUP1
0712: DUP1
0713: DUP6
0714: DUP3
0715: PUSH1 0xe0
0717: DUP8
0718: ADD
0719: MLOAD
0720: PUSH1 0x00
===== around 697 =====
0677: DUP8
0678: ADD
0679: MLOAD
0680: PUSH1 0x00
0682: PUSH1 0x04
0684: PUSH1 0x0a
0686: DUP8
0687: SDIV
0688: PUSH1 0x12
0690: ADD
0691: CALL
0692: PUSH2 0x02b9
0695: JUMPI
0696: INVALID
0697: JUMPDEST
0698: POP
0699: DUP1
0700: DUP5
0701: ADD
0702: SWAP4
0703: POP
0704: POP
0705: PUSH2 0x0160
0708: DUP3
0709: ADD
0710: MLOAD
0711: DUP1
0712: DUP1
0713: DUP6
0714: DUP3
0715: PUSH1 0xe0
0717: DUP8
0718: ADD
0719: MLOAD
0720: PUSH1 0x00
0722: PUSH1 0x04
0724: PUSH1 0x0a
0726: DUP8
0727: SDIV
===== around 731 =====
0711: DUP1
0712: DUP1
0713: DUP6
0714: DUP3
0715: PUSH1 0xe0
0717: DUP8
0718: ADD
0719: MLOAD
0720: PUSH1 0x00
0722: PUSH1 0x04
0724: PUSH1 0x0a
0726: DUP8
0727: SDIV
0728: PUSH1 0x12
0730: ADD
0731: CALL
0732: PUSH2 0x02e1
0735: JUMPI
0736: INVALID
0737: JUMPDEST
0738: POP
0739: DUP1
0740: DUP5
0741: ADD
0742: SWAP4
0743: POP
0744: POP
0745: DUP1
0746: DUP4
0747: SUB
0748: PUSH2 0x0120
0751: MLOAD
0752: PUSH1 0x80
0754: MLOAD
0755: PUSH1 0x60
0757: MLOAD
0758: PUSH32 0x8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dba
===== around 737 =====
0717: DUP8
0718: ADD
0719: MLOAD
0720: PUSH1 0x00
0722: PUSH1 0x04
0724: PUSH1 0x0a
0726: DUP8
0727: SDIV
0728: PUSH1 0x12
0730: ADD
0731: CALL
0732: PUSH2 0x02e1
0735: JUMPI
0736: INVALID
0737: JUMPDEST
0738: POP
0739: DUP1
0740: DUP5
0741: ADD
0742: SWAP4
0743: POP
0744: POP
0745: DUP1
0746: DUP4
0747: SUB
0748: PUSH2 0x0120
0751: MLOAD
0752: PUSH1 0x80
0754: MLOAD
0755: PUSH1 0x60
0757: MLOAD
0758: PUSH32 0x8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dba
===== around 812 =====
0792: DUP7
0793: LOG4
0794: POP
0795: POP
0796: POP
0797: POP
0798: PUSH2 0x0120
0801: MLOAD
0802: PUSH2 0x0220
0805: MSTORE
0806: PUSH1 0x20
0808: PUSH2 0x0220
0811: RETURN
0812: JUMPDEST
0813: PUSH4 0xd5f39e24
0818: DUP2
0819: EQ
0820: ISZERO
0821: PUSH2 0x0353
0824: JUMPI
0825: PUSH1 0x04
0827: CALLDATALOAD
0828: PUSH2 0x0120
0831: MSTORE
0832: PUSH2 0x2722
0835: PUSH2 0x0120
0838: MLOAD
0839: MUL
0840: SLOAD
0841: PUSH2 0x0240
===== around 851 =====
0831: MSTORE
0832: PUSH2 0x2722
0835: PUSH2 0x0120
0838: MLOAD
0839: MUL
0840: SLOAD
0841: PUSH2 0x0240
0844: MSTORE
0845: PUSH1 0x20
0847: PUSH2 0x0240
0850: RETURN
0851: JUMPDEST
0852: PUSH4 0xa11af387
0857: DUP2
0858: EQ
0859: ISZERO
0860: PUSH2 0x03b5
0863: JUMPI
0864: PUSH1 0x04
0866: CALLDATALOAD
0867: PUSH2 0x0120
0870: MSTORE
0871: PUSH1 0x60
0873: MSIZE
0874: SWAP1
0875: MSIZE
0876: ADD
0877: PUSH1 0x00
0879: SWAP1
0880: MSTORE
0881: PUSH1 0x02
===== around 949 =====
0929: DUP3
0930: SUB
0931: MSTORE
0932: PUSH1 0x20
0934: PUSH1 0x20
0936: DUP3
0937: SUB
0938: MLOAD
0939: MUL
0940: PUSH1 0x40
0942: ADD
0943: PUSH1 0x40
0945: DUP3
0946: SUB
0947: RETURN
0948: POP
0949: JUMPDEST
0950: PUSH4 0x7b0ae934
0955: DUP2
0956: EQ
0957: ISZERO
0958: PUSH2 0x044f
0961: JUMPI
0962: PUSH1 0x04
0964: CALLDATALOAD
0965: PUSH2 0x0120
0968: MSTORE
0969: PUSH1 0xc8
0971: MSIZE
0972: SWAP1
0973: MSIZE
0974: ADD
0975: PUSH1 0x00
0977: SWAP1
0978: MSTORE
0979: PUSH2 0x02a0
===== around 1103 =====
1083: DUP3
1084: SUB
1085: MSTORE
1086: PUSH1 0x20
1088: PUSH1 0x20
1090: DUP3
1091: SUB
1092: MLOAD
1093: MUL
1094: PUSH1 0x40
1096: ADD
1097: PUSH1 0x40
1099: DUP3
1100: SUB
1101: RETURN
1102: POP
1103: JUMPDEST
1104: PUSH4 0xd966f799
1109: DUP2
1110: EQ
1111: ISZERO
1112: PUSH2 0x047a
1115: JUMPI
1116: PUSH1 0x04
1118: CALLDATALOAD
1119: PUSH2 0x0120
1122: MSTORE
1123: PUSH2 0x2722
1126: PUSH2 0x0120
1129: MLOAD
1130: MUL
1131: PUSH2 0x2717
===== around 1146 =====
1126: PUSH2 0x0120
1129: MLOAD
1130: MUL
1131: PUSH2 0x2717
1134: ADD
1135: SLOAD
1136: PUSH2 0x02e0
1139: MSTORE
1140: PUSH1 0x20
1142: PUSH2 0x02e0
1145: RETURN
1146: JUMPDEST
1147: PUSH4 0x3cd86b77
1152: DUP2
1153: EQ
1154: ISZERO
1155: PUSH2 0x0522
1158: JUMPI
1159: PUSH1 0x04
1161: CALLDATALOAD
1162: PUSH2 0x0120
1165: MSTORE
1166: PUSH2 0x0140
1169: MSIZE
1170: SWAP1
1171: MSIZE
1172: ADD
1173: PUSH1 0x00
1175: SWAP1
1176: MSTORE
===== around 1314 =====
1295: PUSH1 0x20
1297: DUP4
1298: SUB
1299: MLOAD
1300: PUSH1 0x40
1302: ADD
1303: ADD
1304: DIV
1305: PUSH1 0x20
1307: MUL
1308: PUSH1 0x40
1310: DUP3
1311: SUB
1312: RETURN
1313: POP
1314: JUMPDEST
1315: PUSH4 0x8f26e0fe
1320: DUP2
1321: EQ
1322: ISZERO
1323: PUSH2 0x054a
1326: JUMPI
1327: PUSH15 0x027220000000000000000000000000
1343: SLOAD
1344: PUSH2 0x0340
===== around 1343 =====
1323: PUSH2 0x054a
1326: JUMPI
1327: PUSH15 0x027220000000000000000000000000
1343: SLOAD
1344: PUSH2 0x0340
1347: MSTORE
1348: PUSH1 0x20
1350: PUSH2 0x0340
1353: RETURN
1354: JUMPDEST
1355: PUSH4 0xf2e497ae
1360: DUP2
1361: EQ
1362: ISZERO
1363: PUSH2 0x09ee
1366: JUMPI
1367: CALLDATASIZE
1368: MSIZE
1369: SWAP1
1370: MSIZE
1371: ADD
1372: PUSH1 0x00
===== around 1411 =====
1391: PUSH2 0x0360
1394: MSTORE
1395: POP
1396: PUSH1 0x01
1398: PUSH1 0x00
1400: SUB
1401: PUSH2 0x0380
1404: MSTORE
1405: PUSH1 0x00
1407: PUSH2 0x0140
1410: MSTORE
1411: JUMPDEST
1412: PUSH2 0x2722
1415: PUSH2 0x0120
1418: MLOAD
1419: MUL
1420: PUSH2 0x2713
1423: ADD
1424: SLOAD
1425: PUSH2 0x0140
1428: MLOAD
1429: SLT
1430: ISZERO
1431: PUSH2 0x05f1
1434: JUMPI
1435: CALLER
1436: PUSH2 0x0140
1439: MLOAD
1440: PUSH2 0x2722
===== around 1435 =====
1415: PUSH2 0x0120
1418: MLOAD
1419: MUL
1420: PUSH2 0x2713
1423: ADD
1424: SLOAD
1425: PUSH2 0x0140
1428: MLOAD
1429: SLT
1430: ISZERO
1431: PUSH2 0x05f1
1434: JUMPI
1435: CALLER
1436: PUSH2 0x0140
1439: MLOAD
1440: PUSH2 0x2722
1443: PUSH2 0x0120
1446: MLOAD
1447: MUL
1448: PUSH1 0x03
1450: ADD
1451: ADD
1452: SLOAD
1453: EQ
1454: ISZERO
1455: PUSH2 0x05e1
1458: JUMPI
1459: PUSH2 0x0140
1462: MLOAD
1463: PUSH1 0x02
1465: EXP
===== around 1453 =====
1434: JUMPI
1435: CALLER
1436: PUSH2 0x0140
1439: MLOAD
1440: PUSH2 0x2722
1443: PUSH2 0x0120
1446: MLOAD
1447: MUL
1448: PUSH1 0x03
1450: ADD
1451: ADD
1452: SLOAD
1453: EQ
1454: ISZERO
1455: PUSH2 0x05e1
1458: JUMPI
1459: PUSH2 0x0140
1462: MLOAD
1463: PUSH1 0x02
1465: EXP
1466: PUSH2 0x03a0
1469: MSTORE
1470: PUSH1 0x00
1472: PUSH2 0x2722
1475: PUSH2 0x0120
1478: MLOAD
1479: MUL
1480: PUSH2 0x2714
1483: ADD
===== around 1521 =====
1503: MSTORE
1504: JUMPDEST
1505: JUMPDEST
1506: PUSH1 0x01
1508: PUSH2 0x0140
1511: MLOAD
1512: ADD
1513: PUSH2 0x0140
1516: MSTORE
1517: PUSH2 0x0583
1520: JUMP
1521: JUMPDEST
1522: CALLER
1523: PUSH2 0x2722
1526: PUSH2 0x0120
1529: MLOAD
1530: MUL
1531: PUSH1 0x01
1533: ADD
1534: SLOAD
1535: EQ
1536: ISZERO
1537: PUSH2 0x0610
1540: JUMPI
1541: PUSH1 0x00
1543: PUSH2 0x0360
1546: MLOAD
1547: EQ
1548: PUSH2 0x0613
1551: JUMP
===== around 1535 =====
1516: MSTORE
1517: PUSH2 0x0583
1520: JUMP
1521: JUMPDEST
1522: CALLER
1523: PUSH2 0x2722
1526: PUSH2 0x0120
1529: MLOAD
1530: MUL
1531: PUSH1 0x01
1533: ADD
1534: SLOAD
1535: EQ
1536: ISZERO
1537: PUSH2 0x0610
1540: JUMPI
1541: PUSH1 0x00
1543: PUSH2 0x0360
1546: MLOAD
1547: EQ
1548: PUSH2 0x0613
1551: JUMP
1552: JUMPDEST
1553: PUSH1 0x00
1555: JUMPDEST
1556: ISZERO
1557: PUSH2 0x0620
1560: JUMPI
1561: PUSH2 0x03e7
1564: PUSH2 0x0380
===== around 1568 =====
1548: PUSH2 0x0613
1551: JUMP
1552: JUMPDEST
1553: PUSH1 0x00
1555: JUMPDEST
1556: ISZERO
1557: PUSH2 0x0620
1560: JUMPI
1561: PUSH2 0x03e7
1564: PUSH2 0x0380
1567: MSTORE
1568: JUMPDEST
1569: CALLER
1570: PUSH2 0x2722
1573: PUSH2 0x0120
1576: MLOAD
1577: MUL
1578: PUSH1 0x02
1580: ADD
1581: SLOAD
1582: EQ
1583: ISZERO
1584: PUSH2 0x063f
1587: JUMPI
1588: PUSH1 0x01
1590: PUSH2 0x0360
1593: MLOAD
1594: EQ
1595: PUSH2 0x0642
1598: JUMP
===== around 1582 =====
1564: PUSH2 0x0380
1567: MSTORE
1568: JUMPDEST
1569: CALLER
1570: PUSH2 0x2722
1573: PUSH2 0x0120
1576: MLOAD
1577: MUL
1578: PUSH1 0x02
1580: ADD
1581: SLOAD
1582: EQ
1583: ISZERO
1584: PUSH2 0x063f
1587: JUMPI
1588: PUSH1 0x01
1590: PUSH2 0x0360
1593: MLOAD
1594: EQ
1595: PUSH2 0x0642
1598: JUMP
1599: JUMPDEST
1600: PUSH1 0x00
1602: JUMPDEST
1603: ISZERO
1604: PUSH2 0x064f
1607: JUMPI
1608: PUSH2 0x03e7
1611: PUSH2 0x0380
===== around 1643 =====
1624: MLOAD
1625: EQ
1626: ISZERO
1627: PUSH2 0x066b
1630: JUMPI
1631: PUSH1 0x00
1633: PUSH2 0x03c0
1636: MSTORE
1637: PUSH1 0x20
1639: PUSH2 0x03c0
1642: RETURN
1643: JUMPDEST
1644: PUSH1 0x00
1646: PUSH2 0x03e0
1649: MSTORE
1650: PUSH2 0x03a0
1653: MLOAD
1654: PUSH2 0x2722
1657: PUSH2 0x0120
1660: MLOAD
1661: MUL
1662: PUSH2 0x2714
1665: ADD
1666: SLOAD
1667: OR
1668: PUSH2 0x2722
1671: PUSH2 0x0120
===== around 1918 =====
1898: SLOAD
1899: MUL
1900: SGT
1901: ISZERO
1902: PUSH2 0x0778
1905: JUMPI
1906: PUSH1 0x02
1908: PUSH2 0x03e0
1911: MSTORE
1912: JUMPDEST
1913: JUMPDEST
1914: PUSH2 0x0796
1917: JUMP
1918: JUMPDEST
1919: PUSH2 0x0360
1922: MLOAD
1923: ISZERO
1924: PUSH2 0x078e
1927: JUMPI
1928: PUSH1 0x01
1930: PUSH2 0x0791
1933: JUMP
1934: JUMPDEST
1935: PUSH1 0x02
1937: JUMPDEST
1938: PUSH2 0x03e0
1941: MSTORE
1942: JUMPDEST
1943: PUSH2 0x03e0
1946: MLOAD
1947: ISZERO
1948: PUSH2 0x09e1
===== around 1942 =====
1922: MLOAD
1923: ISZERO
1924: PUSH2 0x078e
1927: JUMPI
1928: PUSH1 0x01
1930: PUSH2 0x0791
1933: JUMP
1934: JUMPDEST
1935: PUSH1 0x02
1937: JUMPDEST
1938: PUSH2 0x03e0
1941: MSTORE
1942: JUMPDEST
1943: PUSH2 0x03e0
1946: MLOAD
1947: ISZERO
1948: PUSH2 0x09e1
1951: JUMPI
1952: PUSH1 0x00
1954: PUSH2 0x0140
1957: MSTORE
1958: PUSH2 0x2722
1961: PUSH2 0x0120
1964: MLOAD
1965: MUL
1966: PUSH2 0x2716
1969: ADD
1970: SLOAD
1971: PUSH2 0x2722
===== around 1952 =====
1933: JUMP
1934: JUMPDEST
1935: PUSH1 0x02
1937: JUMPDEST
1938: PUSH2 0x03e0
1941: MSTORE
1942: JUMPDEST
1943: PUSH2 0x03e0
1946: MLOAD
1947: ISZERO
1948: PUSH2 0x09e1
1951: JUMPI
1952: PUSH1 0x00
1954: PUSH2 0x0140
1957: MSTORE
1958: PUSH2 0x2722
1961: PUSH2 0x0120
1964: MLOAD
1965: MUL
1966: PUSH2 0x2716
1969: ADD
1970: SLOAD
1971: PUSH2 0x2722
1974: PUSH2 0x0120
1977: MLOAD
1978: MUL
1979: PUSH2 0x2715
1982: ADD
===== around 2011 =====
1992: MLOAD
1993: PUSH2 0x2722
1996: PUSH2 0x0120
1999: MLOAD
2000: MUL
2001: PUSH2 0x2717
2004: ADD
2005: SLOAD
2006: SDIV
2007: PUSH2 0x0420
2010: MSTORE
2011: JUMPDEST
2012: PUSH2 0x2722
2015: PUSH2 0x0120
2018: MLOAD
2019: MUL
2020: PUSH2 0x2713
2023: ADD
2024: SLOAD
2025: PUSH2 0x0140
2028: MLOAD
2029: SLT
2030: ISZERO
2031: PUSH2 0x083f
2034: JUMPI
2035: PUSH2 0x2722
2038: PUSH2 0x0120
2041: MLOAD
===== around 2061 =====
2041: MLOAD
2042: MUL
2043: PUSH2 0x2714
2046: ADD
2047: SLOAD
2048: PUSH2 0x0140
2051: MLOAD
2052: PUSH1 0x02
2054: EXP
2055: AND
2056: ISZERO
2057: PUSH2 0x082f
2060: JUMPI
2061: PUSH1 0x00
2063: PUSH1 0x00
2065: PUSH1 0x00
2067: PUSH1 0x00
2069: PUSH2 0x0420
2072: MLOAD
2073: PUSH2 0x0140
2076: MLOAD
2077: PUSH2 0x2722
2080: PUSH2 0x0120
2083: MLOAD
2084: MUL
2085: PUSH1 0x03
2087: ADD
2088: ADD
2089: SLOAD
2090: PUSH2 0x1388
===== around 2093 =====
2073: PUSH2 0x0140
2076: MLOAD
2077: PUSH2 0x2722
2080: PUSH2 0x0120
2083: MLOAD
2084: MUL
2085: PUSH1 0x03
2087: ADD
2088: ADD
2089: SLOAD
2090: PUSH2 0x1388
2093: CALL
2094: POP
2095: JUMPDEST
2096: PUSH1 0x01
2098: PUSH2 0x0140
2101: MLOAD
2102: ADD
2103: PUSH2 0x0140
2106: MSTORE
2107: PUSH2 0x07db
2110: JUMP
2111: JUMPDEST
2112: PUSH1 0x01
2114: PUSH2 0x03e0
2117: MLOAD
2118: EQ
2119: ISZERO
2120: PUSH2 0x085c
2123: JUMPI
===== around 2111 =====
2093: CALL
2094: POP
2095: JUMPDEST
2096: PUSH1 0x01
2098: PUSH2 0x0140
2101: MLOAD
2102: ADD
2103: PUSH2 0x0140
2106: MSTORE
2107: PUSH2 0x07db
2110: JUMP
2111: JUMPDEST
2112: PUSH1 0x01
2114: PUSH2 0x03e0
2117: MLOAD
2118: EQ
2119: ISZERO
2120: PUSH2 0x085c
2123: JUMPI
2124: PUSH2 0x2722
2127: PUSH2 0x0120
2130: MLOAD
2131: MUL
2132: PUSH1 0x01
2134: ADD
2135: SLOAD
2136: PUSH2 0x0869
2139: JUMP
2140: JUMPDEST
2141: PUSH2 0x2722
===== around 2153 =====
2134: ADD
2135: SLOAD
2136: PUSH2 0x0869
2139: JUMP
2140: JUMPDEST
2141: PUSH2 0x2722
2144: PUSH2 0x0120
2147: MLOAD
2148: MUL
2149: PUSH1 0x02
2151: ADD
2152: SLOAD
2153: JUMPDEST
2154: PUSH2 0x0440
2157: MSTORE
2158: PUSH1 0x00
2160: PUSH1 0x00
2162: PUSH1 0x00
2164: PUSH1 0x00
2166: PUSH1 0x00
2168: PUSH2 0x0400
2171: MLOAD
2172: EQ
2173: PUSH2 0x2722
2176: PUSH2 0x0120
2179: MLOAD
2180: MUL
2181: PUSH2 0x2717
===== around 2204 =====
2184: ADD
2185: SLOAD
2186: MUL
2187: PUSH2 0x2722
2190: PUSH2 0x0120
2193: MLOAD
2194: MUL
2195: SLOAD
2196: ADD
2197: PUSH2 0x0440
2200: MLOAD
2201: PUSH2 0x1388
2204: CALL
2205: POP
2206: PUSH1 0x1c
2208: PUSH1 0x40
2210: MSIZE
2211: SWAP1
2212: MSIZE
2213: ADD
2214: PUSH1 0x00
2216: SWAP1
2217: MSTORE
2218: ADD
2219: PUSH2 0x0440
2222: MLOAD
2223: DUP2
2224: MSTORE
2225: PUSH2 0x0120
2228: MLOAD
2229: PUSH32 0xd73429fe3d5eae9e487e60af3e9befceddbdbd53695543a735e2d8face8269d3
===== around 2277 =====
2262: PUSH1 0x20
2264: DUP4
2265: LOG2
2266: POP
2267: PUSH1 0x00
2269: PUSH2 0x2722
2272: PUSH2 0x0120
2275: MLOAD
2276: MUL
2277: SSTORE
2278: PUSH1 0x00
2280: PUSH2 0x2722
2283: PUSH2 0x0120
2286: MLOAD
2287: MUL
2288: PUSH1 0x01
2290: ADD
2291: SSTORE
2292: PUSH1 0x00
2294: PUSH2 0x2722
2297: PUSH2 0x0120
2300: MLOAD
2301: MUL
2302: PUSH1 0x02
2304: ADD
2305: SSTORE
2306: PUSH1 0x00
===== around 2354 =====
2335: JUMPI
2336: PUSH1 0x00
2338: PUSH2 0x0140
2341: MLOAD
2342: PUSH2 0x2722
2345: PUSH2 0x0120
2348: MLOAD
2349: MUL
2350: PUSH1 0x03
2352: ADD
2353: ADD
2354: SSTORE
2355: PUSH1 0x01
2357: PUSH2 0x0140
2360: MLOAD
2361: ADD
2362: PUSH2 0x0140
2365: MSTORE
2366: PUSH2 0x0908
2369: JUMP
2370: JUMPDEST
2371: PUSH1 0x00
2373: PUSH2 0x2722
2376: PUSH2 0x0120
2379: MLOAD
2380: MUL
2381: PUSH2 0x2713
2384: ADD
===== around 2452 =====
2433: PUSH2 0x2722
2436: PUSH2 0x0120
2439: MLOAD
2440: MUL
2441: PUSH2 0x2717
2444: ADD
2445: SSTORE
2446: PUSH1 0x00
2448: PUSH2 0x0140
2451: MSTORE
2452: JUMPDEST
2453: PUSH1 0x0a
2455: PUSH2 0x0140
2458: MLOAD
2459: SLT
2460: ISZERO
2461: PUSH2 0x09e0
2464: JUMPI
2465: PUSH1 0x00
2467: PUSH2 0x0140
2470: MLOAD
2471: PUSH2 0x2722
2474: PUSH2 0x0120
2477: MLOAD
2478: MUL
2479: PUSH2 0x2718
2482: ADD
===== around 2511 =====
2491: JUMPI
2492: PUSH1 0x00
2494: PUSH2 0x0140
2497: MLOAD
2498: PUSH2 0x2722
2501: PUSH2 0x0120
2504: MLOAD
2505: MUL
2506: PUSH2 0x2718
2509: ADD
2510: ADD
2511: SSTORE
2512: JUMPDEST
2513: PUSH1 0x01
2515: PUSH2 0x0140
2518: MLOAD
2519: ADD
2520: PUSH2 0x0140
2523: MSTORE
2524: PUSH2 0x0994
2527: JUMP
2528: JUMPDEST
2529: JUMPDEST
2530: PUSH1 0x01
2532: PUSH2 0x0460
2535: MSTORE
2536: PUSH1 0x20
2538: PUSH2 0x0460
2541: RETURN
===== around 2529 =====
2509: ADD
2510: ADD
2511: SSTORE
2512: JUMPDEST
2513: PUSH1 0x01
2515: PUSH2 0x0140
2518: MLOAD
2519: ADD
2520: PUSH2 0x0140
2523: MSTORE
2524: PUSH2 0x0994
2527: JUMP
2528: JUMPDEST
2529: JUMPDEST
2530: PUSH1 0x01
2532: PUSH2 0x0460
2535: MSTORE
2536: PUSH1 0x20
2538: PUSH2 0x0460
2541: RETURN
2542: JUMPDEST
2543: POP

exec
/bin/bash -lc "python - <<'PY'
import subprocess,shlex,os
sels=['5a9809ed','d5f39e24','a11af387','7b0ae934','d966f799','3cd86b77','8f26e0fe','f2e497ae']
# search common local 4byte databases if present
paths=[]
for root in ['/usr/share','/usr/local/share',os.path.expanduser('~/.local/share'),os.path.expanduser('~')]:
    if os.path.exists(root):
        try:
            out=subprocess.check_output(['bash','-lc',f\"rg -n --no-messages '{'|'.join(sels)}' {shlex.quote(root)} | head -n 50\"], text=True)
            if out.strip():
                print('ROOT',root)
                print(out)
        except subprocess.CalledProcessError:
            pass
PY" in /tmp/codex-728_ya93
 succeeded in 6371ms:
exec
/bin/bash -lc "python - <<'PY'
import json
from pathlib import Path
ops = {**{i:n for i,n in [(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'),(0xa0,'LOG0'),(0xa1,'LOG1'),(0xa2,'LOG2'),(0xa3,'LOG3'),(0xa4,'LOG4'),(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}'
bytecode = json.loads(Path('BYTECODE_BUNDLE.json').read_text())['artifact']['runtime_bytecode']['full']
code = bytes.fromhex(bytecode[2:])
pc=0
while pc < len(code):
    op=code[pc]; name=ops.get(op,f'OP_{op:02x}'); size=1; arg=''
    if 0x60 <= op <= 0x7f:
        n=op-0x5f; arg=' 0x'+code[pc+1:pc+1+n].hex(); size += n
    if 1367 <= pc <= 2543:
        print(f'{pc:04d}: {name}{arg}')
    pc += size
PY" in /tmp/codex-728_ya93
 succeeded in 0ms:
1367: CALLDATASIZE
1368: MSIZE
1369: SWAP1
1370: MSIZE
1371: ADD
1372: PUSH1 0x00
1374: SWAP1
1375: MSTORE
1376: CALLDATASIZE
1377: PUSH1 0x04
1379: DUP3
1380: CALLDATACOPY
1381: PUSH1 0x04
1383: CALLDATALOAD
1384: PUSH2 0x0120
1387: MSTORE
1388: PUSH1 0x24
1390: CALLDATALOAD
1391: PUSH2 0x0360
1394: MSTORE
1395: POP
1396: PUSH1 0x01
1398: PUSH1 0x00
1400: SUB
1401: PUSH2 0x0380
1404: MSTORE
1405: PUSH1 0x00
1407: PUSH2 0x0140
1410: MSTORE
1411: JUMPDEST
1412: PUSH2 0x2722
1415: PUSH2 0x0120
1418: MLOAD
1419: MUL
1420: PUSH2 0x2713
1423: ADD
1424: SLOAD
1425: PUSH2 0x0140
1428: MLOAD
1429: SLT
1430: ISZERO
1431: PUSH2 0x05f1
1434: JUMPI
1435: CALLER
1436: PUSH2 0x0140
1439: MLOAD
1440: PUSH2 0x2722
1443: PUSH2 0x0120
1446: MLOAD
1447: MUL
1448: PUSH1 0x03
1450: ADD
1451: ADD
1452: SLOAD
1453: EQ
1454: ISZERO
1455: PUSH2 0x05e1
1458: JUMPI
1459: PUSH2 0x0140
1462: MLOAD
1463: PUSH1 0x02
1465: EXP
1466: PUSH2 0x03a0
1469: MSTORE
1470: PUSH1 0x00
1472: PUSH2 0x2722
1475: PUSH2 0x0120
1478: MLOAD
1479: MUL
1480: PUSH2 0x2714
1483: ADD
1484: SLOAD
1485: PUSH2 0x03a0
1488: MLOAD
1489: AND
1490: EQ
1491: ISZERO
1492: PUSH2 0x05e0
1495: JUMPI
1496: PUSH2 0x0140
1499: MLOAD
1500: PUSH2 0x0380
1503: MSTORE
1504: JUMPDEST
1505: JUMPDEST
1506: PUSH1 0x01
1508: PUSH2 0x0140
1511: MLOAD
1512: ADD
1513: PUSH2 0x0140
1516: MSTORE
1517: PUSH2 0x0583
1520: JUMP
1521: JUMPDEST
1522: CALLER
1523: PUSH2 0x2722
1526: PUSH2 0x0120
1529: MLOAD
1530: MUL
1531: PUSH1 0x01
1533: ADD
1534: SLOAD
1535: EQ
1536: ISZERO
1537: PUSH2 0x0610
1540: JUMPI
1541: PUSH1 0x00
1543: PUSH2 0x0360
1546: MLOAD
1547: EQ
1548: PUSH2 0x0613
1551: JUMP
1552: JUMPDEST
1553: PUSH1 0x00
1555: JUMPDEST
1556: ISZERO
1557: PUSH2 0x0620
1560: JUMPI
1561: PUSH2 0x03e7
1564: PUSH2 0x0380
1567: MSTORE
1568: JUMPDEST
1569: CALLER
1570: PUSH2 0x2722
1573: PUSH2 0x0120
1576: MLOAD
1577: MUL
1578: PUSH1 0x02
1580: ADD
1581: SLOAD
1582: EQ
1583: ISZERO
1584: PUSH2 0x063f
1587: JUMPI
1588: PUSH1 0x01
1590: PUSH2 0x0360
1593: MLOAD
1594: EQ
1595: PUSH2 0x0642
1598: JUMP
1599: JUMPDEST
1600: PUSH1 0x00
1602: JUMPDEST
1603: ISZERO
1604: PUSH2 0x064f
1607: JUMPI
1608: PUSH2 0x03e7
1611: PUSH2 0x0380
1614: MSTORE
1615: JUMPDEST
1616: PUSH1 0x01
1618: PUSH1 0x00
1620: SUB
1621: PUSH2 0x0380
1624: MLOAD
1625: EQ
1626: ISZERO
1627: PUSH2 0x066b
1630: JUMPI
1631: PUSH1 0x00
1633: PUSH2 0x03c0
1636: MSTORE
1637: PUSH1 0x20
1639: PUSH2 0x03c0
1642: RETURN
1643: JUMPDEST
1644: PUSH1 0x00
1646: PUSH2 0x03e0
1649: MSTORE
1650: PUSH2 0x03a0
1653: MLOAD
1654: PUSH2 0x2722
1657: PUSH2 0x0120
1660: MLOAD
1661: MUL
1662: PUSH2 0x2714
1665: ADD
1666: SLOAD
1667: OR
1668: PUSH2 0x2722
1671: PUSH2 0x0120
1674: MLOAD
1675: MUL
1676: PUSH2 0x2714
1679: ADD
1680: SSTORE
1681: PUSH1 0x1c
1683: PUSH1 0x40
1685: MSIZE
1686: SWAP1
1687: MSIZE
1688: ADD
1689: PUSH1 0x00
1691: SWAP1
1692: MSTORE
1693: ADD
1694: PUSH2 0x0360
1697: MLOAD
1698: DUP2
1699: MSTORE
1700: CALLER
1701: PUSH2 0x0120
1704: MLOAD
1705: PUSH32 0xcfa82ef0390c8f3e57ebe6c0665352a383667e792af012d350d9786ee5173d26
1738: PUSH1 0x20
1740: DUP5
1741: LOG3
1742: POP
1743: PUSH2 0x03e7
1746: PUSH2 0x0380
1749: MLOAD
1750: EQ
1751: ISZERO
1752: ISZERO
1753: PUSH2 0x077e
1756: JUMPI
1757: PUSH2 0x0360
1760: MLOAD
1761: ISZERO
1762: PUSH2 0x0731
1765: JUMPI
1766: PUSH1 0x01
1768: PUSH2 0x2722
1771: PUSH2 0x0120
1774: MLOAD
1775: MUL
1776: PUSH2 0x2715
1779: ADD
1780: SLOAD
1781: ADD
1782: PUSH2 0x2722
1785: PUSH2 0x0120
1788: MLOAD
1789: MUL
1790: PUSH2 0x2715
1793: ADD
1794: SSTORE
1795: PUSH2 0x2722
1798: PUSH2 0x0120
1801: MLOAD
1802: MUL
1803: PUSH2 0x2713
1806: ADD
1807: SLOAD
1808: PUSH1 0x02
1810: PUSH2 0x2722
1813: PUSH2 0x0120
1816: MLOAD
1817: MUL
1818: PUSH2 0x2715
1821: ADD
1822: SLOAD
1823: MUL
1824: SGT
1825: ISZERO
1826: PUSH2 0x072c
1829: JUMPI
1830: PUSH1 0x01
1832: PUSH2 0x03e0
1835: MSTORE
1836: JUMPDEST
1837: PUSH2 0x0779
1840: JUMP
1841: JUMPDEST
1842: PUSH1 0x01
1844: PUSH2 0x2722
1847: PUSH2 0x0120
1850: MLOAD
1851: MUL
1852: PUSH2 0x2716
1855: ADD
1856: SLOAD
1857: ADD
1858: PUSH2 0x2722
1861: PUSH2 0x0120
1864: MLOAD
1865: MUL
1866: PUSH2 0x2716
1869: ADD
1870: SSTORE
1871: PUSH2 0x2722
1874: PUSH2 0x0120
1877: MLOAD
1878: MUL
1879: PUSH2 0x2713
1882: ADD
1883: SLOAD
1884: PUSH1 0x02
1886: PUSH2 0x2722
1889: PUSH2 0x0120
1892: MLOAD
1893: MUL
1894: PUSH2 0x2716
1897: ADD
1898: SLOAD
1899: MUL
1900: SGT
1901: ISZERO
1902: PUSH2 0x0778
1905: JUMPI
1906: PUSH1 0x02
1908: PUSH2 0x03e0
1911: MSTORE
1912: JUMPDEST
1913: JUMPDEST
1914: PUSH2 0x0796
1917: JUMP
1918: JUMPDEST
1919: PUSH2 0x0360
1922: MLOAD
1923: ISZERO
1924: PUSH2 0x078e
1927: JUMPI
1928: PUSH1 0x01
1930: PUSH2 0x0791
1933: JUMP
1934: JUMPDEST
1935: PUSH1 0x02
1937: JUMPDEST
1938: PUSH2 0x03e0
1941: MSTORE
1942: JUMPDEST
1943: PUSH2 0x03e0
1946: MLOAD
1947: ISZERO
1948: PUSH2 0x09e1
1951: JUMPI
1952: PUSH1 0x00
1954: PUSH2 0x0140
1957: MSTORE
1958: PUSH2 0x2722
1961: PUSH2 0x0120
1964: MLOAD
1965: MUL
1966: PUSH2 0x2716
1969: ADD
1970: SLOAD
1971: PUSH2 0x2722
1974: PUSH2 0x0120
1977: MLOAD
1978: MUL
1979: PUSH2 0x2715
1982: ADD
1983: SLOAD
1984: ADD
1985: PUSH2 0x0400
1988: MSTORE
1989: PUSH2 0x0400
1992: MLOAD
1993: PUSH2 0x2722
1996: PUSH2 0x0120
1999: MLOAD
2000: MUL
2001: PUSH2 0x2717
2004: ADD
2005: SLOAD
2006: SDIV
2007: PUSH2 0x0420
2010: MSTORE
2011: JUMPDEST
2012: PUSH2 0x2722
2015: PUSH2 0x0120
2018: MLOAD
2019: MUL
2020: PUSH2 0x2713
2023: ADD
2024: SLOAD
2025: PUSH2 0x0140
2028: MLOAD
2029: SLT
2030: ISZERO
2031: PUSH2 0x083f
2034: JUMPI
2035: PUSH2 0x2722
2038: PUSH2 0x0120
2041: MLOAD
2042: MUL
2043: PUSH2 0x2714
2046: ADD
2047: SLOAD
2048: PUSH2 0x0140
2051: MLOAD
2052: PUSH1 0x02
2054: EXP
2055: AND
2056: ISZERO
2057: PUSH2 0x082f
2060: JUMPI
2061: PUSH1 0x00
2063: PUSH1 0x00
2065: PUSH1 0x00
2067: PUSH1 0x00
2069: PUSH2 0x0420
2072: MLOAD
2073: PUSH2 0x0140
2076: MLOAD
2077: PUSH2 0x2722
2080: PUSH2 0x0120
2083: MLOAD
2084: MUL
2085: PUSH1 0x03
2087: ADD
2088: ADD
2089: SLOAD
2090: PUSH2 0x1388
2093: CALL
2094: POP
2095: JUMPDEST
2096: PUSH1 0x01
2098: PUSH2 0x0140
2101: MLOAD
2102: ADD
2103: PUSH2 0x0140
2106: MSTORE
2107: PUSH2 0x07db
2110: JUMP
2111: JUMPDEST
2112: PUSH1 0x01
2114: PUSH2 0x03e0
2117: MLOAD
2118: EQ
2119: ISZERO
2120: PUSH2 0x085c
2123: JUMPI
2124: PUSH2 0x2722
2127: PUSH2 0x0120
2130: MLOAD
2131: MUL
2132: PUSH1 0x01
2134: ADD
2135: SLOAD
2136: PUSH2 0x0869
2139: JUMP
2140: JUMPDEST
2141: PUSH2 0x2722
2144: PUSH2 0x0120
2147: MLOAD
2148: MUL
2149: PUSH1 0x02
2151: ADD
2152: SLOAD
2153: JUMPDEST
2154: PUSH2 0x0440
2157: MSTORE
2158: PUSH1 0x00
2160: PUSH1 0x00
2162: PUSH1 0x00
2164: PUSH1 0x00
2166: PUSH1 0x00
2168: PUSH2 0x0400
2171: MLOAD
2172: EQ
2173: PUSH2 0x2722
2176: PUSH2 0x0120
2179: MLOAD
2180: MUL
2181: PUSH2 0x2717
2184: ADD
2185: SLOAD
2186: MUL
2187: PUSH2 0x2722
2190: PUSH2 0x0120
2193: MLOAD
2194: MUL
2195: SLOAD
2196: ADD
2197: PUSH2 0x0440
2200: MLOAD
2201: PUSH2 0x1388
2204: CALL
2205: POP
2206: PUSH1 0x1c
2208: PUSH1 0x40
2210: MSIZE
2211: SWAP1
2212: MSIZE
2213: ADD
2214: PUSH1 0x00
2216: SWAP1
2217: MSTORE
2218: ADD
2219: PUSH2 0x0440
2222: MLOAD
2223: DUP2
2224: MSTORE
2225: PUSH2 0x0120
2228: MLOAD
2229: PUSH32 0xd73429fe3d5eae9e487e60af3e9befceddbdbd53695543a735e2d8face8269d3
2262: PUSH1 0x20
2264: DUP4
2265: LOG2
2266: POP
2267: PUSH1 0x00
2269: PUSH2 0x2722
2272: PUSH2 0x0120
2275: MLOAD
2276: MUL
2277: SSTORE
2278: PUSH1 0x00
2280: PUSH2 0x2722
2283: PUSH2 0x0120
2286: MLOAD
2287: MUL
2288: PUSH1 0x01
2290: ADD
2291: SSTORE
2292: PUSH1 0x00
2294: PUSH2 0x2722
2297: PUSH2 0x0120
2300: MLOAD
2301: MUL
2302: PUSH1 0x02
2304: ADD
2305: SSTORE
2306: PUSH1 0x00
2308: PUSH2 0x0140
2311: MSTORE
2312: JUMPDEST
2313: PUSH2 0x2722
2316: PUSH2 0x0120
2319: MLOAD
2320: MUL
2321: PUSH2 0x2713
2324: ADD
2325: SLOAD
2326: PUSH2 0x0140
2329: MLOAD
2330: SLT
2331: ISZERO
2332: PUSH2 0x0942
2335: JUMPI
2336: PUSH1 0x00
2338: PUSH2 0x0140
2341: MLOAD
2342: PUSH2 0x2722
2345: PUSH2 0x0120
2348: MLOAD
2349: MUL
2350: PUSH1 0x03
2352: ADD
2353: ADD
2354: SSTORE
2355: PUSH1 0x01
2357: PUSH2 0x0140
2360: MLOAD
2361: ADD
2362: PUSH2 0x0140
2365: MSTORE
2366: PUSH2 0x0908
2369: JUMP
2370: JUMPDEST
2371: PUSH1 0x00
2373: PUSH2 0x2722
2376: PUSH2 0x0120
2379: MLOAD
2380: MUL
2381: PUSH2 0x2713
2384: ADD
2385: SSTORE
2386: PUSH1 0x00
2388: PUSH2 0x2722
2391: PUSH2 0x0120
2394: MLOAD
2395: MUL
2396: PUSH2 0x2714
2399: ADD
2400: SSTORE
2401: PUSH1 0x00
2403: PUSH2 0x2722
2406: PUSH2 0x0120
2409: MLOAD
2410: MUL
2411: PUSH2 0x2715
2414: ADD
2415: SSTORE
2416: PUSH1 0x00
2418: PUSH2 0x2722
2421: PUSH2 0x0120
2424: MLOAD
2425: MUL
2426: PUSH2 0x2716
2429: ADD
2430: SSTORE
2431: PUSH1 0x00
2433: PUSH2 0x2722
2436: PUSH2 0x0120
2439: MLOAD
2440: MUL
2441: PUSH2 0x2717
2444: ADD
2445: SSTORE
2446: PUSH1 0x00
2448: PUSH2 0x0140
2451: MSTORE
2452: JUMPDEST
2453: PUSH1 0x0a
2455: PUSH2 0x0140
2458: MLOAD
2459: SLT
2460: ISZERO
2461: PUSH2 0x09e0
2464: JUMPI
2465: PUSH1 0x00
2467: PUSH2 0x0140
2470: MLOAD
2471: PUSH2 0x2722
2474: PUSH2 0x0120
2477: MLOAD
2478: MUL
2479: PUSH2 0x2718
2482: ADD
2483: ADD
2484: SLOAD
2485: EQ
2486: ISZERO
2487: ISZERO
2488: PUSH2 0x09d0
2491: JUMPI
2492: PUSH1 0x00
2494: PUSH2 0x0140
2497: MLOAD
2498: PUSH2 0x2722
2501: PUSH2 0x0120
2504: MLOAD
2505: MUL
2506: PUSH2 0x2718
2509: ADD
2510: ADD
2511: SSTORE
2512: JUMPDEST
2513: PUSH1 0x01
2515: PUSH2 0x0140
2518: MLOAD
2519: ADD
2520: PUSH2 0x0140
2523: MSTORE
2524: PUSH2 0x0994
2527: JUMP
2528: JUMPDEST
2529: JUMPDEST
2530: PUSH1 0x01
2532: PUSH2 0x0460
2535: MSTORE
2536: PUSH1 0x20
2538: PUSH2 0x0460
2541: RETURN
2542: JUMPDEST
2543: POP

codex
{"no_findings":false,"summary":"Bytecode-only review found meaningful unchecked ETH-transfer risks. The main payout path uses fixed-gas CALLs to computed recipient addresses, ignores the success flag, and then clears storage-backed entitlement state; this can silently burn payouts or desynchronize accounting when a recipient is a contract or intentionally reverts. A second, lower-confidence issue exists in the overpayment/refund branch, which also ignores refund failure and appears to return a sentinel value instead of reverting, potentially trapping excess ETH.","findings":[{"severity":"medium","category":"other","title":"Unchecked fixed-gas payout CALLs can fail silently while entitlement state is cleared","exploit_scenario":"In the best-effort selector path at `0xf2e497ae`, payouts are sent to computed storage-derived addresses. If one of those recipients is a contract wallet, has a reverting `receive`/fallback, or simply needs more than the hard-coded 5000 gas stipend, the CALL can fail. The bytecode then continues, and later zeroes multiple storage slots associated with the same account/round, so the recipient can lose their claim while the ETH remains in the contract.","recommendation":"Do not ignore CALL results on value transfers. Revert on failed payouts, or convert this logic to a pull-payment model that records unpaid balances for later withdrawal. Avoid fixed 5000-gas value pushes unless contract recipients are intentionally unsupported and that restriction is enforced/documented.","evidence":"At `pc:0x82d` and `pc:0x89c`, the contract performs `CALL` after pushing gas `0x1388` (5000). The success bit is immediately discarded with `POP` at the next instruction (`pc:0x82e` / `pc:0x89d`). After the later payout path, the bytecode emits an event and clears storage with `SSTORE` at `pc:0x8e5`, `pc:0x8f3`, `pc:0x901`, `pc:0x932`, `pc:0x951`, `pc:0x960`, `pc:0x96f`, `pc:0x97e`, `pc:0x98d`, and `pc:0x9cf`. Slot names are unknown from bytecode, but the sequence is consistent with state cleanup after unverified external value transfers.","locations":["selector:0xf2e497ae","pc:0x82d","pc:0x89c","pc:0x8e5","pc:0x932","pc:0x9cf"]},{"severity":"low","category":"other","title":"Overpayment refund branch ignores refund failure and appears to leave excess ETH trapped","exploit_scenario":"In the payable entry selector `0x5a9809ed`, an overpayment branch sends `msg.value` back to `msg.sender` with a raw CALL. If the caller is a contract that rejects ETH or needs more gas than provided, that refund can fail silently. The function then returns a sentinel value instead of reverting, so the excess ETH may remain stuck in the contract with no visible recovery path in the bytecode.","recommendation":"Treat refund failure as a hard failure and revert, or store refundable balances and require users to withdraw explicitly. Avoid push-style refunds to arbitrary callers when failure is ignored.","evidence":"The branch at `pc:0x6e`-`pc:0x74` compares a calldata-derived amount against `CALLVALUE` and jumps into the refund path. The refund itself occurs at `pc:0x82` via `CALL` to `CALLER` with `CALLVALUE`; the return status is discarded by `POP` at `pc:0x83`, and the function returns a sentinel all-ones value through `pc:0x84`-`pc:0x92` instead of reverting. Because this is bytecode-only analysis, selector semantics are uncertain, but the unchecked refund pattern is explicit.","locations":["selector:0x5a9809ed","pc:0x6e","pc:0x82","pc:0x83"]}]}
tokens used
83,941
Metadata
{
    "codex": {
        "ran_at": "2026-04-05T01:10:54.255418+00:00",
        "returncode": 0
    },
    "project": {
        "mode": "bytecode",
        "bytecode_length": 5090,
        "bytecode_truncated": false,
        "capability_graph_present": true,
        "analysis_artifact_present": true
    },
    "summary": "Bytecode-only review found meaningful unchecked ETH-transfer risks. The main payout path uses fixed-gas CALLs to computed recipient addresses, ignores the success flag, and then clears storage-backed entitlement state; this can silently burn payouts or desynchronize accounting when a recipient is a contract or intentionally reverts. A second, lower-confidence issue exists in the overpayment/refund branch, which also ignores refund failure and appears to return a sentinel value instead of reverting, potentially trapping excess ETH.",
    "raw_final": {
        "summary": "Bytecode-only review found meaningful unchecked ETH-transfer risks. The main payout path uses fixed-gas CALLs to computed recipient addresses, ignores the success flag, and then clears storage-backed entitlement state; this can silently burn payouts or desynchronize accounting when a recipient is a contract or intentionally reverts. A second, lower-confidence issue exists in the overpayment/refund branch, which also ignores refund failure and appears to return a sentinel value instead of reverting, potentially trapping excess ETH.",
        "findings": [
            {
                "title": "Unchecked fixed-gas payout CALLs can fail silently while entitlement state is cleared",
                "category": "other",
                "evidence": "At `pc:0x82d` and `pc:0x89c`, the contract performs `CALL` after pushing gas `0x1388` (5000). The success bit is immediately discarded with `POP` at the next instruction (`pc:0x82e` / `pc:0x89d`). After the later payout path, the bytecode emits an event and clears storage with `SSTORE` at `pc:0x8e5`, `pc:0x8f3`, `pc:0x901`, `pc:0x932`, `pc:0x951`, `pc:0x960`, `pc:0x96f`, `pc:0x97e`, `pc:0x98d`, and `pc:0x9cf`. Slot names are unknown from bytecode, but the sequence is consistent with state cleanup after unverified external value transfers.",
                "severity": "medium",
                "locations": [
                    "selector:0xf2e497ae",
                    "pc:0x82d",
                    "pc:0x89c",
                    "pc:0x8e5",
                    "pc:0x932",
                    "pc:0x9cf"
                ],
                "recommendation": "Do not ignore CALL results on value transfers. Revert on failed payouts, or convert this logic to a pull-payment model that records unpaid balances for later withdrawal. Avoid fixed 5000-gas value pushes unless contract recipients are intentionally unsupported and that restriction is enforced/documented.",
                "exploit_scenario": "In the best-effort selector path at `0xf2e497ae`, payouts are sent to computed storage-derived addresses. If one of those recipients is a contract wallet, has a reverting `receive`/fallback, or simply needs more than the hard-coded 5000 gas stipend, the CALL can fail. The bytecode then continues, and later zeroes multiple storage slots associated with the same account/round, so the recipient can lose their claim while the ETH remains in the contract."
            },
            {
                "title": "Overpayment refund branch ignores refund failure and appears to leave excess ETH trapped",
                "category": "other",
                "evidence": "The branch at `pc:0x6e`-`pc:0x74` compares a calldata-derived amount against `CALLVALUE` and jumps into the refund path. The refund itself occurs at `pc:0x82` via `CALL` to `CALLER` with `CALLVALUE`; the return status is discarded by `POP` at `pc:0x83`, and the function returns a sentinel all-ones value through `pc:0x84`-`pc:0x92` instead of reverting. Because this is bytecode-only analysis, selector semantics are uncertain, but the unchecked refund pattern is explicit.",
                "severity": "low",
                "locations": [
                    "selector:0x5a9809ed",
                    "pc:0x6e",
                    "pc:0x82",
                    "pc:0x83"
                ],
                "recommendation": "Treat refund failure as a hard failure and revert, or store refundable balances and require users to withdraw explicitly. Avoid push-style refunds to arbitrary callers when failure is ignored.",
                "exploit_scenario": "In the payable entry selector `0x5a9809ed`, an overpayment branch sends `msg.value` back to `msg.sender` with a raw CALL. If the caller is a contract that rejects ETH or needs more gas than provided, that refund can fail silently. The function then returns a sentinel value instead of reverting, so the excess ETH may remain stuck in the contract with no visible recovery path in the bytecode."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
6
EXT*/BALANCE
0
Total opcodes
1448
Flags
No heuristic flags raised.
View cast disassembly output
00000000: PUSH1 0x00
00000002: PUSH2 0x047f
00000005: MSTORE8
00000006: PUSH29 0x0100000000000000000000000000000000000000000000000000000000
00000024: PUSH1 0x00
00000026: CALLDATALOAD
00000027: DIV
00000028: PUSH4 0x5a9809ed
0000002d: DUP2
0000002e: EQ
0000002f: ISZERO
00000030: PUSH2 0x032c
00000033: JUMPI
00000034: CALLDATASIZE
00000035: MSIZE
00000036: SWAP1
00000037: MSIZE
00000038: ADD
00000039: PUSH1 0x00
0000003b: SWAP1
0000003c: MSTORE
0000003d: CALLDATASIZE
0000003e: PUSH1 0x04
00000040: DUP3
00000041: CALLDATACOPY
00000042: PUSH1 0x04
00000044: CALLDATALOAD
00000045: PUSH1 0x60
00000047: MSTORE
00000048: PUSH1 0x24
0000004a: CALLDATALOAD
0000004b: PUSH1 0x80
0000004d: MSTORE
0000004e: PUSH1 0x44
00000050: CALLDATALOAD
00000051: PUSH1 0x20
00000053: DUP3
00000054: ADD
00000055: ADD
00000056: PUSH1 0xa0
00000058: MSTORE
00000059: PUSH1 0x64
0000005b: CALLDATALOAD
0000005c: PUSH1 0xc0
0000005e: MSTORE
0000005f: PUSH1 0x84
00000061: CALLDATALOAD
00000062: PUSH1 0x20
00000064: DUP3
00000065: ADD
00000066: ADD
00000067: PUSH1 0xe0
00000069: MSTORE
0000006a: POP
0000006b: PUSH1 0xc0
0000006d: MLOAD
0000006e: CALLVALUE
0000006f: SLT
00000070: ISZERO
00000071: PUSH2 0x0093
00000074: JUMPI
00000075: PUSH1 0x00
00000077: PUSH1 0x00
00000079: PUSH1 0x00
0000007b: PUSH1 0x00
0000007d: CALLVALUE
0000007e: CALLER
0000007f: PUSH2 0x1388
00000082: CALL
00000083: POP
00000084: PUSH1 0x01
00000086: PUSH1 0x00
00000088: SUB
00000089: PUSH2 0x0100
0000008c: MSTORE
0000008d: PUSH1 0x20
0000008f: PUSH2 0x0100
00000092: RETURN
00000093: JUMPDEST
00000094: PUSH15 0x027220000000000000000000000000
000000a4: SLOAD
000000a5: PUSH2 0x0120
000000a8: MSTORE
000000a9: PUSH1 0xc0
000000ab: MLOAD
000000ac: CALLVALUE
000000ad: SUB
000000ae: PUSH2 0x2722
000000b1: PUSH2 0x0120
000000b4: MLOAD
000000b5: MUL
000000b6: SSTORE
000000b7: PUSH1 0x60
000000b9: MLOAD
000000ba: PUSH2 0x2722
000000bd: PUSH2 0x0120
000000c0: MLOAD
000000c1: MUL
000000c2: PUSH1 0x01
000000c4: ADD
000000c5: SSTORE
000000c6: PUSH1 0x80
000000c8: MLOAD
000000c9: PUSH2 0x2722
000000cc: PUSH2 0x0120
000000cf: MLOAD
000000d0: MUL
000000d1: PUSH1 0x02
000000d3: ADD
000000d4: SSTORE
000000d5: PUSH1 0x00
000000d7: PUSH2 0x0140
000000da: MSTORE
000000db: JUMPDEST
000000dc: PUSH1 0x20
000000de: PUSH1 0xa0
000000e0: MLOAD
000000e1: SUB
000000e2: MLOAD
000000e3: PUSH2 0x0140
000000e6: MLOAD
000000e7: SLT
000000e8: ISZERO
000000e9: PUSH2 0x015c
000000ec: JUMPI
000000ed: PUSH2 0x0140
000000f0: MLOAD
000000f1: PUSH1 0x20
000000f3: MUL
000000f4: PUSH1 0xa0
000000f6: MLOAD
000000f7: ADD
000000f8: MLOAD
000000f9: PUSH2 0x0140
000000fc: MLOAD
000000fd: PUSH2 0x2722
00000100: PUSH2 0x0120
00000103: MLOAD
00000104: MUL
00000105: PUSH1 0x03
00000107: ADD
00000108: ADD
00000109: SSTORE
0000010a: PUSH1 0x1c
0000010c: PUSH1 0x20
0000010e: MSIZE
0000010f: SWAP1
00000110: MSIZE
00000111: ADD
00000112: PUSH1 0x00
00000114: SWAP1
00000115: MSTORE
00000116: ADD
00000117: PUSH2 0x0140
0000011a: MLOAD
0000011b: PUSH1 0x20
0000011d: MUL
0000011e: PUSH1 0xa0
00000120: MLOAD
00000121: ADD
00000122: MLOAD
00000123: PUSH2 0x0120
00000126: MLOAD
00000127: PUSH32 0x1250e52636eed438f884679df55d2911cf41764cf8b2da1bd22d29b0eb14f80e
00000148: PUSH1 0x00
0000014a: DUP5
0000014b: LOG3
0000014c: POP
0000014d: PUSH1 0x01
0000014f: PUSH2 0x0140
00000152: MLOAD
00000153: ADD
00000154: PUSH2 0x0140
00000157: MSTORE
00000158: PUSH2 0x00db
0000015b: JUMP
0000015c: JUMPDEST
0000015d: PUSH1 0x20
0000015f: PUSH1 0xa0
00000161: MLOAD
00000162: SUB
00000163: MLOAD
00000164: PUSH2 0x2722
00000167: PUSH2 0x0120
0000016a: MLOAD
0000016b: MUL
0000016c: PUSH2 0x2713
0000016f: ADD
00000170: SSTORE
00000171: PUSH1 0xc0
00000173: MLOAD
00000174: PUSH2 0x2722
00000177: PUSH2 0x0120
0000017a: MLOAD
0000017b: MUL
0000017c: PUSH2 0x2717
0000017f: ADD
00000180: SSTORE
00000181: PUSH1 0x20
00000183: PUSH1 0xe0
00000185: MLOAD
00000186: SUB
00000187: MLOAD
00000188: PUSH2 0x2722
0000018b: PUSH2 0x0120
0000018e: MLOAD
0000018f: MUL
00000190: PUSH2 0x2718
00000193: ADD
00000194: SSTORE
00000195: PUSH1 0x00
00000197: PUSH2 0x0140
0000019a: MSTORE
0000019b: JUMPDEST
0000019c: PUSH1 0x20
0000019e: PUSH1 0xe0
000001a0: MLOAD
000001a1: SUB
000001a2: MLOAD
000001a3: PUSH1 0x20
000001a5: PUSH2 0x0140
000001a8: MLOAD
000001a9: MUL
000001aa: SLT
000001ab: ISZERO
000001ac: PUSH2 0x01e0
000001af: JUMPI
000001b0: PUSH2 0x0140
000001b3: MLOAD
000001b4: PUSH1 0x20
000001b6: MUL
000001b7: PUSH1 0xe0
000001b9: MLOAD
000001ba: ADD
000001bb: MLOAD
000001bc: PUSH1 0x01
000001be: PUSH2 0x0140
000001c1: MLOAD
000001c2: ADD
000001c3: PUSH2 0x2722
000001c6: PUSH2 0x0120
000001c9: MLOAD
000001ca: MUL
000001cb: PUSH2 0x2718
000001ce: ADD
000001cf: ADD
000001d0: SSTORE
000001d1: PUSH1 0x01
000001d3: PUSH2 0x0140
000001d6: MLOAD
000001d7: ADD
000001d8: PUSH2 0x0140
000001db: MSTORE
000001dc: PUSH2 0x019b
000001df: JUMP
000001e0: JUMPDEST
000001e1: PUSH1 0x01
000001e3: PUSH2 0x0120
000001e6: MLOAD
000001e7: ADD
000001e8: PUSH15 0x027220000000000000000000000000
000001f8: SSTORE
000001f9: PUSH1 0x80
000001fb: PUSH1 0x1c
000001fd: PUSH2 0x01a0
00000200: MSIZE
00000201: SWAP1
00000202: MSIZE
00000203: ADD
00000204: PUSH1 0x00
00000206: SWAP1
00000207: MSTORE
00000208: ADD
00000209: PUSH1 0xc0
0000020b: MLOAD
0000020c: CALLVALUE
0000020d: SUB
0000020e: DUP2
0000020f: MSTORE
00000210: PUSH1 0xa0
00000212: MLOAD
00000213: PUSH1 0x20
00000215: DUP2
00000216: SUB
00000217: MLOAD
00000218: PUSH1 0x20
0000021a: MUL
0000021b: PUSH1 0x20
0000021d: ADD
0000021e: DUP4
0000021f: PUSH1 0x20
00000221: DUP5
00000222: ADD
00000223: MSTORE
00000224: PUSH1 0x20
00000226: DUP3
00000227: SUB
00000228: PUSH1 0xa0
0000022a: DUP5
0000022b: ADD
0000022c: MSTORE
0000022d: DUP1
0000022e: PUSH2 0x0120
00000231: DUP5
00000232: ADD
00000233: MSTORE
00000234: DUP1
00000235: DUP5
00000236: ADD
00000237: SWAP4
00000238: POP
00000239: POP
0000023a: POP
0000023b: PUSH1 0xc0
0000023d: MLOAD
0000023e: PUSH1 0x40
00000240: DUP3
00000241: ADD
00000242: MSTORE
00000243: PUSH1 0xe0
00000245: MLOAD
00000246: PUSH1 0x20
00000248: PUSH1 0x1f
0000024a: PUSH1 0x20
0000024c: DUP4
0000024d: SUB
0000024e: MLOAD
0000024f: ADD
00000250: DIV
00000251: PUSH1 0x20
00000253: MUL
00000254: PUSH1 0x20
00000256: ADD
00000257: DUP4
00000258: PUSH1 0x60
0000025a: DUP5
0000025b: ADD
0000025c: MSTORE
0000025d: PUSH1 0x20
0000025f: DUP3
00000260: SUB
00000261: PUSH1 0xe0
00000263: DUP5
00000264: ADD
00000265: MSTORE
00000266: DUP1
00000267: PUSH2 0x0160
0000026a: DUP5
0000026b: ADD
0000026c: MSTORE
0000026d: DUP1
0000026e: DUP5
0000026f: ADD
00000270: SWAP4
00000271: POP
00000272: POP
00000273: POP
00000274: DUP2
00000275: PUSH1 0x04
00000277: ADD
00000278: MSIZE
00000279: SWAP1
0000027a: MSIZE
0000027b: ADD
0000027c: PUSH1 0x00
0000027e: SWAP1
0000027f: MSTORE
00000280: PUSH1 0x80
00000282: DUP2
00000283: PUSH1 0x80
00000285: DUP5
00000286: PUSH1 0x00
00000288: PUSH1 0x04
0000028a: PUSH1 0x1e
0000028c: CALL
0000028d: PUSH2 0x0292
00000290: JUMPI
00000291: INVALID
00000292: JUMPDEST
00000293: PUSH1 0x80
00000295: DUP2
00000296: ADD
00000297: SWAP3
00000298: POP
00000299: PUSH2 0x0120
0000029c: DUP3
0000029d: ADD
0000029e: MLOAD
0000029f: DUP1
000002a0: DUP1
000002a1: DUP6
000002a2: DUP3
000002a3: PUSH1 0xa0
000002a5: DUP8
000002a6: ADD
000002a7: MLOAD
000002a8: PUSH1 0x00
000002aa: PUSH1 0x04
000002ac: PUSH1 0x0a
000002ae: DUP8
000002af: SDIV
000002b0: PUSH1 0x12
000002b2: ADD
000002b3: CALL
000002b4: PUSH2 0x02b9
000002b7: JUMPI
000002b8: INVALID
000002b9: JUMPDEST
000002ba: POP
000002bb: DUP1
000002bc: DUP5
000002bd: ADD
000002be: SWAP4
000002bf: POP
000002c0: POP
000002c1: PUSH2 0x0160
000002c4: DUP3
000002c5: ADD
000002c6: MLOAD
000002c7: DUP1
000002c8: DUP1
000002c9: DUP6
000002ca: DUP3
000002cb: PUSH1 0xe0
000002cd: DUP8
000002ce: ADD
000002cf: MLOAD
000002d0: PUSH1 0x00
000002d2: PUSH1 0x04
000002d4: PUSH1 0x0a
000002d6: DUP8
000002d7: SDIV
000002d8: PUSH1 0x12
000002da: ADD
000002db: CALL
000002dc: PUSH2 0x02e1
000002df: JUMPI
000002e0: INVALID
000002e1: JUMPDEST
000002e2: POP
000002e3: DUP1
000002e4: DUP5
000002e5: ADD
000002e6: SWAP4
000002e7: POP
000002e8: POP
000002e9: DUP1
000002ea: DUP4
000002eb: SUB
000002ec: PUSH2 0x0120
000002ef: MLOAD
000002f0: PUSH1 0x80
000002f2: MLOAD
000002f3: PUSH1 0x60
000002f5: MLOAD
000002f6: PUSH32 0x8d936b1bd3fc635710969ccfba471fb17d598d9d1971b538dd712e1e4b4f4dba
00000317: DUP5
00000318: DUP7
00000319: LOG4
0000031a: POP
0000031b: POP
0000031c: POP
0000031d: POP
0000031e: PUSH2 0x0120
00000321: MLOAD
00000322: PUSH2 0x0220
00000325: MSTORE
00000326: PUSH1 0x20
00000328: PUSH2 0x0220
0000032b: RETURN
0000032c: JUMPDEST
0000032d: PUSH4 0xd5f39e24
00000332: DUP2
00000333: EQ
00000334: ISZERO
00000335: PUSH2 0x0353
00000338: JUMPI
00000339: PUSH1 0x04
0000033b: CALLDATALOAD
0000033c: PUSH2 0x0120
0000033f: MSTORE
00000340: PUSH2 0x2722
00000343: PUSH2 0x0120
00000346: MLOAD
00000347: MUL
00000348: SLOAD
00000349: PUSH2 0x0240
0000034c: MSTORE
0000034d: PUSH1 0x20
0000034f: PUSH2 0x0240
00000352: RETURN
00000353: JUMPDEST
00000354: PUSH4 0xa11af387
00000359: DUP2
0000035a: EQ
0000035b: ISZERO
0000035c: PUSH2 0x03b5
0000035f: JUMPI
00000360: PUSH1 0x04
00000362: CALLDATALOAD
00000363: PUSH2 0x0120
00000366: MSTORE
00000367: PUSH1 0x60
00000369: MSIZE
0000036a: SWAP1
0000036b: MSIZE
0000036c: ADD
0000036d: PUSH1 0x00
0000036f: SWAP1
00000370: MSTORE
00000371: PUSH1 0x02
00000373: DUP2
00000374: MSTORE
00000375: PUSH2 0x2722
00000378: PUSH2 0x0120
0000037b: MLOAD
0000037c: MUL
0000037d: PUSH1 0x01
0000037f: ADD
00000380: SLOAD
00000381: PUSH1 0x20
00000383: DUP3
00000384: ADD
00000385: MSTORE
00000386: PUSH2 0x2722
00000389: PUSH2 0x0120
0000038c: MLOAD
0000038d: MUL
0000038e: PUSH1 0x02
00000390: ADD
00000391: SLOAD
00000392: PUSH1 0x40
00000394: DUP3
00000395: ADD
00000396: MSTORE
00000397: PUSH1 0x20
00000399: DUP2
0000039a: ADD
0000039b: SWAP1
0000039c: POP
0000039d: PUSH1 0x20
0000039f: PUSH1 0x40
000003a1: DUP3
000003a2: SUB
000003a3: MSTORE
000003a4: PUSH1 0x20
000003a6: PUSH1 0x20
000003a8: DUP3
000003a9: SUB
000003aa: MLOAD
000003ab: MUL
000003ac: PUSH1 0x40
000003ae: ADD
000003af: PUSH1 0x40
000003b1: DUP3
000003b2: SUB
000003b3: RETURN
000003b4: POP
000003b5: JUMPDEST
000003b6: PUSH4 0x7b0ae934
000003bb: DUP2
000003bc: EQ
000003bd: ISZERO
000003be: PUSH2 0x044f
000003c1: JUMPI
000003c2: PUSH1 0x04
000003c4: CALLDATALOAD
000003c5: PUSH2 0x0120
000003c8: MSTORE
000003c9: PUSH1 0xc8
000003cb: MSIZE
000003cc: SWAP1
000003cd: MSIZE
000003ce: ADD
000003cf: PUSH1 0x00
000003d1: SWAP1
000003d2: MSTORE
000003d3: PUSH2 0x02a0
000003d6: MSTORE
000003d7: PUSH2 0x2722
000003da: PUSH2 0x0120
000003dd: MLOAD
000003de: MUL
000003df: PUSH2 0x2713
000003e2: ADD
000003e3: SLOAD
000003e4: PUSH2 0x02a0
000003e7: MLOAD
000003e8: MSTORE
000003e9: PUSH1 0x00
000003eb: PUSH2 0x0140
000003ee: MSTORE
000003ef: JUMPDEST
000003f0: PUSH2 0x02a0
000003f3: MLOAD
000003f4: MLOAD
000003f5: PUSH2 0x0140
000003f8: MLOAD
000003f9: SLT
000003fa: ISZERO
000003fb: PUSH2 0x042f
000003fe: JUMPI
000003ff: PUSH2 0x0140
00000402: MLOAD
00000403: PUSH2 0x2722
00000406: PUSH2 0x0120
00000409: MLOAD
0000040a: MUL
0000040b: PUSH1 0x03
0000040d: ADD
0000040e: ADD
0000040f: SLOAD
00000410: PUSH1 0x01
00000412: PUSH2 0x0140
00000415: MLOAD
00000416: ADD
00000417: PUSH1 0x20
00000419: MUL
0000041a: PUSH2 0x02a0
0000041d: MLOAD
0000041e: ADD
0000041f: MSTORE
00000420: PUSH1 0x01
00000422: PUSH2 0x0140
00000425: MLOAD
00000426: ADD
00000427: PUSH2 0x0140
0000042a: MSTORE
0000042b: PUSH2 0x03ef
0000042e: JUMP
0000042f: JUMPDEST
00000430: PUSH1 0x20
00000432: PUSH2 0x02a0
00000435: MLOAD
00000436: ADD
00000437: PUSH1 0x20
00000439: PUSH1 0x40
0000043b: DUP3
0000043c: SUB
0000043d: MSTORE
0000043e: PUSH1 0x20
00000440: PUSH1 0x20
00000442: DUP3
00000443: SUB
00000444: MLOAD
00000445: MUL
00000446: PUSH1 0x40
00000448: ADD
00000449: PUSH1 0x40
0000044b: DUP3
0000044c: SUB
0000044d: RETURN
0000044e: POP
0000044f: JUMPDEST
00000450: PUSH4 0xd966f799
00000455: DUP2
00000456: EQ
00000457: ISZERO
00000458: PUSH2 0x047a
0000045b: JUMPI
0000045c: PUSH1 0x04
0000045e: CALLDATALOAD
0000045f: PUSH2 0x0120
00000462: MSTORE
00000463: PUSH2 0x2722
00000466: PUSH2 0x0120
00000469: MLOAD
0000046a: MUL
0000046b: PUSH2 0x2717
0000046e: ADD
0000046f: SLOAD
00000470: PUSH2 0x02e0
00000473: MSTORE
00000474: PUSH1 0x20
00000476: PUSH2 0x02e0
00000479: RETURN
0000047a: JUMPDEST
0000047b: PUSH4 0x3cd86b77
00000480: DUP2
00000481: EQ
00000482: ISZERO
00000483: PUSH2 0x0522
00000486: JUMPI
00000487: PUSH1 0x04
00000489: CALLDATALOAD
0000048a: PUSH2 0x0120
0000048d: MSTORE
0000048e: PUSH2 0x0140
00000491: MSIZE
00000492: SWAP1
00000493: MSIZE
00000494: ADD
00000495: PUSH1 0x00
00000497: SWAP1
00000498: MSTORE
00000499: PUSH2 0x0300
0000049c: MSTORE
0000049d: PUSH1 0x00
0000049f: PUSH2 0x0140
000004a2: MSTORE
000004a3: PUSH2 0x2722
000004a6: PUSH2 0x0120
000004a9: MLOAD
000004aa: MUL
000004ab: PUSH2 0x2718
000004ae: ADD
000004af: SLOAD
000004b0: PUSH2 0x0300
000004b3: MLOAD
000004b4: MSTORE
000004b5: JUMPDEST
000004b6: PUSH2 0x0300
000004b9: MLOAD
000004ba: MLOAD
000004bb: PUSH1 0x20
000004bd: PUSH2 0x0140
000004c0: MLOAD
000004c1: MUL
000004c2: SLT
000004c3: ISZERO
000004c4: PUSH2 0x04fc
000004c7: JUMPI
000004c8: PUSH1 0x01
000004ca: PUSH2 0x0140
000004cd: MLOAD
000004ce: ADD
000004cf: PUSH2 0x2722
000004d2: PUSH2 0x0120
000004d5: MLOAD
000004d6: MUL
000004d7: PUSH2 0x2718
000004da: ADD
000004db: ADD
000004dc: SLOAD
000004dd: PUSH1 0x01
000004df: PUSH2 0x0140
000004e2: MLOAD
000004e3: ADD
000004e4: PUSH1 0x20
000004e6: MUL
000004e7: PUSH2 0x0300
000004ea: MLOAD
000004eb: ADD
000004ec: MSTORE
000004ed: PUSH1 0x01
000004ef: PUSH2 0x0140
000004f2: MLOAD
000004f3: ADD
000004f4: PUSH2 0x0140
000004f7: MSTORE
000004f8: PUSH2 0x04b5
000004fb: JUMP
000004fc: JUMPDEST
000004fd: PUSH1 0x20
000004ff: PUSH2 0x0300
00000502: MLOAD
00000503: ADD
00000504: PUSH1 0x20
00000506: PUSH1 0x40
00000508: DUP3
00000509: SUB
0000050a: MSTORE
0000050b: PUSH1 0x20
0000050d: PUSH1 0x1f
0000050f: PUSH1 0x20
00000511: DUP4
00000512: SUB
00000513: MLOAD
00000514: PUSH1 0x40
00000516: ADD
00000517: ADD
00000518: DIV
00000519: PUSH1 0x20
0000051b: MUL
0000051c: PUSH1 0x40
0000051e: DUP3
0000051f: SUB
00000520: RETURN
00000521: POP
00000522: JUMPDEST
00000523: PUSH4 0x8f26e0fe
00000528: DUP2
00000529: EQ
0000052a: ISZERO
0000052b: PUSH2 0x054a
0000052e: JUMPI
0000052f: PUSH15 0x027220000000000000000000000000
0000053f: SLOAD
00000540: PUSH2 0x0340
00000543: MSTORE
00000544: PUSH1 0x20
00000546: PUSH2 0x0340
00000549: RETURN
0000054a: JUMPDEST
0000054b: PUSH4 0xf2e497ae
00000550: DUP2
00000551: EQ
00000552: ISZERO
00000553: PUSH2 0x09ee
00000556: JUMPI
00000557: CALLDATASIZE
00000558: MSIZE
00000559: SWAP1
0000055a: MSIZE
0000055b: ADD
0000055c: PUSH1 0x00
0000055e: SWAP1
0000055f: MSTORE
00000560: CALLDATASIZE
00000561: PUSH1 0x04
00000563: DUP3
00000564: CALLDATACOPY
00000565: PUSH1 0x04
00000567: CALLDATALOAD
00000568: PUSH2 0x0120
0000056b: MSTORE
0000056c: PUSH1 0x24
0000056e: CALLDATALOAD
0000056f: PUSH2 0x0360
00000572: MSTORE
00000573: POP
00000574: PUSH1 0x01
00000576: PUSH1 0x00
00000578: SUB
00000579: PUSH2 0x0380
0000057c: MSTORE
0000057d: PUSH1 0x00
0000057f: PUSH2 0x0140
00000582: MSTORE
00000583: JUMPDEST
00000584: PUSH2 0x2722
00000587: PUSH2 0x0120
0000058a: MLOAD
0000058b: MUL
0000058c: PUSH2 0x2713
0000058f: ADD
00000590: SLOAD
00000591: PUSH2 0x0140
00000594: MLOAD
00000595: SLT
00000596: ISZERO
00000597: PUSH2 0x05f1
0000059a: JUMPI
0000059b: CALLER
0000059c: PUSH2 0x0140
0000059f: MLOAD
000005a0: PUSH2 0x2722
000005a3: PUSH2 0x0120
000005a6: MLOAD
000005a7: MUL
000005a8: PUSH1 0x03
000005aa: ADD
000005ab: ADD
000005ac: SLOAD
000005ad: EQ
000005ae: ISZERO
000005af: PUSH2 0x05e1
000005b2: JUMPI
000005b3: PUSH2 0x0140
000005b6: MLOAD
000005b7: PUSH1 0x02
000005b9: EXP
000005ba: PUSH2 0x03a0
000005bd: MSTORE
000005be: PUSH1 0x00
000005c0: PUSH2 0x2722
000005c3: PUSH2 0x0120
000005c6: MLOAD
000005c7: MUL
000005c8: PUSH2 0x2714
000005cb: ADD
000005cc: SLOAD
000005cd: PUSH2 0x03a0
000005d0: MLOAD
000005d1: AND
000005d2: EQ
000005d3: ISZERO
000005d4: PUSH2 0x05e0
000005d7: JUMPI
000005d8: PUSH2 0x0140
000005db: MLOAD
000005dc: PUSH2 0x0380
000005df: MSTORE
000005e0: JUMPDEST
000005e1: JUMPDEST
000005e2: PUSH1 0x01
000005e4: PUSH2 0x0140
000005e7: MLOAD
000005e8: ADD
000005e9: PUSH2 0x0140
000005ec: MSTORE
000005ed: PUSH2 0x0583
000005f0: JUMP
000005f1: JUMPDEST
000005f2: CALLER
000005f3: PUSH2 0x2722
000005f6: PUSH2 0x0120
000005f9: MLOAD
000005fa: MUL
000005fb: PUSH1 0x01
000005fd: ADD
000005fe: SLOAD
000005ff: EQ
00000600: ISZERO
00000601: PUSH2 0x0610
00000604: JUMPI
00000605: PUSH1 0x00
00000607: PUSH2 0x0360
0000060a: MLOAD
0000060b: EQ
0000060c: PUSH2 0x0613
0000060f: JUMP
00000610: JUMPDEST
00000611: PUSH1 0x00
00000613: JUMPDEST
00000614: ISZERO
00000615: PUSH2 0x0620
00000618: JUMPI
00000619: PUSH2 0x03e7
0000061c: PUSH2 0x0380
0000061f: MSTORE
00000620: JUMPDEST
00000621: CALLER
00000622: PUSH2 0x2722
00000625: PUSH2 0x0120
00000628: MLOAD
00000629: MUL
0000062a: PUSH1 0x02
0000062c: ADD
0000062d: SLOAD
0000062e: EQ
0000062f: ISZERO
00000630: PUSH2 0x063f
00000633: JUMPI
00000634: PUSH1 0x01
00000636: PUSH2 0x0360
00000639: MLOAD
0000063a: EQ
0000063b: PUSH2 0x0642
0000063e: JUMP
0000063f: JUMPDEST
00000640: PUSH1 0x00
00000642: JUMPDEST
00000643: ISZERO
00000644: PUSH2 0x064f
00000647: JUMPI
00000648: PUSH2 0x03e7
0000064b: PUSH2 0x0380
0000064e: MSTORE
0000064f: JUMPDEST
00000650: PUSH1 0x01
00000652: PUSH1 0x00
00000654: SUB
00000655: PUSH2 0x0380
00000658: MLOAD
00000659: EQ
0000065a: ISZERO
0000065b: PUSH2 0x066b
0000065e: JUMPI
0000065f: PUSH1 0x00
00000661: PUSH2 0x03c0
00000664: MSTORE
00000665: PUSH1 0x20
00000667: PUSH2 0x03c0
0000066a: RETURN
0000066b: JUMPDEST
0000066c: PUSH1 0x00
0000066e: PUSH2 0x03e0
00000671: MSTORE
00000672: PUSH2 0x03a0
00000675: MLOAD
00000676: PUSH2 0x2722
00000679: PUSH2 0x0120
0000067c: MLOAD
0000067d: MUL
0000067e: PUSH2 0x2714
00000681: ADD
00000682: SLOAD
00000683: OR
00000684: PUSH2 0x2722
00000687: PUSH2 0x0120
0000068a: MLOAD
0000068b: MUL
0000068c: PUSH2 0x2714
0000068f: ADD
00000690: SSTORE
00000691: PUSH1 0x1c
00000693: PUSH1 0x40
00000695: MSIZE
00000696: SWAP1
00000697: MSIZE
00000698: ADD
00000699: PUSH1 0x00
0000069b: SWAP1
0000069c: MSTORE
0000069d: ADD
0000069e: PUSH2 0x0360
000006a1: MLOAD
000006a2: DUP2
000006a3: MSTORE
000006a4: CALLER
000006a5: PUSH2 0x0120
000006a8: MLOAD
000006a9: PUSH32 0xcfa82ef0390c8f3e57ebe6c0665352a383667e792af012d350d9786ee5173d26
000006ca: PUSH1 0x20
000006cc: DUP5
000006cd: LOG3
000006ce: POP
000006cf: PUSH2 0x03e7
000006d2: PUSH2 0x0380
000006d5: MLOAD
000006d6: EQ
000006d7: ISZERO
000006d8: ISZERO
000006d9: PUSH2 0x077e
000006dc: JUMPI
000006dd: PUSH2 0x0360
000006e0: MLOAD
000006e1: ISZERO
000006e2: PUSH2 0x0731
000006e5: JUMPI
000006e6: PUSH1 0x01
000006e8: PUSH2 0x2722
000006eb: PUSH2 0x0120
000006ee: MLOAD
000006ef: MUL
000006f0: PUSH2 0x2715
000006f3: ADD
000006f4: SLOAD
000006f5: ADD
000006f6: PUSH2 0x2722
000006f9: PUSH2 0x0120
000006fc: MLOAD
000006fd: MUL
000006fe: PUSH2 0x2715
00000701: ADD
00000702: SSTORE
00000703: PUSH2 0x2722
00000706: PUSH2 0x0120
00000709: MLOAD
0000070a: MUL
0000070b: PUSH2 0x2713
0000070e: ADD
0000070f: SLOAD
00000710: PUSH1 0x02
00000712: PUSH2 0x2722
00000715: PUSH2 0x0120
00000718: MLOAD
00000719: MUL
0000071a: PUSH2 0x2715
0000071d: ADD
0000071e: SLOAD
0000071f: MUL
00000720: SGT
00000721: ISZERO
00000722: PUSH2 0x072c
00000725: JUMPI
00000726: PUSH1 0x01
00000728: PUSH2 0x03e0
0000072b: MSTORE
0000072c: JUMPDEST
0000072d: PUSH2 0x0779
00000730: JUMP
00000731: JUMPDEST
00000732: PUSH1 0x01
00000734: PUSH2 0x2722
00000737: PUSH2 0x0120
0000073a: MLOAD
0000073b: MUL
0000073c: PUSH2 0x2716
0000073f: ADD
00000740: SLOAD
00000741: ADD
00000742: PUSH2 0x2722
00000745: PUSH2 0x0120
00000748: MLOAD
00000749: MUL
0000074a: PUSH2 0x2716
0000074d: ADD
0000074e: SSTORE
0000074f: PUSH2 0x2722
00000752: PUSH2 0x0120
00000755: MLOAD
00000756: MUL
00000757: PUSH2 0x2713
0000075a: ADD
0000075b: SLOAD
0000075c: PUSH1 0x02
0000075e: PUSH2 0x2722
00000761: PUSH2 0x0120
00000764: MLOAD
00000765: MUL
00000766: PUSH2 0x2716
00000769: ADD
0000076a: SLOAD
0000076b: MUL
0000076c: SGT
0000076d: ISZERO
0000076e: PUSH2 0x0778
00000771: JUMPI
00000772: PUSH1 0x02
00000774: PUSH2 0x03e0
00000777: MSTORE
00000778: JUMPDEST
00000779: JUMPDEST
0000077a: PUSH2 0x0796
0000077d: JUMP
0000077e: JUMPDEST
0000077f: PUSH2 0x0360
00000782: MLOAD
00000783: ISZERO
00000784: PUSH2 0x078e
00000787: JUMPI
00000788: PUSH1 0x01
0000078a: PUSH2 0x0791
0000078d: JUMP
0000078e: JUMPDEST
0000078f: PUSH1 0x02
00000791: JUMPDEST
00000792: PUSH2 0x03e0
00000795: MSTORE
00000796: JUMPDEST
00000797: PUSH2 0x03e0
0000079a: MLOAD
0000079b: ISZERO
0000079c: PUSH2 0x09e1
0000079f: JUMPI
000007a0: PUSH1 0x00
000007a2: PUSH2 0x0140
000007a5: MSTORE
000007a6: PUSH2 0x2722
000007a9: PUSH2 0x0120
000007ac: MLOAD
000007ad: MUL
000007ae: PUSH2 0x2716
000007b1: ADD
000007b2: SLOAD
000007b3: PUSH2 0x2722
000007b6: PUSH2 0x0120
000007b9: MLOAD
000007ba: MUL
000007bb: PUSH2 0x2715
000007be: ADD
000007bf: SLOAD
000007c0: ADD
000007c1: PUSH2 0x0400
000007c4: MSTORE
000007c5: PUSH2 0x0400
000007c8: MLOAD
000007c9: PUSH2 0x2722
000007cc: PUSH2 0x0120
000007cf: MLOAD
000007d0: MUL
000007d1: PUSH2 0x2717
000007d4: ADD
000007d5: SLOAD
000007d6: SDIV
000007d7: PUSH2 0x0420
000007da: MSTORE
000007db: JUMPDEST
000007dc: PUSH2 0x2722
000007df: PUSH2 0x0120
000007e2: MLOAD
000007e3: MUL
000007e4: PUSH2 0x2713
000007e7: ADD
000007e8: SLOAD
000007e9: PUSH2 0x0140
000007ec: MLOAD
000007ed: SLT
000007ee: ISZERO
000007ef: PUSH2 0x083f
000007f2: JUMPI
000007f3: PUSH2 0x2722
000007f6: PUSH2 0x0120
000007f9: MLOAD
000007fa: MUL
000007fb: PUSH2 0x2714
000007fe: ADD
000007ff: SLOAD
00000800: PUSH2 0x0140
00000803: MLOAD
00000804: PUSH1 0x02
00000806: EXP
00000807: AND
00000808: ISZERO
00000809: PUSH2 0x082f
0000080c: JUMPI
0000080d: PUSH1 0x00
0000080f: PUSH1 0x00
00000811: PUSH1 0x00
00000813: PUSH1 0x00
00000815: PUSH2 0x0420
00000818: MLOAD
00000819: PUSH2 0x0140
0000081c: MLOAD
0000081d: PUSH2 0x2722
00000820: PUSH2 0x0120
00000823: MLOAD
00000824: MUL
00000825: PUSH1 0x03
00000827: ADD
00000828: ADD
00000829: SLOAD
0000082a: PUSH2 0x1388
0000082d: CALL
0000082e: POP
0000082f: JUMPDEST
00000830: PUSH1 0x01
00000832: PUSH2 0x0140
00000835: MLOAD
00000836: ADD
00000837: PUSH2 0x0140
0000083a: MSTORE
0000083b: PUSH2 0x07db
0000083e: JUMP
0000083f: JUMPDEST
00000840: PUSH1 0x01
00000842: PUSH2 0x03e0
00000845: MLOAD
00000846: EQ
00000847: ISZERO
00000848: PUSH2 0x085c
0000084b: JUMPI
0000084c: PUSH2 0x2722
0000084f: PUSH2 0x0120
00000852: MLOAD
00000853: MUL
00000854: PUSH1 0x01
00000856: ADD
00000857: SLOAD
00000858: PUSH2 0x0869
0000085b: JUMP
0000085c: JUMPDEST
0000085d: PUSH2 0x2722
00000860: PUSH2 0x0120
00000863: MLOAD
00000864: MUL
00000865: PUSH1 0x02
00000867: ADD
00000868: SLOAD
00000869: JUMPDEST
0000086a: PUSH2 0x0440
0000086d: MSTORE
0000086e: PUSH1 0x00
00000870: PUSH1 0x00
00000872: PUSH1 0x00
00000874: PUSH1 0x00
00000876: PUSH1 0x00
00000878: PUSH2 0x0400
0000087b: MLOAD
0000087c: EQ
0000087d: PUSH2 0x2722
00000880: PUSH2 0x0120
00000883: MLOAD
00000884: MUL
00000885: PUSH2 0x2717
00000888: ADD
00000889: SLOAD
0000088a: MUL
0000088b: PUSH2 0x2722
0000088e: PUSH2 0x0120
00000891: MLOAD
00000892: MUL
00000893: SLOAD
00000894: ADD
00000895: PUSH2 0x0440
00000898: MLOAD
00000899: PUSH2 0x1388
0000089c: CALL
0000089d: POP
0000089e: PUSH1 0x1c
000008a0: PUSH1 0x40
000008a2: MSIZE
000008a3: SWAP1
000008a4: MSIZE
000008a5: ADD
000008a6: PUSH1 0x00
000008a8: SWAP1
000008a9: MSTORE
000008aa: ADD
000008ab: PUSH2 0x0440
000008ae: MLOAD
000008af: DUP2
000008b0: MSTORE
000008b1: PUSH2 0x0120
000008b4: MLOAD
000008b5: PUSH32 0xd73429fe3d5eae9e487e60af3e9befceddbdbd53695543a735e2d8face8269d3
000008d6: PUSH1 0x20
000008d8: DUP4
000008d9: LOG2
000008da: POP
000008db: PUSH1 0x00
000008dd: PUSH2 0x2722
000008e0: PUSH2 0x0120
000008e3: MLOAD
000008e4: MUL
000008e5: SSTORE
000008e6: PUSH1 0x00
000008e8: PUSH2 0x2722
000008eb: PUSH2 0x0120
000008ee: MLOAD
000008ef: MUL
000008f0: PUSH1 0x01
000008f2: ADD
000008f3: SSTORE
000008f4: PUSH1 0x00
000008f6: PUSH2 0x2722
000008f9: PUSH2 0x0120
000008fc: MLOAD
000008fd: MUL
000008fe: PUSH1 0x02
00000900: ADD
00000901: SSTORE
00000902: PUSH1 0x00
00000904: PUSH2 0x0140
00000907: MSTORE
00000908: JUMPDEST
00000909: PUSH2 0x2722
0000090c: PUSH2 0x0120
0000090f: MLOAD
00000910: MUL
00000911: PUSH2 0x2713
00000914: ADD
00000915: SLOAD
00000916: PUSH2 0x0140
00000919: MLOAD
0000091a: SLT
0000091b: ISZERO
0000091c: PUSH2 0x0942
0000091f: JUMPI
00000920: PUSH1 0x00
00000922: PUSH2 0x0140
00000925: MLOAD
00000926: PUSH2 0x2722
00000929: PUSH2 0x0120
0000092c: MLOAD
0000092d: MUL
0000092e: PUSH1 0x03
00000930: ADD
00000931: ADD
00000932: SSTORE
00000933: PUSH1 0x01
00000935: PUSH2 0x0140
00000938: MLOAD
00000939: ADD
0000093a: PUSH2 0x0140
0000093d: MSTORE
0000093e: PUSH2 0x0908
00000941: JUMP
00000942: JUMPDEST
00000943: PUSH1 0x00
00000945: PUSH2 0x2722
00000948: PUSH2 0x0120
0000094b: MLOAD
0000094c: MUL
0000094d: PUSH2 0x2713
00000950: ADD
00000951: SSTORE
00000952: PUSH1 0x00
00000954: PUSH2 0x2722
00000957: PUSH2 0x0120
0000095a: MLOAD
0000095b: MUL
0000095c: PUSH2 0x2714
0000095f: ADD
00000960: SSTORE
00000961: PUSH1 0x00
00000963: PUSH2 0x2722
00000966: PUSH2 0x0120
00000969: MLOAD
0000096a: MUL
0000096b: PUSH2 0x2715
0000096e: ADD
0000096f: SSTORE
00000970: PUSH1 0x00
00000972: PUSH2 0x2722
00000975: PUSH2 0x0120
00000978: MLOAD
00000979: MUL
0000097a: PUSH2 0x2716
0000097d: ADD
0000097e: SSTORE
0000097f: PUSH1 0x00
00000981: PUSH2 0x2722
00000984: PUSH2 0x0120
00000987: MLOAD
00000988: MUL
00000989: PUSH2 0x2717
0000098c: ADD
0000098d: SSTORE
0000098e: PUSH1 0x00
00000990: PUSH2 0x0140
00000993: MSTORE
00000994: JUMPDEST
00000995: PUSH1 0x0a
00000997: PUSH2 0x0140
0000099a: MLOAD
0000099b: SLT
0000099c: ISZERO
0000099d: PUSH2 0x09e0
000009a0: JUMPI
000009a1: PUSH1 0x00
000009a3: PUSH2 0x0140
000009a6: MLOAD
000009a7: PUSH2 0x2722
000009aa: PUSH2 0x0120
000009ad: MLOAD
000009ae: MUL
000009af: PUSH2 0x2718
000009b2: ADD
000009b3: ADD
000009b4: SLOAD
000009b5: EQ
000009b6: ISZERO
000009b7: ISZERO
000009b8: PUSH2 0x09d0
000009bb: JUMPI
000009bc: PUSH1 0x00
000009be: PUSH2 0x0140
000009c1: MLOAD
000009c2: PUSH2 0x2722
000009c5: PUSH2 0x0120
000009c8: MLOAD
000009c9: MUL
000009ca: PUSH2 0x2718
000009cd: ADD
000009ce: ADD
000009cf: SSTORE
000009d0: JUMPDEST
000009d1: PUSH1 0x01
000009d3: PUSH2 0x0140
000009d6: MLOAD
000009d7: ADD
000009d8: PUSH2 0x0140
000009db: MSTORE
000009dc: PUSH2 0x0994
000009df: JUMP
000009e0: JUMPDEST
000009e1: JUMPDEST
000009e2: PUSH1 0x01
000009e4: PUSH2 0x0460
000009e7: MSTORE
000009e8: PUSH1 0x20
000009ea: PUSH2 0x0460
000009ed: RETURN
000009ee: JUMPDEST
000009ef: POP
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
medium other detector Untrusted CALL target/value reachable 45 yes yes
view
trace_id: 0x3b0a391c422c78338b0f0787124bdb437bd53db775c371d87fbbdcb63c23b604
call_targets: 0x0000000000000000000000000000000000000004, 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8
target_varies: yes
classification: target_varies
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "confirmed",
    "attempts": 1,
    "trace_id": "0x3b0a391c422c78338b0f0787124bdb437bd53db775c371d87fbbdcb63c23b604",
    "confirmed": true,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x0000000000000000000000000000000000000004",
        "0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8"
    ],
    "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": "0x5a9809ed",
            "selector": "0x5a9809ed",
            "calldata_variants": [
                "0x5a9809ed",
                "0x5a9809ed0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd5f39e24",
            "selector": "0xd5f39e24",
            "calldata_variants": [
                "0xd5f39e24",
                "0xd5f39e240000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa11af387",
            "selector": "0xa11af387",
            "calldata_variants": [
                "0xa11af387",
                "0xa11af3870000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x7b0ae934",
            "selector": "0x7b0ae934",
            "calldata_variants": [
                "0x7b0ae934",
                "0x7b0ae9340000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd966f799",
            "selector": "0xd966f799",
            "calldata_variants": [
                "0xd966f799",
                "0xd966f7990000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3cd86b77",
            "selector": "0x3cd86b77",
            "calldata_variants": [
                "0x3cd86b77",
                "0x3cd86b770000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x8f26e0fe",
            "selector": "0x8f26e0fe",
            "calldata_variants": [
                "0x8f26e0fe",
                "0x8f26e0fe0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf2e497ae",
            "selector": "0xf2e497ae",
            "calldata_variants": [
                "0xf2e497ae",
                "0xf2e497ae0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 652,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "constant",
            "target_expression_category": "computed"
        },
        {
            "pc": 691,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 731,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 6,
    "guards_detected": [
        {
            "pc": 1453,
            "type": "msg_sender_eq_storage"
        },
        {
            "pc": 1535,
            "type": "msg_sender_eq_storage"
        },
        {
            "pc": 1582,
            "type": "msg_sender_eq_storage"
        }
    ],
    "untrusted_call_count": 3
}
medium other detector ETH value transfer possible 40 yes yes
view
trace_id: 0x3b0a391c422c78338b0f0787124bdb437bd53db775c371d87fbbdcb63c23b604
call_targets: 0x0000000000000000000000000000000000000004, 0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8
target_varies: yes
classification: target_varies
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "confirmed",
    "attempts": 1,
    "trace_id": "0x3b0a391c422c78338b0f0787124bdb437bd53db775c371d87fbbdcb63c23b604",
    "confirmed": true,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x0000000000000000000000000000000000000004",
        "0x7e2d0fe0ffdd78c264f8d40d19acb7d04390c6e8"
    ],
    "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": "0x5a9809ed",
            "selector": "0x5a9809ed",
            "calldata_variants": [
                "0x5a9809ed",
                "0x5a9809ed0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd5f39e24",
            "selector": "0xd5f39e24",
            "calldata_variants": [
                "0xd5f39e24",
                "0xd5f39e240000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa11af387",
            "selector": "0xa11af387",
            "calldata_variants": [
                "0xa11af387",
                "0xa11af3870000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x7b0ae934",
            "selector": "0x7b0ae934",
            "calldata_variants": [
                "0x7b0ae934",
                "0x7b0ae9340000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd966f799",
            "selector": "0xd966f799",
            "calldata_variants": [
                "0xd966f799",
                "0xd966f7990000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x3cd86b77",
            "selector": "0x3cd86b77",
            "calldata_variants": [
                "0x3cd86b77",
                "0x3cd86b770000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x8f26e0fe",
            "selector": "0x8f26e0fe",
            "calldata_variants": [
                "0x8f26e0fe",
                "0x8f26e0fe0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf2e497ae",
            "selector": "0xf2e497ae",
            "calldata_variants": [
                "0xf2e497ae",
                "0xf2e497ae0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 652,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "constant",
            "target_expression_category": "computed"
        },
        {
            "pc": 691,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 731,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 3,
    "guards_detected": [
        {
            "pc": 1453,
            "type": "msg_sender_eq_storage"
        },
        {
            "pc": 1535,
            "type": "msg_sender_eq_storage"
        },
        {
            "pc": 1582,
            "type": "msg_sender_eq_storage"
        }
    ]
}
medium other codex Unchecked fixed-gas payout CALLs can fail silently while entitlement state is cleared 75 no
view
evidence_json
{
    "evidence": "At `pc:0x82d` and `pc:0x89c`, the contract performs `CALL` after pushing gas `0x1388` (5000). The success bit is immediately discarded with `POP` at the next instruction (`pc:0x82e` / `pc:0x89d`). After the later payout path, the bytecode emits an event and clears storage with `SSTORE` at `pc:0x8e5`, `pc:0x8f3`, `pc:0x901`, `pc:0x932`, `pc:0x951`, `pc:0x960`, `pc:0x96f`, `pc:0x97e`, `pc:0x98d`, and `pc:0x9cf`. Slot names are unknown from bytecode, but the sequence is consistent with state cleanup after unverified external value transfers.",
    "locations": [
        "selector:0xf2e497ae",
        "pc:0x82d",
        "pc:0x89c",
        "pc:0x8e5",
        "pc:0x932",
        "pc:0x9cf"
    ],
    "recommendation": "Do not ignore CALL results on value transfers. Revert on failed payouts, or convert this logic to a pull-payment model that records unpaid balances for later withdrawal. Avoid fixed 5000-gas value pushes unless contract recipients are intentionally unsupported and that restriction is enforced/documented.",
    "exploit_scenario": "In the best-effort selector path at `0xf2e497ae`, payouts are sent to computed storage-derived addresses. If one of those recipients is a contract wallet, has a reverting `receive`/fallback, or simply needs more than the hard-coded 5000 gas stipend, the CALL can fail. The bytecode then continues, and later zeroes multiple storage slots associated with the same account/round, so the recipient can lose their claim while the ETH remains in the contract."
}
low other codex Overpayment refund branch ignores refund failure and appears to leave excess ETH trapped 65 no
view
evidence_json
{
    "evidence": "The branch at `pc:0x6e`-`pc:0x74` compares a calldata-derived amount against `CALLVALUE` and jumps into the refund path. The refund itself occurs at `pc:0x82` via `CALL` to `CALLER` with `CALLVALUE`; the return status is discarded by `POP` at `pc:0x83`, and the function returns a sentinel all-ones value through `pc:0x84`-`pc:0x92` instead of reverting. Because this is bytecode-only analysis, selector semantics are uncertain, but the unchecked refund pattern is explicit.",
    "locations": [
        "selector:0x5a9809ed",
        "pc:0x6e",
        "pc:0x82",
        "pc:0x83"
    ],
    "recommendation": "Treat refund failure as a hard failure and revert, or store refundable balances and require users to withdraw explicitly. Avoid push-style refunds to arbitrary callers when failure is ignored.",
    "exploit_scenario": "In the payable entry selector `0x5a9809ed`, an overpayment branch sends `msg.value` back to `msg.sender` with a raw CALL. If the caller is a contract that rejects ETH or needs more gas than provided, that refund can fail silently. The function then returns a sentinel value instead of reverting, so the excess ETH may remain stuck in the contract with no visible recovery path in the bytecode."
}