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

Analysis Run

019b3836-3278-73cd-b85f-dc1b759c448b

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

What survived the funnel

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

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

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
2959 artifact.fetch complete 1 / 3 3 months ago
2960 tool.cast_disasm complete 1 / 3 3 months ago
46204 analysis.bundle complete 1 / 3 1 week ago
46205 capability.graph complete 1 / 3 1 week ago
46206 detector.run complete 1 / 3 1 week ago
46207 validation.fork complete 1 / 3 1 week ago
113258 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 strongly resembles an old ERC-20 variant with one critical issue: a publicly callable constructor-like function can reset metadata and assign a fresh token balance to any caller. There is also a medium-confidence allowance/accounting deviation where `allowance()` appears to report the original approval while `transferFrom` tracks spent amount in a second mapping, so remaining spendable allowance is not what the standard getter returns.
View stdout
{"no_findings":false,"summary":"Bytecode strongly resembles an old ERC-20 variant with one critical issue: a publicly callable constructor-like function can reset metadata and assign a fresh token balance to any caller. There is also a medium-confidence allowance/accounting deviation where `allowance()` appears to report the original approval while `transferFrom` tracks spent amount in a second mapping, so remaining spendable allowance is not what the standard getter returns.","findings":[{"severity":"critical","category":"access_control","title":"Public constructor-like function lets any caller mint/reset token state","exploit_scenario":"An attacker calls selector `0x1d2bca17` directly. The routine writes `0x0bde31` into the caller-derived slot under mapping slot `0x03`, then overwrites the metadata slots used by the token (`slot 0`, `slot 1`, and low byte of `slot 2`). Because no guard is detected, any account can invoke it to grant itself a fresh balance and repeat after spending, effectively breaking token supply integrity.","recommendation":"Remove or permanently disable this initializer path. If this was meant to be a constructor, replace it with an actual constructor/one-time initializer guard and prevent any post-deployment entry. If already deployed, treat the token as compromised unless this selector is provably unreachable through a proxy/admin wrapper.","evidence":"Dispatcher routes `0x1d2bca17` to `pc 0x00e8`. Within that path, the code computes a `CALLER`-keyed hash for slot `0x03` and stores constant `0x0bde31` (`pc 0x0177`-`0x018f`). It then stores hardcoded metadata into storage: name-like data in `slot 0` (`pc 0x0198`-`0x01d4`), symbol-like data in helper `pc 0x058e`-`0x05dc`, and sets the low byte of `slot 2` to `0x07` in `pc 0x0627`-`0x0636`. The artifact reports `auth.guards: []`, so there is no detected access control on this path. Selector inference from bytecode is best-effort, but this routine has clear constructor/initializer behavior.","locations":["selector:0x1d2bca17","pc:0x00e8","pc:0x018f","pc:0x01d4","pc:0x05dc","pc:0x0636"]},{"severity":"medium","category":"other","title":"Allowance accounting appears non-standard and can desynchronize from `allowance()`","exploit_scenario":"A spender uses `transferFrom` until the separate consumed-allowance mapping reaches the approved amount. If the owner later approves the same nominal amount again, `allowance(owner,spender)` can still report that amount, but `transferFrom` may fail because the contract adds a second stored value before checking the limit. Integrations that rely on standard ERC-20 `allowance()` semantics can mis-handle approvals or become stuck.","recommendation":"Use a single remaining-allowance source of truth, or reset the consumed-allowance mapping whenever a new approval is set. If this split-accounting design is intentional, expose an explicit remaining-allowance getter and avoid presenting `0xdd62ed3e` as standard ERC-20 allowance semantics.","evidence":"`0xdd62ed3e` reads a nested mapping rooted at slot `0x04` (`pc 0x049e`-`0x04bb`). `0xdc3080f2` reads a separate nested mapping rooted at slot `0x05` (`pc 0x0479`-`0x0497`). In `transferFrom` (`selector 0x23b872dd`), the code loads one mapping value around `pc 0x071d`-`0x0720`, then loads the second around `pc 0x0723`-`0x0735`, adds them, and compares the sum against the requested amount at `pc 0x0736`-`0x0739`; later it updates the slot-`0x05` mapping at `pc 0x077c`-`0x0793` instead of decrementing the slot-`0x04` value. This is a bytecode-level inference, so the exact intended names are uncertain, but the storage behavior is inconsistent with standard ERC-20 remaining-allowance accounting.","locations":["selector:0x23b872dd","selector:0xdd62ed3e","selector:0xdc3080f2","pc:0x049e","pc:0x0479","pc:0x0734","pc:0x0793"]}]}
View stderr
OpenAI Codex v0.118.0 (research preview)
--------
workdir: /tmp/codex-ewkgz7je
model: gpt-5.4
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: none
session id: 019d5bb8-b65a-7ce1-a5f7-b0c05864e012
--------
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-ewkgz7je
 succeeded in 0ms:
/tmp/codex-ewkgz7je
BYTECODE_BUNDLE.json
codex-output-schema.json

exec
/bin/bash -lc "sed -n '1,220p' BYTECODE_BUNDLE.json" in /tmp/codex-ewkgz7je
 succeeded in 0ms:
{
  "analysis_artifact": {
    "address": "0x2bf4a701470dfe06babd313926a1ebcdcd5806c1",
    "artifact_hash": "0x6bc4ee956cff75177d02e8a1397e9bb8f58c445619b5d6d06b9f3054092fd025",
    "artifact_json": {
      "auth": {
        "guards": []
      },
      "basic_blocks": [
        {
          "end_pc": 10,
          "hash": "0xea84cd9b520f9ac15ee69facebf0514d237ae3f350495e573c06816e7e3d08cf",
          "opcodes": [
            "PUSH1",
            "PUSH1",
            "MSTORE",
            "CALLDATASIZE",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 0
        },
        {
          "end_pc": 30,
          "hash": "0x8351f5fd39e1769e53f7b93891e5bf598f6939b3ca7289b6c03bc34019c93201",
          "opcodes": [
            "PUSH1",
            "PUSH1",
            "EXP",
            "PUSH1",
            "CALLDATALOAD",
            "DIV",
            "PUSH4",
            "OP_81",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 11
        },
        {
          "end_pc": 41,
          "hash": "0xc6fd74ad853f095f612f149f1918dd822cd863808f0ce7f2b76117fb4ea5344f",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 31
        },
        {
          "end_pc": 52,
          "hash": "0x86b132c02d74345e3669392f13d557fee5be3dd306c1decb7af80dc27e4012f3",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 42
        },
        {
          "end_pc": 63,
          "hash": "0xcf15259dc9256709ec8a330b00ed4ffb27f4e6f713ad86f872d1eea71facf776",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 53
        },
        {
          "end_pc": 74,
          "hash": "0xd041fc3826ada47c2dd3585ae5327095fdd25e5ee3a033d275a58bac781ecaad",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 64
        },
        {
          "end_pc": 85,
          "hash": "0x402e0d9b5fc7aa3fd5e0abaf9417406ba28113ed0344e879f014bf2444760871",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 75
        },
        {
          "end_pc": 96,
          "hash": "0xb2632e5d08ff54d657d7f1be3ffe07873eaa3613253c94021440ba172dfff39d",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 86
        },
        {
          "end_pc": 107,
          "hash": "0x189d455be9a07214470ddb880c09d36b481be31e6764acfbaa9a6ec5cb87f8f2",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 97
        },
        {
          "end_pc": 118,
          "hash": "0x913f65d41d688d0ab09dc125f70c4599d76800bd95c19554e664ba52cbafdee2",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 108
        },
        {
          "end_pc": 129,
          "hash": "0x0506ce85c0c99e37ea2c4d029a53a6517024921dcef3c57f05f5488eb2e0206b",
          "opcodes": [
            "OP_80",
            "PUSH4",
            "EQ",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 119
        },
        {
          "end_pc": 137,
          "hash": "0x5fdc4ebfb5f2bf9f109375ae038006011da7c87835f4392820e2c0b70ac9a983",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 130
        },
        {
          "end_pc": 204,
          "hash": "0x4ba0247477ed45895b0cd6685042a6c0a9d4971d088bb1726ee5d7fa88aa8915",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "OP_80",
            "SLOAD",
            "PUSH1",
            "OP_80",
            "MLOAD",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "OP_85",
            "AND",
            "ISZERO",
            "PUSH2",
            "MUL",
            "PUSH1",
            "NOT",
            "ADD",
            "OP_90",
            "OP_94",
            "AND",
            "OP_93",
            "OP_90",
            "OP_93",
            "DIV",
            "PUSH1",
            "OP_81",
            "ADD",
            "OP_84",
            "OP_90",
            "DIV",
            "OP_84",
            "MUL",
            "OP_82",
            "ADD",
            "OP_84",
            "ADD",
            "OP_90",
            "OP_92",
            "MSTORE",
            "OP_81",
            "OP_81",
            "MSTORE",
            "OP_92",
            "OP_91",
            "OP_83",
            "ADD",
            "OP_82",
            "OP_82",
            "OP_80",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 138

exec
/bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-ewkgz7je
 succeeded in 0ms:
{"type": "object", "additionalProperties": false, "required": ["no_findings", "summary", "findings"], "properties": {"no_findings": {"type": "boolean"}, "summary": {"type": "string"}, "findings": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["severity", "category", "title", "evidence", "locations", "exploit_scenario", "recommendation"], "properties": {"severity": {"type": "string", "enum": ["info", "low", "medium", "high", "critical"]}, "category": {"type": "string", "enum": ["access_control", "reentrancy", "math", "oracle", "upgradeability", "auth", "other"]}, "title": {"type": "string"}, "exploit_scenario": {"type": "string"}, "recommendation": {"type": "string"}, "evidence": {"type": "string"}, "locations": {"type": "array", "items": {"type": "string"}}}}}}}
exec
/bin/bash -lc "sed -n '221,520p' BYTECODE_BUNDLE.json" in /tmp/codex-ewkgz7je
 succeeded in 0ms:
        },
        {
          "end_pc": 212,
          "hash": "0xe3f66fcc4b796d24c4e0d9ec3b47fe5a4e8b2879347ec6233927ef035c1a0583",
          "opcodes": [
            "OP_80",
            "PUSH1",
            "LT",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 205
        },
        {
          "end_pc": 231,
          "hash": "0x4f09165457d8e4bd403564bb9bb288273e684b89410e4eb281615acb34cd5c1b",
          "opcodes": [
            "PUSH2",
            "OP_80",
            "OP_83",
            "SLOAD",
            "DIV",
            "MUL",
            "OP_83",
            "MSTORE",
            "OP_91",
            "PUSH1",
            "ADD",
            "OP_91",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 213
        },
        {
          "end_pc": 542,
          "hash": "0x25c6d246c1a7001d0c4e764d2efa26311d71b9166856765b1f27972831842777",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "OP_80",
            "MLOAD",
            "PUSH1",
            "PUSH1",
            "OP_80",
            "CALLDATALOAD",
            "PUSH1",
            "OP_81",
            "OP_81",
            "ADD",
            "CALLDATALOAD",
            "PUSH1",
            "OP_81",
            "ADD",
            "OP_85",
            "OP_90",
            "DIV",
            "OP_85",
            "MUL",
            "OP_86",
            "ADD",
            "OP_85",
            "ADD",
            "OP_90",
            "OP_96",
            "MSTORE",
            "OP_85",
            "OP_85",
            "MSTORE",
            "PUSH2",
            "OP_95",
            "OP_81",
            "CALLDATALOAD",
            "OP_95",
            "OP_91",
            "OP_94",
            "PUSH1",
            "OP_94",
            "OP_92",
            "OP_93",
            "OP_90",
            "OP_92",
            "ADD",
            "OP_91",
            "OP_81",
            "OP_90",
            "OP_84",
            "ADD",
            "OP_83",
            "OP_82",
            "OP_80",
            "OP_82",
            "OP_84",
            "CALLDATACOPY",
            "POP",
            "POP",
            "PUSH1",
            "OP_80",
            "MLOAD",
            "PUSH1",
            "PUSH1",
            "CALLDATALOAD",
            "OP_80",
            "OP_8B",
            "ADD",
            "CALLDATALOAD",
            "PUSH1",
            "OP_81",
            "ADD",
            "OP_83",
            "OP_90",
            "DIV",
            "OP_83",
            "MUL",
            "OP_84",
            "ADD",
            "OP_83",
            "ADD",
            "OP_90",
            "OP_94",
            "MSTORE",
            "OP_83",
            "OP_83",
            "MSTORE",
            "OP_97",
            "OP_99",
            "OP_98",
            "CALLDATALOAD",
            "OP_98",
            "OP_97",
            "PUSH1",
            "OP_97",
            "POP",
            "OP_91",
            "OP_95",
            "POP",
            "PUSH1",
            "OP_91",
            "OP_90",
            "OP_91",
            "ADD",
            "OP_93",
            "POP",
            "OP_90",
            "OP_91",
            "POP",
            "OP_81",
            "OP_90",
            "OP_84",
            "ADD",
            "OP_83",
            "OP_82",
            "OP_80",
            "OP_82",
            "OP_84",
            "CALLDATACOPY",
            "POP",
            "POP",
            "POP",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "CALLER",
            "AND",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "OP_80",
            "OP_83",
            "SHA3",
            "PUSH3",
            "OP_90",
            "SSTORE",
            "OP_80",
            "MLOAD",
            "OP_80",
            "OP_82",
            "ADD",
            "OP_90",
            "OP_91",
            "MSTORE",
            "PUSH1",
            "OP_81",
            "MSTORE",
            "PUSH32",
            "OP_90",
            "OP_82",
            "ADD",
            "OP_90",
            "OP_81",
            "MSTORE",
            "OP_82",
            "SLOAD",
            "OP_83",
            "OP_80",
            "MSTORE",
            "OP_90",
            "MLOAD",
            "PUSH1",
            "PUSH1",
            "NOT",
            "OP_90",
            "OP_91",
            "AND",
            "OR",
            "OP_83",
            "SSTORE",
            "OP_95",
            "OP_97",
            "POP",
            "OP_90",
            "OP_95",
            "POP",
            "PUSH2",
            "OP_94",
            "PUSH1",
            "PUSH1",
            "OP_82",
            "AND",
            "ISZERO",
            "PUSH2",
            "MUL",
            "PUSH1",
            "NOT",
            "ADD",
            "OP_90",
            "OP_91",
            "AND",
            "DIV",
            "PUSH1",
            "ADD",
            "DIV",
            "PUSH32",
            "OP_90",
            "OP_81",
            "ADD",
            "OP_93",
            "POP",
            "OP_91",
            "POP",
            "POP"
          ],
          "start_pc": 232
        },
        {
          "end_pc": 551,
          "hash": "0xd056b6026fab1628be6649a3580ca22ed8646a5a53cfc58722b2f321688aafc4",
          "opcodes": [
            "JUMPDEST",
            "OP_80",
            "OP_82",
            "GT",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 543
        },
        {
          "end_pc": 562,
          "hash": "0x521d68e3a2769ecfbf95482fac94470bbfb7fdeffc8355303e4271d7f253ea1f",
          "opcodes": [
            "PUSH1",
            "OP_81",
            "SSTORE",
            "PUSH1",
            "ADD",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 552
        },
        {
          "end_pc": 608,
          "hash": "0x307b5c9c9804a9358c30661aa9b328b3302d17931bda6ac94f853d642331bac9",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_83",
            "AND",

exec
/bin/bash -lc "sed -n '521,920p' BYTECODE_BUNDLE.json" in /tmp/codex-ewkgz7je
 succeeded in 0ms:
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "OP_81",
            "SHA3",
            "SLOAD",
            "OP_82",
            "OP_90",
            "LT",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 563
        },
        {
          "end_pc": 612,
          "hash": "0xbd3d6a8f0812c3bb89c52c8c35229f03715c8326ec0f07eb72c17e37012345cd",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 609
        },
        {
          "end_pc": 624,
          "hash": "0xba3756c18ca2a0bf668476fd8401c3d7ef936051a3b55324ffece6cde555fe84",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "SLOAD",
            "PUSH1",
            "AND",
            "OP_81",
            "JUMP"
          ],
          "start_pc": 613
        },
        {
          "end_pc": 648,
          "hash": "0x616b695ce52e7d33f7aa1114c46e648c7c4ed0176b5035f39dae59f0a9cbb738",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "OP_90",
            "SHA3",
            "SLOAD",
            "OP_81",
            "JUMP"
          ],
          "start_pc": 625
        },
        {
          "end_pc": 714,
          "hash": "0xc407064f3826f1533fea97a121941ad10b1c4451bc72666e7c3928d4cc795c0b",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "OP_80",
            "SLOAD",
            "PUSH1",
            "OP_80",
            "MLOAD",
            "PUSH1",
            "PUSH1",
            "OP_84",
            "OP_86",
            "AND",
            "ISZERO",
            "PUSH2",
            "MUL",
            "PUSH1",
            "NOT",
            "ADD",
            "OP_90",
            "OP_94",
            "AND",
            "OP_93",
            "OP_90",
            "OP_93",
            "DIV",
            "PUSH1",
            "OP_81",
            "ADD",
            "OP_84",
            "OP_90",
            "DIV",
            "OP_84",
            "MUL",
            "OP_82",
            "ADD",
            "OP_84",
            "ADD",
            "OP_90",
            "OP_92",
            "MSTORE",
            "OP_81",
            "OP_81",
            "MSTORE",
            "OP_92",
            "OP_91",
            "OP_83",
            "ADD",
            "OP_82",
            "OP_82",
            "OP_80",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 649
        },
        {
          "end_pc": 722,
          "hash": "0xbfffff99d1856d203d08caa9ba8664824fd782319281384dd4bc324dc3077714",
          "opcodes": [
            "OP_80",
            "PUSH1",
            "LT",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 715
        },
        {
          "end_pc": 741,
          "hash": "0xcc47acd6451295bf4a78d7d085ef7c067923ede4b7d83d6a1cd0658c155c0566",
          "opcodes": [
            "PUSH2",
            "OP_80",
            "OP_83",
            "SLOAD",
            "DIV",
            "MUL",
            "OP_83",
            "MSTORE",
            "OP_91",
            "PUSH1",
            "ADD",
            "OP_91",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 723
        },
        {
          "end_pc": 784,
          "hash": "0xe6e8698698e5f8d4f32975e540a3a4d8ce1dccd10718a4d9c0f4be40f30cfc42",
          "opcodes": [
            "JUMPDEST",
            "PUSH2",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "CALLER",
            "AND",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "OP_90",
            "SHA3",
            "SLOAD",
            "OP_81",
            "OP_90",
            "LT",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 742
        },
        {
          "end_pc": 788,
          "hash": "0xa0cfbcb37ecf8b1b1d9cff4ffff41ba5301c8b57b0aa8ea931d813a7571af99a",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 785
        },
        {
          "end_pc": 1077,
          "hash": "0x2943be2551fc5a769a5591f1cef94de23dea908263c63ff54ca2543e5a3b07f7",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "OP_80",
            "MLOAD",
            "PUSH1",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "OP_81",
            "OP_81",
            "ADD",
            "CALLDATALOAD",
            "PUSH1",
            "OP_81",
            "ADD",
            "OP_84",
            "OP_90",
            "DIV",
            "OP_84",
            "MUL",
            "OP_85",
            "ADD",
            "OP_84",
            "ADD",
            "OP_90",
            "OP_95",
            "MSTORE",
            "OP_84",
            "OP_84",
            "MSTORE",
            "PUSH2",
            "OP_94",
            "OP_81",
            "CALLDATALOAD",
            "OP_94",
            "PUSH1",
            "OP_80",
            "CALLDATALOAD",
            "OP_95",
            "OP_93",
            "OP_94",
            "PUSH1",
            "OP_94",
            "OP_92",
            "OP_93",
            "OP_91",
            "ADD",
            "OP_91",
            "OP_81",
            "OP_90",
            "OP_84",
            "ADD",
            "OP_83",
            "OP_82",
            "OP_80",
            "OP_82",
            "OP_84",
            "CALLDATACOPY",
            "POP",
            "OP_94",
            "OP_96",
            "POP",
            "POP",
            "POP",
            "POP",
            "POP",
            "POP",
            "POP",
            "PUSH1",
            "PUSH1",
            "OP_83",
            "PUSH1",
            "PUSH1",
            "POP",
            "PUSH1",
            "CALLER",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "PUSH1",
            "SHA3",
            "PUSH1",
            "POP",
            "PUSH1",
            "OP_87",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "PUSH1",
            "SHA3",
            "PUSH1",
            "POP",
            "OP_81",
            "OP_90",
            "SSTORE",
            "POP",
            "OP_84",
            "OP_90",
            "POP",
            "OP_80",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "PUSH4",
            "CALLER",
            "OP_86",
            "ADDRESS",
            "OP_87",
            "PUSH1",
            "MLOAD",
            "OP_85",
            "PUSH1",
            "PUSH1",
            "EXP",
            "MUL",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_80",
            "OP_85",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_84",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_83",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "AND",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_80",
            "PUSH1",
            "ADD",
            "OP_82",
            "OP_81",
            "SUB",
            "OP_82",
            "MSTORE",
            "OP_83",
            "OP_81",
            "OP_81",
            "MLOAD",
            "OP_81",
            "MSTORE",

exec
/bin/bash -lc "sed -n '921,1320p' BYTECODE_BUNDLE.json" in /tmp/codex-ewkgz7je
 succeeded in 0ms:
            "PUSH1",
            "ADD",
            "OP_91",
            "POP",
            "OP_80",
            "MLOAD",
            "OP_90",
            "PUSH1",
            "ADD",
            "OP_90",
            "OP_80",
            "OP_83",
            "OP_83",
            "OP_82",
            "OP_90",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "OP_84",
            "PUSH1",
            "ADD",
            "DIV",
            "PUSH1",
            "MUL",
            "PUSH1",
            "ADD",
            "CALL",
            "POP",
            "OP_90",
            "POP",
            "OP_90",
            "OP_81",
            "ADD",
            "OP_90",
            "PUSH1",
            "AND",
            "OP_80",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 789
        },
        {
          "end_pc": 1102,
          "hash": "0x101f2c85b408ea6610e3c7312d25966ff61399829b715e22fe1167a1dd95f539",
          "opcodes": [
            "OP_80",
            "OP_82",
            "SUB",
            "OP_80",
            "MLOAD",
            "PUSH1",
            "OP_83",
            "PUSH1",
            "SUB",
            "PUSH2",
            "EXP",
            "SUB",
            "NOT",
            "AND",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_91",
            "POP"
          ],
          "start_pc": 1078
        },
        {
          "end_pc": 1134,
          "hash": "0x591ff6771a57db0e1af6861a13566f266023852f64af17d2dd730e863faf1cc5",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "OP_95",
            "POP",
            "POP",
            "POP",
            "POP",
            "POP",
            "POP",
            "PUSH1",
            "PUSH1",
            "MLOAD",
            "OP_80",
            "OP_83",
            "SUB",
            "OP_81",
            "PUSH1",
            "OP_87",
            "PUSH2",
            "GAS",
            "SUB",
            "CALL",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1103
        },
        {
          "end_pc": 1144,
          "hash": "0xa4fda15b399cf77331ad9799c1e78f9ae6f85e50b27be713f474b0525c216ef9",
          "opcodes": [
            "POP",
            "POP",
            "POP",
            "POP",
            "OP_93",
            "OP_92",
            "POP",
            "POP",
            "POP",
            "JUMP"
          ],
          "start_pc": 1135
        },
        {
          "end_pc": 1181,
          "hash": "0x30b93e9a365cd07e76db89419721df68e08465ecc0cda9cb086b1654651d6c6a",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "CALLDATALOAD",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "OP_80",
            "OP_82",
            "SHA3",
            "OP_90",
            "OP_92",
            "MSTORE",
            "PUSH1",
            "CALLDATALOAD",
            "OP_81",
            "MSTORE",
            "SHA3",
            "SLOAD",
            "PUSH2",
            "OP_90",
            "OP_81",
            "JUMP"
          ],
          "start_pc": 1145
        },
        {
          "end_pc": 1217,
          "hash": "0xd83cf193bf3a61e218ca497920c4c66119af67846b14fbf9a7cb60e4dad96faa",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "OP_81",
            "OP_81",
            "MSTORE",
            "OP_90",
            "CALLDATALOAD",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "OP_80",
            "OP_82",
            "SHA3",
            "OP_90",
            "OP_92",
            "MSTORE",
            "PUSH1",
            "CALLDATALOAD",
            "OP_81",
            "MSTORE",
            "SHA3",
            "SLOAD",
            "PUSH2",
            "OP_90",
            "OP_81",
            "JUMP"
          ],
          "start_pc": 1182
        },
        {
          "end_pc": 1219,
          "hash": "0x9b92f3a50dbe12d5058dd7409a0e8e862298d11f0173ddca6eaa14f7e601d552",
          "opcodes": [
            "JUMPDEST",
            "STOP"
          ],
          "start_pc": 1218
        },
        {
          "end_pc": 1290,
          "hash": "0x2afd4700178b6c44c612fc5af94e113e7703eb5930ee7bda73f371d1d24de80f",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "MLOAD",
            "OP_80",
            "OP_80",
            "PUSH1",
            "ADD",
            "OP_82",
            "OP_81",
            "SUB",
            "OP_82",
            "MSTORE",
            "OP_83",
            "OP_81",
            "OP_81",
            "MLOAD",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_91",
            "POP",
            "OP_80",
            "MLOAD",
            "OP_90",
            "PUSH1",
            "ADD",
            "OP_90",
            "OP_80",
            "OP_83",
            "OP_83",
            "OP_82",
            "OP_90",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "OP_84",
            "PUSH1",
            "ADD",
            "DIV",
            "PUSH1",
            "MUL",
            "PUSH1",
            "ADD",
            "CALL",
            "POP",
            "OP_90",
            "POP",
            "OP_90",
            "OP_81",
            "ADD",
            "OP_90",
            "PUSH1",
            "AND",
            "OP_80",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1220
        },
        {
          "end_pc": 1315,
          "hash": "0x459d6b095ed9ca3dd3c4c4fca6cf5b4f60bab2556037270333761651f81bc54d",
          "opcodes": [
            "OP_80",
            "OP_82",
            "SUB",
            "OP_80",
            "MLOAD",
            "PUSH1",
            "OP_83",
            "PUSH1",
            "SUB",
            "PUSH2",
            "EXP",
            "SUB",
            "NOT",
            "AND",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "ADD",
            "OP_91",
            "POP"
          ],
          "start_pc": 1291
        },
        {
          "end_pc": 1329,
          "hash": "0x365860803a267a0940c9fc720cdc6eb6a88f352252978ef7e36ca16c0503093c",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "OP_92",
            "POP",
            "POP",
            "POP",
            "PUSH1",
            "MLOAD",
            "OP_80",
            "OP_91",
            "SUB",
            "OP_90",
            "RETURN"
          ],
          "start_pc": 1316
        },
        {
          "end_pc": 1347,
          "hash": "0x75a0bd895ca27ac26cfb50dbed615f86c50ae587f187cd5213c3ad6319ce3e28",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "OP_80",
            "MLOAD",
            "OP_91",
            "OP_82",
            "MSTORE",
            "MLOAD",
            "OP_90",
            "OP_81",
            "OP_90",
            "SUB",
            "PUSH1",
            "ADD",
            "OP_90",
            "RETURN"
          ],
          "start_pc": 1330
        },
        {
          "end_pc": 1370,
          "hash": "0xf3efafaa9ccdcfa6a316f6c29606147cc22415a4493cfb88d3623f2b9fd49a0a",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "OP_80",
            "MLOAD",
            "PUSH1",
            "OP_92",
            "OP_90",
            "OP_92",
            "AND",
            "OP_82",
            "MSTORE",
            "MLOAD",
            "OP_90",
            "OP_81",
            "OP_90",
            "SUB",
            "PUSH1",
            "ADD",
            "OP_90",
            "RETURN"
          ],
          "start_pc": 1348
        },
        {
          "end_pc": 1384,
          "hash": "0xde73474bc223b2ee3099355198ef7c0f8d70e9edab28185cbf39712b0430eaaa",
          "opcodes": [
            "JUMPDEST",
            "OP_82",
            "ADD",
            "OP_91",
            "OP_90",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "SHA3",
            "OP_90"
          ],
          "start_pc": 1371
        },
        {
          "end_pc": 1404,
          "hash": "0x42909694271a85d71139231daf51704d09b83e9e48d0e10848cd8c8089b8f1d2",
          "opcodes": [
            "JUMPDEST",
            "OP_81",
            "SLOAD",
            "OP_81",
            "MSTORE",
            "OP_90",
            "PUSH1",
            "ADD",
            "OP_90",
            "PUSH1",
            "ADD",
            "OP_80",
            "OP_83",
            "GT",
            "PUSH2",
            "JUMPI"

exec
/bin/bash -lc "sed -n '1321,1720p' BYTECODE_BUNDLE.json" in /tmp/codex-ewkgz7je
 succeeded in 0ms:
          ],
          "start_pc": 1385
        },
        {
          "end_pc": 1413,
          "hash": "0xbbe4b57dc7d8f747f2559c3ff2de0ec86310b6c852bc80ccfd38c539eec3e057",
          "opcodes": [
            "OP_82",
            "OP_90",
            "SUB",
            "PUSH1",
            "AND",
            "OP_82",
            "ADD",
            "OP_91"
          ],
          "start_pc": 1405
        },
        {
          "end_pc": 1421,
          "hash": "0xb231f58b3b98dec832666a2869a380b8a935dacb084c73d3dbc1df142f7fc911",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "POP",
            "POP",
            "POP",
            "POP",
            "OP_81",
            "JUMP"
          ],
          "start_pc": 1414
        },
        {
          "end_pc": 1570,
          "hash": "0x395af743c6115db9fe2e3db09dd7c5904a6ac587cf92b0e919309df11f7a1267",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "POP",
            "PUSH1",
            "OP_80",
            "MLOAD",
            "OP_80",
            "OP_82",
            "ADD",
            "OP_90",
            "OP_91",
            "MSTORE",
            "PUSH1",
            "OP_80",
            "OP_82",
            "MSTORE",
            "PUSH32",
            "PUSH1",
            "OP_92",
            "OP_83",
            "ADD",
            "OP_90",
            "OP_81",
            "MSTORE",
            "OP_81",
            "SLOAD",
            "PUSH1",
            "OP_83",
            "OP_90",
            "MSTORE",
            "OP_90",
            "MLOAD",
            "PUSH1",
            "NOT",
            "AND",
            "PUSH1",
            "OP_90",
            "OP_81",
            "OR",
            "OP_83",
            "SSTORE",
            "OP_91",
            "OP_92",
            "PUSH2",
            "OP_92",
            "OP_82",
            "OP_85",
            "AND",
            "ISZERO",
            "PUSH2",
            "MUL",
            "PUSH1",
            "NOT",
            "ADD",
            "OP_90",
            "OP_92",
            "AND",
            "OP_91",
            "OP_90",
            "OP_91",
            "DIV",
            "PUSH1",
            "ADD",
            "DIV",
            "PUSH32",
            "OP_90",
            "OP_81",
            "ADD",
            "OP_90",
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 1422
        },
        {
          "end_pc": 1574,
          "hash": "0xd89c052788ac436d5b9d2d7fc9d9609fd20717e481d49fd0fff020cbec265c2f",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "OP_90",
            "JUMP"
          ],
          "start_pc": 1571
        },
        {
          "end_pc": 1595,
          "hash": "0xa2f744319fd43445c47fb7b4311dfa68fdd58ca0dfc54649161ae9325bbf59d7",
          "opcodes": [
            "JUMPDEST",
            "POP",
            "POP",
            "PUSH1",
            "OP_80",
            "SLOAD",
            "PUSH1",
            "NOT",
            "AND",
            "PUSH1",
            "OR",
            "OP_90",
            "SSTORE",
            "POP",
            "POP",
            "POP",
            "POP",
            "JUMP"
          ],
          "start_pc": 1575
        },
        {
          "end_pc": 1630,
          "hash": "0x636f324481fd4419994c8b6ef80a908a04d723d6533f5430a7d78f87c4bb4f8e",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_82",
            "AND",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "OP_90",
            "SHA3",
            "SLOAD",
            "OP_81",
            "OP_81",
            "ADD",
            "LT",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1596
        },
        {
          "end_pc": 1634,
          "hash": "0x4c7007eb68dccafb55ccdc06f9d6a915579d0e0e13e41339a6b864628e49433c",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 1631
        },
        {
          "end_pc": 1741,
          "hash": "0x6c4f1b70ec5b12b49570b5ffefcd6bba40fcefbfa307ebd8aee734d97db0525f",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "CALLER",
            "OP_81",
            "AND",
            "PUSH1",
            "OP_81",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "OP_80",
            "OP_83",
            "SHA3",
            "OP_80",
            "SLOAD",
            "OP_87",
            "OP_90",
            "SUB",
            "OP_90",
            "SSTORE",
            "OP_93",
            "OP_86",
            "AND",
            "OP_80",
            "OP_83",
            "MSTORE",
            "OP_91",
            "OP_84",
            "OP_90",
            "SHA3",
            "OP_80",
            "SLOAD",
            "OP_86",
            "ADD",
            "OP_90",
            "SSTORE",
            "OP_83",
            "MLOAD",
            "OP_85",
            "OP_81",
            "MSTORE",
            "OP_93",
            "MLOAD",
            "OP_91",
            "OP_93",
            "PUSH32",
            "OP_92",
            "OP_90",
            "OP_81",
            "OP_90",
            "SUB",
            "OP_90",
            "OP_91",
            "ADD",
            "OP_90",
            "OP_A3",
            "POP",
            "POP",
            "JUMP"
          ],
          "start_pc": 1635
        },
        {
          "end_pc": 1776,
          "hash": "0x2222f7ae0c8a0453c41efd203ee4f3da5d5720e23075ac4e06e1e67a107824f2",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_83",
            "AND",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "MSTORE",
            "PUSH1",
            "OP_90",
            "SHA3",
            "SLOAD",
            "OP_82",
            "OP_81",
            "ADD",
            "LT",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1742
        },
        {
          "end_pc": 1780,
          "hash": "0xaae272aba61418a11cbd169c369fe0c4a9fadbe50a7cc49876192038e5865088",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 1777
        },
        {
          "end_pc": 1853,
          "hash": "0xcbe4fcc16595544952d4f07f82fc7b2d52ca26389be04b03fbcfbec76599e194",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_84",
            "OP_81",
            "AND",
            "PUSH1",
            "OP_81",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "OP_80",
            "OP_83",
            "SHA3",
            "CALLER",
            "OP_95",
            "OP_90",
            "OP_95",
            "AND",
            "OP_80",
            "OP_84",
            "MSTORE",
            "OP_94",
            "OP_82",
            "MSTORE",
            "OP_80",
            "OP_83",
            "SHA3",
            "SLOAD",
            "OP_93",
            "OP_83",
            "MSTORE",
            "PUSH1",
            "OP_82",
            "MSTORE",
            "OP_80",
            "OP_83",
            "SHA3",
            "OP_94",
            "OP_83",
            "MSTORE",
            "OP_93",
            "OP_90",
            "MSTORE",
            "OP_91",
            "OP_90",
            "OP_91",
            "SHA3",
            "SLOAD",
            "OP_83",
            "ADD",
            "GT",
            "ISZERO",
            "PUSH2",
            "JUMPI"
          ],
          "start_pc": 1781
        },
        {
          "end_pc": 1857,
          "hash": "0xbe93578d7e63958b773c6e341b8f4b1fcec17cfc9ea3b50af082164f6b63ee6f",
          "opcodes": [
            "PUSH2",
            "JUMP"
          ],
          "start_pc": 1854
        },
        {
          "end_pc": 1997,
          "hash": "0x4ea796cd765755668dad7866f69ee953f1949ecd1c904a1de603f07ccb7aca36",
          "opcodes": [
            "JUMPDEST",
            "PUSH1",
            "PUSH1",
            "PUSH1",
            "EXP",
            "SUB",
            "OP_84",
            "OP_81",
            "AND",
            "PUSH1",
            "OP_81",

exec
/bin/bash -lc "sed -n '1721,2120p' BYTECODE_BUNDLE.json" in /tmp/codex-ewkgz7je
 succeeded in 0ms:
            "OP_81",
            "MSTORE",
            "PUSH1",
            "PUSH1",
            "OP_90",
            "OP_81",
            "MSTORE",
            "PUSH1",
            "OP_80",
            "OP_83",
            "SHA3",
            "OP_80",
            "SLOAD",
            "OP_88",
            "OP_90",
            "SUB",
            "OP_90",
            "SSTORE",
            "OP_87",
            "OP_85",
            "AND",
            "OP_80",
            "OP_84",
            "MSTORE",
            "OP_81",
            "OP_84",
            "SHA3",
            "OP_80",
            "SLOAD",
            "OP_89",
            "ADD",
            "OP_90",
            "SSTORE",
            "OP_93",
            "OP_83",
            "MSTORE",
            "PUSH1",
            "OP_82",
            "MSTORE",
            "OP_80",
            "OP_83",
            "SHA3",
            "CALLER",
            "OP_95",
            "OP_90",
            "OP_95",
            "AND",
            "OP_80",
            "OP_84",
            "MSTORE",
            "OP_94",
            "OP_82",
            "MSTORE",
            "OP_91",
            "OP_82",
            "OP_90",
            "SHA3",
            "OP_80",
            "SLOAD",
            "OP_87",
            "ADD",
            "OP_90",
            "SSTORE",
            "OP_81",
            "MLOAD",
            "OP_86",
            "OP_81",
            "MSTORE",
            "OP_91",
            "MLOAD",
            "OP_92",
            "OP_93",
            "OP_92",
            "PUSH32",
            "OP_92",
            "OP_81",
            "OP_90",
            "SUB",
            "OP_90",
            "OP_91",
            "ADD",
            "OP_90",
            "OP_A3",
            "OP_93",
            "OP_92",
            "POP",
            "POP",
            "POP",
            "JUMP"
          ],
          "start_pc": 1858
        }
      ],
      "callsites": [
        {
          "opcode": "CALL",
          "pc": 1061,
          "returndata_checked": null,
          "target_expression_category": "computed",
          "value_expression_category": "computed"
        },
        {
          "opcode": "CALL",
          "pc": 1129,
          "returndata_checked": null,
          "target_expression_category": "computed",
          "value_expression_category": "computed"
        },
        {
          "opcode": "CALL",
          "pc": 1274,
          "returndata_checked": null,
          "target_expression_category": "computed",
          "value_expression_category": "computed"
        }
      ],
      "cfg_edges": [
        {
          "from": "bb:0",
          "to": "bb:130",
          "type": "control_flow"
        },
        {
          "from": "bb:0",
          "to": "bb:11",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:11",
          "to": "bb:138",
          "type": "control_flow"
        },
        {
          "from": "bb:11",
          "to": "bb:31",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:31",
          "to": "bb:232",
          "type": "control_flow"
        },
        {
          "from": "bb:31",
          "to": "bb:42",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:42",
          "to": "bb:563",
          "type": "control_flow"
        },
        {
          "from": "bb:42",
          "to": "bb:53",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:53",
          "to": "bb:613",
          "type": "control_flow"
        },
        {
          "from": "bb:53",
          "to": "bb:64",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:64",
          "to": "bb:625",
          "type": "control_flow"
        },
        {
          "from": "bb:64",
          "to": "bb:75",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:75",
          "to": "bb:649",
          "type": "control_flow"
        },
        {
          "from": "bb:75",
          "to": "bb:86",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:86",
          "to": "bb:742",
          "type": "control_flow"
        },
        {
          "from": "bb:86",
          "to": "bb:97",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:97",
          "to": "bb:789",
          "type": "control_flow"
        },
        {
          "from": "bb:97",
          "to": "bb:108",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:108",
          "to": "bb:1145",
          "type": "control_flow"
        },
        {
          "from": "bb:108",
          "to": "bb:119",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:119",
          "to": "bb:1182",
          "type": "control_flow"
        },
        {
          "from": "bb:119",
          "to": "bb:130",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:138",
          "to": "bb:1414",
          "type": "control_flow"
        },
        {
          "from": "bb:138",
          "to": "bb:205",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:205",
          "to": "bb:1371",
          "type": "control_flow"
        },
        {
          "from": "bb:205",
          "to": "bb:213",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:213",
          "to": "bb:1414",
          "type": "control_flow"
        },
        {
          "from": "bb:232",
          "to": "bb:543",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:543",
          "to": "bb:1571",
          "type": "control_flow"
        },
        {
          "from": "bb:543",
          "to": "bb:552",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:552",
          "to": "bb:543",
          "type": "control_flow"
        },
        {
          "from": "bb:563",
          "to": "bb:1742",
          "type": "control_flow"
        },
        {
          "from": "bb:563",
          "to": "bb:609",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:649",
          "to": "bb:1414",
          "type": "control_flow"
        },
        {
          "from": "bb:649",
          "to": "bb:715",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:715",
          "to": "bb:1371",
          "type": "control_flow"
        },
        {
          "from": "bb:715",
          "to": "bb:723",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:723",
          "to": "bb:1414",
          "type": "control_flow"
        },
        {
          "from": "bb:742",
          "to": "bb:1596",
          "type": "control_flow"
        },
        {
          "from": "bb:742",
          "to": "bb:785",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:789",
          "to": "bb:1103",
          "type": "control_flow"
        },
        {
          "from": "bb:789",
          "to": "bb:1078",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1078",
          "to": "bb:1103",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1103",
          "to": "bb:1135",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1220",
          "to": "bb:1316",
          "type": "control_flow"
        },
        {
          "from": "bb:1220",
          "to": "bb:1291",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1291",
          "to": "bb:1316",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1371",
          "to": "bb:1385",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1385",
          "to": "bb:1385",
          "type": "control_flow"
        },
        {
          "from": "bb:1385",
          "to": "bb:1405",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1405",
          "to": "bb:1414",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1422",
          "to": "bb:543",
          "type": "control_flow"
        },
        {
          "from": "bb:1596",
          "to": "bb:1635",
          "type": "control_flow"
        },
        {
          "from": "bb:1596",
          "to": "bb:1631",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1742",
          "to": "bb:1781",
          "type": "control_flow"
        },
        {
          "from": "bb:1742",
          "to": "bb:1777",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:1781",
          "to": "bb:1858",

exec
/bin/bash -lc "sed -n '2121,2520p' BYTECODE_BUNDLE.json" in /tmp/codex-ewkgz7je
 succeeded in 0ms:
          "type": "control_flow"
        },
        {
          "from": "bb:1781",
          "to": "bb:1854",
          "type": "control_flow_fallthrough"
        }
      ],
      "cfg_hash": "0xb86dec5cb76807a8d7975252cc3f5b5032cd5386762c2f156435fe7c2d7ff0e3",
      "dispatcher_type": "selector_jump_table",
      "function_entries": [
        {
          "entry_pc": null,
          "selector": "0x06fdde03"
        },
        {
          "entry_pc": 599290589,
          "selector": "0x1d2bca17"
        },
        {
          "entry_pc": 826074471,
          "selector": "0x23b872dd"
        },
        {
          "entry_pc": 1889567281,
          "selector": "0x313ce567"
        },
        {
          "entry_pc": 2514000705,
          "selector": "0x70a08231"
        },
        {
          "entry_pc": 2835717307,
          "selector": "0x95d89b41"
        },
        {
          "entry_pc": 3404319313,
          "selector": "0xa9059cbb"
        },
        {
          "entry_pc": 3694166258,
          "selector": "0xcae9ca51"
        },
        {
          "entry_pc": 3714247998,
          "selector": "0xdc3080f2"
        },
        {
          "entry_pc": 1218,
          "selector": "0xdd62ed3e"
        }
      ],
      "functions": [
        {
          "auth": {
            "guards": []
          },
          "entry_pc": null,
          "selector": "0x06fdde03",
          "sinks": {
            "call": 3,
            "delegatecall": 0,
            "selfdestruct": 0,
            "staticcall": 0
          },
          "storage": {
            "reads": 23,
            "slots": [
              {
                "op": "SLOAD",
                "pc": 145,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 218,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SLOAD",
                "pc": 619,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              },
              {
                "op": "SLOAD",
                "pc": 656,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 728,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SSTORE",
                "pc": 936,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1581,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              }
            ],
            "writes": 11
          }
        },
        {
          "auth": {
            "guards": []
          },
          "entry_pc": 599290589,
          "selector": "0x1d2bca17",
          "sinks": {
            "call": 3,
            "delegatecall": 0,
            "selfdestruct": 0,
            "staticcall": 0
          },
          "storage": {
            "reads": 23,
            "slots": [
              {
                "op": "SLOAD",
                "pc": 145,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 218,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SLOAD",
                "pc": 619,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              },
              {
                "op": "SLOAD",
                "pc": 656,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 728,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SSTORE",
                "pc": 936,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1581,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              }
            ],
            "writes": 11
          }
        },
        {
          "auth": {
            "guards": []
          },
          "entry_pc": 826074471,
          "selector": "0x23b872dd",
          "sinks": {
            "call": 3,
            "delegatecall": 0,
            "selfdestruct": 0,
            "staticcall": 0
          },
          "storage": {
            "reads": 23,
            "slots": [
              {
                "op": "SLOAD",
                "pc": 145,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 218,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SLOAD",
                "pc": 619,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              },
              {
                "op": "SLOAD",
                "pc": 656,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 728,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SSTORE",
                "pc": 936,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1581,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              }
            ],
            "writes": 11
          }
        },
        {
          "auth": {
            "guards": []
          },
          "entry_pc": 1889567281,
          "selector": "0x313ce567",
          "sinks": {
            "call": 3,
            "delegatecall": 0,
            "selfdestruct": 0,
            "staticcall": 0
          },
          "storage": {
            "reads": 23,
            "slots": [
              {
                "op": "SLOAD",
                "pc": 145,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 218,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SLOAD",
                "pc": 619,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              },
              {
                "op": "SLOAD",
                "pc": 656,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 728,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SSTORE",
                "pc": 936,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1581,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              }
            ],
            "writes": 11
          }
        },
        {
          "auth": {
            "guards": []
          },
          "entry_pc": 2514000705,
          "selector": "0x70a08231",
          "sinks": {
            "call": 3,
            "delegatecall": 0,
            "selfdestruct": 0,
            "staticcall": 0
          },
          "storage": {
            "reads": 23,
            "slots": [
              {
                "op": "SLOAD",
                "pc": 145,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 218,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SLOAD",
                "pc": 619,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              },
              {
                "op": "SLOAD",
                "pc": 656,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 728,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SSTORE",
                "pc": 936,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1581,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              }
            ],
            "writes": 11
          }
        },
        {
          "auth": {
            "guards": []
          },
          "entry_pc": 2835717307,
          "selector": "0x95d89b41",
          "sinks": {
            "call": 3,
            "delegatecall": 0,
            "selfdestruct": 0,
            "staticcall": 0
          },
          "storage": {
            "reads": 23,
            "slots": [
              {
                "op": "SLOAD",
                "pc": 145,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 218,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SLOAD",
                "pc": 619,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              },
              {
                "op": "SLOAD",
                "pc": 656,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 728,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SSTORE",
                "pc": 936,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1581,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              }
            ],
            "writes": 11
          }
        },
        {
          "auth": {
            "guards": []
          },
          "entry_pc": 3404319313,
          "selector": "0xa9059cbb",
          "sinks": {
            "call": 3,
            "delegatecall": 0,
            "selfdestruct": 0,
            "staticcall": 0
          },
          "storage": {
            "reads": 23,
            "slots": [
              {
                "op": "SLOAD",
                "pc": 145,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 218,

exec
/bin/bash -lc "sed -n '2521,2920p' BYTECODE_BUNDLE.json" in /tmp/codex-ewkgz7je
 succeeded in 0ms:
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SLOAD",
                "pc": 619,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              },
              {
                "op": "SLOAD",
                "pc": 656,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 728,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SSTORE",
                "pc": 936,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1581,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              }
            ],
            "writes": 11
          }
        },
        {
          "auth": {
            "guards": []
          },
          "entry_pc": 3694166258,
          "selector": "0xcae9ca51",
          "sinks": {
            "call": 3,
            "delegatecall": 0,
            "selfdestruct": 0,
            "staticcall": 0
          },
          "storage": {
            "reads": 23,
            "slots": [
              {
                "op": "SLOAD",
                "pc": 145,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 218,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SLOAD",
                "pc": 619,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              },
              {
                "op": "SLOAD",
                "pc": 656,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 728,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SSTORE",
                "pc": 936,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1581,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              }
            ],
            "writes": 11
          }
        },
        {
          "auth": {
            "guards": []
          },
          "entry_pc": 3714247998,
          "selector": "0xdc3080f2",
          "sinks": {
            "call": 3,
            "delegatecall": 0,
            "selfdestruct": 0,
            "staticcall": 0
          },
          "storage": {
            "reads": 23,
            "slots": [
              {
                "op": "SLOAD",
                "pc": 145,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 218,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SLOAD",
                "pc": 619,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              },
              {
                "op": "SLOAD",
                "pc": 656,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 728,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SSTORE",
                "pc": 936,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1581,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              }
            ],
            "writes": 11
          }
        },
        {
          "auth": {
            "guards": []
          },
          "entry_pc": 1218,
          "selector": "0xdd62ed3e",
          "sinks": {
            "call": 3,
            "delegatecall": 0,
            "selfdestruct": 0,
            "staticcall": 0
          },
          "storage": {
            "reads": 23,
            "slots": [
              {
                "op": "SLOAD",
                "pc": 145,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 218,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SLOAD",
                "pc": 619,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              },
              {
                "op": "SLOAD",
                "pc": 656,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
              },
              {
                "op": "SLOAD",
                "pc": 728,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
              },
              {
                "op": "SSTORE",
                "pc": 936,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              {
                "op": "SLOAD",
                "pc": 1581,
                "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
              }
            ],
            "writes": 11
          }
        }
      ],
      "selectors": [
        "0x06fdde03",
        "0x1d2bca17",
        "0x23b872dd",
        "0x313ce567",
        "0x70a08231",
        "0x95d89b41",
        "0xa9059cbb",
        "0xcae9ca51",
        "0xdc3080f2",
        "0xdd62ed3e"
      ],
      "sinks": {
        "call": 3,
        "create": 0,
        "create2": 0,
        "delegatecall": 0,
        "selfdestruct": 0,
        "staticcall": 0,
        "upgrade_slot_write_suspected": false
      },
      "storage": {
        "keccak_count": 23,
        "reads": 23,
        "slots": [
          {
            "op": "SLOAD",
            "pc": 145,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
          },
          {
            "op": "SLOAD",
            "pc": 218,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
          },
          {
            "op": "SLOAD",
            "pc": 619,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
          },
          {
            "op": "SLOAD",
            "pc": 656,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000001"
          },
          {
            "op": "SLOAD",
            "pc": 728,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000100"
          },
          {
            "op": "SSTORE",
            "pc": 936,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000000"
          },
          {
            "op": "SLOAD",
            "pc": 1581,
            "slot": "0x0000000000000000000000000000000000000000000000000000000000000002"
          }
        ],
        "writes": 11
      },
      "version": "analysis_artifact_v1"
    },
    "block_number": null,
    "chain_id": 1,
    "codehash": "0x1fe5d05ba4023231a6d7175004a34d414a89f4b98b790f305fa4babedcbad7df",
    "created_at": "2026-04-04T19:55:01.000000Z",
    "id": 2208,
    "updated_at": "2026-04-04T19:55:01.000000Z",
    "version": "analysis_artifact_v1"
  },
  "analysis_run": {
    "address": "0x2bf4a701470dfe06babd313926a1ebcdcd5806c1",
    "block_number": null,
    "chain_id": 1,
    "child_links": [],
    "created_at": "2025-12-19T20:03:54.000000Z",
    "id": "019b3836-3278-73cd-b85f-dc1b759c448b",
    "parent_links": [],
    "status": "running",
    "updated_at": "2026-04-04T19:55:01.000000Z"
  },
  "artifact": {
    "codehash": "0x1fe5d05ba4023231a6d7175004a34d414a89f4b98b790f305fa4babedcbad7df",
    "compiler_json": {
      "etherscan": {
        "skipped": true
      }
    },
    "implementation_address": null,
    "is_proxy": false,
    "runtime_bytecode": {
      "full": "0x606060405236156100825760e060020a600035046306fdde03811461008a5780631d2bca17146100e857806323b872dd14610233578063313ce5671461026557806370a082311461027157806395d89b4114610289578063a9059cbb146102e6578063cae9ca5114610315578063dc3080f214610479578063dd62ed3e1461049e575b6104c2610002565b6104c46000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105865780601f1061055b57610100808354040283529160200191610586565b60408051602060248035600481810135601f81018590048502860185019096528585526104c2958135959194604494929390920191819084018382808284375050604080516020606435808b0135601f810183900483028401830190945283835297999835989760849750919550602491909101935090915081908401838280828437505050600160a060020a0333166000908152600360209081526040808320620bde3190558051808201909152600781527f55636b436f696e0000000000000000000000000000000000000000000000000090820190815282548380529051600e60ff1990911617835595975090955061058e9460026001821615610100026000190190911604601f01047f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56390810193509150505b80821115610623576000815560010161021f565b610532600435602435604435600160a060020a038316600090815260036020526040812054829010156106ce57610002565b61054460025460ff1681565b61053260043560036020526000908152604090205481565b6104c460018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105865780601f1061055b57610100808354040283529160200191610586565b6104c2600435602435600160a060020a0333166000908152600360205260409020548190101561063c57610002565b604080516020604435600481810135601f810184900484028501840190955284845261053294813594602480359593946064949293910191819084018382808284375094965050505050505060006000836004600050600033600160a060020a03168152602001908152602001600020600050600087600160a060020a031681526020019081526020016000206000508190555084905080600160a060020a0316638f4ffcb1338630876040518560e060020a0281526004018085600160a060020a0316815260200184815260200183600160a060020a03168152602001806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f16801561044f5780820380516001836020036101000a031916815260200191505b50955050505050506000604051808303816000876161da5a03f11561000257505050509392505050565b6005602090815260043560009081526040808220909252602435815220546105329081565b60046020818152903560009081526040808220909252602435815220546105329081565b005b60405180806020018281038252838181518152602001915080519060200190808383829060006004602084601f0104600f02600301f150905090810190601f1680156105245780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b60408051918252519081900360200190f35b6040805160ff929092168252519081900360200190f35b820191906000526020600020905b81548152906001019060200180831161056957829003601f168201915b505050505081565b50506040805180820190915260018082527f5500000000000000000000000000000000000000000000000000000000000000602092830190815281546000839052905160ff19166002908117835591926106279282851615610100026000190190921691909104601f01047fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69081019061021f565b5090565b50506002805460ff1916600717905550505050565b600160a060020a038216600090815260036020526040902054818101101561066357610002565b600160a060020a03338116600081815260036020908152604080832080548790039055938616808352918490208054860190558351858152935191937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef929081900390910190a35050565b600160a060020a03831660009081526003602052604090205482810110156106f557610002565b600160a060020a0384811660008181526004602090815260408083203395909516808452948252808320549383526005825280832094835293905291909120548301111561074257610002565b600160a060020a0384811660008181526003602090815260408083208054889003905587851680845281842080548901905593835260058252808320339590951680845294825291829020805487019055815186815291519293927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a3939250505056",
      "head": null,
      "length": 3998,
      "tail": null,
      "truncated": false
    },
    "verified_source": false
  },
  "capability_graph": {
    "address": "0x2bf4a701470dfe06babd313926a1ebcdcd5806c1",
    "block_number": null,
    "chain_id": 1,
    "codehash": "0x1fe5d05ba4023231a6d7175004a34d414a89f4b98b790f305fa4babedcbad7df",
    "created_at": "2026-04-04T19:55:01.000000Z",
    "graph_hash": "0x59979044a2e24903d19cf3da658bf230891c09ed8170ab07a1a9f99b5629cdcd",
    "graph_json": {
      "edges": [
        {
          "from": "bb:0",
          "to": "bb:130",
          "type": "control_flow"
        },
        {
          "from": "bb:0",
          "to": "bb:11",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:11",
          "to": "bb:138",
          "type": "control_flow"
        },
        {
          "from": "bb:11",
          "to": "bb:31",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:31",
          "to": "bb:232",
          "type": "control_flow"
        },
        {
          "from": "bb:31",
          "to": "bb:42",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:42",
          "to": "bb:563",
          "type": "control_flow"
        },
        {
          "from": "bb:42",
          "to": "bb:53",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:53",
          "to": "bb:613",
          "type": "control_flow"
        },
        {
          "from": "bb:53",
          "to": "bb:64",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:64",
          "to": "bb:625",
          "type": "control_flow"
        },
        {
          "from": "bb:64",
          "to": "bb:75",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:75",
          "to": "bb:649",
          "type": "control_flow"
        },
        {
          "from": "bb:75",
          "to": "bb:86",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:86",
          "to": "bb:742",
          "type": "control_flow"
        },
        {
          "from": "bb:86",
          "to": "bb:97",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:97",
          "to": "bb:789",
          "type": "control_flow"
        },
        {
          "from": "bb:97",
          "to": "bb:108",
          "type": "control_flow_fallthrough"
        },
        {
          "from": "bb:108",
          "to": "bb:1145",
          "type": "control_flow"
        },

exec
/bin/bash -lc 'which evm || which cast || which hevm || which forge || which python3 || which node' in /tmp/codex-ewkgz7je
 succeeded in 0ms:
/home/noahkuhn/.foundry/bin/cast

exec
/bin/bash -lc "python3 - <<'PY'
import json
j=json.load(open('BYTECODE_BUNDLE.json'))
print(j['artifact']['runtime_bytecode']['full'])
PY | cast disassemble -" in /tmp/codex-ewkgz7je
 exited 1 in 0ms:
/bin/bash: line 5: warning: here-document at line 1 delimited by end-of-file (wanted `PY')
  File "<stdin>", line 4
    PY | cast disassemble -
              ^^^^^^^^^^^
SyntaxError: invalid syntax

exec
/bin/bash -lc "python3 -c 'import json;print(json.load(open(\"BYTECODE_BUNDLE.json\"))[\"artifact\"][\"runtime_bytecode\"][\"full\"])' | cast disassemble -" in /tmp/codex-ewkgz7je
 exited 1 in 0ms:
Error: odd number of digits
Exception ignored on flushing sys.stdout:
BrokenPipeError: [Errno 32] Broken pipe

exec
/bin/bash -lc "python3 -c 'import json;print(json.load(open(\"BYTECODE_BUNDLE.json\"))[\"artifact\"][\"runtime_bytecode\"][\"full\"][2:])' | cast disassemble -" in /tmp/codex-ewkgz7je
 exited 1 in 0ms:
Error: odd number of digits
Exception ignored on flushing sys.stdout:
BrokenPipeError: [Errno 32] Broken pipe

exec
/bin/bash -lc "python3 - <<'PY'
import json
from textwrap import wrap
opcodes={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(1,33): opcodes[0x5f+i]=f'PUSH{i}'
for i in range(1,17): opcodes[0x7f+i]=f'DUP{i}'
for i in range(1,17): opcodes[0x8f+i]=f'SWAP{i}'
for i in range(0,5): opcodes[0xa0+i]=f'LOG{i}'
bytecode=bytes.fromhex(json.load(open('BYTECODE_BUNDLE.json'))['artifact']['runtime_bytecode']['full'][2:])
# print ranges around pcs of interest
ranges=[(0,160),(220,340),(520,900),(900,1160),(1560,2010)]
for start,end in ranges:
    print(f'--- range {start:#x}-{end:#x} ---')
    pc=start
    while pc<min(end,len(bytecode)):
        op=bytecode[pc]
        name=opcodes.get(op,f'OP_{op:02x}')
        if 0x60<=op<=0x7f:
            n=op-0x5f
            data=bytecode[pc+1:pc+1+n]
            print(f'{pc:04x}: {name} 0x{data.hex()}')
            pc+=1+n
        else:
            print(f'{pc:04x}: {name}')
            pc+=1
PY" in /tmp/codex-ewkgz7je
 succeeded in 0ms:
--- range 0x0-0xa0 ---
0000: PUSH1 0x60
0002: PUSH1 0x40
0004: MSTORE
0005: CALLDATASIZE
0006: ISZERO
0007: PUSH2 0x0082
000a: JUMPI
000b: PUSH1 0xe0
000d: PUSH1 0x02
000f: EXP
0010: PUSH1 0x00
0012: CALLDATALOAD
0013: DIV
0014: PUSH4 0x06fdde03
0019: DUP2
001a: EQ
001b: PUSH2 0x008a
001e: JUMPI
001f: DUP1
0020: PUSH4 0x1d2bca17
0025: EQ
0026: PUSH2 0x00e8
0029: JUMPI
002a: DUP1
002b: PUSH4 0x23b872dd
0030: EQ
0031: PUSH2 0x0233
0034: JUMPI
0035: DUP1
0036: PUSH4 0x313ce567
003b: EQ
003c: PUSH2 0x0265
003f: JUMPI
0040: DUP1
0041: PUSH4 0x70a08231
0046: EQ
0047: PUSH2 0x0271
004a: JUMPI
004b: DUP1
004c: PUSH4 0x95d89b41
0051: EQ
0052: PUSH2 0x0289
0055: JUMPI
0056: DUP1
0057: PUSH4 0xa9059cbb
005c: EQ
005d: PUSH2 0x02e6
0060: JUMPI
0061: DUP1
0062: PUSH4 0xcae9ca51
0067: EQ
0068: PUSH2 0x0315
006b: JUMPI
006c: DUP1
006d: PUSH4 0xdc3080f2
0072: EQ
0073: PUSH2 0x0479
0076: JUMPI
0077: DUP1
0078: PUSH4 0xdd62ed3e
007d: EQ
007e: PUSH2 0x049e
0081: JUMPI
0082: JUMPDEST
0083: PUSH2 0x04c2
0086: PUSH2 0x0002
0089: JUMP
008a: JUMPDEST
008b: PUSH2 0x04c4
008e: PUSH1 0x00
0090: DUP1
0091: SLOAD
0092: PUSH1 0x40
0094: DUP1
0095: MLOAD
0096: PUSH1 0x20
0098: PUSH1 0x02
009a: PUSH1 0x01
009c: DUP6
009d: AND
009e: ISZERO
009f: PUSH2 0x0100
--- range 0xdc-0x154 ---
00dc: MUL
00dd: DUP4
00de: MSTORE
00df: SWAP2
00e0: PUSH1 0x20
00e2: ADD
00e3: SWAP2
00e4: PUSH2 0x0586
00e7: JUMP
00e8: JUMPDEST
00e9: PUSH1 0x40
00eb: DUP1
00ec: MLOAD
00ed: PUSH1 0x20
00ef: PUSH1 0x24
00f1: DUP1
00f2: CALLDATALOAD
00f3: PUSH1 0x04
00f5: DUP2
00f6: DUP2
00f7: ADD
00f8: CALLDATALOAD
00f9: PUSH1 0x1f
00fb: DUP2
00fc: ADD
00fd: DUP6
00fe: SWAP1
00ff: DIV
0100: DUP6
0101: MUL
0102: DUP7
0103: ADD
0104: DUP6
0105: ADD
0106: SWAP1
0107: SWAP7
0108: MSTORE
0109: DUP6
010a: DUP6
010b: MSTORE
010c: PUSH2 0x04c2
010f: SWAP6
0110: DUP2
0111: CALLDATALOAD
0112: SWAP6
0113: SWAP2
0114: SWAP5
0115: PUSH1 0x44
0117: SWAP5
0118: SWAP3
0119: SWAP4
011a: SWAP1
011b: SWAP3
011c: ADD
011d: SWAP2
011e: DUP2
011f: SWAP1
0120: DUP5
0121: ADD
0122: DUP4
0123: DUP3
0124: DUP1
0125: DUP3
0126: DUP5
0127: CALLDATACOPY
0128: POP
0129: POP
012a: PUSH1 0x40
012c: DUP1
012d: MLOAD
012e: PUSH1 0x20
0130: PUSH1 0x64
0132: CALLDATALOAD
0133: DUP1
0134: DUP12
0135: ADD
0136: CALLDATALOAD
0137: PUSH1 0x1f
0139: DUP2
013a: ADD
013b: DUP4
013c: SWAP1
013d: DIV
013e: DUP4
013f: MUL
0140: DUP5
0141: ADD
0142: DUP4
0143: ADD
0144: SWAP1
0145: SWAP5
0146: MSTORE
0147: DUP4
0148: DUP4
0149: MSTORE
014a: SWAP8
014b: SWAP10
014c: SWAP9
014d: CALLDATALOAD
014e: SWAP9
014f: SWAP8
0150: PUSH1 0x84
0152: SWAP8
0153: POP
--- range 0x208-0x384 ---
0208: OP_a6
0209: OP_bc
020a: SWAP6
020b: OP_48
020c: BLOCKHASH
020d: ADDMOD
020e: OP_f6
020f: CALLDATASIZE
0210: OP_2f
0211: SWAP4
0212: AND
0213: OP_0e
0214: RETURN
0215: OP_e5
0216: PUSH4 0x90810193
021b: POP
021c: SWAP2
021d: POP
021e: POP
021f: JUMPDEST
0220: DUP1
0221: DUP3
0222: GT
0223: ISZERO
0224: PUSH2 0x0623
0227: JUMPI
0228: PUSH1 0x00
022a: DUP2
022b: SSTORE
022c: PUSH1 0x01
022e: ADD
022f: PUSH2 0x021f
0232: JUMP
0233: JUMPDEST
0234: PUSH2 0x0532
0237: PUSH1 0x04
0239: CALLDATALOAD
023a: PUSH1 0x24
023c: CALLDATALOAD
023d: PUSH1 0x44
023f: CALLDATALOAD
0240: PUSH1 0x01
0242: PUSH1 0xa0
0244: PUSH1 0x02
0246: EXP
0247: SUB
0248: DUP4
0249: AND
024a: PUSH1 0x00
024c: SWAP1
024d: DUP2
024e: MSTORE
024f: PUSH1 0x03
0251: PUSH1 0x20
0253: MSTORE
0254: PUSH1 0x40
0256: DUP2
0257: SHA3
0258: SLOAD
0259: DUP3
025a: SWAP1
025b: LT
025c: ISZERO
025d: PUSH2 0x06ce
0260: JUMPI
0261: PUSH2 0x0002
0264: JUMP
0265: JUMPDEST
0266: PUSH2 0x0544
0269: PUSH1 0x02
026b: SLOAD
026c: PUSH1 0xff
026e: AND
026f: DUP2
0270: JUMP
0271: JUMPDEST
0272: PUSH2 0x0532
0275: PUSH1 0x04
0277: CALLDATALOAD
0278: PUSH1 0x03
027a: PUSH1 0x20
027c: MSTORE
027d: PUSH1 0x00
027f: SWAP1
0280: DUP2
0281: MSTORE
0282: PUSH1 0x40
0284: SWAP1
0285: SHA3
0286: SLOAD
0287: DUP2
0288: JUMP
0289: JUMPDEST
028a: PUSH2 0x04c4
028d: PUSH1 0x01
028f: DUP1
0290: SLOAD
0291: PUSH1 0x40
0293: DUP1
0294: MLOAD
0295: PUSH1 0x20
0297: PUSH1 0x02
0299: DUP5
029a: DUP7
029b: AND
029c: ISZERO
029d: PUSH2 0x0100
02a0: MUL
02a1: PUSH1 0x00
02a3: NOT
02a4: ADD
02a5: SWAP1
02a6: SWAP5
02a7: AND
02a8: SWAP4
02a9: SWAP1
02aa: SWAP4
02ab: DIV
02ac: PUSH1 0x1f
02ae: DUP2
02af: ADD
02b0: DUP5
02b1: SWAP1
02b2: DIV
02b3: DUP5
02b4: MUL
02b5: DUP3
02b6: ADD
02b7: DUP5
02b8: ADD
02b9: SWAP1
02ba: SWAP3
02bb: MSTORE
02bc: DUP2
02bd: DUP2
02be: MSTORE
02bf: SWAP3
02c0: SWAP2
02c1: DUP4
02c2: ADD
02c3: DUP3
02c4: DUP3
02c5: DUP1
02c6: ISZERO
02c7: PUSH2 0x0586
02ca: JUMPI
02cb: DUP1
02cc: PUSH1 0x1f
02ce: LT
02cf: PUSH2 0x055b
02d2: JUMPI
02d3: PUSH2 0x0100
02d6: DUP1
02d7: DUP4
02d8: SLOAD
02d9: DIV
02da: MUL
02db: DUP4
02dc: MSTORE
02dd: SWAP2
02de: PUSH1 0x20
02e0: ADD
02e1: SWAP2
02e2: PUSH2 0x0586
02e5: JUMP
02e6: JUMPDEST
02e7: PUSH2 0x04c2
02ea: PUSH1 0x04
02ec: CALLDATALOAD
02ed: PUSH1 0x24
02ef: CALLDATALOAD
02f0: PUSH1 0x01
02f2: PUSH1 0xa0
02f4: PUSH1 0x02
02f6: EXP
02f7: SUB
02f8: CALLER
02f9: AND
02fa: PUSH1 0x00
02fc: SWAP1
02fd: DUP2
02fe: MSTORE
02ff: PUSH1 0x03
0301: PUSH1 0x20
0303: MSTORE
0304: PUSH1 0x40
0306: SWAP1
0307: SHA3
0308: SLOAD
0309: DUP2
030a: SWAP1
030b: LT
030c: ISZERO
030d: PUSH2 0x063c
0310: JUMPI
0311: PUSH2 0x0002
0314: JUMP
0315: JUMPDEST
0316: PUSH1 0x40
0318: DUP1
0319: MLOAD
031a: PUSH1 0x20
031c: PUSH1 0x44
031e: CALLDATALOAD
031f: PUSH1 0x04
0321: DUP2
0322: DUP2
0323: ADD
0324: CALLDATALOAD
0325: PUSH1 0x1f
0327: DUP2
0328: ADD
0329: DUP5
032a: SWAP1
032b: DIV
032c: DUP5
032d: MUL
032e: DUP6
032f: ADD
0330: DUP5
0331: ADD
0332: SWAP1
0333: SWAP6
0334: MSTORE
0335: DUP5
0336: DUP5
0337: MSTORE
0338: PUSH2 0x0532
033b: SWAP5
033c: DUP2
033d: CALLDATALOAD
033e: SWAP5
033f: PUSH1 0x24
0341: DUP1
0342: CALLDATALOAD
0343: SWAP6
0344: SWAP4
0345: SWAP5
0346: PUSH1 0x64
0348: SWAP5
0349: SWAP3
034a: SWAP4
034b: SWAP2
034c: ADD
034d: SWAP2
034e: DUP2
034f: SWAP1
0350: DUP5
0351: ADD
0352: DUP4
0353: DUP3
0354: DUP1
0355: DUP3
0356: DUP5
0357: CALLDATACOPY
0358: POP
0359: SWAP5
035a: SWAP7
035b: POP
035c: POP
035d: POP
035e: POP
035f: POP
0360: POP
0361: POP
0362: PUSH1 0x00
0364: PUSH1 0x00
0366: DUP4
0367: PUSH1 0x04
0369: PUSH1 0x00
036b: POP
036c: PUSH1 0x00
036e: CALLER
036f: PUSH1 0x01
0371: PUSH1 0xa0
0373: PUSH1 0x02
0375: EXP
0376: SUB
0377: AND
0378: DUP2
0379: MSTORE
037a: PUSH1 0x20
037c: ADD
037d: SWAP1
037e: DUP2
037f: MSTORE
0380: PUSH1 0x20
0382: ADD
0383: PUSH1 0x00
--- range 0x384-0x488 ---
0384: STOP
0385: SHA3
0386: PUSH1 0x00
0388: POP
0389: PUSH1 0x00
038b: DUP8
038c: PUSH1 0x01
038e: PUSH1 0xa0
0390: PUSH1 0x02
0392: EXP
0393: SUB
0394: AND
0395: DUP2
0396: MSTORE
0397: PUSH1 0x20
0399: ADD
039a: SWAP1
039b: DUP2
039c: MSTORE
039d: PUSH1 0x20
039f: ADD
03a0: PUSH1 0x00
03a2: SHA3
03a3: PUSH1 0x00
03a5: POP
03a6: DUP2
03a7: SWAP1
03a8: SSTORE
03a9: POP
03aa: DUP5
03ab: SWAP1
03ac: POP
03ad: DUP1
03ae: PUSH1 0x01
03b0: PUSH1 0xa0
03b2: PUSH1 0x02
03b4: EXP
03b5: SUB
03b6: AND
03b7: PUSH4 0x8f4ffcb1
03bc: CALLER
03bd: DUP7
03be: ADDRESS
03bf: DUP8
03c0: PUSH1 0x40
03c2: MLOAD
03c3: DUP6
03c4: PUSH1 0xe0
03c6: PUSH1 0x02
03c8: EXP
03c9: MUL
03ca: DUP2
03cb: MSTORE
03cc: PUSH1 0x04
03ce: ADD
03cf: DUP1
03d0: DUP6
03d1: PUSH1 0x01
03d3: PUSH1 0xa0
03d5: PUSH1 0x02
03d7: EXP
03d8: SUB
03d9: AND
03da: DUP2
03db: MSTORE
03dc: PUSH1 0x20
03de: ADD
03df: DUP5
03e0: DUP2
03e1: MSTORE
03e2: PUSH1 0x20
03e4: ADD
03e5: DUP4
03e6: PUSH1 0x01
03e8: PUSH1 0xa0
03ea: PUSH1 0x02
03ec: EXP
03ed: SUB
03ee: AND
03ef: DUP2
03f0: MSTORE
03f1: PUSH1 0x20
03f3: ADD
03f4: DUP1
03f5: PUSH1 0x20
03f7: ADD
03f8: DUP3
03f9: DUP2
03fa: SUB
03fb: DUP3
03fc: MSTORE
03fd: DUP4
03fe: DUP2
03ff: DUP2
0400: MLOAD
0401: DUP2
0402: MSTORE
0403: PUSH1 0x20
0405: ADD
0406: SWAP2
0407: POP
0408: DUP1
0409: MLOAD
040a: SWAP1
040b: PUSH1 0x20
040d: ADD
040e: SWAP1
040f: DUP1
0410: DUP4
0411: DUP4
0412: DUP3
0413: SWAP1
0414: PUSH1 0x00
0416: PUSH1 0x04
0418: PUSH1 0x20
041a: DUP5
041b: PUSH1 0x1f
041d: ADD
041e: DIV
041f: PUSH1 0x0f
0421: MUL
0422: PUSH1 0x03
0424: ADD
0425: CALL
0426: POP
0427: SWAP1
0428: POP
0429: SWAP1
042a: DUP2
042b: ADD
042c: SWAP1
042d: PUSH1 0x1f
042f: AND
0430: DUP1
0431: ISZERO
0432: PUSH2 0x044f
0435: JUMPI
0436: DUP1
0437: DUP3
0438: SUB
0439: DUP1
043a: MLOAD
043b: PUSH1 0x01
043d: DUP4
043e: PUSH1 0x20
0440: SUB
0441: PUSH2 0x0100
0444: EXP
0445: SUB
0446: NOT
0447: AND
0448: DUP2
0449: MSTORE
044a: PUSH1 0x20
044c: ADD
044d: SWAP2
044e: POP
044f: JUMPDEST
0450: POP
0451: SWAP6
0452: POP
0453: POP
0454: POP
0455: POP
0456: POP
0457: POP
0458: PUSH1 0x00
045a: PUSH1 0x40
045c: MLOAD
045d: DUP1
045e: DUP4
045f: SUB
0460: DUP2
0461: PUSH1 0x00
0463: DUP8
0464: PUSH2 0x61da
0467: GAS
0468: SUB
0469: CALL
046a: ISZERO
046b: PUSH2 0x0002
046e: JUMPI
046f: POP
0470: POP
0471: POP
0472: POP
0473: SWAP4
0474: SWAP3
0475: POP
0476: POP
0477: POP
0478: JUMP
0479: JUMPDEST
047a: PUSH1 0x05
047c: PUSH1 0x20
047e: SWAP1
047f: DUP2
0480: MSTORE
0481: PUSH1 0x04
0483: CALLDATALOAD
0484: PUSH1 0x00
0486: SWAP1
0487: DUP2
--- range 0x618-0x7da ---
0618: STATICCALL
0619: OP_0c
061a: OP_f6
061b: SWAP1
061c: DUP2
061d: ADD
061e: SWAP1
061f: PUSH2 0x021f
0622: JUMP
0623: JUMPDEST
0624: POP
0625: SWAP1
0626: JUMP
0627: JUMPDEST
0628: POP
0629: POP
062a: PUSH1 0x02
062c: DUP1
062d: SLOAD
062e: PUSH1 0xff
0630: NOT
0631: AND
0632: PUSH1 0x07
0634: OR
0635: SWAP1
0636: SSTORE
0637: POP
0638: POP
0639: POP
063a: POP
063b: JUMP
063c: JUMPDEST
063d: PUSH1 0x01
063f: PUSH1 0xa0
0641: PUSH1 0x02
0643: EXP
0644: SUB
0645: DUP3
0646: AND
0647: PUSH1 0x00
0649: SWAP1
064a: DUP2
064b: MSTORE
064c: PUSH1 0x03
064e: PUSH1 0x20
0650: MSTORE
0651: PUSH1 0x40
0653: SWAP1
0654: SHA3
0655: SLOAD
0656: DUP2
0657: DUP2
0658: ADD
0659: LT
065a: ISZERO
065b: PUSH2 0x0663
065e: JUMPI
065f: PUSH2 0x0002
0662: JUMP
0663: JUMPDEST
0664: PUSH1 0x01
0666: PUSH1 0xa0
0668: PUSH1 0x02
066a: EXP
066b: SUB
066c: CALLER
066d: DUP2
066e: AND
066f: PUSH1 0x00
0671: DUP2
0672: DUP2
0673: MSTORE
0674: PUSH1 0x03
0676: PUSH1 0x20
0678: SWAP1
0679: DUP2
067a: MSTORE
067b: PUSH1 0x40
067d: DUP1
067e: DUP4
067f: SHA3
0680: DUP1
0681: SLOAD
0682: DUP8
0683: SWAP1
0684: SUB
0685: SWAP1
0686: SSTORE
0687: SWAP4
0688: DUP7
0689: AND
068a: DUP1
068b: DUP4
068c: MSTORE
068d: SWAP2
068e: DUP5
068f: SWAP1
0690: SHA3
0691: DUP1
0692: SLOAD
0693: DUP7
0694: ADD
0695: SWAP1
0696: SSTORE
0697: DUP4
0698: MLOAD
0699: DUP6
069a: DUP2
069b: MSTORE
069c: SWAP4
069d: MLOAD
069e: SWAP2
069f: SWAP4
06a0: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
06c1: SWAP3
06c2: SWAP1
06c3: DUP2
06c4: SWAP1
06c5: SUB
06c6: SWAP1
06c7: SWAP2
06c8: ADD
06c9: SWAP1
06ca: LOG3
06cb: POP
06cc: POP
06cd: JUMP
06ce: JUMPDEST
06cf: PUSH1 0x01
06d1: PUSH1 0xa0
06d3: PUSH1 0x02
06d5: EXP
06d6: SUB
06d7: DUP4
06d8: AND
06d9: PUSH1 0x00
06db: SWAP1
06dc: DUP2
06dd: MSTORE
06de: PUSH1 0x03
06e0: PUSH1 0x20
06e2: MSTORE
06e3: PUSH1 0x40
06e5: SWAP1
06e6: SHA3
06e7: SLOAD
06e8: DUP3
06e9: DUP2
06ea: ADD
06eb: LT
06ec: ISZERO
06ed: PUSH2 0x06f5
06f0: JUMPI
06f1: PUSH2 0x0002
06f4: JUMP
06f5: JUMPDEST
06f6: PUSH1 0x01
06f8: PUSH1 0xa0
06fa: PUSH1 0x02
06fc: EXP
06fd: SUB
06fe: DUP5
06ff: DUP2
0700: AND
0701: PUSH1 0x00
0703: DUP2
0704: DUP2
0705: MSTORE
0706: PUSH1 0x04
0708: PUSH1 0x20
070a: SWAP1
070b: DUP2
070c: MSTORE
070d: PUSH1 0x40
070f: DUP1
0710: DUP4
0711: SHA3
0712: CALLER
0713: SWAP6
0714: SWAP1
0715: SWAP6
0716: AND
0717: DUP1
0718: DUP5
0719: MSTORE
071a: SWAP5
071b: DUP3
071c: MSTORE
071d: DUP1
071e: DUP4
071f: SHA3
0720: SLOAD
0721: SWAP4
0722: DUP4
0723: MSTORE
0724: PUSH1 0x05
0726: DUP3
0727: MSTORE
0728: DUP1
0729: DUP4
072a: SHA3
072b: SWAP5
072c: DUP4
072d: MSTORE
072e: SWAP4
072f: SWAP1
0730: MSTORE
0731: SWAP2
0732: SWAP1
0733: SWAP2
0734: SHA3
0735: SLOAD
0736: DUP4
0737: ADD
0738: GT
0739: ISZERO
073a: PUSH2 0x0742
073d: JUMPI
073e: PUSH2 0x0002
0741: JUMP
0742: JUMPDEST
0743: PUSH1 0x01
0745: PUSH1 0xa0
0747: PUSH1 0x02
0749: EXP
074a: SUB
074b: DUP5
074c: DUP2
074d: AND
074e: PUSH1 0x00
0750: DUP2
0751: DUP2
0752: MSTORE
0753: PUSH1 0x03
0755: PUSH1 0x20
0757: SWAP1
0758: DUP2
0759: MSTORE
075a: PUSH1 0x40
075c: DUP1
075d: DUP4
075e: SHA3
075f: DUP1
0760: SLOAD
0761: DUP9
0762: SWAP1
0763: SUB
0764: SWAP1
0765: SSTORE
0766: DUP8
0767: DUP6
0768: AND
0769: DUP1
076a: DUP5
076b: MSTORE
076c: DUP2
076d: DUP5
076e: SHA3
076f: DUP1
0770: SLOAD
0771: DUP10
0772: ADD
0773: SWAP1
0774: SSTORE
0775: SWAP4
0776: DUP4
0777: MSTORE
0778: PUSH1 0x05
077a: DUP3
077b: MSTORE
077c: DUP1
077d: DUP4
077e: SHA3
077f: CALLER
0780: SWAP6
0781: SWAP1
0782: SWAP6
0783: AND
0784: DUP1
0785: DUP5
0786: MSTORE
0787: SWAP5
0788: DUP3
0789: MSTORE
078a: SWAP2
078b: DUP3
078c: SWAP1
078d: SHA3
078e: DUP1
078f: SLOAD
0790: DUP8
0791: ADD
0792: SWAP1
0793: SSTORE
0794: DUP2
0795: MLOAD
0796: DUP7
0797: DUP2
0798: MSTORE
0799: SWAP2
079a: MLOAD
079b: SWAP3
079c: SWAP4
079d: SWAP3
079e: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
07bf: SWAP3
07c0: DUP2
07c1: SWAP1
07c2: SUB
07c3: SWAP1
07c4: SWAP2
07c5: ADD
07c6: SWAP1
07c7: LOG3
07c8: SWAP4
07c9: SWAP3
07ca: POP
07cb: POP
07cc: POP
07cd: JUMP

exec
/bin/bash -lc "python3 - <<'PY'
import json
opcodes={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(1,33): opcodes[0x5f+i]=f'PUSH{i}'
for i in range(1,17): opcodes[0x7f+i]=f'DUP{i}'
for i in range(1,17): opcodes[0x8f+i]=f'SWAP{i}'
for i in range(0,5): opcodes[0xa0+i]=f'LOG{i}'
bytecode=bytes.fromhex(json.load(open('BYTECODE_BUNDLE.json'))['artifact']['runtime_bytecode']['full'][2:])
entries=[0x00e8,0x0233,0x0265,0x0271,0x0289,0x02e6,0x0315,0x0479,0x049e,0x04c2,0x0532,0x0544,0x0586,0x0627,0x063c,0x06ce]
# print from 0x315 to 0x4c2, and 0x479 to 0x532
for start,end in [(0x315,0x479),(0x479,0x4c2),(0xe8,0x233)]:
    print(f'--- {start:#x}-{end:#x} ---')
    pc=start
    while pc<end:
        op=bytecode[pc]
        name=opcodes.get(op,f'OP_{op:02x}')
        if 0x60<=op<=0x7f:
            n=op-0x5f; data=bytecode[pc+1:pc+1+n]
            print(f'{pc:04x}: {name} 0x{data.hex()}')
            pc+=1+n
        else:
            print(f'{pc:04x}: {name}')
            pc+=1
PY" in /tmp/codex-ewkgz7je
 succeeded in 0ms:
--- 0x315-0x479 ---
0315: JUMPDEST
0316: PUSH1 0x40
0318: DUP1
0319: MLOAD
031a: PUSH1 0x20
031c: PUSH1 0x44
031e: CALLDATALOAD
031f: PUSH1 0x04
0321: DUP2
0322: DUP2
0323: ADD
0324: CALLDATALOAD
0325: PUSH1 0x1f
0327: DUP2
0328: ADD
0329: DUP5
032a: SWAP1
032b: DIV
032c: DUP5
032d: MUL
032e: DUP6
032f: ADD
0330: DUP5
0331: ADD
0332: SWAP1
0333: SWAP6
0334: MSTORE
0335: DUP5
0336: DUP5
0337: MSTORE
0338: PUSH2 0x0532
033b: SWAP5
033c: DUP2
033d: CALLDATALOAD
033e: SWAP5
033f: PUSH1 0x24
0341: DUP1
0342: CALLDATALOAD
0343: SWAP6
0344: SWAP4
0345: SWAP5
0346: PUSH1 0x64
0348: SWAP5
0349: SWAP3
034a: SWAP4
034b: SWAP2
034c: ADD
034d: SWAP2
034e: DUP2
034f: SWAP1
0350: DUP5
0351: ADD
0352: DUP4
0353: DUP3
0354: DUP1
0355: DUP3
0356: DUP5
0357: CALLDATACOPY
0358: POP
0359: SWAP5
035a: SWAP7
035b: POP
035c: POP
035d: POP
035e: POP
035f: POP
0360: POP
0361: POP
0362: PUSH1 0x00
0364: PUSH1 0x00
0366: DUP4
0367: PUSH1 0x04
0369: PUSH1 0x00
036b: POP
036c: PUSH1 0x00
036e: CALLER
036f: PUSH1 0x01
0371: PUSH1 0xa0
0373: PUSH1 0x02
0375: EXP
0376: SUB
0377: AND
0378: DUP2
0379: MSTORE
037a: PUSH1 0x20
037c: ADD
037d: SWAP1
037e: DUP2
037f: MSTORE
0380: PUSH1 0x20
0382: ADD
0383: PUSH1 0x00
0385: SHA3
0386: PUSH1 0x00
0388: POP
0389: PUSH1 0x00
038b: DUP8
038c: PUSH1 0x01
038e: PUSH1 0xa0
0390: PUSH1 0x02
0392: EXP
0393: SUB
0394: AND
0395: DUP2
0396: MSTORE
0397: PUSH1 0x20
0399: ADD
039a: SWAP1
039b: DUP2
039c: MSTORE
039d: PUSH1 0x20
039f: ADD
03a0: PUSH1 0x00
03a2: SHA3
03a3: PUSH1 0x00
03a5: POP
03a6: DUP2
03a7: SWAP1
03a8: SSTORE
03a9: POP
03aa: DUP5
03ab: SWAP1
03ac: POP
03ad: DUP1
03ae: PUSH1 0x01
03b0: PUSH1 0xa0
03b2: PUSH1 0x02
03b4: EXP
03b5: SUB
03b6: AND
03b7: PUSH4 0x8f4ffcb1
03bc: CALLER
03bd: DUP7
03be: ADDRESS
03bf: DUP8
03c0: PUSH1 0x40
03c2: MLOAD
03c3: DUP6
03c4: PUSH1 0xe0
03c6: PUSH1 0x02
03c8: EXP
03c9: MUL
03ca: DUP2
03cb: MSTORE
03cc: PUSH1 0x04
03ce: ADD
03cf: DUP1
03d0: DUP6
03d1: PUSH1 0x01
03d3: PUSH1 0xa0
03d5: PUSH1 0x02
03d7: EXP
03d8: SUB
03d9: AND
03da: DUP2
03db: MSTORE
03dc: PUSH1 0x20
03de: ADD
03df: DUP5
03e0: DUP2
03e1: MSTORE
03e2: PUSH1 0x20
03e4: ADD
03e5: DUP4
03e6: PUSH1 0x01
03e8: PUSH1 0xa0
03ea: PUSH1 0x02
03ec: EXP
03ed: SUB
03ee: AND
03ef: DUP2
03f0: MSTORE
03f1: PUSH1 0x20
03f3: ADD
03f4: DUP1
03f5: PUSH1 0x20
03f7: ADD
03f8: DUP3
03f9: DUP2
03fa: SUB
03fb: DUP3
03fc: MSTORE
03fd: DUP4
03fe: DUP2
03ff: DUP2
0400: MLOAD
0401: DUP2
0402: MSTORE
0403: PUSH1 0x20
0405: ADD
0406: SWAP2
0407: POP
0408: DUP1
0409: MLOAD
040a: SWAP1
040b: PUSH1 0x20
040d: ADD
040e: SWAP1
040f: DUP1
0410: DUP4
0411: DUP4
0412: DUP3
0413: SWAP1
0414: PUSH1 0x00
0416: PUSH1 0x04
0418: PUSH1 0x20
041a: DUP5
041b: PUSH1 0x1f
041d: ADD
041e: DIV
041f: PUSH1 0x0f
0421: MUL
0422: PUSH1 0x03
0424: ADD
0425: CALL
0426: POP
0427: SWAP1
0428: POP
0429: SWAP1
042a: DUP2
042b: ADD
042c: SWAP1
042d: PUSH1 0x1f
042f: AND
0430: DUP1
0431: ISZERO
0432: PUSH2 0x044f
0435: JUMPI
0436: DUP1
0437: DUP3
0438: SUB
0439: DUP1
043a: MLOAD
043b: PUSH1 0x01
043d: DUP4
043e: PUSH1 0x20
0440: SUB
0441: PUSH2 0x0100
0444: EXP
0445: SUB
0446: NOT
0447: AND
0448: DUP2
0449: MSTORE
044a: PUSH1 0x20
044c: ADD
044d: SWAP2
044e: POP
044f: JUMPDEST
0450: POP
0451: SWAP6
0452: POP
0453: POP
0454: POP
0455: POP
0456: POP
0457: POP
0458: PUSH1 0x00
045a: PUSH1 0x40
045c: MLOAD
045d: DUP1
045e: DUP4
045f: SUB
0460: DUP2
0461: PUSH1 0x00
0463: DUP8
0464: PUSH2 0x61da
0467: GAS
0468: SUB
0469: CALL
046a: ISZERO
046b: PUSH2 0x0002
046e: JUMPI
046f: POP
0470: POP
0471: POP
0472: POP
0473: SWAP4
0474: SWAP3
0475: POP
0476: POP
0477: POP
0478: JUMP
--- 0x479-0x4c2 ---
0479: JUMPDEST
047a: PUSH1 0x05
047c: PUSH1 0x20
047e: SWAP1
047f: DUP2
0480: MSTORE
0481: PUSH1 0x04
0483: CALLDATALOAD
0484: PUSH1 0x00
0486: SWAP1
0487: DUP2
0488: MSTORE
0489: PUSH1 0x40
048b: DUP1
048c: DUP3
048d: SHA3
048e: SWAP1
048f: SWAP3
0490: MSTORE
0491: PUSH1 0x24
0493: CALLDATALOAD
0494: DUP2
0495: MSTORE
0496: SHA3
0497: SLOAD
0498: PUSH2 0x0532
049b: SWAP1
049c: DUP2
049d: JUMP
049e: JUMPDEST
049f: PUSH1 0x04
04a1: PUSH1 0x20
04a3: DUP2
04a4: DUP2
04a5: MSTORE
04a6: SWAP1
04a7: CALLDATALOAD
04a8: PUSH1 0x00
04aa: SWAP1
04ab: DUP2
04ac: MSTORE
04ad: PUSH1 0x40
04af: DUP1
04b0: DUP3
04b1: SHA3
04b2: SWAP1
04b3: SWAP3
04b4: MSTORE
04b5: PUSH1 0x24
04b7: CALLDATALOAD
04b8: DUP2
04b9: MSTORE
04ba: SHA3
04bb: SLOAD
04bc: PUSH2 0x0532
04bf: SWAP1
04c0: DUP2
04c1: JUMP
--- 0xe8-0x233 ---
00e8: JUMPDEST
00e9: PUSH1 0x40
00eb: DUP1
00ec: MLOAD
00ed: PUSH1 0x20
00ef: PUSH1 0x24
00f1: DUP1
00f2: CALLDATALOAD
00f3: PUSH1 0x04
00f5: DUP2
00f6: DUP2
00f7: ADD
00f8: CALLDATALOAD
00f9: PUSH1 0x1f
00fb: DUP2
00fc: ADD
00fd: DUP6
00fe: SWAP1
00ff: DIV
0100: DUP6
0101: MUL
0102: DUP7
0103: ADD
0104: DUP6
0105: ADD
0106: SWAP1
0107: SWAP7
0108: MSTORE
0109: DUP6
010a: DUP6
010b: MSTORE
010c: PUSH2 0x04c2
010f: SWAP6
0110: DUP2
0111: CALLDATALOAD
0112: SWAP6
0113: SWAP2
0114: SWAP5
0115: PUSH1 0x44
0117: SWAP5
0118: SWAP3
0119: SWAP4
011a: SWAP1
011b: SWAP3
011c: ADD
011d: SWAP2
011e: DUP2
011f: SWAP1
0120: DUP5
0121: ADD
0122: DUP4
0123: DUP3
0124: DUP1
0125: DUP3
0126: DUP5
0127: CALLDATACOPY
0128: POP
0129: POP
012a: PUSH1 0x40
012c: DUP1
012d: MLOAD
012e: PUSH1 0x20
0130: PUSH1 0x64
0132: CALLDATALOAD
0133: DUP1
0134: DUP12
0135: ADD
0136: CALLDATALOAD
0137: PUSH1 0x1f
0139: DUP2
013a: ADD
013b: DUP4
013c: SWAP1
013d: DIV
013e: DUP4
013f: MUL
0140: DUP5
0141: ADD
0142: DUP4
0143: ADD
0144: SWAP1
0145: SWAP5
0146: MSTORE
0147: DUP4
0148: DUP4
0149: MSTORE
014a: SWAP8
014b: SWAP10
014c: SWAP9
014d: CALLDATALOAD
014e: SWAP9
014f: SWAP8
0150: PUSH1 0x84
0152: SWAP8
0153: POP
0154: SWAP2
0155: SWAP6
0156: POP
0157: PUSH1 0x24
0159: SWAP2
015a: SWAP1
015b: SWAP2
015c: ADD
015d: SWAP4
015e: POP
015f: SWAP1
0160: SWAP2
0161: POP
0162: DUP2
0163: SWAP1
0164: DUP5
0165: ADD
0166: DUP4
0167: DUP3
0168: DUP1
0169: DUP3
016a: DUP5
016b: CALLDATACOPY
016c: POP
016d: POP
016e: POP
016f: PUSH1 0x01
0171: PUSH1 0xa0
0173: PUSH1 0x02
0175: EXP
0176: SUB
0177: CALLER
0178: AND
0179: PUSH1 0x00
017b: SWAP1
017c: DUP2
017d: MSTORE
017e: PUSH1 0x03
0180: PUSH1 0x20
0182: SWAP1
0183: DUP2
0184: MSTORE
0185: PUSH1 0x40
0187: DUP1
0188: DUP4
0189: SHA3
018a: PUSH3 0x0bde31
018e: SWAP1
018f: SSTORE
0190: DUP1
0191: MLOAD
0192: DUP1
0193: DUP3
0194: ADD
0195: SWAP1
0196: SWAP2
0197: MSTORE
0198: PUSH1 0x07
019a: DUP2
019b: MSTORE
019c: PUSH32 0x55636b436f696e00000000000000000000000000000000000000000000000000
01bd: SWAP1
01be: DUP3
01bf: ADD
01c0: SWAP1
01c1: DUP2
01c2: MSTORE
01c3: DUP3
01c4: SLOAD
01c5: DUP4
01c6: DUP1
01c7: MSTORE
01c8: SWAP1
01c9: MLOAD
01ca: PUSH1 0x0e
01cc: PUSH1 0xff
01ce: NOT
01cf: SWAP1
01d0: SWAP2
01d1: AND
01d2: OR
01d3: DUP4
01d4: SSTORE
01d5: SWAP6
01d6: SWAP8
01d7: POP
01d8: SWAP1
01d9: SWAP6
01da: POP
01db: PUSH2 0x058e
01de: SWAP5
01df: PUSH1 0x02
01e1: PUSH1 0x01
01e3: DUP3
01e4: AND
01e5: ISZERO
01e6: PUSH2 0x0100
01e9: MUL
01ea: PUSH1 0x00
01ec: NOT
01ed: ADD
01ee: SWAP1
01ef: SWAP2
01f0: AND
01f1: DIV
01f2: PUSH1 0x1f
01f4: ADD
01f5: DIV
01f6: PUSH32 0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563
0217: SWAP1
0218: DUP2
0219: ADD
021a: SWAP4
021b: POP
021c: SWAP2
021d: POP
021e: POP
021f: JUMPDEST
0220: DUP1
0221: DUP3
0222: GT
0223: ISZERO
0224: PUSH2 0x0623
0227: JUMPI
0228: PUSH1 0x00
022a: DUP2
022b: SSTORE
022c: PUSH1 0x01
022e: ADD
022f: PUSH2 0x021f
0232: JUMP

exec
/bin/bash -lc "python3 - <<'PY'
import json
opcodes={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(1,33): opcodes[0x5f+i]=f'PUSH{i}'
for i in range(1,17): opcodes[0x7f+i]=f'DUP{i}'
for i in range(1,17): opcodes[0x8f+i]=f'SWAP{i}'
for i in range(0,5): opcodes[0xa0+i]=f'LOG{i}'
bytecode=bytes.fromhex(json.load(open('BYTECODE_BUNDLE.json'))['artifact']['runtime_bytecode']['full'][2:])
for start,end in [(0x532,0x632),(0x586,0x62f)]:
    print(f'--- {start:#x}-{end:#x} ---')
    pc=start
    while pc<end:
        op=bytecode[pc]; name=opcodes.get(op,f'OP_{op:02x}')
        if 0x60<=op<=0x7f:
            n=op-0x5f; data=bytecode[pc+1:pc+1+n]
            print(f'{pc:04x}: {name} 0x{data.hex()}')
            pc+=1+n
        else:
            print(f'{pc:04x}: {name}')
            pc+=1
PY" in /tmp/codex-ewkgz7je
 succeeded in 0ms:
--- 0x532-0x632 ---
0532: JUMPDEST
0533: PUSH1 0x40
0535: DUP1
0536: MLOAD
0537: SWAP2
0538: DUP3
0539: MSTORE
053a: MLOAD
053b: SWAP1
053c: DUP2
053d: SWAP1
053e: SUB
053f: PUSH1 0x20
0541: ADD
0542: SWAP1
0543: RETURN
0544: JUMPDEST
0545: PUSH1 0x40
0547: DUP1
0548: MLOAD
0549: PUSH1 0xff
054b: SWAP3
054c: SWAP1
054d: SWAP3
054e: AND
054f: DUP3
0550: MSTORE
0551: MLOAD
0552: SWAP1
0553: DUP2
0554: SWAP1
0555: SUB
0556: PUSH1 0x20
0558: ADD
0559: SWAP1
055a: RETURN
055b: JUMPDEST
055c: DUP3
055d: ADD
055e: SWAP2
055f: SWAP1
0560: PUSH1 0x00
0562: MSTORE
0563: PUSH1 0x20
0565: PUSH1 0x00
0567: SHA3
0568: SWAP1
0569: JUMPDEST
056a: DUP2
056b: SLOAD
056c: DUP2
056d: MSTORE
056e: SWAP1
056f: PUSH1 0x01
0571: ADD
0572: SWAP1
0573: PUSH1 0x20
0575: ADD
0576: DUP1
0577: DUP4
0578: GT
0579: PUSH2 0x0569
057c: JUMPI
057d: DUP3
057e: SWAP1
057f: SUB
0580: PUSH1 0x1f
0582: AND
0583: DUP3
0584: ADD
0585: SWAP2
0586: JUMPDEST
0587: POP
0588: POP
0589: POP
058a: POP
058b: POP
058c: DUP2
058d: JUMP
058e: JUMPDEST
058f: POP
0590: POP
0591: PUSH1 0x40
0593: DUP1
0594: MLOAD
0595: DUP1
0596: DUP3
0597: ADD
0598: SWAP1
0599: SWAP2
059a: MSTORE
059b: PUSH1 0x01
059d: DUP1
059e: DUP3
059f: MSTORE
05a0: PUSH32 0x5500000000000000000000000000000000000000000000000000000000000000
05c1: PUSH1 0x20
05c3: SWAP3
05c4: DUP4
05c5: ADD
05c6: SWAP1
05c7: DUP2
05c8: MSTORE
05c9: DUP2
05ca: SLOAD
05cb: PUSH1 0x00
05cd: DUP4
05ce: SWAP1
05cf: MSTORE
05d0: SWAP1
05d1: MLOAD
05d2: PUSH1 0xff
05d4: NOT
05d5: AND
05d6: PUSH1 0x02
05d8: SWAP1
05d9: DUP2
05da: OR
05db: DUP4
05dc: SSTORE
05dd: SWAP2
05de: SWAP3
05df: PUSH2 0x0627
05e2: SWAP3
05e3: DUP3
05e4: DUP6
05e5: AND
05e6: ISZERO
05e7: PUSH2 0x0100
05ea: MUL
05eb: PUSH1 0x00
05ed: NOT
05ee: ADD
05ef: SWAP1
05f0: SWAP3
05f1: AND
05f2: SWAP2
05f3: SWAP1
05f4: SWAP2
05f5: DIV
05f6: PUSH1 0x1f
05f8: ADD
05f9: DIV
05fa: PUSH32 0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6
061b: SWAP1
061c: DUP2
061d: ADD
061e: SWAP1
061f: PUSH2 0x021f
0622: JUMP
0623: JUMPDEST
0624: POP
0625: SWAP1
0626: JUMP
0627: JUMPDEST
0628: POP
0629: POP
062a: PUSH1 0x02
062c: DUP1
062d: SLOAD
062e: PUSH1 0xff
0630: NOT
0631: AND
--- 0x586-0x62f ---
0586: JUMPDEST
0587: POP
0588: POP
0589: POP
058a: POP
058b: POP
058c: DUP2
058d: JUMP
058e: JUMPDEST
058f: POP
0590: POP
0591: PUSH1 0x40
0593: DUP1
0594: MLOAD
0595: DUP1
0596: DUP3
0597: ADD
0598: SWAP1
0599: SWAP2
059a: MSTORE
059b: PUSH1 0x01
059d: DUP1
059e: DUP3
059f: MSTORE
05a0: PUSH32 0x5500000000000000000000000000000000000000000000000000000000000000
05c1: PUSH1 0x20
05c3: SWAP3
05c4: DUP4
05c5: ADD
05c6: SWAP1
05c7: DUP2
05c8: MSTORE
05c9: DUP2
05ca: SLOAD
05cb: PUSH1 0x00
05cd: DUP4
05ce: SWAP1
05cf: MSTORE
05d0: SWAP1
05d1: MLOAD
05d2: PUSH1 0xff
05d4: NOT
05d5: AND
05d6: PUSH1 0x02
05d8: SWAP1
05d9: DUP2
05da: OR
05db: DUP4
05dc: SSTORE
05dd: SWAP2
05de: SWAP3
05df: PUSH2 0x0627
05e2: SWAP3
05e3: DUP3
05e4: DUP6
05e5: AND
05e6: ISZERO
05e7: PUSH2 0x0100
05ea: MUL
05eb: PUSH1 0x00
05ed: NOT
05ee: ADD
05ef: SWAP1
05f0: SWAP3
05f1: AND
05f2: SWAP2
05f3: SWAP1
05f4: SWAP2
05f5: DIV
05f6: PUSH1 0x1f
05f8: ADD
05f9: DIV
05fa: PUSH32 0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6
061b: SWAP1
061c: DUP2
061d: ADD
061e: SWAP1
061f: PUSH2 0x021f
0622: JUMP
0623: JUMPDEST
0624: POP
0625: SWAP1
0626: JUMP
0627: JUMPDEST
0628: POP
0629: POP
062a: PUSH1 0x02
062c: DUP1
062d: SLOAD
062e: PUSH1 0xff

exec
/bin/bash -lc "python3 - <<'PY'
import json
opcodes={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(1,33): opcodes[0x5f+i]=f'PUSH{i}'
for i in range(1,17): opcodes[0x7f+i]=f'DUP{i}'
for i in range(1,17): opcodes[0x8f+i]=f'SWAP{i}'
for i in range(0,5): opcodes[0xa0+i]=f'LOG{i}'
bytecode=bytes.fromhex(json.load(open('BYTECODE_BUNDLE.json'))['artifact']['runtime_bytecode']['full'][2:])
start,end=0x4c2,0x532
pc=start
while pc<end:
    op=bytecode[pc]; name=opcodes.get(op,f'OP_{op:02x}')
    if 0x60<=op<=0x7f:
        n=op-0x5f; data=bytecode[pc+1:pc+1+n]
        print(f'{pc:04x}: {name} 0x{data.hex()}')
        pc+=1+n
    else:
        print(f'{pc:04x}: {name}')
        pc+=1
PY" in /tmp/codex-ewkgz7je
 succeeded in 0ms:
04c2: JUMPDEST
04c3: STOP
04c4: JUMPDEST
04c5: PUSH1 0x40
04c7: MLOAD
04c8: DUP1
04c9: DUP1
04ca: PUSH1 0x20
04cc: ADD
04cd: DUP3
04ce: DUP2
04cf: SUB
04d0: DUP3
04d1: MSTORE
04d2: DUP4
04d3: DUP2
04d4: DUP2
04d5: MLOAD
04d6: DUP2
04d7: MSTORE
04d8: PUSH1 0x20
04da: ADD
04db: SWAP2
04dc: POP
04dd: DUP1
04de: MLOAD
04df: SWAP1
04e0: PUSH1 0x20
04e2: ADD
04e3: SWAP1
04e4: DUP1
04e5: DUP4
04e6: DUP4
04e7: DUP3
04e8: SWAP1
04e9: PUSH1 0x00
04eb: PUSH1 0x04
04ed: PUSH1 0x20
04ef: DUP5
04f0: PUSH1 0x1f
04f2: ADD
04f3: DIV
04f4: PUSH1 0x0f
04f6: MUL
04f7: PUSH1 0x03
04f9: ADD
04fa: CALL
04fb: POP
04fc: SWAP1
04fd: POP
04fe: SWAP1
04ff: DUP2
0500: ADD
0501: SWAP1
0502: PUSH1 0x1f
0504: AND
0505: DUP1
0506: ISZERO
0507: PUSH2 0x0524
050a: JUMPI
050b: DUP1
050c: DUP3
050d: SUB
050e: DUP1
050f: MLOAD
0510: PUSH1 0x01
0512: DUP4
0513: PUSH1 0x20
0515: SUB
0516: PUSH2 0x0100
0519: EXP
051a: SUB
051b: NOT
051c: AND
051d: DUP2
051e: MSTORE
051f: PUSH1 0x20
0521: ADD
0522: SWAP2
0523: POP
0524: JUMPDEST
0525: POP
0526: SWAP3
0527: POP
0528: POP
0529: POP
052a: PUSH1 0x40
052c: MLOAD
052d: DUP1
052e: SWAP2
052f: SUB
0530: SWAP1
0531: RETURN

exec
/bin/bash -lc "rg -n 'detector|finding|issue|warning|upgrade|proxy|guard' BYTECODE_BUNDLE.json" in /tmp/codex-ewkgz7je
 succeeded in 0ms:
7:        "guards": []
2176:            "guards": []
2230:            "guards": []
2284:            "guards": []
2338:            "guards": []
2392:            "guards": []
2446:            "guards": []
2500:            "guards": []
2554:            "guards": []
2608:            "guards": []
2662:            "guards": []
2734:        "upgrade_slot_write_suspected": false
2807:    "is_proxy": false,
3660:  "detector_findings": [
3688:        "guards_detected": [],
3741:        "guards_detected": []

exec
/bin/bash -lc "sed -n '3640,3785p' BYTECODE_BUNDLE.json" in /tmp/codex-ewkgz7je
 succeeded in 0ms:
        },
        {
          "entry_pc": 3714247998,
          "id": "fn:0xdc3080f2",
          "selector": "0xdc3080f2",
          "type": "function"
        },
        {
          "entry_pc": 1218,
          "id": "fn:0xdd62ed3e",
          "selector": "0xdd62ed3e",
          "type": "function"
        }
      ],
      "version": "capability_graph_v1"
    },
    "id": 2208,
    "updated_at": "2026-04-04T19:55:01.000000Z",
    "version": "capability_graph_v1"
  },
  "detector_findings": [
    {
      "confidence": 60,
      "evidence_json": {
        "call_count": 3,
        "examples": [
          {
            "opcode": "CALL",
            "pc": 1061,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          },
          {
            "opcode": "CALL",
            "pc": 1129,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          },
          {
            "opcode": "CALL",
            "pc": 1274,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          }
        ],
        "guards_detected": [],
        "untrusted_call_count": 3
      },
      "normalized_json": {
        "sink": "CALL"
      },
      "severity": "high",
      "title": "Untrusted CALL target/value reachable",
      "validated": true,
      "validation_json": {
        "attempts": 1,
        "call_targets": [
          "0x0000000000000000000000000000000000000004",
          "0x2bf4a701470dfe06babd313926a1ebcdcd5806c1"
        ],
        "classification": "target_varies",
        "confirmed": true,
        "errors": 0,
        "matched_probe": null,
        "sink": "CALL",
        "status": "confirmed",
        "target_varies": true,
        "trace_id": "0xb712b4a3a5c40d6301e1a7a0fe8e5ec74cd9d23ca6647dae6ec4148daa055239",
        "trace_mode": "callTracer"
      }
    },
    {
      "confidence": 55,
      "evidence_json": {
        "eth_value_calls": 3,
        "examples": [
          {
            "opcode": "CALL",
            "pc": 1061,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          },
          {
            "opcode": "CALL",
            "pc": 1129,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          },
          {
            "opcode": "CALL",
            "pc": 1274,
            "returndata_checked": null,
            "target_expression_category": "computed",
            "value_expression_category": "computed"
          }
        ],
        "guards_detected": []
      },
      "normalized_json": {
        "sink": "CALL",
        "value": "nonzero"
      },
      "severity": "high",
      "title": "ETH value transfer possible",
      "validated": true,
      "validation_json": {
        "attempts": 1,
        "call_targets": [
          "0x0000000000000000000000000000000000000004",
          "0x2bf4a701470dfe06babd313926a1ebcdcd5806c1"
        ],
        "classification": "target_varies",
        "confirmed": true,
        "errors": 0,
        "matched_probe": null,
        "sink": "CALL",
        "status": "confirmed",
        "target_varies": true,
        "trace_id": "0xb712b4a3a5c40d6301e1a7a0fe8e5ec74cd9d23ca6647dae6ec4148daa055239",
        "trace_mode": "callTracer"
      }
    }
  ],
  "heuristics_summary": {
    "create2_count": 0,
    "delegatecall_count": 0,
    "flags": [],
    "selfdestruct_count": 0
  }
}
exec
/bin/bash -lc 'cast 4byte 0xcae9ca51 || true
cast 4byte 0x1d2bca17 || true
cast 4byte 0xdc3080f2 || true
cast 4byte 0x8f4ffcb1 || true' in /tmp/codex-ewkgz7je
 succeeded in 0ms:
Error: error sending request for url (https://api.4byte.sourcify.dev/signature-database/v1/lookup?function=0xcae9ca51)

Context:
- Error #0: client error (Connect)
- Error #1: dns error
- Error #2: failed to lookup address information: Temporary failure in name resolution
Error: error sending request for url (https://api.4byte.sourcify.dev/signature-database/v1/lookup?function=0x1d2bca17)

Context:
- Error #0: client error (Connect)
- Error #1: dns error
- Error #2: failed to lookup address information: Temporary failure in name resolution
Error: error sending request for url (https://api.4byte.sourcify.dev/signature-database/v1/lookup?function=0xdc3080f2)

Context:
- Error #0: client error (Connect)
- Error #1: dns error
- Error #2: failed to lookup address information: Temporary failure in name resolution
Error: error sending request for url (https://api.4byte.sourcify.dev/signature-database/v1/lookup?function=0x8f4ffcb1)

Context:
- Error #0: client error (Connect)
- Error #1: dns error
- Error #2: failed to lookup address information: Temporary failure in name resolution

exec
/bin/bash -lc "python3 - <<'PY'
# rough symbolic trace for 0x315-0x469 to identify CALL args
import json
bytecode=bytes.fromhex(json.load(open('BYTECODE_BUNDLE.json'))['artifact']['runtime_bytecode']['full'][2:])
# disassemble
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
for i in range(0,5): ops[0xa0+i]=f'LOG{i}'
# parse selected instructions
instrs={}
pc=0x315
while pc<0x46a:
    op=bytecode[pc]; name=ops[op]
    arg=None
    if name.startswith('PUSH'):
        n=int(name[4:]); arg=int.from_bytes(bytecode[pc+1:pc+1+n],'big'); npc=pc+1+n
    else:
        npc=pc+1
    instrs[pc]=(name,arg,npc)
    pc=npc

stack=[]
mem={}
# seed entry stack with symbolic args? We don't know exact. Let's create 12 placeholders to be safe
for i in range(20):
    stack.append(f's{i}')
# top of stack is last element
# Maybe function enters with abi-decoder helper return addr and args on stack? Hard.
# Let's instead start at 0x315 with fresh stack is wrong.
# We need actual stack at entry from dispatcher. So this approach won't work.
print('entry instruction count',len(instrs))
PY" in /tmp/codex-ewkgz7je
 succeeded in 0ms:
entry instruction count 270

exec
/bin/bash -lc "python3 - <<'PY'
import json
from collections import defaultdict
bytecode=bytes.fromhex(json.load(open('BYTECODE_BUNDLE.json'))['artifact']['runtime_bytecode']['full'][2:])
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
for i in range(0,5): ops[0xa0+i]=f'LOG{i}'
# parse instructions from 0x315 to 0x46a
instrs={}
pc=0x315
while pc<0x46a:
    op=bytecode[pc]; name=ops.get(op,hex(op)); arg=None
    if name.startswith('PUSH'):
        n=int(name[4:]); arg=int.from_bytes(bytecode[pc+1:pc+1+n],'big'); npc=pc+1+n
    else:
        npc=pc+1
    instrs[pc]=(name,arg,npc)
    pc=npc

def sym(x):
    return str(x)

def bop(op,a,b):
    return f'({a} {op} {b})'

def mask(a,b):
    return f'({a}&{b})'
stack=['ret_04c2']
mem={64:'0x60'}
pc=0x315
steps=0
while pc<0x46a and steps<1000:
    steps+=1
    name,arg,npc=instrs[pc]
    # print(pc,name,arg,'STACK',stack)
    if name=='JUMPDEST':
        pass
    elif name.startswith('PUSH'):
        stack.append(hex(arg) if isinstance(arg,int) else arg)
    elif name.startswith('DUP'):
        n=int(name[3:]); stack.append(stack[-n])
    elif name.startswith('SWAP'):
        n=int(name[4:]); stack[-1],stack[-1-n]=stack[-1-n],stack[-1]
    elif name=='POP':
        stack.pop()
    elif name=='MLOAD':
        a=stack.pop(); stack.append(mem.get(a,f'mem[{a}]'))
    elif name=='MSTORE':
        a=stack.pop(); v=stack.pop(); mem[a]=v
    elif name=='CALLDATALOAD':
        a=stack.pop(); stack.append(f'cd[{a}]')
    elif name=='CALLDATACOPY':
        dst=stack.pop(); src=stack.pop(); ln=stack.pop(); mem[dst]=f'calldata[{src}:{src}+{ln}]'
    elif name=='ADD':
        b=stack.pop(); a=stack.pop(); stack.append(bop('+',a,b))
    elif name=='SUB':
        b=stack.pop(); a=stack.pop(); stack.append(bop('-',a,b))
    elif name=='MUL':
        b=stack.pop(); a=stack.pop(); stack.append(bop('*',a,b))
    elif name=='DIV':
        b=stack.pop(); a=stack.pop(); stack.append(bop('/',a,b))
    elif name=='AND':
        b=stack.pop(); a=stack.pop(); stack.append(mask(a,b))
    elif name=='OR':
        b=stack.pop(); a=stack.pop(); stack.append(f'({a}|{b})')
    elif name=='NOT':
        a=stack.pop(); stack.append(f'~{a}')
    elif name=='ISZERO':
        a=stack.pop(); stack.append(f'iszero({a})')
    elif name=='SHA3':
        off=stack.pop(); ln=stack.pop(); stack.append(f'keccak(mem[{off}:{off}+{ln}])')
    elif name=='SSTORE':
        slot=stack.pop(); val=stack.pop(); print(f'SSTORE at {pc:#x}: slot={slot} val={val}')
    elif name=='SLOAD':
        slot=stack.pop(); stack.append(f'storage[{slot}]')
    elif name=='LT':
        b=stack.pop(); a=stack.pop(); stack.append(f'({a}<{b})')
    elif name=='GT':
        b=stack.pop(); a=stack.pop(); stack.append(f'({a}>{b})')
    elif name=='EQ':
        b=stack.pop(); a=stack.pop(); stack.append(f'({a}=={b})')
    elif name=='CALLER':
        stack.append('CALLER')
    elif name=='ADDRESS':
        stack.append('ADDRESS')
    elif name=='GAS':
        stack.append('GAS')
    elif name=='CALL':
        outsz=stack.pop(); outoff=stack.pop(); insz=stack.pop(); inoff=stack.pop(); value=stack.pop(); to=stack.pop(); gas=stack.pop();
        print(f'CALL at {pc:#x}: gas={gas} to={to} value={value} inoff={inoff} insz={insz} outoff={outoff} outsz={outsz}')
        stack.append(f'callret[{pc:#x}]')
    elif name=='JUMPI':
        dest=stack.pop(); cond=stack.pop(); print(f'JUMPI at {pc:#x}: dest={dest} cond={cond} stack_top={stack[-5:]}')
        # choose fallthrough if destination is 0x44f and cond symbolic alignment; doesn't affect later target much maybe. If dest 0x0002 revert, ignore.
        if dest=='0x44f':
            pc=npc; continue
        else:
            pc=npc; continue
    elif name=='JUMP':
        dest=stack.pop(); print('JUMP to',dest,'at',hex(pc),'stack tail',stack[-10:]); break
    else:
        print('unhandled',hex(pc),name,'stack',stack[-8:]); break
    pc=npc
print('final stack tail',stack[-20:])
print('mem keys',list(mem.keys())[:10], 'mem[0x40]=',mem.get('0x40'), mem.get(64), mem.get('64'))
PY" in /tmp/codex-ewkgz7je
 succeeded in 0ms:
unhandled 0x375 EXP stack ['0x0', 'cd[0x24]', '0x4', '0x0', 'CALLER', '0x1', '0xa0', '0x2']
final stack tail ['ret_04c2', '0x532', 'cd[0x4]', 'cd[0x24]', 'mem[0x40]', '0x0', '0x0', 'cd[0x24]', '0x4', '0x0', 'CALLER', '0x1', '0xa0', '0x2']
mem keys [64, '0x40', 'mem[0x40]', '(0x20 + mem[0x40])'] mem[0x40]= ((((0x20 / (0x1f + cd[(cd[0x44] + 0x4)])) * 0x20) + mem[0x40]) + 0x20) 0x60 None

exec
/bin/bash -lc "python3 - <<'PY'
import json
bytecode=bytes.fromhex(json.load(open('BYTECODE_BUNDLE.json'))['artifact']['runtime_bytecode']['full'][2:])
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
for i in range(0,5): ops[0xa0+i]=f'LOG{i}'
instrs={}
pc=0x315
while pc<0x46a:
    op=bytecode[pc]; name=ops.get(op,hex(op)); arg=None
    if name.startswith('PUSH'):
        n=int(name[4:]); arg=int.from_bytes(bytecode[pc+1:pc+1+n],'big'); npc=pc+1+n
    else:
        npc=pc+1
    instrs[pc]=(name,arg,npc)
    pc=npc

def binop(stack,op):
    b=stack.pop(); a=stack.pop(); stack.append(f'({a} {op} {b})')
stack=['ret_04c2']
mem={64:'0x60'}
pc=0x315
steps=0
while pc<0x46a and steps<2000:
    steps+=1
    name,arg,npc=instrs[pc]
    if name=='JUMPDEST': pass
    elif name.startswith('PUSH'): stack.append(hex(arg))
    elif name.startswith('DUP'): stack.append(stack[-int(name[3:])])
    elif name.startswith('SWAP'):
        n=int(name[4:]); stack[-1],stack[-1-n]=stack[-1-n],stack[-1]
    elif name=='POP': stack.pop()
    elif name=='MLOAD':
        a=stack.pop(); stack.append(mem.get(a,f'mem[{a}]'))
    elif name=='MSTORE':
        a=stack.pop(); v=stack.pop(); mem[a]=v
    elif name=='CALLDATALOAD':
        a=stack.pop(); stack.append(f'cd[{a}]')
    elif name=='CALLDATACOPY':
        dst=stack.pop(); src=stack.pop(); ln=stack.pop(); mem[dst]=f'calldata[{src}:{src}+{ln}]'
    elif name in ('ADD','SUB','MUL','DIV','EXP','AND','OR','LT','GT','EQ'):
        opmap={'ADD':'+','SUB':'-','MUL':'*','DIV':'/','EXP':'**','AND':'&','OR':'|','LT':'<','GT':'>','EQ':'=='}
        binop(stack,opmap[name])
    elif name=='NOT':
        a=stack.pop(); stack.append(f'~{a}')
    elif name=='ISZERO':
        a=stack.pop(); stack.append(f'iszero({a})')
    elif name=='SHA3':
        off=stack.pop(); ln=stack.pop(); stack.append(f'keccak(mem[{off}:{off}+{ln}])')
    elif name=='SSTORE':
        slot=stack.pop(); val=stack.pop(); print(f'SSTORE at {pc:#x}: slot={slot} val={val}')
    elif name=='SLOAD':
        slot=stack.pop(); stack.append(f'storage[{slot}]')
    elif name=='CALLER': stack.append('CALLER')
    elif name=='ADDRESS': stack.append('ADDRESS')
    elif name=='GAS': stack.append('GAS')
    elif name=='CALL':
        outsz=stack.pop(); outoff=stack.pop(); insz=stack.pop(); inoff=stack.pop(); value=stack.pop(); to=stack.pop(); gas=stack.pop();
        print(f'CALL at {pc:#x}:')
        print('  gas ',gas)
        print('  to  ',to)
        print('  value',value)
        print('  in  ',inoff,'size',insz)
        print('  out ',outoff,'size',outsz)
        stack.append(f'callret[{pc:#x}]')
    elif name=='JUMPI':
        dest=stack.pop(); cond=stack.pop(); print(f'JUMPI at {pc:#x}: dest={dest} cond={cond}')
        pc=npc; continue
    elif name=='JUMP':
        dest=stack.pop(); print('JUMP at',hex(pc),'to',dest); break
    else:
        print('unhandled',hex(pc),name); break
    pc=npc
print('tail',stack[-20:])
PY" in /tmp/codex-ewkgz7je
 succeeded in 0ms:
SSTORE at 0x3a8: slot=keccak(mem[0x0:0x0+((0x0 + 0x20) + 0x20)]) val=cd[0x24]
CALL at 0x425:
  gas  cd[(cd[0x44] + 0x4)]
  to   ((((((((((0x20 / (0x1f + cd[(cd[0x44] + 0x4)])) * 0x20) + mem[0x40]) + 0x20) + 0x4) + 0x20) + 0x20) + 0x20) + 0x20) + 0x20)
  value cd[(cd[0x44] + 0x4)]
  in   (mem[0x40] + 0x20) size 0x0
  out  0x4 size (((0x20 / (cd[(cd[0x44] + 0x4)] + 0x1f)) * 0xf) + 0x3)
JUMPI at 0x435: dest=0x44f cond=iszero((cd[(cd[0x44] + 0x4)] & 0x1f))
CALL at 0x469:
  gas  0x0
  to   ((((0x20 / (0x1f + cd[(cd[0x44] + 0x4)])) * 0x20) + mem[0x40]) + 0x20)
  value (((((0x20 / (0x1f + cd[(cd[0x44] + 0x4)])) * 0x20) + mem[0x40]) + 0x20) - (((cd[(cd[0x44] + 0x4)] & 0x1f) - (((((((((((0x20 / (0x1f + cd[(cd[0x44] + 0x4)])) * 0x20) + mem[0x40]) + 0x20) + 0x4) + 0x20) + 0x20) + 0x20) + 0x20) + 0x20) + cd[(cd[0x44] + 0x4)])) + 0x20))
  in   ((((0x20 / (0x1f + cd[(cd[0x44] + 0x4)])) * 0x20) + mem[0x40]) + 0x20) size 0x0
  out  (cd[0x4] & (0x1 - (0xa0 ** 0x2))) size (0x61da - GAS)
tail ['ret_04c2', '0x532', 'cd[0x4]', 'cd[0x24]', 'mem[0x40]', '0x0', 'cd[0x4]', '(cd[0x4] & (0x1 - (0xa0 ** 0x2)))', '0x8f4ffcb1', '(((cd[(cd[0x44] + 0x4)] & 0x1f) - (((((((((((0x20 / (0x1f + cd[(cd[0x44] + 0x4)])) * 0x20) + mem[0x40]) + 0x20) + 0x4) + 0x20) + 0x20) + 0x20) + 0x20) + 0x20) + cd[(cd[0x44] + 0x4)])) + 0x20)', 'callret[0x469]']

exec
/bin/bash -lc "python3 - <<'PY'
import json
bytecode=bytes.fromhex(json.load(open('BYTECODE_BUNDLE.json'))['artifact']['runtime_bytecode']['full'][2:])
ops={0x00:'STOP',0x01:'ADD',0x02:'MUL',0x03:'SUB',0x04:'DIV',0x05:'SDIV',0x06:'MOD',0x07:'SMOD',0x08:'ADDMOD',0x09:'MULMOD',0x0a:'EXP',0x0b:'SIGNEXTEND',0x10:'LT',0x11:'GT',0x12:'SLT',0x13:'SGT',0x14:'EQ',0x15:'ISZERO',0x16:'AND',0x17:'OR',0x18:'XOR',0x19:'NOT',0x1a:'BYTE',0x20:'SHA3',0x30:'ADDRESS',0x31:'BALANCE',0x32:'ORIGIN',0x33:'CALLER',0x34:'CALLVALUE',0x35:'CALLDATALOAD',0x36:'CALLDATASIZE',0x37:'CALLDATACOPY',0x38:'CODESIZE',0x39:'CODECOPY',0x3a:'GASPRICE',0x3b:'EXTCODESIZE',0x3c:'EXTCODECOPY',0x3d:'RETURNDATASIZE',0x3e:'RETURNDATACOPY',0x40:'BLOCKHASH',0x41:'COINBASE',0x42:'TIMESTAMP',0x43:'NUMBER',0x44:'DIFFICULTY',0x45:'GASLIMIT',0x50:'POP',0x51:'MLOAD',0x52:'MSTORE',0x53:'MSTORE8',0x54:'SLOAD',0x55:'SSTORE',0x56:'JUMP',0x57:'JUMPI',0x58:'PC',0x59:'MSIZE',0x5a:'GAS',0x5b:'JUMPDEST',0xf0:'CREATE',0xf1:'CALL',0xf2:'CALLCODE',0xf3:'RETURN',0xf4:'DELEGATECALL',0xf5:'CREATE2',0xfa:'STATICCALL',0xfd:'REVERT',0xfe:'INVALID',0xff:'SELFDESTRUCT'}
for i in range(1,33): ops[0x5f+i]=f'PUSH{i}'
for i in range(1,17): ops[0x7f+i]=f'DUP{i}'
for i in range(1,17): ops[0x8f+i]=f'SWAP{i}'
for i in range(0,5): ops[0xa0+i]=f'LOG{i}'
instrs={}
pc=0x315
while pc<0x46a:
    op=bytecode[pc]; name=ops.get(op,hex(op)); arg=None
    if name.startswith('PUSH'):
        n=int(name[4:]); arg=int.from_bytes(bytecode[pc+1:pc+1+n],'big'); npc=pc+1+n
    else:
        npc=pc+1
    instrs[pc]=(name,arg,npc)
    pc=npc

def binop(stack,op):
    b=stack.pop(); a=stack.pop(); stack.append(f'({a} {op} {b})')
stack=['ret_04c2']
mem={ '0x40':'0x60' }
pc=0x315
while pc<0x46a:
    name,arg,npc=instrs[pc]
    if name=='JUMPDEST': pass
    elif name.startswith('PUSH'): stack.append(hex(arg))
    elif name.startswith('DUP'): stack.append(stack[-int(name[3:])])
    elif name.startswith('SWAP'):
        n=int(name[4:]); stack[-1],stack[-1-n]=stack[-1-n],stack[-1]
    elif name=='POP': stack.pop()
    elif name=='MLOAD': a=stack.pop(); stack.append(mem.get(a,f'mem[{a}]'))
    elif name=='MSTORE': a=stack.pop(); v=stack.pop(); mem[a]=v
    elif name=='CALLDATALOAD': a=stack.pop(); stack.append(f'cd[{a}]')
    elif name=='CALLDATACOPY': ln=stack.pop(); src=stack.pop(); dst=stack.pop(); mem[dst]=f'calldata[{src}:{src}+{ln}]'
    elif name in ('ADD','SUB','MUL','DIV','EXP','AND','OR','LT','GT','EQ'):
        opmap={'ADD':'+','SUB':'-','MUL':'*','DIV':'/','EXP':'**','AND':'&','OR':'|','LT':'<','GT':'>','EQ':'=='}; binop(stack,opmap[name])
    elif name=='NOT': a=stack.pop(); stack.append(f'~{a}')
    elif name=='ISZERO': a=stack.pop(); stack.append(f'iszero({a})')
    elif name=='SHA3': ln=stack.pop(); off=stack.pop(); stack.append(f'keccak(mem[{off}:{off}+{ln}])')
    elif name=='SSTORE': val=stack.pop(); slot=stack.pop(); print(f'SSTORE {pc:#x}: slot={slot} val={val}')
    elif name=='SLOAD': slot=stack.pop(); stack.append(f'storage[{slot}]')
    elif name=='CALLER': stack.append('CALLER')
    elif name=='ADDRESS': stack.append('ADDRESS')
    elif name=='GAS': stack.append('GAS')
    elif name=='CALL':
        gas=stack.pop(); to=stack.pop(); value=stack.pop(); inoff=stack.pop(); insz=stack.pop(); outoff=stack.pop(); outsz=stack.pop();
        print(f'CALL {pc:#x}: gas={gas} to={to} value={value} inoff={inoff} insz={insz} outoff={outoff} outsz={outsz}')
        stack.append(f'callret[{pc:#x}]')
    elif name=='JUMPI':
        dest=stack.pop(); cond=stack.pop(); print(f'JUMPI {pc:#x}: dest={dest} cond={cond}')
        pc=npc; continue
    elif name=='JUMP':
        dest=stack.pop(); print('JUMP',hex(pc),'to',dest); break
    else:
        print('unhandled',hex(pc),name); break
    pc=npc
print('stack tail',stack[-20:])
PY" in /tmp/codex-ewkgz7je
 succeeded in 0ms:
SSTORE 0x3a8: slot=cd[0x24] val=keccak(mem[((0x0 + 0x20) + 0x20):((0x0 + 0x20) + 0x20)+0x0])
CALL 0x425: gas=(((0x20 / (cd[(cd[0x44] + 0x4)] + 0x1f)) * 0xf) + 0x3) to=0x4 value=0x0 inoff=(0x60 + 0x20) insz=cd[(cd[0x44] + 0x4)] outoff=((((((((((0x20 / (0x1f + cd[(cd[0x44] + 0x4)])) * 0x20) + 0x60) + 0x20) + 0x4) + 0x20) + 0x20) + 0x20) + 0x20) + 0x20) outsz=cd[(cd[0x44] + 0x4)]
JUMPI 0x435: dest=0x44f cond=iszero((cd[(cd[0x44] + 0x4)] & 0x1f))
CALL 0x469: gas=(0x61da - GAS) to=(cd[0x4] & (0x1 - (0xa0 ** 0x2))) value=0x0 inoff=((((0x20 / (0x1f + cd[(cd[0x44] + 0x4)])) * 0x20) + 0x60) + 0x20) insz=(((((0x20 / (0x1f + cd[(cd[0x44] + 0x4)])) * 0x20) + 0x60) + 0x20) - (((cd[(cd[0x44] + 0x4)] & 0x1f) - (((((((((((0x20 / (0x1f + cd[(cd[0x44] + 0x4)])) * 0x20) + 0x60) + 0x20) + 0x4) + 0x20) + 0x20) + 0x20) + 0x20) + 0x20) + cd[(cd[0x44] + 0x4)])) + 0x20)) outoff=((((0x20 / (0x1f + cd[(cd[0x44] + 0x4)])) * 0x20) + 0x60) + 0x20) outsz=0x0
stack tail ['ret_04c2', '0x532', 'cd[0x4]', 'cd[0x24]', '0x60', '0x0', 'cd[0x4]', '(cd[0x4] & (0x1 - (0xa0 ** 0x2)))', '0x8f4ffcb1', '(((cd[(cd[0x44] + 0x4)] & 0x1f) - (((((((((((0x20 / (0x1f + cd[(cd[0x44] + 0x4)])) * 0x20) + 0x60) + 0x20) + 0x4) + 0x20) + 0x20) + 0x20) + 0x20) + 0x20) + cd[(cd[0x44] + 0x4)])) + 0x20)', 'callret[0x469]']

codex
{"no_findings":false,"summary":"Bytecode strongly resembles an old ERC-20 variant with one critical issue: a publicly callable constructor-like function can reset metadata and assign a fresh token balance to any caller. There is also a medium-confidence allowance/accounting deviation where `allowance()` appears to report the original approval while `transferFrom` tracks spent amount in a second mapping, so remaining spendable allowance is not what the standard getter returns.","findings":[{"severity":"critical","category":"access_control","title":"Public constructor-like function lets any caller mint/reset token state","exploit_scenario":"An attacker calls selector `0x1d2bca17` directly. The routine writes `0x0bde31` into the caller-derived slot under mapping slot `0x03`, then overwrites the metadata slots used by the token (`slot 0`, `slot 1`, and low byte of `slot 2`). Because no guard is detected, any account can invoke it to grant itself a fresh balance and repeat after spending, effectively breaking token supply integrity.","recommendation":"Remove or permanently disable this initializer path. If this was meant to be a constructor, replace it with an actual constructor/one-time initializer guard and prevent any post-deployment entry. If already deployed, treat the token as compromised unless this selector is provably unreachable through a proxy/admin wrapper.","evidence":"Dispatcher routes `0x1d2bca17` to `pc 0x00e8`. Within that path, the code computes a `CALLER`-keyed hash for slot `0x03` and stores constant `0x0bde31` (`pc 0x0177`-`0x018f`). It then stores hardcoded metadata into storage: name-like data in `slot 0` (`pc 0x0198`-`0x01d4`), symbol-like data in helper `pc 0x058e`-`0x05dc`, and sets the low byte of `slot 2` to `0x07` in `pc 0x0627`-`0x0636`. The artifact reports `auth.guards: []`, so there is no detected access control on this path. Selector inference from bytecode is best-effort, but this routine has clear constructor/initializer behavior.","locations":["selector:0x1d2bca17","pc:0x00e8","pc:0x018f","pc:0x01d4","pc:0x05dc","pc:0x0636"]},{"severity":"medium","category":"other","title":"Allowance accounting appears non-standard and can desynchronize from `allowance()`","exploit_scenario":"A spender uses `transferFrom` until the separate consumed-allowance mapping reaches the approved amount. If the owner later approves the same nominal amount again, `allowance(owner,spender)` can still report that amount, but `transferFrom` may fail because the contract adds a second stored value before checking the limit. Integrations that rely on standard ERC-20 `allowance()` semantics can mis-handle approvals or become stuck.","recommendation":"Use a single remaining-allowance source of truth, or reset the consumed-allowance mapping whenever a new approval is set. If this split-accounting design is intentional, expose an explicit remaining-allowance getter and avoid presenting `0xdd62ed3e` as standard ERC-20 allowance semantics.","evidence":"`0xdd62ed3e` reads a nested mapping rooted at slot `0x04` (`pc 0x049e`-`0x04bb`). `0xdc3080f2` reads a separate nested mapping rooted at slot `0x05` (`pc 0x0479`-`0x0497`). In `transferFrom` (`selector 0x23b872dd`), the code loads one mapping value around `pc 0x071d`-`0x0720`, then loads the second around `pc 0x0723`-`0x0735`, adds them, and compares the sum against the requested amount at `pc 0x0736`-`0x0739`; later it updates the slot-`0x05` mapping at `pc 0x077c`-`0x0793` instead of decrementing the slot-`0x04` value. This is a bytecode-level inference, so the exact intended names are uncertain, but the storage behavior is inconsistent with standard ERC-20 remaining-allowance accounting.","locations":["selector:0x23b872dd","selector:0xdd62ed3e","selector:0xdc3080f2","pc:0x049e","pc:0x0479","pc:0x0734","pc:0x0793"]}]}
tokens used
143,849
Metadata
{
    "codex": {
        "ran_at": "2026-04-05T03:44:32.057588+00:00",
        "returncode": 0
    },
    "project": {
        "mode": "bytecode",
        "bytecode_length": 3998,
        "bytecode_truncated": false,
        "capability_graph_present": true,
        "analysis_artifact_present": true
    },
    "summary": "Bytecode strongly resembles an old ERC-20 variant with one critical issue: a publicly callable constructor-like function can reset metadata and assign a fresh token balance to any caller. There is also a medium-confidence allowance/accounting deviation where `allowance()` appears to report the original approval while `transferFrom` tracks spent amount in a second mapping, so remaining spendable allowance is not what the standard getter returns.",
    "raw_final": {
        "summary": "Bytecode strongly resembles an old ERC-20 variant with one critical issue: a publicly callable constructor-like function can reset metadata and assign a fresh token balance to any caller. There is also a medium-confidence allowance/accounting deviation where `allowance()` appears to report the original approval while `transferFrom` tracks spent amount in a second mapping, so remaining spendable allowance is not what the standard getter returns.",
        "findings": [
            {
                "title": "Public constructor-like function lets any caller mint/reset token state",
                "category": "access_control",
                "evidence": "Dispatcher routes `0x1d2bca17` to `pc 0x00e8`. Within that path, the code computes a `CALLER`-keyed hash for slot `0x03` and stores constant `0x0bde31` (`pc 0x0177`-`0x018f`). It then stores hardcoded metadata into storage: name-like data in `slot 0` (`pc 0x0198`-`0x01d4`), symbol-like data in helper `pc 0x058e`-`0x05dc`, and sets the low byte of `slot 2` to `0x07` in `pc 0x0627`-`0x0636`. The artifact reports `auth.guards: []`, so there is no detected access control on this path. Selector inference from bytecode is best-effort, but this routine has clear constructor/initializer behavior.",
                "severity": "critical",
                "locations": [
                    "selector:0x1d2bca17",
                    "pc:0x00e8",
                    "pc:0x018f",
                    "pc:0x01d4",
                    "pc:0x05dc",
                    "pc:0x0636"
                ],
                "recommendation": "Remove or permanently disable this initializer path. If this was meant to be a constructor, replace it with an actual constructor/one-time initializer guard and prevent any post-deployment entry. If already deployed, treat the token as compromised unless this selector is provably unreachable through a proxy/admin wrapper.",
                "exploit_scenario": "An attacker calls selector `0x1d2bca17` directly. The routine writes `0x0bde31` into the caller-derived slot under mapping slot `0x03`, then overwrites the metadata slots used by the token (`slot 0`, `slot 1`, and low byte of `slot 2`). Because no guard is detected, any account can invoke it to grant itself a fresh balance and repeat after spending, effectively breaking token supply integrity."
            },
            {
                "title": "Allowance accounting appears non-standard and can desynchronize from `allowance()`",
                "category": "other",
                "evidence": "`0xdd62ed3e` reads a nested mapping rooted at slot `0x04` (`pc 0x049e`-`0x04bb`). `0xdc3080f2` reads a separate nested mapping rooted at slot `0x05` (`pc 0x0479`-`0x0497`). In `transferFrom` (`selector 0x23b872dd`), the code loads one mapping value around `pc 0x071d`-`0x0720`, then loads the second around `pc 0x0723`-`0x0735`, adds them, and compares the sum against the requested amount at `pc 0x0736`-`0x0739`; later it updates the slot-`0x05` mapping at `pc 0x077c`-`0x0793` instead of decrementing the slot-`0x04` value. This is a bytecode-level inference, so the exact intended names are uncertain, but the storage behavior is inconsistent with standard ERC-20 remaining-allowance accounting.",
                "severity": "medium",
                "locations": [
                    "selector:0x23b872dd",
                    "selector:0xdd62ed3e",
                    "selector:0xdc3080f2",
                    "pc:0x049e",
                    "pc:0x0479",
                    "pc:0x0734",
                    "pc:0x0793"
                ],
                "recommendation": "Use a single remaining-allowance source of truth, or reset the consumed-allowance mapping whenever a new approval is set. If this split-accounting design is intentional, expose an explicit remaining-allowance getter and avoid presenting `0xdd62ed3e` as standard ERC-20 allowance semantics.",
                "exploit_scenario": "A spender uses `transferFrom` until the separate consumed-allowance mapping reaches the approved amount. If the owner later approves the same nominal amount again, `allowance(owner,spender)` can still report that amount, but `transferFrom` may fail because the contract adds a second stored value before checking the limit. Integrations that rely on standard ERC-20 `allowance()` semantics can mis-handle approvals or become stuck."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
3
EXT*/BALANCE
0
Total opcodes
1425
Flags
No heuristic flags raised.
View cast disassembly output
00000000: PUSH1 0x60
00000002: PUSH1 0x40
00000004: MSTORE
00000005: CALLDATASIZE
00000006: ISZERO
00000007: PUSH2 0x0082
0000000a: JUMPI
0000000b: PUSH1 0xe0
0000000d: PUSH1 0x02
0000000f: EXP
00000010: PUSH1 0x00
00000012: CALLDATALOAD
00000013: DIV
00000014: PUSH4 0x06fdde03
00000019: DUP2
0000001a: EQ
0000001b: PUSH2 0x008a
0000001e: JUMPI
0000001f: DUP1
00000020: PUSH4 0x1d2bca17
00000025: EQ
00000026: PUSH2 0x00e8
00000029: JUMPI
0000002a: DUP1
0000002b: PUSH4 0x23b872dd
00000030: EQ
00000031: PUSH2 0x0233
00000034: JUMPI
00000035: DUP1
00000036: PUSH4 0x313ce567
0000003b: EQ
0000003c: PUSH2 0x0265
0000003f: JUMPI
00000040: DUP1
00000041: PUSH4 0x70a08231
00000046: EQ
00000047: PUSH2 0x0271
0000004a: JUMPI
0000004b: DUP1
0000004c: PUSH4 0x95d89b41
00000051: EQ
00000052: PUSH2 0x0289
00000055: JUMPI
00000056: DUP1
00000057: PUSH4 0xa9059cbb
0000005c: EQ
0000005d: PUSH2 0x02e6
00000060: JUMPI
00000061: DUP1
00000062: PUSH4 0xcae9ca51
00000067: EQ
00000068: PUSH2 0x0315
0000006b: JUMPI
0000006c: DUP1
0000006d: PUSH4 0xdc3080f2
00000072: EQ
00000073: PUSH2 0x0479
00000076: JUMPI
00000077: DUP1
00000078: PUSH4 0xdd62ed3e
0000007d: EQ
0000007e: PUSH2 0x049e
00000081: JUMPI
00000082: JUMPDEST
00000083: PUSH2 0x04c2
00000086: PUSH2 0x0002
00000089: JUMP
0000008a: JUMPDEST
0000008b: PUSH2 0x04c4
0000008e: PUSH1 0x00
00000090: DUP1
00000091: SLOAD
00000092: PUSH1 0x40
00000094: DUP1
00000095: MLOAD
00000096: PUSH1 0x20
00000098: PUSH1 0x02
0000009a: PUSH1 0x01
0000009c: DUP6
0000009d: AND
0000009e: ISZERO
0000009f: PUSH2 0x0100
000000a2: MUL
000000a3: PUSH1 0x00
000000a5: NOT
000000a6: ADD
000000a7: SWAP1
000000a8: SWAP5
000000a9: AND
000000aa: SWAP4
000000ab: SWAP1
000000ac: SWAP4
000000ad: DIV
000000ae: PUSH1 0x1f
000000b0: DUP2
000000b1: ADD
000000b2: DUP5
000000b3: SWAP1
000000b4: DIV
000000b5: DUP5
000000b6: MUL
000000b7: DUP3
000000b8: ADD
000000b9: DUP5
000000ba: ADD
000000bb: SWAP1
000000bc: SWAP3
000000bd: MSTORE
000000be: DUP2
000000bf: DUP2
000000c0: MSTORE
000000c1: SWAP3
000000c2: SWAP2
000000c3: DUP4
000000c4: ADD
000000c5: DUP3
000000c6: DUP3
000000c7: DUP1
000000c8: ISZERO
000000c9: PUSH2 0x0586
000000cc: JUMPI
000000cd: DUP1
000000ce: PUSH1 0x1f
000000d0: LT
000000d1: PUSH2 0x055b
000000d4: JUMPI
000000d5: PUSH2 0x0100
000000d8: DUP1
000000d9: DUP4
000000da: SLOAD
000000db: DIV
000000dc: MUL
000000dd: DUP4
000000de: MSTORE
000000df: SWAP2
000000e0: PUSH1 0x20
000000e2: ADD
000000e3: SWAP2
000000e4: PUSH2 0x0586
000000e7: JUMP
000000e8: JUMPDEST
000000e9: PUSH1 0x40
000000eb: DUP1
000000ec: MLOAD
000000ed: PUSH1 0x20
000000ef: PUSH1 0x24
000000f1: DUP1
000000f2: CALLDATALOAD
000000f3: PUSH1 0x04
000000f5: DUP2
000000f6: DUP2
000000f7: ADD
000000f8: CALLDATALOAD
000000f9: PUSH1 0x1f
000000fb: DUP2
000000fc: ADD
000000fd: DUP6
000000fe: SWAP1
000000ff: DIV
00000100: DUP6
00000101: MUL
00000102: DUP7
00000103: ADD
00000104: DUP6
00000105: ADD
00000106: SWAP1
00000107: SWAP7
00000108: MSTORE
00000109: DUP6
0000010a: DUP6
0000010b: MSTORE
0000010c: PUSH2 0x04c2
0000010f: SWAP6
00000110: DUP2
00000111: CALLDATALOAD
00000112: SWAP6
00000113: SWAP2
00000114: SWAP5
00000115: PUSH1 0x44
00000117: SWAP5
00000118: SWAP3
00000119: SWAP4
0000011a: SWAP1
0000011b: SWAP3
0000011c: ADD
0000011d: SWAP2
0000011e: DUP2
0000011f: SWAP1
00000120: DUP5
00000121: ADD
00000122: DUP4
00000123: DUP3
00000124: DUP1
00000125: DUP3
00000126: DUP5
00000127: CALLDATACOPY
00000128: POP
00000129: POP
0000012a: PUSH1 0x40
0000012c: DUP1
0000012d: MLOAD
0000012e: PUSH1 0x20
00000130: PUSH1 0x64
00000132: CALLDATALOAD
00000133: DUP1
00000134: DUP12
00000135: ADD
00000136: CALLDATALOAD
00000137: PUSH1 0x1f
00000139: DUP2
0000013a: ADD
0000013b: DUP4
0000013c: SWAP1
0000013d: DIV
0000013e: DUP4
0000013f: MUL
00000140: DUP5
00000141: ADD
00000142: DUP4
00000143: ADD
00000144: SWAP1
00000145: SWAP5
00000146: MSTORE
00000147: DUP4
00000148: DUP4
00000149: MSTORE
0000014a: SWAP8
0000014b: SWAP10
0000014c: SWAP9
0000014d: CALLDATALOAD
0000014e: SWAP9
0000014f: SWAP8
00000150: PUSH1 0x84
00000152: SWAP8
00000153: POP
00000154: SWAP2
00000155: SWAP6
00000156: POP
00000157: PUSH1 0x24
00000159: SWAP2
0000015a: SWAP1
0000015b: SWAP2
0000015c: ADD
0000015d: SWAP4
0000015e: POP
0000015f: SWAP1
00000160: SWAP2
00000161: POP
00000162: DUP2
00000163: SWAP1
00000164: DUP5
00000165: ADD
00000166: DUP4
00000167: DUP3
00000168: DUP1
00000169: DUP3
0000016a: DUP5
0000016b: CALLDATACOPY
0000016c: POP
0000016d: POP
0000016e: POP
0000016f: PUSH1 0x01
00000171: PUSH1 0xa0
00000173: PUSH1 0x02
00000175: EXP
00000176: SUB
00000177: CALLER
00000178: AND
00000179: PUSH1 0x00
0000017b: SWAP1
0000017c: DUP2
0000017d: MSTORE
0000017e: PUSH1 0x03
00000180: PUSH1 0x20
00000182: SWAP1
00000183: DUP2
00000184: MSTORE
00000185: PUSH1 0x40
00000187: DUP1
00000188: DUP4
00000189: KECCAK256
0000018a: PUSH3 0x0bde31
0000018e: SWAP1
0000018f: SSTORE
00000190: DUP1
00000191: MLOAD
00000192: DUP1
00000193: DUP3
00000194: ADD
00000195: SWAP1
00000196: SWAP2
00000197: MSTORE
00000198: PUSH1 0x07
0000019a: DUP2
0000019b: MSTORE
0000019c: PUSH32 0x55636b436f696e00000000000000000000000000000000000000000000000000
000001bd: SWAP1
000001be: DUP3
000001bf: ADD
000001c0: SWAP1
000001c1: DUP2
000001c2: MSTORE
000001c3: DUP3
000001c4: SLOAD
000001c5: DUP4
000001c6: DUP1
000001c7: MSTORE
000001c8: SWAP1
000001c9: MLOAD
000001ca: PUSH1 0x0e
000001cc: PUSH1 0xff
000001ce: NOT
000001cf: SWAP1
000001d0: SWAP2
000001d1: AND
000001d2: OR
000001d3: DUP4
000001d4: SSTORE
000001d5: SWAP6
000001d6: SWAP8
000001d7: POP
000001d8: SWAP1
000001d9: SWAP6
000001da: POP
000001db: PUSH2 0x058e
000001de: SWAP5
000001df: PUSH1 0x02
000001e1: PUSH1 0x01
000001e3: DUP3
000001e4: AND
000001e5: ISZERO
000001e6: PUSH2 0x0100
000001e9: MUL
000001ea: PUSH1 0x00
000001ec: NOT
000001ed: ADD
000001ee: SWAP1
000001ef: SWAP2
000001f0: AND
000001f1: DIV
000001f2: PUSH1 0x1f
000001f4: ADD
000001f5: DIV
000001f6: PUSH32 0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563
00000217: SWAP1
00000218: DUP2
00000219: ADD
0000021a: SWAP4
0000021b: POP
0000021c: SWAP2
0000021d: POP
0000021e: POP
0000021f: JUMPDEST
00000220: DUP1
00000221: DUP3
00000222: GT
00000223: ISZERO
00000224: PUSH2 0x0623
00000227: JUMPI
00000228: PUSH1 0x00
0000022a: DUP2
0000022b: SSTORE
0000022c: PUSH1 0x01
0000022e: ADD
0000022f: PUSH2 0x021f
00000232: JUMP
00000233: JUMPDEST
00000234: PUSH2 0x0532
00000237: PUSH1 0x04
00000239: CALLDATALOAD
0000023a: PUSH1 0x24
0000023c: CALLDATALOAD
0000023d: PUSH1 0x44
0000023f: CALLDATALOAD
00000240: PUSH1 0x01
00000242: PUSH1 0xa0
00000244: PUSH1 0x02
00000246: EXP
00000247: SUB
00000248: DUP4
00000249: AND
0000024a: PUSH1 0x00
0000024c: SWAP1
0000024d: DUP2
0000024e: MSTORE
0000024f: PUSH1 0x03
00000251: PUSH1 0x20
00000253: MSTORE
00000254: PUSH1 0x40
00000256: DUP2
00000257: KECCAK256
00000258: SLOAD
00000259: DUP3
0000025a: SWAP1
0000025b: LT
0000025c: ISZERO
0000025d: PUSH2 0x06ce
00000260: JUMPI
00000261: PUSH2 0x0002
00000264: JUMP
00000265: JUMPDEST
00000266: PUSH2 0x0544
00000269: PUSH1 0x02
0000026b: SLOAD
0000026c: PUSH1 0xff
0000026e: AND
0000026f: DUP2
00000270: JUMP
00000271: JUMPDEST
00000272: PUSH2 0x0532
00000275: PUSH1 0x04
00000277: CALLDATALOAD
00000278: PUSH1 0x03
0000027a: PUSH1 0x20
0000027c: MSTORE
0000027d: PUSH1 0x00
0000027f: SWAP1
00000280: DUP2
00000281: MSTORE
00000282: PUSH1 0x40
00000284: SWAP1
00000285: KECCAK256
00000286: SLOAD
00000287: DUP2
00000288: JUMP
00000289: JUMPDEST
0000028a: PUSH2 0x04c4
0000028d: PUSH1 0x01
0000028f: DUP1
00000290: SLOAD
00000291: PUSH1 0x40
00000293: DUP1
00000294: MLOAD
00000295: PUSH1 0x20
00000297: PUSH1 0x02
00000299: DUP5
0000029a: DUP7
0000029b: AND
0000029c: ISZERO
0000029d: PUSH2 0x0100
000002a0: MUL
000002a1: PUSH1 0x00
000002a3: NOT
000002a4: ADD
000002a5: SWAP1
000002a6: SWAP5
000002a7: AND
000002a8: SWAP4
000002a9: SWAP1
000002aa: SWAP4
000002ab: DIV
000002ac: PUSH1 0x1f
000002ae: DUP2
000002af: ADD
000002b0: DUP5
000002b1: SWAP1
000002b2: DIV
000002b3: DUP5
000002b4: MUL
000002b5: DUP3
000002b6: ADD
000002b7: DUP5
000002b8: ADD
000002b9: SWAP1
000002ba: SWAP3
000002bb: MSTORE
000002bc: DUP2
000002bd: DUP2
000002be: MSTORE
000002bf: SWAP3
000002c0: SWAP2
000002c1: DUP4
000002c2: ADD
000002c3: DUP3
000002c4: DUP3
000002c5: DUP1
000002c6: ISZERO
000002c7: PUSH2 0x0586
000002ca: JUMPI
000002cb: DUP1
000002cc: PUSH1 0x1f
000002ce: LT
000002cf: PUSH2 0x055b
000002d2: JUMPI
000002d3: PUSH2 0x0100
000002d6: DUP1
000002d7: DUP4
000002d8: SLOAD
000002d9: DIV
000002da: MUL
000002db: DUP4
000002dc: MSTORE
000002dd: SWAP2
000002de: PUSH1 0x20
000002e0: ADD
000002e1: SWAP2
000002e2: PUSH2 0x0586
000002e5: JUMP
000002e6: JUMPDEST
000002e7: PUSH2 0x04c2
000002ea: PUSH1 0x04
000002ec: CALLDATALOAD
000002ed: PUSH1 0x24
000002ef: CALLDATALOAD
000002f0: PUSH1 0x01
000002f2: PUSH1 0xa0
000002f4: PUSH1 0x02
000002f6: EXP
000002f7: SUB
000002f8: CALLER
000002f9: AND
000002fa: PUSH1 0x00
000002fc: SWAP1
000002fd: DUP2
000002fe: MSTORE
000002ff: PUSH1 0x03
00000301: PUSH1 0x20
00000303: MSTORE
00000304: PUSH1 0x40
00000306: SWAP1
00000307: KECCAK256
00000308: SLOAD
00000309: DUP2
0000030a: SWAP1
0000030b: LT
0000030c: ISZERO
0000030d: PUSH2 0x063c
00000310: JUMPI
00000311: PUSH2 0x0002
00000314: JUMP
00000315: JUMPDEST
00000316: PUSH1 0x40
00000318: DUP1
00000319: MLOAD
0000031a: PUSH1 0x20
0000031c: PUSH1 0x44
0000031e: CALLDATALOAD
0000031f: PUSH1 0x04
00000321: DUP2
00000322: DUP2
00000323: ADD
00000324: CALLDATALOAD
00000325: PUSH1 0x1f
00000327: DUP2
00000328: ADD
00000329: DUP5
0000032a: SWAP1
0000032b: DIV
0000032c: DUP5
0000032d: MUL
0000032e: DUP6
0000032f: ADD
00000330: DUP5
00000331: ADD
00000332: SWAP1
00000333: SWAP6
00000334: MSTORE
00000335: DUP5
00000336: DUP5
00000337: MSTORE
00000338: PUSH2 0x0532
0000033b: SWAP5
0000033c: DUP2
0000033d: CALLDATALOAD
0000033e: SWAP5
0000033f: PUSH1 0x24
00000341: DUP1
00000342: CALLDATALOAD
00000343: SWAP6
00000344: SWAP4
00000345: SWAP5
00000346: PUSH1 0x64
00000348: SWAP5
00000349: SWAP3
0000034a: SWAP4
0000034b: SWAP2
0000034c: ADD
0000034d: SWAP2
0000034e: DUP2
0000034f: SWAP1
00000350: DUP5
00000351: ADD
00000352: DUP4
00000353: DUP3
00000354: DUP1
00000355: DUP3
00000356: DUP5
00000357: CALLDATACOPY
00000358: POP
00000359: SWAP5
0000035a: SWAP7
0000035b: POP
0000035c: POP
0000035d: POP
0000035e: POP
0000035f: POP
00000360: POP
00000361: POP
00000362: PUSH1 0x00
00000364: PUSH1 0x00
00000366: DUP4
00000367: PUSH1 0x04
00000369: PUSH1 0x00
0000036b: POP
0000036c: PUSH1 0x00
0000036e: CALLER
0000036f: PUSH1 0x01
00000371: PUSH1 0xa0
00000373: PUSH1 0x02
00000375: EXP
00000376: SUB
00000377: AND
00000378: DUP2
00000379: MSTORE
0000037a: PUSH1 0x20
0000037c: ADD
0000037d: SWAP1
0000037e: DUP2
0000037f: MSTORE
00000380: PUSH1 0x20
00000382: ADD
00000383: PUSH1 0x00
00000385: KECCAK256
00000386: PUSH1 0x00
00000388: POP
00000389: PUSH1 0x00
0000038b: DUP8
0000038c: PUSH1 0x01
0000038e: PUSH1 0xa0
00000390: PUSH1 0x02
00000392: EXP
00000393: SUB
00000394: AND
00000395: DUP2
00000396: MSTORE
00000397: PUSH1 0x20
00000399: ADD
0000039a: SWAP1
0000039b: DUP2
0000039c: MSTORE
0000039d: PUSH1 0x20
0000039f: ADD
000003a0: PUSH1 0x00
000003a2: KECCAK256
000003a3: PUSH1 0x00
000003a5: POP
000003a6: DUP2
000003a7: SWAP1
000003a8: SSTORE
000003a9: POP
000003aa: DUP5
000003ab: SWAP1
000003ac: POP
000003ad: DUP1
000003ae: PUSH1 0x01
000003b0: PUSH1 0xa0
000003b2: PUSH1 0x02
000003b4: EXP
000003b5: SUB
000003b6: AND
000003b7: PUSH4 0x8f4ffcb1
000003bc: CALLER
000003bd: DUP7
000003be: ADDRESS
000003bf: DUP8
000003c0: PUSH1 0x40
000003c2: MLOAD
000003c3: DUP6
000003c4: PUSH1 0xe0
000003c6: PUSH1 0x02
000003c8: EXP
000003c9: MUL
000003ca: DUP2
000003cb: MSTORE
000003cc: PUSH1 0x04
000003ce: ADD
000003cf: DUP1
000003d0: DUP6
000003d1: PUSH1 0x01
000003d3: PUSH1 0xa0
000003d5: PUSH1 0x02
000003d7: EXP
000003d8: SUB
000003d9: AND
000003da: DUP2
000003db: MSTORE
000003dc: PUSH1 0x20
000003de: ADD
000003df: DUP5
000003e0: DUP2
000003e1: MSTORE
000003e2: PUSH1 0x20
000003e4: ADD
000003e5: DUP4
000003e6: PUSH1 0x01
000003e8: PUSH1 0xa0
000003ea: PUSH1 0x02
000003ec: EXP
000003ed: SUB
000003ee: AND
000003ef: DUP2
000003f0: MSTORE
000003f1: PUSH1 0x20
000003f3: ADD
000003f4: DUP1
000003f5: PUSH1 0x20
000003f7: ADD
000003f8: DUP3
000003f9: DUP2
000003fa: SUB
000003fb: DUP3
000003fc: MSTORE
000003fd: DUP4
000003fe: DUP2
000003ff: DUP2
00000400: MLOAD
00000401: DUP2
00000402: MSTORE
00000403: PUSH1 0x20
00000405: ADD
00000406: SWAP2
00000407: POP
00000408: DUP1
00000409: MLOAD
0000040a: SWAP1
0000040b: PUSH1 0x20
0000040d: ADD
0000040e: SWAP1
0000040f: DUP1
00000410: DUP4
00000411: DUP4
00000412: DUP3
00000413: SWAP1
00000414: PUSH1 0x00
00000416: PUSH1 0x04
00000418: PUSH1 0x20
0000041a: DUP5
0000041b: PUSH1 0x1f
0000041d: ADD
0000041e: DIV
0000041f: PUSH1 0x0f
00000421: MUL
00000422: PUSH1 0x03
00000424: ADD
00000425: CALL
00000426: POP
00000427: SWAP1
00000428: POP
00000429: SWAP1
0000042a: DUP2
0000042b: ADD
0000042c: SWAP1
0000042d: PUSH1 0x1f
0000042f: AND
00000430: DUP1
00000431: ISZERO
00000432: PUSH2 0x044f
00000435: JUMPI
00000436: DUP1
00000437: DUP3
00000438: SUB
00000439: DUP1
0000043a: MLOAD
0000043b: PUSH1 0x01
0000043d: DUP4
0000043e: PUSH1 0x20
00000440: SUB
00000441: PUSH2 0x0100
00000444: EXP
00000445: SUB
00000446: NOT
00000447: AND
00000448: DUP2
00000449: MSTORE
0000044a: PUSH1 0x20
0000044c: ADD
0000044d: SWAP2
0000044e: POP
0000044f: JUMPDEST
00000450: POP
00000451: SWAP6
00000452: POP
00000453: POP
00000454: POP
00000455: POP
00000456: POP
00000457: POP
00000458: PUSH1 0x00
0000045a: PUSH1 0x40
0000045c: MLOAD
0000045d: DUP1
0000045e: DUP4
0000045f: SUB
00000460: DUP2
00000461: PUSH1 0x00
00000463: DUP8
00000464: PUSH2 0x61da
00000467: GAS
00000468: SUB
00000469: CALL
0000046a: ISZERO
0000046b: PUSH2 0x0002
0000046e: JUMPI
0000046f: POP
00000470: POP
00000471: POP
00000472: POP
00000473: SWAP4
00000474: SWAP3
00000475: POP
00000476: POP
00000477: POP
00000478: JUMP
00000479: JUMPDEST
0000047a: PUSH1 0x05
0000047c: PUSH1 0x20
0000047e: SWAP1
0000047f: DUP2
00000480: MSTORE
00000481: PUSH1 0x04
00000483: CALLDATALOAD
00000484: PUSH1 0x00
00000486: SWAP1
00000487: DUP2
00000488: MSTORE
00000489: PUSH1 0x40
0000048b: DUP1
0000048c: DUP3
0000048d: KECCAK256
0000048e: SWAP1
0000048f: SWAP3
00000490: MSTORE
00000491: PUSH1 0x24
00000493: CALLDATALOAD
00000494: DUP2
00000495: MSTORE
00000496: KECCAK256
00000497: SLOAD
00000498: PUSH2 0x0532
0000049b: SWAP1
0000049c: DUP2
0000049d: JUMP
0000049e: JUMPDEST
0000049f: PUSH1 0x04
000004a1: PUSH1 0x20
000004a3: DUP2
000004a4: DUP2
000004a5: MSTORE
000004a6: SWAP1
000004a7: CALLDATALOAD
000004a8: PUSH1 0x00
000004aa: SWAP1
000004ab: DUP2
000004ac: MSTORE
000004ad: PUSH1 0x40
000004af: DUP1
000004b0: DUP3
000004b1: KECCAK256
000004b2: SWAP1
000004b3: SWAP3
000004b4: MSTORE
000004b5: PUSH1 0x24
000004b7: CALLDATALOAD
000004b8: DUP2
000004b9: MSTORE
000004ba: KECCAK256
000004bb: SLOAD
000004bc: PUSH2 0x0532
000004bf: SWAP1
000004c0: DUP2
000004c1: JUMP
000004c2: JUMPDEST
000004c3: STOP
000004c4: JUMPDEST
000004c5: PUSH1 0x40
000004c7: MLOAD
000004c8: DUP1
000004c9: DUP1
000004ca: PUSH1 0x20
000004cc: ADD
000004cd: DUP3
000004ce: DUP2
000004cf: SUB
000004d0: DUP3
000004d1: MSTORE
000004d2: DUP4
000004d3: DUP2
000004d4: DUP2
000004d5: MLOAD
000004d6: DUP2
000004d7: MSTORE
000004d8: PUSH1 0x20
000004da: ADD
000004db: SWAP2
000004dc: POP
000004dd: DUP1
000004de: MLOAD
000004df: SWAP1
000004e0: PUSH1 0x20
000004e2: ADD
000004e3: SWAP1
000004e4: DUP1
000004e5: DUP4
000004e6: DUP4
000004e7: DUP3
000004e8: SWAP1
000004e9: PUSH1 0x00
000004eb: PUSH1 0x04
000004ed: PUSH1 0x20
000004ef: DUP5
000004f0: PUSH1 0x1f
000004f2: ADD
000004f3: DIV
000004f4: PUSH1 0x0f
000004f6: MUL
000004f7: PUSH1 0x03
000004f9: ADD
000004fa: CALL
000004fb: POP
000004fc: SWAP1
000004fd: POP
000004fe: SWAP1
000004ff: DUP2
00000500: ADD
00000501: SWAP1
00000502: PUSH1 0x1f
00000504: AND
00000505: DUP1
00000506: ISZERO
00000507: PUSH2 0x0524
0000050a: JUMPI
0000050b: DUP1
0000050c: DUP3
0000050d: SUB
0000050e: DUP1
0000050f: MLOAD
00000510: PUSH1 0x01
00000512: DUP4
00000513: PUSH1 0x20
00000515: SUB
00000516: PUSH2 0x0100
00000519: EXP
0000051a: SUB
0000051b: NOT
0000051c: AND
0000051d: DUP2
0000051e: MSTORE
0000051f: PUSH1 0x20
00000521: ADD
00000522: SWAP2
00000523: POP
00000524: JUMPDEST
00000525: POP
00000526: SWAP3
00000527: POP
00000528: POP
00000529: POP
0000052a: PUSH1 0x40
0000052c: MLOAD
0000052d: DUP1
0000052e: SWAP2
0000052f: SUB
00000530: SWAP1
00000531: RETURN
00000532: JUMPDEST
00000533: PUSH1 0x40
00000535: DUP1
00000536: MLOAD
00000537: SWAP2
00000538: DUP3
00000539: MSTORE
0000053a: MLOAD
0000053b: SWAP1
0000053c: DUP2
0000053d: SWAP1
0000053e: SUB
0000053f: PUSH1 0x20
00000541: ADD
00000542: SWAP1
00000543: RETURN
00000544: JUMPDEST
00000545: PUSH1 0x40
00000547: DUP1
00000548: MLOAD
00000549: PUSH1 0xff
0000054b: SWAP3
0000054c: SWAP1
0000054d: SWAP3
0000054e: AND
0000054f: DUP3
00000550: MSTORE
00000551: MLOAD
00000552: SWAP1
00000553: DUP2
00000554: SWAP1
00000555: SUB
00000556: PUSH1 0x20
00000558: ADD
00000559: SWAP1
0000055a: RETURN
0000055b: JUMPDEST
0000055c: DUP3
0000055d: ADD
0000055e: SWAP2
0000055f: SWAP1
00000560: PUSH1 0x00
00000562: MSTORE
00000563: PUSH1 0x20
00000565: PUSH1 0x00
00000567: KECCAK256
00000568: SWAP1
00000569: JUMPDEST
0000056a: DUP2
0000056b: SLOAD
0000056c: DUP2
0000056d: MSTORE
0000056e: SWAP1
0000056f: PUSH1 0x01
00000571: ADD
00000572: SWAP1
00000573: PUSH1 0x20
00000575: ADD
00000576: DUP1
00000577: DUP4
00000578: GT
00000579: PUSH2 0x0569
0000057c: JUMPI
0000057d: DUP3
0000057e: SWAP1
0000057f: SUB
00000580: PUSH1 0x1f
00000582: AND
00000583: DUP3
00000584: ADD
00000585: SWAP2
00000586: JUMPDEST
00000587: POP
00000588: POP
00000589: POP
0000058a: POP
0000058b: POP
0000058c: DUP2
0000058d: JUMP
0000058e: JUMPDEST
0000058f: POP
00000590: POP
00000591: PUSH1 0x40
00000593: DUP1
00000594: MLOAD
00000595: DUP1
00000596: DUP3
00000597: ADD
00000598: SWAP1
00000599: SWAP2
0000059a: MSTORE
0000059b: PUSH1 0x01
0000059d: DUP1
0000059e: DUP3
0000059f: MSTORE
000005a0: PUSH32 0x5500000000000000000000000000000000000000000000000000000000000000
000005c1: PUSH1 0x20
000005c3: SWAP3
000005c4: DUP4
000005c5: ADD
000005c6: SWAP1
000005c7: DUP2
000005c8: MSTORE
000005c9: DUP2
000005ca: SLOAD
000005cb: PUSH1 0x00
000005cd: DUP4
000005ce: SWAP1
000005cf: MSTORE
000005d0: SWAP1
000005d1: MLOAD
000005d2: PUSH1 0xff
000005d4: NOT
000005d5: AND
000005d6: PUSH1 0x02
000005d8: SWAP1
000005d9: DUP2
000005da: OR
000005db: DUP4
000005dc: SSTORE
000005dd: SWAP2
000005de: SWAP3
000005df: PUSH2 0x0627
000005e2: SWAP3
000005e3: DUP3
000005e4: DUP6
000005e5: AND
000005e6: ISZERO
000005e7: PUSH2 0x0100
000005ea: MUL
000005eb: PUSH1 0x00
000005ed: NOT
000005ee: ADD
000005ef: SWAP1
000005f0: SWAP3
000005f1: AND
000005f2: SWAP2
000005f3: SWAP1
000005f4: SWAP2
000005f5: DIV
000005f6: PUSH1 0x1f
000005f8: ADD
000005f9: DIV
000005fa: PUSH32 0xb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6
0000061b: SWAP1
0000061c: DUP2
0000061d: ADD
0000061e: SWAP1
0000061f: PUSH2 0x021f
00000622: JUMP
00000623: JUMPDEST
00000624: POP
00000625: SWAP1
00000626: JUMP
00000627: JUMPDEST
00000628: POP
00000629: POP
0000062a: PUSH1 0x02
0000062c: DUP1
0000062d: SLOAD
0000062e: PUSH1 0xff
00000630: NOT
00000631: AND
00000632: PUSH1 0x07
00000634: OR
00000635: SWAP1
00000636: SSTORE
00000637: POP
00000638: POP
00000639: POP
0000063a: POP
0000063b: JUMP
0000063c: JUMPDEST
0000063d: PUSH1 0x01
0000063f: PUSH1 0xa0
00000641: PUSH1 0x02
00000643: EXP
00000644: SUB
00000645: DUP3
00000646: AND
00000647: PUSH1 0x00
00000649: SWAP1
0000064a: DUP2
0000064b: MSTORE
0000064c: PUSH1 0x03
0000064e: PUSH1 0x20
00000650: MSTORE
00000651: PUSH1 0x40
00000653: SWAP1
00000654: KECCAK256
00000655: SLOAD
00000656: DUP2
00000657: DUP2
00000658: ADD
00000659: LT
0000065a: ISZERO
0000065b: PUSH2 0x0663
0000065e: JUMPI
0000065f: PUSH2 0x0002
00000662: JUMP
00000663: JUMPDEST
00000664: PUSH1 0x01
00000666: PUSH1 0xa0
00000668: PUSH1 0x02
0000066a: EXP
0000066b: SUB
0000066c: CALLER
0000066d: DUP2
0000066e: AND
0000066f: PUSH1 0x00
00000671: DUP2
00000672: DUP2
00000673: MSTORE
00000674: PUSH1 0x03
00000676: PUSH1 0x20
00000678: SWAP1
00000679: DUP2
0000067a: MSTORE
0000067b: PUSH1 0x40
0000067d: DUP1
0000067e: DUP4
0000067f: KECCAK256
00000680: DUP1
00000681: SLOAD
00000682: DUP8
00000683: SWAP1
00000684: SUB
00000685: SWAP1
00000686: SSTORE
00000687: SWAP4
00000688: DUP7
00000689: AND
0000068a: DUP1
0000068b: DUP4
0000068c: MSTORE
0000068d: SWAP2
0000068e: DUP5
0000068f: SWAP1
00000690: KECCAK256
00000691: DUP1
00000692: SLOAD
00000693: DUP7
00000694: ADD
00000695: SWAP1
00000696: SSTORE
00000697: DUP4
00000698: MLOAD
00000699: DUP6
0000069a: DUP2
0000069b: MSTORE
0000069c: SWAP4
0000069d: MLOAD
0000069e: SWAP2
0000069f: SWAP4
000006a0: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
000006c1: SWAP3
000006c2: SWAP1
000006c3: DUP2
000006c4: SWAP1
000006c5: SUB
000006c6: SWAP1
000006c7: SWAP2
000006c8: ADD
000006c9: SWAP1
000006ca: LOG3
000006cb: POP
000006cc: POP
000006cd: JUMP
000006ce: JUMPDEST
000006cf: PUSH1 0x01
000006d1: PUSH1 0xa0
000006d3: PUSH1 0x02
000006d5: EXP
000006d6: SUB
000006d7: DUP4
000006d8: AND
000006d9: PUSH1 0x00
000006db: SWAP1
000006dc: DUP2
000006dd: MSTORE
000006de: PUSH1 0x03
000006e0: PUSH1 0x20
000006e2: MSTORE
000006e3: PUSH1 0x40
000006e5: SWAP1
000006e6: KECCAK256
000006e7: SLOAD
000006e8: DUP3
000006e9: DUP2
000006ea: ADD
000006eb: LT
000006ec: ISZERO
000006ed: PUSH2 0x06f5
000006f0: JUMPI
000006f1: PUSH2 0x0002
000006f4: JUMP
000006f5: JUMPDEST
000006f6: PUSH1 0x01
000006f8: PUSH1 0xa0
000006fa: PUSH1 0x02
000006fc: EXP
000006fd: SUB
000006fe: DUP5
000006ff: DUP2
00000700: AND
00000701: PUSH1 0x00
00000703: DUP2
00000704: DUP2
00000705: MSTORE
00000706: PUSH1 0x04
00000708: PUSH1 0x20
0000070a: SWAP1
0000070b: DUP2
0000070c: MSTORE
0000070d: PUSH1 0x40
0000070f: DUP1
00000710: DUP4
00000711: KECCAK256
00000712: CALLER
00000713: SWAP6
00000714: SWAP1
00000715: SWAP6
00000716: AND
00000717: DUP1
00000718: DUP5
00000719: MSTORE
0000071a: SWAP5
0000071b: DUP3
0000071c: MSTORE
0000071d: DUP1
0000071e: DUP4
0000071f: KECCAK256
00000720: SLOAD
00000721: SWAP4
00000722: DUP4
00000723: MSTORE
00000724: PUSH1 0x05
00000726: DUP3
00000727: MSTORE
00000728: DUP1
00000729: DUP4
0000072a: KECCAK256
0000072b: SWAP5
0000072c: DUP4
0000072d: MSTORE
0000072e: SWAP4
0000072f: SWAP1
00000730: MSTORE
00000731: SWAP2
00000732: SWAP1
00000733: SWAP2
00000734: KECCAK256
00000735: SLOAD
00000736: DUP4
00000737: ADD
00000738: GT
00000739: ISZERO
0000073a: PUSH2 0x0742
0000073d: JUMPI
0000073e: PUSH2 0x0002
00000741: JUMP
00000742: JUMPDEST
00000743: PUSH1 0x01
00000745: PUSH1 0xa0
00000747: PUSH1 0x02
00000749: EXP
0000074a: SUB
0000074b: DUP5
0000074c: DUP2
0000074d: AND
0000074e: PUSH1 0x00
00000750: DUP2
00000751: DUP2
00000752: MSTORE
00000753: PUSH1 0x03
00000755: PUSH1 0x20
00000757: SWAP1
00000758: DUP2
00000759: MSTORE
0000075a: PUSH1 0x40
0000075c: DUP1
0000075d: DUP4
0000075e: KECCAK256
0000075f: DUP1
00000760: SLOAD
00000761: DUP9
00000762: SWAP1
00000763: SUB
00000764: SWAP1
00000765: SSTORE
00000766: DUP8
00000767: DUP6
00000768: AND
00000769: DUP1
0000076a: DUP5
0000076b: MSTORE
0000076c: DUP2
0000076d: DUP5
0000076e: KECCAK256
0000076f: DUP1
00000770: SLOAD
00000771: DUP10
00000772: ADD
00000773: SWAP1
00000774: SSTORE
00000775: SWAP4
00000776: DUP4
00000777: MSTORE
00000778: PUSH1 0x05
0000077a: DUP3
0000077b: MSTORE
0000077c: DUP1
0000077d: DUP4
0000077e: KECCAK256
0000077f: CALLER
00000780: SWAP6
00000781: SWAP1
00000782: SWAP6
00000783: AND
00000784: DUP1
00000785: DUP5
00000786: MSTORE
00000787: SWAP5
00000788: DUP3
00000789: MSTORE
0000078a: SWAP2
0000078b: DUP3
0000078c: SWAP1
0000078d: KECCAK256
0000078e: DUP1
0000078f: SLOAD
00000790: DUP8
00000791: ADD
00000792: SWAP1
00000793: SSTORE
00000794: DUP2
00000795: MLOAD
00000796: DUP7
00000797: DUP2
00000798: MSTORE
00000799: SWAP2
0000079a: MLOAD
0000079b: SWAP3
0000079c: SWAP4
0000079d: SWAP3
0000079e: PUSH32 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
000007bf: SWAP3
000007c0: DUP2
000007c1: SWAP1
000007c2: SUB
000007c3: SWAP1
000007c4: SWAP2
000007c5: ADD
000007c6: SWAP1
000007c7: LOG3
000007c8: SWAP4
000007c9: SWAP3
000007ca: POP
000007cb: POP
000007cc: POP
000007cd: JUMP
View stderr
Warning: This is a nightly build of Foundry. It is recommended to use the latest stable version. To mute this warning set `FOUNDRY_DISABLE_NIGHTLY_WARNING` in your environment.

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
critical access_control codex Public constructor-like function lets any caller mint/reset token state 90 no
view
evidence_json
{
    "evidence": "Dispatcher routes `0x1d2bca17` to `pc 0x00e8`. Within that path, the code computes a `CALLER`-keyed hash for slot `0x03` and stores constant `0x0bde31` (`pc 0x0177`-`0x018f`). It then stores hardcoded metadata into storage: name-like data in `slot 0` (`pc 0x0198`-`0x01d4`), symbol-like data in helper `pc 0x058e`-`0x05dc`, and sets the low byte of `slot 2` to `0x07` in `pc 0x0627`-`0x0636`. The artifact reports `auth.guards: []`, so there is no detected access control on this path. Selector inference from bytecode is best-effort, but this routine has clear constructor/initializer behavior.",
    "locations": [
        "selector:0x1d2bca17",
        "pc:0x00e8",
        "pc:0x018f",
        "pc:0x01d4",
        "pc:0x05dc",
        "pc:0x0636"
    ],
    "recommendation": "Remove or permanently disable this initializer path. If this was meant to be a constructor, replace it with an actual constructor/one-time initializer guard and prevent any post-deployment entry. If already deployed, treat the token as compromised unless this selector is provably unreachable through a proxy/admin wrapper.",
    "exploit_scenario": "An attacker calls selector `0x1d2bca17` directly. The routine writes `0x0bde31` into the caller-derived slot under mapping slot `0x03`, then overwrites the metadata slots used by the token (`slot 0`, `slot 1`, and low byte of `slot 2`). Because no guard is detected, any account can invoke it to grant itself a fresh balance and repeat after spending, effectively breaking token supply integrity."
}
high other detector Untrusted CALL target/value reachable 60 yes yes
view
trace_id: 0xb712b4a3a5c40d6301e1a7a0fe8e5ec74cd9d23ca6647dae6ec4148daa055239
call_targets: 0x0000000000000000000000000000000000000004, 0x2bf4a701470dfe06babd313926a1ebcdcd5806c1
target_varies: yes
classification: target_varies
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "confirmed",
    "attempts": 1,
    "trace_id": "0xb712b4a3a5c40d6301e1a7a0fe8e5ec74cd9d23ca6647dae6ec4148daa055239",
    "confirmed": true,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x0000000000000000000000000000000000000004",
        "0x2bf4a701470dfe06babd313926a1ebcdcd5806c1"
    ],
    "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": "0x06fdde03",
            "selector": "0x06fdde03",
            "calldata_variants": [
                "0x06fdde03",
                "0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x1d2bca17",
            "selector": "0x1d2bca17",
            "calldata_variants": [
                "0x1d2bca17",
                "0x1d2bca170000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x23b872dd",
            "selector": "0x23b872dd",
            "calldata_variants": [
                "0x23b872dd",
                "0x23b872dd0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x313ce567",
            "selector": "0x313ce567",
            "calldata_variants": [
                "0x313ce567",
                "0x313ce5670000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x70a08231",
            "selector": "0x70a08231",
            "calldata_variants": [
                "0x70a08231",
                "0x70a082310000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x95d89b41",
            "selector": "0x95d89b41",
            "calldata_variants": [
                "0x95d89b41",
                "0x95d89b410000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa9059cbb",
            "selector": "0xa9059cbb",
            "calldata_variants": [
                "0xa9059cbb",
                "0xa9059cbb0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xcae9ca51",
            "selector": "0xcae9ca51",
            "calldata_variants": [
                "0xcae9ca51",
                "0xcae9ca510000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 1061,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 1129,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 1274,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 3,
    "guards_detected": [],
    "untrusted_call_count": 3
}
high other detector ETH value transfer possible 55 yes yes
view
trace_id: 0xb712b4a3a5c40d6301e1a7a0fe8e5ec74cd9d23ca6647dae6ec4148daa055239
call_targets: 0x0000000000000000000000000000000000000004, 0x2bf4a701470dfe06babd313926a1ebcdcd5806c1
target_varies: yes
classification: target_varies
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "confirmed",
    "attempts": 1,
    "trace_id": "0xb712b4a3a5c40d6301e1a7a0fe8e5ec74cd9d23ca6647dae6ec4148daa055239",
    "confirmed": true,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x0000000000000000000000000000000000000004",
        "0x2bf4a701470dfe06babd313926a1ebcdcd5806c1"
    ],
    "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": "0x06fdde03",
            "selector": "0x06fdde03",
            "calldata_variants": [
                "0x06fdde03",
                "0x06fdde030000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x1d2bca17",
            "selector": "0x1d2bca17",
            "calldata_variants": [
                "0x1d2bca17",
                "0x1d2bca170000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x23b872dd",
            "selector": "0x23b872dd",
            "calldata_variants": [
                "0x23b872dd",
                "0x23b872dd0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x313ce567",
            "selector": "0x313ce567",
            "calldata_variants": [
                "0x313ce567",
                "0x313ce5670000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x70a08231",
            "selector": "0x70a08231",
            "calldata_variants": [
                "0x70a08231",
                "0x70a082310000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x95d89b41",
            "selector": "0x95d89b41",
            "calldata_variants": [
                "0x95d89b41",
                "0x95d89b410000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xa9059cbb",
            "selector": "0xa9059cbb",
            "calldata_variants": [
                "0xa9059cbb",
                "0xa9059cbb0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xcae9ca51",
            "selector": "0xcae9ca51",
            "calldata_variants": [
                "0xcae9ca51",
                "0xcae9ca510000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 1061,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 1129,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 1274,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 3,
    "guards_detected": []
}
medium other codex Allowance accounting appears non-standard and can desynchronize from `allowance()` 75 no
view
evidence_json
{
    "evidence": "`0xdd62ed3e` reads a nested mapping rooted at slot `0x04` (`pc 0x049e`-`0x04bb`). `0xdc3080f2` reads a separate nested mapping rooted at slot `0x05` (`pc 0x0479`-`0x0497`). In `transferFrom` (`selector 0x23b872dd`), the code loads one mapping value around `pc 0x071d`-`0x0720`, then loads the second around `pc 0x0723`-`0x0735`, adds them, and compares the sum against the requested amount at `pc 0x0736`-`0x0739`; later it updates the slot-`0x05` mapping at `pc 0x077c`-`0x0793` instead of decrementing the slot-`0x04` value. This is a bytecode-level inference, so the exact intended names are uncertain, but the storage behavior is inconsistent with standard ERC-20 remaining-allowance accounting.",
    "locations": [
        "selector:0x23b872dd",
        "selector:0xdd62ed3e",
        "selector:0xdc3080f2",
        "pc:0x049e",
        "pc:0x0479",
        "pc:0x0734",
        "pc:0x0793"
    ],
    "recommendation": "Use a single remaining-allowance source of truth, or reset the consumed-allowance mapping whenever a new approval is set. If this split-accounting design is intentional, expose an explicit remaining-allowance getter and avoid presenting `0xdd62ed3e` as standard ERC-20 allowance semantics.",
    "exploit_scenario": "A spender uses `transferFrom` until the separate consumed-allowance mapping reaches the approved amount. If the owner later approves the same nominal amount again, `allowance(owner,spender)` can still report that amount, but `transferFrom` may fail because the contract adds a second stored value before checking the limit. Integrations that rely on standard ERC-20 `allowance()` semantics can mis-handle approvals or become stuck."
}