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

Analysis Run

019be3d6-b2a2-72f8-8ed2-aa2958ed78a5

failed
Chain ID
1
Address
Block Number
Created
Thu, Jan 22, 2026 3:54 AM
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
0
Validated
0
Source
Verified
Review Backing
Present
Best current signal
Intervals claimed only incremented by 1 enables repeated over-claims
crit 0 high 0 direct contract
Review Checklist
1. Read the findings table first. Ignore raw jobs until the result looks real.
2. Confirm attacker control, not just the existence of a sink.
3. Confirm money or privilege impact.
4. Keep it if the behavior is real. Kill it if this is normal proxy, admin, or upgrade plumbing.

Processing Jobs

Status & attempts
ID Type Status Attempts Heartbeat
41220 artifact.fetch complete 1 / 3 2 months ago
41221 proxy.resolve complete 1 / 3 2 months ago
41222 tool.cast_disasm complete 1 / 3 2 months ago
41223 analysis.bundle complete 1 / 3 2 months ago
41224 capability.graph complete 1 / 3 2 months ago
41225 detector.run complete 1 / 3 2 months ago
41226 validation.fork complete 1 / 3 2 months ago
41454 report.consolidate complete 1 / 6 2 months ago
41455 tool.slither failed 2 / 2 2 months ago

Artifact

Runtime bytecode: available
Creation TX:
Deployer:
Proxy: no not_proxy
Implementation:
Verified Source: yes
Proxy evidence
{
    "status": "not_proxy"
}

Slither

tool.slither
Status
failed slither failed (exit 1): 'forge clean' running (wd: /tmp/slither-_9_kmniw) 'forge config --json' running 'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /tmp/slither-_9_kmniw) 'forge' returned non-zero exit code 1 Error: Encountered invalid solc version in lib/openzeppelin-contracts/contracts/utils/math/Math.sol: No solc version exists that matches the version requirement: ^0.8.20 Traceback (most recent call last): File "/var/www/tripwire/.venv/bin/slither", line 10, in <module> sys.exit(main()) ~~~~^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 776, in main main_impl(all_detector_classes=detectors, all_printer_classes=printers) ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 882, in main_impl ) = process_all(filename, args, detector_classes, printer_classes) ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 96, in process_all compilations = compile_all(target, **vars(args)) File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 722, in compile_all compilations.append(CryticCompile(target, **kwargs)) ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 211, in __init__ self._compile(**kwargs) ~~~~~~~~~~~~~^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 633, in _compile self._platform.compile(self, **kwargs) ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/platform/foundry.py", line 102, in compile hardhat_like_parsing( ~~~~~~~~~~~~~~~~~~~~^ crytic_compile, str(self._target), build_directory, str(self._project_root) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/platform/hardhat.py", line 52, in hardhat_like_parsing raise InvalidCompilation(txt) crytic_compile.platform.exceptions.InvalidCompilation: Compilation failed. Can you run build command? /tmp/slither-_9_kmniw/out/build-info is not a directory.
Attempts
2 / 2
Findings
0
Solc
View stderr
Traceback (most recent call last):
  File "/var/www/tripwire/worker/worker.py", line 198, in main
    payload = dispatch_job(job_type, job_id, job_meta, run_data, config, laravel_client)
  File "/var/www/tripwire/worker/worker.py", line 114, in dispatch_job
    return slither_run.run(job_id, job_meta, run_data, config, log, laravel_client)
           ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/worker/jobs/slither_run.py", line 1084, in run
    stdout_text, stderr_text, result_json = _run_slither(
                                            ~~~~~~~~~~~~^
        workspace,
        ^^^^^^^^^^
    ...<4 lines>...
        target_path=target_path,
        ^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/var/www/tripwire/worker/jobs/slither_run.py", line 958, in _run_slither
    raise RuntimeError(f"slither failed (exit {result.returncode}): {stderr_text or stdout_text}")
RuntimeError: slither failed (exit 1): 'forge clean' running (wd: /tmp/slither-_9_kmniw)
'forge config --json' running
'forge build --build-info --skip ./test/** ./script/** --force' running (wd: /tmp/slither-_9_kmniw)
'forge' returned non-zero exit code 1
Error: Encountered invalid solc version in lib/openzeppelin-contracts/contracts/utils/math/Math.sol: No solc version exists that matches the version requirement: ^0.8.20
Traceback (most recent call last):
  File "/var/www/tripwire/.venv/bin/slither", line 10, in <module>
    sys.exit(main())
             ~~~~^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 776, in main
    main_impl(all_detector_classes=detectors, all_printer_classes=printers)
    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 882, in main_impl
    ) = process_all(filename, args, detector_classes, printer_classes)
        ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/slither/__main__.py", line 96, in process_all
    compilations = compile_all(target, **vars(args))
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 722, in compile_all
    compilations.append(CryticCompile(target, **kwargs))
                        ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 211, in __init__
    self._compile(**kwargs)
    ~~~~~~~~~~~~~^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/crytic_compile.py", line 633, in _compile
    self._platform.compile(self, **kwargs)
    ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/platform/foundry.py", line 102, in compile
    hardhat_like_parsing(
    ~~~~~~~~~~~~~~~~~~~~^
        crytic_compile, str(self._target), build_directory, str(self._project_root)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/var/www/tripwire/.venv/lib/python3.13/site-packages/crytic_compile/platform/hardhat.py", line 52, in hardhat_like_parsing
    raise InvalidCompilation(txt)
crytic_compile.platform.exceptions.InvalidCompilation: Compilation failed. Can you run build command?
/tmp/slither-_9_kmniw/out/build-info is not a directory.

Codex

report.consolidate
Job Status
complete
Attempts
1 / 6
Findings
3
No findings?
no
Summary
Found a high-severity accounting bug that allows repeated over-claims, plus signature replay risk and unchecked ERC20 transfer returns.
View stdout
{"no_findings":false,"summary":"Found a high-severity accounting bug that allows repeated over-claims, plus signature replay risk and unchecked ERC20 transfer returns.","findings":[{"severity":"high","category":"math","title":"Intervals claimed only incremented by 1 enables repeated over-claims","exploit_scenario":"A user waits until multiple intervals have elapsed, then calls claim(). totalClaimable() pays for all elapsed-but-unclaimed intervals, but claim() only increments intervalsClaimed by 1. The user can immediately call claim() again to receive the same elapsed intervals again (minus one), repeating until totalIntervals is exhausted and extracting far more tokens than their allocation.","recommendation":"After paying for all elapsed intervals, set intervalsClaimed to the current intervalsElapsed (or increment by intervalsElapsed - previous intervalsClaimed). This ensures each interval is only claimable once.","evidence":"claim() increments intervalsClaimed by 1 after totalClaimable() calculates based on (intervalsElapsed - intervalsClaimed), so claimed intervals are not fully accounted for.","locations":["contracts/WarriorAllianceNFT/AmmoVault.sol:119","contracts/WarriorAllianceNFT/AmmoVault.sol:130","contracts/WarriorAllianceNFT/AmmoVault.sol:181","contracts/WarriorAllianceNFT/AmmoVault.sol:196"]},{"severity":"medium","category":"auth","title":"Whitelist signature lacks domain separation, enabling replay across contracts/chains","exploit_scenario":"A user obtains a valid signature for (user, maxAmount) from the owner on one deployment or chain. Because the signed payload does not include the contract address, chainId, or a nonce, the same signature can be replayed on another deployment or chain where the owner key is the same, allowing unauthorized registrations/claims.","recommendation":"Use EIP-712 typed data with domain separator including contract address and chainId, and include a nonce or unique identifier in the signed message. Optionally include the exact amount intended to be purchased.","evidence":"The signed payload only hashes msg.sender and maxAmount, and uses a raw EIP-191 prefix without domain separation or nonce.","locations":["contracts/WarriorAllianceNFT/AmmoVault.sol:149","contracts/WarriorAllianceNFT/AmmoVault.sol:155"]},{"severity":"low","category":"other","title":"Unchecked ERC20 transfer return values can desync accounting","exploit_scenario":"If the ERC20 token returns false (non-standard behavior) instead of reverting, claim() and whitelistRegister() will update user state as if tokens were paid, while no tokens are transferred. This can lock user allocations and misrepresent payouts.","recommendation":"Use SafeERC20 (safeTransfer/safeTransferFrom) or require(token.transfer(...)) to ensure failures revert.","evidence":"token.transfer(...) calls are not checked for return values.","locations":["contracts/WarriorAllianceNFT/AmmoVault.sol:110","contracts/WarriorAllianceNFT/AmmoVault.sol:133","contracts/WarriorAllianceNFT/AmmoVault.sol:172"]}]}
View stderr
OpenAI Codex v0.77.0 (research preview)
--------
workdir: /tmp/codex-frg7gqcw
model: gpt-5.2-codex
provider: openai
approval: never
sandbox: read-only
reasoning effort: high
reasoning summaries: auto
session id: 019be4bd-dd3e-7a21-86ef-919f53be7118
--------
user
You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.

Scope rules:
- You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party Solidity sources in this workspace.
- Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
- If there are only dependency files and no first-party sources, set no_findings=true and explain in summary.

Output MUST be valid JSON matching the provided schema.
- If you find nothing meaningful: set no_findings=true and findings=[].
- Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.

Output constraints (IMPORTANT):
- severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
- category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
Keep summary short and concrete.
mcp startup: no servers

thinking
**Noting audit file presence**
exec
/bin/bash -lc ls in /tmp/codex-frg7gqcw succeeded in 6ms:
AUDIT_BUNDLE.txt
codex-output-schema.json
contracts
hardhat
@openzeppelin
exec
/bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-frg7gqcw succeeded in 6ms:
This file concatenates the full contents of first-party Solidity sources for auditing.
Do not treat dependency code under lib/ or @openzeppelin/ as first-party.

================================================================================
FILE: contracts/WarriorAllianceNFT/AmmoVault.sol
================================================================================
// SPDX-License-Identifier: UNLICENSED
import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";
import "@openzeppelin/contracts/utils/math/Math.sol";
import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import "hardhat/console.sol";

pragma solidity ^0.8.4;

/**
    IMPORTANT NOTICE:
    This smart contract was written and deployed by the software engineers at 
    https://highstack.co in a contractor capacity.
    



thinking
**Analyzing whitelistRegister signature weakness**

The whitelistRegister function relies on an off-chain signature that only binds the user and maxAmount, lacking contract or chain context, which risks replay attacks across contracts or chains due to missing domain separation.
thinking
**Identifying critical overclaim bug**

The claim function increments intervals claimed by only one per call, allowing users to repeatedly claim the same unlocked intervals and withdraw far more tokens than allocated, creating a severe overclaim vulnerability.
thinking
**Categorizing key vulnerabilities**

The critical overclaim due to incorrect intervalsClaimed update is a math/accounting issue; signature replay risk fits auth category with medium severity; unchecked token.transfer return is a low-severity operational risk.
exec
/bin/bash -lc "nl -ba AUDIT_BUNDLE.txt | sed -n '1,220p'" in /tmp/codex-frg7gqcw succeeded in 7ms:
     1	This file concatenates the full contents of first-party Solidity sources for auditing.
     2	Do not treat dependency code under lib/ or @openzeppelin/ as first-party.
     3	
     4	================================================================================
     5	FILE: contracts/WarriorAllianceNFT/AmmoVault.sol
     6	================================================================================
     7	// SPDX-License-Identifier: UNLICENSED
     8	import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";
     9	import "@openzeppelin/contracts/utils/math/Math.sol";
    10	import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol";
    11	import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
    12	import "hardhat/console.sol";
    13	
    14	pragma solidity ^0.8.4;
    15	
    16	/**
    17	    IMPORTANT NOTICE:
    18	    This smart contract was written and deployed by the software engineers at 
    19	    https://highstack.co in a contractor capacity.
    20	    
exec
/bin/bash -lc "nl -ba AUDIT_BUNDLE.txt | sed -n '220,340p'" in /tmp/codex-frg7gqcw succeeded in 11ms:
   220	            timestamp = user.claimStart + (intervalsElapsed * intervalDuration);
   221	        }
   222	    }
   223	
   224	    /***********************/
   225	    /***********************/
   226	    /** HELPER FUNCTIONS ***/
   227	    /***********************/
   228	    /***********************/
   229	
   230	    function _intervalsElapsed(uint256 startTime)
   231	        internal
   232	        view
   233	        returns (uint256 intervalsElapsed)
   234	    {
   235	        intervalsElapsed = ((block.timestamp - startTime) / intervalDuration);
   236	        // note: division rounds down to nearest integer.
   237	
   238	        intervalsElapsed = Math.min(intervalsElapsed, totalIntervals - 1) + 1;
   239	        /** 

thinking
**Planning line number extraction**

I’m preparing to compute accurate line numbers for findings using line counts from the original file on disk, avoiding references to AUDIT_BUNDLE lines. Next, I'll read the file with line numbers to map snippet lines precisely.
exec
/bin/bash -lc "nl -ba contracts/WarriorAllianceNFT/AmmoVault.sol | sed -n '110,210p'" in /tmp/codex-frg7gqcw succeeded in 6ms:
   110	        token.transfer(msg.sender, amount);
   111	    }
   112	
   113	    /***********************/
   114	    /***********************/
   115	    /*** PUBLIC FUNCTIONS **/
   116	    /***********************/
   117	    /***********************/
   118	
   119	    function claim() public nonReentrant {
   120	        UserInfo memory user = users[msg.sender];
   121	        require(user.intervalsClaimed > 0, "Address not registered");
   122	        require(
   123	            totalIntervals - user.intervalsClaimed > 0,
   124	            "None left to claim"
   125	        );
   126	
   127	        uint256 totalClaimableThisRound = totalClaimable(msg.sender);
   128	        require(totalClaimableThisRound > 0, "Nothing to claim");
   129	

thinking
**Adding line numbers for interval tracking**
exec
/bin/bash -lc "nl -ba contracts/WarriorAllianceNFT/AmmoVault.sol | sed -n '210,280p'" in /tmp/codex-frg7gqcw succeeded in 6ms:
   210	        uint256 intervalsElapsed = _intervalsElapsed(user.claimStart);
   211	        if ((intervalsElapsed) > totalIntervals || user.totalTokens == 0) {
   212	            timestamp = 0;
   213	        } else {
   214	            timestamp = user.claimStart + (intervalsElapsed * intervalDuration);
   215	        }
   216	    }
   217	
   218	    /***********************/
   219	    /***********************/
   220	    /** HELPER FUNCTIONS ***/
   221	    /***********************/
   222	    /***********************/
   223	
   224	    function _intervalsElapsed(uint256 startTime)
   225	        internal
   226	        view
   227	        returns (uint256 intervalsElapsed)
   228	    {
   229	        intervalsElapsed = ((block.timestamp - startTime) / intervalDuration);


thinking
**Summarizing critical vulnerability and auth flaw**

I identified a high-severity flaw where the claim function increments intervals claimed by only one instead of by elapsed intervals, enabling repeated claims draining tokens; the fix involves updating intervals claimed to match elapsed intervals. I also found a medium-severity issue in the signature scheme lacking domain separation, allowing replay attacks across contracts or chains since the signature covers only sender and max amount but excludes contract, chain, or nonce.
thinking
**Preparing JSON report with detailed findings**

I'm consolidating three findings into a JSON report with severity, category, titles, exploit scenarios, recommendations, and exact line locations per the schema, including the high-severity interval claim math bug, medium-signature replay risk, and low-level unchecked ERC20 transfer return issue.
codex
{"no_findings":false,"summary":"Found a high-severity accounting bug that allows repeated over-claims, plus signature replay risk and unchecked ERC20 transfer returns.","findings":[{"severity":"high","category":"math","title":"Intervals claimed only incremented by 1 enables repeated over-claims","exploit_scenario":"A user waits until multiple intervals have elapsed, then calls claim(). totalClaimable() pays for all elapsed-but-unclaimed intervals, but claim() only increments intervalsClaimed by 1. The user can immediately call claim() again to receive the same elapsed intervals again (minus one), repeating until totalIntervals is exhausted and extracting far more tokens than their allocation.","recommendation":"After paying for all elapsed intervals, set intervalsClaimed to the current intervalsElapsed (or increment by intervalsElapsed - previous intervalsClaimed). This ensures each interval is only claimable once.","evidence":"claim() increments intervalsClaimed by 1 after totalClaimable() calculates based on (intervalsElapsed - intervalsClaimed), so claimed intervals are not fully accounted for.","locations":["contracts/WarriorAllianceNFT/AmmoVault.sol:119","contracts/WarriorAllianceNFT/AmmoVault.sol:130","contracts/WarriorAllianceNFT/AmmoVault.sol:181","contracts/WarriorAllianceNFT/AmmoVault.sol:196"]},{"severity":"medium","category":"auth","title":"Whitelist signature lacks domain separation, enabling replay across contracts/chains","exploit_scenario":"A user obtains a valid signature for (user, maxAmount) from the owner on one deployment or chain. Because the signed payload does not include the contract address, chainId, or a nonce, the same signature can be replayed on another deployment or chain where the owner key is the same, allowing unauthorized registrations/claims.","recommendation":"Use EIP-712 typed data with domain separator including contract address and chainId, and include a nonce or unique identifier in the signed message. Optionally include the exact amount intended to be purchased.","evidence":"The signed payload only hashes msg.sender and maxAmount, and uses a raw EIP-191 prefix without domain separation or nonce.","locations":["contracts/WarriorAllianceNFT/AmmoVault.sol:149","contracts/WarriorAllianceNFT/AmmoVault.sol:155"]},{"severity":"low","category":"other","title":"Unchecked ERC20 transfer return values can desync accounting","exploit_scenario":"If the ERC20 token returns false (non-standard behavior) instead of reverting, claim() and whitelistRegister() will update user state as if tokens were paid, while no tokens are transferred. This can lock user allocations and misrepresent payouts.","recommendation":"Use SafeERC20 (safeTransfer/safeTransferFrom) or require(token.transfer(...)) to ensure failures revert.","evidence":"token.transfer(...) calls are not checked for return values.","locations":["contracts/WarriorAllianceNFT/AmmoVault.sol:110","contracts/WarriorAllianceNFT/AmmoVault.sol:133","contracts/WarriorAllianceNFT/AmmoVault.sol:172"]}]}
tokens used
28,169
Metadata
{
    "codex": {
        "ran_at": "2026-01-22T08:09:12.690986+00:00",
        "returncode": 0
    },
    "project": {
        "mode": "source",
        "file_count": 9,
        "import_count": 8,
        "first_party_contracts_count": 2
    },
    "summary": "Found a high-severity accounting bug that allows repeated over-claims, plus signature replay risk and unchecked ERC20 transfer returns.",
    "raw_final": {
        "summary": "Found a high-severity accounting bug that allows repeated over-claims, plus signature replay risk and unchecked ERC20 transfer returns.",
        "findings": [
            {
                "title": "Intervals claimed only incremented by 1 enables repeated over-claims",
                "category": "math",
                "evidence": "claim() increments intervalsClaimed by 1 after totalClaimable() calculates based on (intervalsElapsed - intervalsClaimed), so claimed intervals are not fully accounted for.",
                "severity": "high",
                "locations": [
                    "contracts/WarriorAllianceNFT/AmmoVault.sol:119",
                    "contracts/WarriorAllianceNFT/AmmoVault.sol:130",
                    "contracts/WarriorAllianceNFT/AmmoVault.sol:181",
                    "contracts/WarriorAllianceNFT/AmmoVault.sol:196"
                ],
                "recommendation": "After paying for all elapsed intervals, set intervalsClaimed to the current intervalsElapsed (or increment by intervalsElapsed - previous intervalsClaimed). This ensures each interval is only claimable once.",
                "exploit_scenario": "A user waits until multiple intervals have elapsed, then calls claim(). totalClaimable() pays for all elapsed-but-unclaimed intervals, but claim() only increments intervalsClaimed by 1. The user can immediately call claim() again to receive the same elapsed intervals again (minus one), repeating until totalIntervals is exhausted and extracting far more tokens than their allocation."
            },
            {
                "title": "Whitelist signature lacks domain separation, enabling replay across contracts/chains",
                "category": "auth",
                "evidence": "The signed payload only hashes msg.sender and maxAmount, and uses a raw EIP-191 prefix without domain separation or nonce.",
                "severity": "medium",
                "locations": [
                    "contracts/WarriorAllianceNFT/AmmoVault.sol:149",
                    "contracts/WarriorAllianceNFT/AmmoVault.sol:155"
                ],
                "recommendation": "Use EIP-712 typed data with domain separator including contract address and chainId, and include a nonce or unique identifier in the signed message. Optionally include the exact amount intended to be purchased.",
                "exploit_scenario": "A user obtains a valid signature for (user, maxAmount) from the owner on one deployment or chain. Because the signed payload does not include the contract address, chainId, or a nonce, the same signature can be replayed on another deployment or chain where the owner key is the same, allowing unauthorized registrations/claims."
            },
            {
                "title": "Unchecked ERC20 transfer return values can desync accounting",
                "category": "other",
                "evidence": "token.transfer(...) calls are not checked for return values.",
                "severity": "low",
                "locations": [
                    "contracts/WarriorAllianceNFT/AmmoVault.sol:110",
                    "contracts/WarriorAllianceNFT/AmmoVault.sol:133",
                    "contracts/WarriorAllianceNFT/AmmoVault.sol:172"
                ],
                "recommendation": "Use SafeERC20 (safeTransfer/safeTransferFrom) or require(token.transfer(...)) to ensure failures revert.",
                "exploit_scenario": "If the ERC20 token returns false (non-standard behavior) instead of reverting, claim() and whitelistRegister() will update user state as if tokens were paid, while no tokens are transferred. This can lock user allocations and misrepresent payouts."
            }
        ],
        "no_findings": false
    },
    "no_findings": false,
    "schema_version": 1
}

Opcode Heuristics

tool.cast_disasm
Delegatecall
0
Selfdestruct
0
CREATE2
0
CALL-family (heavy)
5
EXT*/BALANCE
4
Total opcodes
3410
Flags
No heuristic flags raised.
View cast disassembly output
00000000: PUSH1 0x80
00000002: PUSH1 0x40
00000004: MSTORE
00000005: PUSH1 0x04
00000007: CALLDATASIZE
00000008: LT
00000009: PUSH2 0x0144
0000000c: JUMPI
0000000d: PUSH1 0x00
0000000f: CALLDATALOAD
00000010: PUSH1 0xe0
00000012: SHR
00000013: DUP1
00000014: PUSH4 0x715018a6
00000019: GT
0000001a: PUSH2 0x00b6
0000001d: JUMPI
0000001e: DUP1
0000001f: PUSH4 0xb4256888
00000024: GT
00000025: PUSH2 0x006f
00000028: JUMPI
00000029: DUP1
0000002a: PUSH4 0xb4256888
0000002f: EQ
00000030: PUSH2 0x037b
00000033: JUMPI
00000034: DUP1
00000035: PUSH4 0xcee9cef8
0000003a: EQ
0000003b: PUSH2 0x0391
0000003e: JUMPI
0000003f: DUP1
00000040: PUSH4 0xd78276c6
00000045: EQ
00000046: PUSH2 0x03a4
00000049: JUMPI
0000004a: DUP1
0000004b: PUSH4 0xf2fde38b
00000050: EQ
00000051: PUSH2 0x03c4
00000054: JUMPI
00000055: DUP1
00000056: PUSH4 0xfc0c546a
0000005b: EQ
0000005c: PUSH2 0x03e4
0000005f: JUMPI
00000060: DUP1
00000061: PUSH4 0xfcbca456
00000066: EQ
00000067: PUSH2 0x0404
0000006a: JUMPI
0000006b: PUSH1 0x00
0000006d: DUP1
0000006e: REVERT
0000006f: JUMPDEST
00000070: DUP1
00000071: PUSH4 0x715018a6
00000076: EQ
00000077: PUSH2 0x027d
0000007a: JUMPI
0000007b: DUP1
0000007c: PUSH4 0x7a1ac61e
00000081: EQ
00000082: PUSH2 0x0292
00000085: JUMPI
00000086: DUP1
00000087: PUSH4 0x8da5cb5b
0000008c: EQ
0000008d: PUSH2 0x02b2
00000090: JUMPI
00000091: DUP1
00000092: PUSH4 0x91b7f5ed
00000097: EQ
00000098: PUSH2 0x02e4
0000009b: JUMPI
0000009c: DUP1
0000009d: PUSH4 0xa0355eca
000000a2: EQ
000000a3: PUSH2 0x0304
000000a6: JUMPI
000000a7: DUP1
000000a8: PUSH4 0xa87430ba
000000ad: EQ
000000ae: PUSH2 0x0324
000000b1: JUMPI
000000b2: PUSH1 0x00
000000b4: DUP1
000000b5: REVERT
000000b6: JUMPDEST
000000b7: DUP1
000000b8: PUSH4 0x3ccfd60b
000000bd: GT
000000be: PUSH2 0x0108
000000c1: JUMPI
000000c2: DUP1
000000c3: PUSH4 0x3ccfd60b
000000c8: EQ
000000c9: PUSH2 0x01f1
000000cc: JUMPI
000000cd: DUP1
000000ce: PUSH4 0x41cf19ba
000000d3: EQ
000000d4: PUSH2 0x0206
000000d7: JUMPI
000000d8: DUP1
000000d9: PUSH4 0x4e71d92d
000000de: EQ
000000df: PUSH2 0x021c
000000e2: JUMPI
000000e3: DUP1
000000e4: PUSH4 0x627749e6
000000e9: EQ
000000ea: PUSH2 0x0231
000000ed: JUMPI
000000ee: DUP1
000000ef: PUSH4 0x68002ee2
000000f4: EQ
000000f5: PUSH2 0x0247
000000f8: JUMPI
000000f9: DUP1
000000fa: PUSH4 0x70f23da7
000000ff: EQ
00000100: PUSH2 0x025d
00000103: JUMPI
00000104: PUSH1 0x00
00000106: DUP1
00000107: REVERT
00000108: JUMPDEST
00000109: DUP1
0000010a: PUSH4 0x144fa6d7
0000010f: EQ
00000110: PUSH2 0x0150
00000113: JUMPI
00000114: DUP1
00000115: PUSH4 0x1dfce5c6
0000011a: EQ
0000011b: PUSH2 0x0172
0000011e: JUMPI
0000011f: DUP1
00000120: PUSH4 0x22d60d17
00000125: EQ
00000126: PUSH2 0x01a5
00000129: JUMPI
0000012a: DUP1
0000012b: PUSH4 0x3076dc42
00000130: EQ
00000131: PUSH2 0x01bb
00000134: JUMPI
00000135: DUP1
00000136: PUSH4 0x39a39b99
0000013b: EQ
0000013c: PUSH2 0x01d1
0000013f: JUMPI
00000140: PUSH1 0x00
00000142: DUP1
00000143: REVERT
00000144: JUMPDEST
00000145: CALLDATASIZE
00000146: PUSH2 0x014b
00000149: JUMPI
0000014a: STOP
0000014b: JUMPDEST
0000014c: PUSH1 0x00
0000014e: DUP1
0000014f: REVERT
00000150: JUMPDEST
00000151: CALLVALUE
00000152: DUP1
00000153: ISZERO
00000154: PUSH2 0x015c
00000157: JUMPI
00000158: PUSH1 0x00
0000015a: DUP1
0000015b: REVERT
0000015c: JUMPDEST
0000015d: POP
0000015e: PUSH2 0x0170
00000161: PUSH2 0x016b
00000164: CALLDATASIZE
00000165: PUSH1 0x04
00000167: PUSH2 0x126f
0000016a: JUMP
0000016b: JUMPDEST
0000016c: PUSH2 0x0424
0000016f: JUMP
00000170: JUMPDEST
00000171: STOP
00000172: JUMPDEST
00000173: CALLVALUE
00000174: DUP1
00000175: ISZERO
00000176: PUSH2 0x017e
00000179: JUMPI
0000017a: PUSH1 0x00
0000017c: DUP1
0000017d: REVERT
0000017e: JUMPDEST
0000017f: POP
00000180: PUSH2 0x0192
00000183: PUSH2 0x018d
00000186: CALLDATASIZE
00000187: PUSH1 0x04
00000189: PUSH2 0x126f
0000018c: JUMP
0000018d: JUMPDEST
0000018e: PUSH2 0x0479
00000191: JUMP
00000192: JUMPDEST
00000193: PUSH1 0x40
00000195: MLOAD
00000196: SWAP1
00000197: DUP2
00000198: MSTORE
00000199: PUSH1 0x20
0000019b: ADD
0000019c: JUMPDEST
0000019d: PUSH1 0x40
0000019f: MLOAD
000001a0: DUP1
000001a1: SWAP2
000001a2: SUB
000001a3: SWAP1
000001a4: RETURN
000001a5: JUMPDEST
000001a6: CALLVALUE
000001a7: DUP1
000001a8: ISZERO
000001a9: PUSH2 0x01b1
000001ac: JUMPI
000001ad: PUSH1 0x00
000001af: DUP1
000001b0: REVERT
000001b1: JUMPDEST
000001b2: POP
000001b3: PUSH2 0x0192
000001b6: PUSH1 0x98
000001b8: SLOAD
000001b9: DUP2
000001ba: JUMP
000001bb: JUMPDEST
000001bc: CALLVALUE
000001bd: DUP1
000001be: ISZERO
000001bf: PUSH2 0x01c7
000001c2: JUMPI
000001c3: PUSH1 0x00
000001c5: DUP1
000001c6: REVERT
000001c7: JUMPDEST
000001c8: POP
000001c9: PUSH2 0x0192
000001cc: PUSH1 0x9b
000001ce: SLOAD
000001cf: DUP2
000001d0: JUMP
000001d1: JUMPDEST
000001d2: CALLVALUE
000001d3: DUP1
000001d4: ISZERO
000001d5: PUSH2 0x01dd
000001d8: JUMPI
000001d9: PUSH1 0x00
000001db: DUP1
000001dc: REVERT
000001dd: JUMPDEST
000001de: POP
000001df: PUSH2 0x0170
000001e2: PUSH2 0x01ec
000001e5: CALLDATASIZE
000001e6: PUSH1 0x04
000001e8: PUSH2 0x1373
000001eb: JUMP
000001ec: JUMPDEST
000001ed: PUSH2 0x052d
000001f0: JUMP
000001f1: JUMPDEST
000001f2: CALLVALUE
000001f3: DUP1
000001f4: ISZERO
000001f5: PUSH2 0x01fd
000001f8: JUMPI
000001f9: PUSH1 0x00
000001fb: DUP1
000001fc: REVERT
000001fd: JUMPDEST
000001fe: POP
000001ff: PUSH2 0x0170
00000202: PUSH2 0x0565
00000205: JUMP
00000206: JUMPDEST
00000207: CALLVALUE
00000208: DUP1
00000209: ISZERO
0000020a: PUSH2 0x0212
0000020d: JUMPI
0000020e: PUSH1 0x00
00000210: DUP1
00000211: REVERT
00000212: JUMPDEST
00000213: POP
00000214: PUSH2 0x0192
00000217: PUSH1 0x9d
00000219: SLOAD
0000021a: DUP2
0000021b: JUMP
0000021c: JUMPDEST
0000021d: CALLVALUE
0000021e: DUP1
0000021f: ISZERO
00000220: PUSH2 0x0228
00000223: JUMPI
00000224: PUSH1 0x00
00000226: DUP1
00000227: REVERT
00000228: JUMPDEST
00000229: POP
0000022a: PUSH2 0x0170
0000022d: PUSH2 0x0620
00000230: JUMP
00000231: JUMPDEST
00000232: CALLVALUE
00000233: DUP1
00000234: ISZERO
00000235: PUSH2 0x023d
00000238: JUMPI
00000239: PUSH1 0x00
0000023b: DUP1
0000023c: REVERT
0000023d: JUMPDEST
0000023e: POP
0000023f: PUSH2 0x0192
00000242: PUSH1 0x9a
00000244: SLOAD
00000245: DUP2
00000246: JUMP
00000247: JUMPDEST
00000248: CALLVALUE
00000249: DUP1
0000024a: ISZERO
0000024b: PUSH2 0x0253
0000024e: JUMPI
0000024f: PUSH1 0x00
00000251: DUP1
00000252: REVERT
00000253: JUMPDEST
00000254: POP
00000255: PUSH2 0x0192
00000258: PUSH1 0x9c
0000025a: SLOAD
0000025b: DUP2
0000025c: JUMP
0000025d: JUMPDEST
0000025e: CALLVALUE
0000025f: DUP1
00000260: ISZERO
00000261: PUSH2 0x0269
00000264: JUMPI
00000265: PUSH1 0x00
00000267: DUP1
00000268: REVERT
00000269: JUMPDEST
0000026a: POP
0000026b: PUSH2 0x0192
0000026e: PUSH2 0x0278
00000271: CALLDATASIZE
00000272: PUSH1 0x04
00000274: PUSH2 0x126f
00000277: JUMP
00000278: JUMPDEST
00000279: PUSH2 0x0863
0000027c: JUMP
0000027d: JUMPDEST
0000027e: CALLVALUE
0000027f: DUP1
00000280: ISZERO
00000281: PUSH2 0x0289
00000284: JUMPI
00000285: PUSH1 0x00
00000287: DUP1
00000288: REVERT
00000289: JUMPDEST
0000028a: POP
0000028b: PUSH2 0x0170
0000028e: PUSH2 0x08f0
00000291: JUMP
00000292: JUMPDEST
00000293: CALLVALUE
00000294: DUP1
00000295: ISZERO
00000296: PUSH2 0x029e
00000299: JUMPI
0000029a: PUSH1 0x00
0000029c: DUP1
0000029d: REVERT
0000029e: JUMPDEST
0000029f: POP
000002a0: PUSH2 0x0170
000002a3: PUSH2 0x02ad
000002a6: CALLDATASIZE
000002a7: PUSH1 0x04
000002a9: PUSH2 0x128a
000002ac: JUMP
000002ad: JUMPDEST
000002ae: PUSH2 0x0926
000002b1: JUMP
000002b2: JUMPDEST
000002b3: CALLVALUE
000002b4: DUP1
000002b5: ISZERO
000002b6: PUSH2 0x02be
000002b9: JUMPI
000002ba: PUSH1 0x00
000002bc: DUP1
000002bd: REVERT
000002be: JUMPDEST
000002bf: POP
000002c0: PUSH1 0x33
000002c2: SLOAD
000002c3: PUSH1 0x01
000002c5: PUSH1 0x01
000002c7: PUSH1 0xa0
000002c9: SHL
000002ca: SUB
000002cb: AND
000002cc: JUMPDEST
000002cd: PUSH1 0x40
000002cf: MLOAD
000002d0: PUSH1 0x01
000002d2: PUSH1 0x01
000002d4: PUSH1 0xa0
000002d6: SHL
000002d7: SUB
000002d8: SWAP1
000002d9: SWAP2
000002da: AND
000002db: DUP2
000002dc: MSTORE
000002dd: PUSH1 0x20
000002df: ADD
000002e0: PUSH2 0x019c
000002e3: JUMP
000002e4: JUMPDEST
000002e5: CALLVALUE
000002e6: DUP1
000002e7: ISZERO
000002e8: PUSH2 0x02f0
000002eb: JUMPI
000002ec: PUSH1 0x00
000002ee: DUP1
000002ef: REVERT
000002f0: JUMPDEST
000002f1: POP
000002f2: PUSH2 0x0170
000002f5: PUSH2 0x02ff
000002f8: CALLDATASIZE
000002f9: PUSH1 0x04
000002fb: PUSH2 0x12df
000002fe: JUMP
000002ff: JUMPDEST
00000300: PUSH2 0x09dc
00000303: JUMP
00000304: JUMPDEST
00000305: CALLVALUE
00000306: DUP1
00000307: ISZERO
00000308: PUSH2 0x0310
0000030b: JUMPI
0000030c: PUSH1 0x00
0000030e: DUP1
0000030f: REVERT
00000310: JUMPDEST
00000311: POP
00000312: PUSH2 0x0170
00000315: PUSH2 0x031f
00000318: CALLDATASIZE
00000319: PUSH1 0x04
0000031b: PUSH2 0x12f8
0000031e: JUMP
0000031f: JUMPDEST
00000320: PUSH2 0x0a0b
00000323: JUMP
00000324: JUMPDEST
00000325: CALLVALUE
00000326: DUP1
00000327: ISZERO
00000328: PUSH2 0x0330
0000032b: JUMPI
0000032c: PUSH1 0x00
0000032e: DUP1
0000032f: REVERT
00000330: JUMPDEST
00000331: POP
00000332: PUSH2 0x0360
00000335: PUSH2 0x033f
00000338: CALLDATASIZE
00000339: PUSH1 0x04
0000033b: PUSH2 0x126f
0000033e: JUMP
0000033f: JUMPDEST
00000340: PUSH1 0x9e
00000342: PUSH1 0x20
00000344: MSTORE
00000345: PUSH1 0x00
00000347: SWAP1
00000348: DUP2
00000349: MSTORE
0000034a: PUSH1 0x40
0000034c: SWAP1
0000034d: KECCAK256
0000034e: DUP1
0000034f: SLOAD
00000350: PUSH1 0x01
00000352: DUP3
00000353: ADD
00000354: SLOAD
00000355: PUSH1 0x02
00000357: SWAP1
00000358: SWAP3
00000359: ADD
0000035a: SLOAD
0000035b: SWAP1
0000035c: SWAP2
0000035d: SWAP1
0000035e: DUP4
0000035f: JUMP
00000360: JUMPDEST
00000361: PUSH1 0x40
00000363: DUP1
00000364: MLOAD
00000365: SWAP4
00000366: DUP5
00000367: MSTORE
00000368: PUSH1 0x20
0000036a: DUP5
0000036b: ADD
0000036c: SWAP3
0000036d: SWAP1
0000036e: SWAP3
0000036f: MSTORE
00000370: SWAP1
00000371: DUP3
00000372: ADD
00000373: MSTORE
00000374: PUSH1 0x60
00000376: ADD
00000377: PUSH2 0x019c
0000037a: JUMP
0000037b: JUMPDEST
0000037c: CALLVALUE
0000037d: DUP1
0000037e: ISZERO
0000037f: PUSH2 0x0387
00000382: JUMPI
00000383: PUSH1 0x00
00000385: DUP1
00000386: REVERT
00000387: JUMPDEST
00000388: POP
00000389: PUSH2 0x0192
0000038c: PUSH1 0x99
0000038e: SLOAD
0000038f: DUP2
00000390: JUMP
00000391: JUMPDEST
00000392: PUSH2 0x0170
00000395: PUSH2 0x039f
00000398: CALLDATASIZE
00000399: PUSH1 0x04
0000039b: PUSH2 0x131a
0000039e: JUMP
0000039f: JUMPDEST
000003a0: PUSH2 0x0a40
000003a3: JUMP
000003a4: JUMPDEST
000003a5: CALLVALUE
000003a6: DUP1
000003a7: ISZERO
000003a8: PUSH2 0x03b0
000003ab: JUMPI
000003ac: PUSH1 0x00
000003ae: DUP1
000003af: REVERT
000003b0: JUMPDEST
000003b1: POP
000003b2: PUSH2 0x0170
000003b5: PUSH2 0x03bf
000003b8: CALLDATASIZE
000003b9: PUSH1 0x04
000003bb: PUSH2 0x12df
000003be: JUMP
000003bf: JUMPDEST
000003c0: PUSH2 0x0ea0
000003c3: JUMP
000003c4: JUMPDEST
000003c5: CALLVALUE
000003c6: DUP1
000003c7: ISZERO
000003c8: PUSH2 0x03d0
000003cb: JUMPI
000003cc: PUSH1 0x00
000003ce: DUP1
000003cf: REVERT
000003d0: JUMPDEST
000003d1: POP
000003d2: PUSH2 0x0170
000003d5: PUSH2 0x03df
000003d8: CALLDATASIZE
000003d9: PUSH1 0x04
000003db: PUSH2 0x126f
000003de: JUMP
000003df: JUMPDEST
000003e0: PUSH2 0x0f4e
000003e3: JUMP
000003e4: JUMPDEST
000003e5: CALLVALUE
000003e6: DUP1
000003e7: ISZERO
000003e8: PUSH2 0x03f0
000003eb: JUMPI
000003ec: PUSH1 0x00
000003ee: DUP1
000003ef: REVERT
000003f0: JUMPDEST
000003f1: POP
000003f2: PUSH1 0x97
000003f4: SLOAD
000003f5: PUSH2 0x02cc
000003f8: SWAP1
000003f9: PUSH1 0x01
000003fb: PUSH1 0x01
000003fd: PUSH1 0xa0
000003ff: SHL
00000400: SUB
00000401: AND
00000402: DUP2
00000403: JUMP
00000404: JUMPDEST
00000405: CALLVALUE
00000406: DUP1
00000407: ISZERO
00000408: PUSH2 0x0410
0000040b: JUMPI
0000040c: PUSH1 0x00
0000040e: DUP1
0000040f: REVERT
00000410: JUMPDEST
00000411: POP
00000412: PUSH2 0x0170
00000415: PUSH2 0x041f
00000418: CALLDATASIZE
00000419: PUSH1 0x04
0000041b: PUSH2 0x126f
0000041e: JUMP
0000041f: JUMPDEST
00000420: PUSH2 0x0fe9
00000423: JUMP
00000424: JUMPDEST
00000425: PUSH1 0x33
00000427: SLOAD
00000428: PUSH1 0x01
0000042a: PUSH1 0x01
0000042c: PUSH1 0xa0
0000042e: SHL
0000042f: SUB
00000430: AND
00000431: CALLER
00000432: EQ
00000433: PUSH2 0x0457
00000436: JUMPI
00000437: PUSH1 0x40
00000439: MLOAD
0000043a: PUSH3 0x461bcd
0000043e: PUSH1 0xe5
00000440: SHL
00000441: DUP2
00000442: MSTORE
00000443: PUSH1 0x04
00000445: ADD
00000446: PUSH2 0x044e
00000449: SWAP1
0000044a: PUSH2 0x13ed
0000044d: JUMP
0000044e: JUMPDEST
0000044f: PUSH1 0x40
00000451: MLOAD
00000452: DUP1
00000453: SWAP2
00000454: SUB
00000455: SWAP1
00000456: REVERT
00000457: JUMPDEST
00000458: PUSH1 0x97
0000045a: DUP1
0000045b: SLOAD
0000045c: PUSH1 0x01
0000045e: PUSH1 0x01
00000460: PUSH1 0xa0
00000462: SHL
00000463: SUB
00000464: NOT
00000465: AND
00000466: PUSH1 0x01
00000468: PUSH1 0x01
0000046a: PUSH1 0xa0
0000046c: SHL
0000046d: SUB
0000046e: SWAP3
0000046f: SWAP1
00000470: SWAP3
00000471: AND
00000472: SWAP2
00000473: SWAP1
00000474: SWAP2
00000475: OR
00000476: SWAP1
00000477: SSTORE
00000478: JUMP
00000479: JUMPDEST
0000047a: PUSH1 0x01
0000047c: PUSH1 0x01
0000047e: PUSH1 0xa0
00000480: SHL
00000481: SUB
00000482: DUP2
00000483: AND
00000484: PUSH1 0x00
00000486: SWAP1
00000487: DUP2
00000488: MSTORE
00000489: PUSH1 0x9e
0000048b: PUSH1 0x20
0000048d: SWAP1
0000048e: DUP2
0000048f: MSTORE
00000490: PUSH1 0x40
00000492: DUP1
00000493: DUP4
00000494: KECCAK256
00000495: DUP2
00000496: MLOAD
00000497: PUSH1 0x60
00000499: DUP2
0000049a: ADD
0000049b: DUP4
0000049c: MSTORE
0000049d: DUP2
0000049e: SLOAD
0000049f: DUP1
000004a0: DUP3
000004a1: MSTORE
000004a2: PUSH1 0x01
000004a4: DUP4
000004a5: ADD
000004a6: SLOAD
000004a7: SWAP5
000004a8: DUP3
000004a9: ADD
000004aa: SWAP5
000004ab: SWAP1
000004ac: SWAP5
000004ad: MSTORE
000004ae: PUSH1 0x02
000004b0: SWAP1
000004b1: SWAP2
000004b2: ADD
000004b3: SLOAD
000004b4: SWAP2
000004b5: DUP2
000004b6: ADD
000004b7: SWAP2
000004b8: SWAP1
000004b9: SWAP2
000004ba: MSTORE
000004bb: PUSH1 0x9d
000004bd: SLOAD
000004be: SWAP1
000004bf: SWAP2
000004c0: DUP4
000004c1: SWAP2
000004c2: PUSH1 0x64
000004c4: SWAP2
000004c5: PUSH2 0x04ce
000004c8: SWAP2
000004c9: SWAP1
000004ca: PUSH2 0x14a7
000004cd: JUMP
000004ce: JUMPDEST
000004cf: PUSH2 0x04d8
000004d2: SWAP2
000004d3: SWAP1
000004d4: PUSH2 0x1485
000004d7: JUMP
000004d8: JUMPDEST
000004d9: DUP3
000004da: MLOAD
000004db: PUSH2 0x04e4
000004de: SWAP2
000004df: SWAP1
000004e0: PUSH2 0x14c6
000004e3: JUMP
000004e4: JUMPDEST
000004e5: SWAP1
000004e6: POP
000004e7: PUSH1 0x00
000004e9: PUSH1 0x9c
000004eb: SLOAD
000004ec: DUP3
000004ed: PUSH2 0x04f6
000004f0: SWAP2
000004f1: SWAP1
000004f2: PUSH2 0x1485
000004f5: JUMP
000004f6: JUMPDEST
000004f7: SWAP1
000004f8: POP
000004f9: PUSH1 0x00
000004fb: PUSH2 0x0507
000004fe: DUP5
000004ff: PUSH1 0x40
00000501: ADD
00000502: MLOAD
00000503: PUSH2 0x1060
00000506: JUMP
00000507: JUMPDEST
00000508: SWAP1
00000509: POP
0000050a: DUP4
0000050b: PUSH1 0x20
0000050d: ADD
0000050e: MLOAD
0000050f: DUP2
00000510: PUSH2 0x0519
00000513: SWAP2
00000514: SWAP1
00000515: PUSH2 0x14c6
00000518: JUMP
00000519: JUMPDEST
0000051a: PUSH2 0x0523
0000051d: SWAP1
0000051e: DUP4
0000051f: PUSH2 0x14a7
00000522: JUMP
00000523: JUMPDEST
00000524: SWAP7
00000525: SWAP6
00000526: POP
00000527: POP
00000528: POP
00000529: POP
0000052a: POP
0000052b: POP
0000052c: JUMP
0000052d: JUMPDEST
0000052e: PUSH1 0x33
00000530: SLOAD
00000531: PUSH1 0x01
00000533: PUSH1 0x01
00000535: PUSH1 0xa0
00000537: SHL
00000538: SUB
00000539: AND
0000053a: CALLER
0000053b: EQ
0000053c: PUSH2 0x0557
0000053f: JUMPI
00000540: PUSH1 0x40
00000542: MLOAD
00000543: PUSH3 0x461bcd
00000547: PUSH1 0xe5
00000549: SHL
0000054a: DUP2
0000054b: MSTORE
0000054c: PUSH1 0x04
0000054e: ADD
0000054f: PUSH2 0x044e
00000552: SWAP1
00000553: PUSH2 0x13ed
00000556: JUMP
00000557: JUMPDEST
00000558: PUSH1 0x9b
0000055a: SWAP3
0000055b: SWAP1
0000055c: SWAP3
0000055d: SSTORE
0000055e: PUSH1 0x9c
00000560: SSTORE
00000561: PUSH1 0x9d
00000563: SSTORE
00000564: JUMP
00000565: JUMPDEST
00000566: PUSH1 0x33
00000568: SLOAD
00000569: PUSH1 0x01
0000056b: PUSH1 0x01
0000056d: PUSH1 0xa0
0000056f: SHL
00000570: SUB
00000571: AND
00000572: CALLER
00000573: EQ
00000574: PUSH2 0x058f
00000577: JUMPI
00000578: PUSH1 0x40
0000057a: MLOAD
0000057b: PUSH3 0x461bcd
0000057f: PUSH1 0xe5
00000581: SHL
00000582: DUP2
00000583: MSTORE
00000584: PUSH1 0x04
00000586: ADD
00000587: PUSH2 0x044e
0000058a: SWAP1
0000058b: PUSH2 0x13ed
0000058e: JUMP
0000058f: JUMPDEST
00000590: PUSH1 0x40
00000592: MLOAD
00000593: SELFBALANCE
00000594: SWAP1
00000595: PUSH1 0x00
00000597: SWAP1
00000598: CALLER
00000599: SWAP1
0000059a: DUP4
0000059b: SWAP1
0000059c: DUP4
0000059d: DUP2
0000059e: DUP2
0000059f: DUP2
000005a0: DUP6
000005a1: DUP8
000005a2: GAS
000005a3: CALL
000005a4: SWAP3
000005a5: POP
000005a6: POP
000005a7: POP
000005a8: RETURNDATASIZE
000005a9: DUP1
000005aa: PUSH1 0x00
000005ac: DUP2
000005ad: EQ
000005ae: PUSH2 0x05d3
000005b1: JUMPI
000005b2: PUSH1 0x40
000005b4: MLOAD
000005b5: SWAP2
000005b6: POP
000005b7: PUSH1 0x1f
000005b9: NOT
000005ba: PUSH1 0x3f
000005bc: RETURNDATASIZE
000005bd: ADD
000005be: AND
000005bf: DUP3
000005c0: ADD
000005c1: PUSH1 0x40
000005c3: MSTORE
000005c4: RETURNDATASIZE
000005c5: DUP3
000005c6: MSTORE
000005c7: RETURNDATASIZE
000005c8: PUSH1 0x00
000005ca: PUSH1 0x20
000005cc: DUP5
000005cd: ADD
000005ce: RETURNDATACOPY
000005cf: PUSH2 0x05d8
000005d2: JUMP
000005d3: JUMPDEST
000005d4: PUSH1 0x60
000005d6: SWAP2
000005d7: POP
000005d8: JUMPDEST
000005d9: POP
000005da: POP
000005db: SWAP1
000005dc: POP
000005dd: DUP1
000005de: PUSH2 0x061c
000005e1: JUMPI
000005e2: PUSH1 0x40
000005e4: MLOAD
000005e5: PUSH3 0x461bcd
000005e9: PUSH1 0xe5
000005eb: SHL
000005ec: DUP2
000005ed: MSTORE
000005ee: PUSH1 0x20
000005f0: PUSH1 0x04
000005f2: DUP3
000005f3: ADD
000005f4: MSTORE
000005f5: PUSH1 0x10
000005f7: PUSH1 0x24
000005f9: DUP3
000005fa: ADD
000005fb: MSTORE
000005fc: PUSH16 0x2a3930b739b332b9103330b4b632b217
0000060d: PUSH1 0x81
0000060f: SHL
00000610: PUSH1 0x44
00000612: DUP3
00000613: ADD
00000614: MSTORE
00000615: PUSH1 0x64
00000617: ADD
00000618: PUSH2 0x044e
0000061b: JUMP
0000061c: JUMPDEST
0000061d: POP
0000061e: POP
0000061f: JUMP
00000620: JUMPDEST
00000621: PUSH1 0x02
00000623: PUSH1 0x65
00000625: SLOAD
00000626: EQ
00000627: ISZERO
00000628: PUSH2 0x0673
0000062b: JUMPI
0000062c: PUSH1 0x40
0000062e: MLOAD
0000062f: PUSH3 0x461bcd
00000633: PUSH1 0xe5
00000635: SHL
00000636: DUP2
00000637: MSTORE
00000638: PUSH1 0x20
0000063a: PUSH1 0x04
0000063c: DUP3
0000063d: ADD
0000063e: MSTORE
0000063f: PUSH1 0x1f
00000641: PUSH1 0x24
00000643: DUP3
00000644: ADD
00000645: MSTORE
00000646: PUSH32 0x5265656e7472616e637947756172643a207265656e7472616e742063616c6c00
00000667: PUSH1 0x44
00000669: DUP3
0000066a: ADD
0000066b: MSTORE
0000066c: PUSH1 0x64
0000066e: ADD
0000066f: PUSH2 0x044e
00000672: JUMP
00000673: JUMPDEST
00000674: PUSH1 0x02
00000676: PUSH1 0x65
00000678: DUP2
00000679: SWAP1
0000067a: SSTORE
0000067b: CALLER
0000067c: PUSH1 0x00
0000067e: SWAP1
0000067f: DUP2
00000680: MSTORE
00000681: PUSH1 0x9e
00000683: PUSH1 0x20
00000685: SWAP1
00000686: DUP2
00000687: MSTORE
00000688: PUSH1 0x40
0000068a: SWAP2
0000068b: DUP3
0000068c: SWAP1
0000068d: KECCAK256
0000068e: DUP3
0000068f: MLOAD
00000690: PUSH1 0x60
00000692: DUP2
00000693: ADD
00000694: DUP5
00000695: MSTORE
00000696: DUP2
00000697: SLOAD
00000698: DUP2
00000699: MSTORE
0000069a: PUSH1 0x01
0000069c: DUP3
0000069d: ADD
0000069e: SLOAD
0000069f: SWAP3
000006a0: DUP2
000006a1: ADD
000006a2: DUP4
000006a3: SWAP1
000006a4: MSTORE
000006a5: SWAP4
000006a6: ADD
000006a7: SLOAD
000006a8: SWAP2
000006a9: DUP4
000006aa: ADD
000006ab: SWAP2
000006ac: SWAP1
000006ad: SWAP2
000006ae: MSTORE
000006af: PUSH2 0x06f3
000006b2: JUMPI
000006b3: PUSH1 0x40
000006b5: MLOAD
000006b6: PUSH3 0x461bcd
000006ba: PUSH1 0xe5
000006bc: SHL
000006bd: DUP2
000006be: MSTORE
000006bf: PUSH1 0x20
000006c1: PUSH1 0x04
000006c3: DUP3
000006c4: ADD
000006c5: MSTORE
000006c6: PUSH1 0x16
000006c8: PUSH1 0x24
000006ca: DUP3
000006cb: ADD
000006cc: MSTORE
000006cd: PUSH22 0x1059191c995cdcc81b9bdd081c9959da5cdd195c9959
000006e4: PUSH1 0x52
000006e6: SHL
000006e7: PUSH1 0x44
000006e9: DUP3
000006ea: ADD
000006eb: MSTORE
000006ec: PUSH1 0x64
000006ee: ADD
000006ef: PUSH2 0x044e
000006f2: JUMP
000006f3: JUMPDEST
000006f4: PUSH1 0x00
000006f6: DUP2
000006f7: PUSH1 0x20
000006f9: ADD
000006fa: MLOAD
000006fb: PUSH1 0x9c
000006fd: SLOAD
000006fe: PUSH2 0x0707
00000701: SWAP2
00000702: SWAP1
00000703: PUSH2 0x14c6
00000706: JUMP
00000707: JUMPDEST
00000708: GT
00000709: PUSH2 0x0749
0000070c: JUMPI
0000070d: PUSH1 0x40
0000070f: MLOAD
00000710: PUSH3 0x461bcd
00000714: PUSH1 0xe5
00000716: SHL
00000717: DUP2
00000718: MSTORE
00000719: PUSH1 0x20
0000071b: PUSH1 0x04
0000071d: DUP3
0000071e: ADD
0000071f: MSTORE
00000720: PUSH1 0x12
00000722: PUSH1 0x24
00000724: DUP3
00000725: ADD
00000726: MSTORE
00000727: PUSH18 0x4e6f6e65206c65667420746f20636c61696d
0000073a: PUSH1 0x70
0000073c: SHL
0000073d: PUSH1 0x44
0000073f: DUP3
00000740: ADD
00000741: MSTORE
00000742: PUSH1 0x64
00000744: ADD
00000745: PUSH2 0x044e
00000748: JUMP
00000749: JUMPDEST
0000074a: PUSH1 0x00
0000074c: PUSH2 0x0754
0000074f: CALLER
00000750: PUSH2 0x0479
00000753: JUMP
00000754: JUMPDEST
00000755: SWAP1
00000756: POP
00000757: PUSH1 0x00
00000759: DUP2
0000075a: GT
0000075b: PUSH2 0x0799
0000075e: JUMPI
0000075f: PUSH1 0x40
00000761: MLOAD
00000762: PUSH3 0x461bcd
00000766: PUSH1 0xe5
00000768: SHL
00000769: DUP2
0000076a: MSTORE
0000076b: PUSH1 0x20
0000076d: PUSH1 0x04
0000076f: DUP3
00000770: ADD
00000771: MSTORE
00000772: PUSH1 0x10
00000774: PUSH1 0x24
00000776: DUP3
00000777: ADD
00000778: MSTORE
00000779: PUSH16 0x4e6f7468696e6720746f20636c61696d
0000078a: PUSH1 0x80
0000078c: SHL
0000078d: PUSH1 0x44
0000078f: DUP3
00000790: ADD
00000791: MSTORE
00000792: PUSH1 0x64
00000794: ADD
00000795: PUSH2 0x044e
00000798: JUMP
00000799: JUMPDEST
0000079a: PUSH1 0x20
0000079c: DUP3
0000079d: ADD
0000079e: DUP1
0000079f: MLOAD
000007a0: SWAP1
000007a1: PUSH2 0x07a9
000007a4: DUP3
000007a5: PUSH2 0x14dd
000007a8: JUMP
000007a9: JUMPDEST
000007aa: SWAP1
000007ab: MSTORE
000007ac: POP
000007ad: CALLER
000007ae: PUSH1 0x00
000007b0: DUP2
000007b1: DUP2
000007b2: MSTORE
000007b3: PUSH1 0x9e
000007b5: PUSH1 0x20
000007b7: SWAP1
000007b8: DUP2
000007b9: MSTORE
000007ba: PUSH1 0x40
000007bc: SWAP2
000007bd: DUP3
000007be: SWAP1
000007bf: KECCAK256
000007c0: DUP6
000007c1: MLOAD
000007c2: DUP2
000007c3: SSTORE
000007c4: SWAP1
000007c5: DUP6
000007c6: ADD
000007c7: MLOAD
000007c8: PUSH1 0x01
000007ca: DUP3
000007cb: ADD
000007cc: SSTORE
000007cd: DUP5
000007ce: DUP3
000007cf: ADD
000007d0: MLOAD
000007d1: PUSH1 0x02
000007d3: SWAP1
000007d4: SWAP2
000007d5: ADD
000007d6: SSTORE
000007d7: PUSH1 0x97
000007d9: SLOAD
000007da: SWAP1
000007db: MLOAD
000007dc: PUSH4 0xa9059cbb
000007e1: PUSH1 0xe0
000007e3: SHL
000007e4: DUP2
000007e5: MSTORE
000007e6: PUSH1 0x04
000007e8: DUP2
000007e9: ADD
000007ea: SWAP3
000007eb: SWAP1
000007ec: SWAP3
000007ed: MSTORE
000007ee: PUSH1 0x24
000007f0: DUP3
000007f1: ADD
000007f2: DUP4
000007f3: SWAP1
000007f4: MSTORE
000007f5: PUSH1 0x01
000007f7: PUSH1 0x01
000007f9: PUSH1 0xa0
000007fb: SHL
000007fc: SUB
000007fd: AND
000007fe: SWAP1
000007ff: PUSH4 0xa9059cbb
00000804: SWAP1
00000805: PUSH1 0x44
00000807: ADD
00000808: PUSH1 0x20
0000080a: PUSH1 0x40
0000080c: MLOAD
0000080d: DUP1
0000080e: DUP4
0000080f: SUB
00000810: DUP2
00000811: PUSH1 0x00
00000813: DUP8
00000814: DUP1
00000815: EXTCODESIZE
00000816: ISZERO
00000817: DUP1
00000818: ISZERO
00000819: PUSH2 0x0821
0000081c: JUMPI
0000081d: PUSH1 0x00
0000081f: DUP1
00000820: REVERT
00000821: JUMPDEST
00000822: POP
00000823: GAS
00000824: CALL
00000825: ISZERO
00000826: DUP1
00000827: ISZERO
00000828: PUSH2 0x0835
0000082b: JUMPI
0000082c: RETURNDATASIZE
0000082d: PUSH1 0x00
0000082f: DUP1
00000830: RETURNDATACOPY
00000831: RETURNDATASIZE
00000832: PUSH1 0x00
00000834: REVERT
00000835: JUMPDEST
00000836: POP
00000837: POP
00000838: POP
00000839: POP
0000083a: PUSH1 0x40
0000083c: MLOAD
0000083d: RETURNDATASIZE
0000083e: PUSH1 0x1f
00000840: NOT
00000841: PUSH1 0x1f
00000843: DUP3
00000844: ADD
00000845: AND
00000846: DUP3
00000847: ADD
00000848: DUP1
00000849: PUSH1 0x40
0000084b: MSTORE
0000084c: POP
0000084d: DUP2
0000084e: ADD
0000084f: SWAP1
00000850: PUSH2 0x0859
00000853: SWAP2
00000854: SWAP1
00000855: PUSH2 0x12bd
00000858: JUMP
00000859: JUMPDEST
0000085a: POP
0000085b: POP
0000085c: PUSH1 0x01
0000085e: PUSH1 0x65
00000860: SSTORE
00000861: POP
00000862: JUMP
00000863: JUMPDEST
00000864: PUSH1 0x01
00000866: PUSH1 0x01
00000868: PUSH1 0xa0
0000086a: SHL
0000086b: SUB
0000086c: DUP2
0000086d: AND
0000086e: PUSH1 0x00
00000870: SWAP1
00000871: DUP2
00000872: MSTORE
00000873: PUSH1 0x9e
00000875: PUSH1 0x20
00000877: SWAP1
00000878: DUP2
00000879: MSTORE
0000087a: PUSH1 0x40
0000087c: DUP1
0000087d: DUP4
0000087e: KECCAK256
0000087f: DUP2
00000880: MLOAD
00000881: PUSH1 0x60
00000883: DUP2
00000884: ADD
00000885: DUP4
00000886: MSTORE
00000887: DUP2
00000888: SLOAD
00000889: DUP2
0000088a: MSTORE
0000088b: PUSH1 0x01
0000088d: DUP3
0000088e: ADD
0000088f: SLOAD
00000890: SWAP4
00000891: DUP2
00000892: ADD
00000893: SWAP4
00000894: SWAP1
00000895: SWAP4
00000896: MSTORE
00000897: PUSH1 0x02
00000899: ADD
0000089a: SLOAD
0000089b: SWAP1
0000089c: DUP3
0000089d: ADD
0000089e: DUP2
0000089f: SWAP1
000008a0: MSTORE
000008a1: DUP3
000008a2: SWAP1
000008a3: PUSH2 0x08ab
000008a6: SWAP1
000008a7: PUSH2 0x1060
000008aa: JUMP
000008ab: JUMPDEST
000008ac: SWAP1
000008ad: POP
000008ae: PUSH1 0x9c
000008b0: SLOAD
000008b1: DUP2
000008b2: GT
000008b3: DUP1
000008b4: PUSH2 0x08bc
000008b7: JUMPI
000008b8: POP
000008b9: DUP2
000008ba: MLOAD
000008bb: ISZERO
000008bc: JUMPDEST
000008bd: ISZERO
000008be: PUSH2 0x08ca
000008c1: JUMPI
000008c2: PUSH1 0x00
000008c4: SWAP3
000008c5: POP
000008c6: PUSH2 0x08e9
000008c9: JUMP
000008ca: JUMPDEST
000008cb: PUSH1 0x9b
000008cd: SLOAD
000008ce: PUSH2 0x08d7
000008d1: SWAP1
000008d2: DUP3
000008d3: PUSH2 0x14a7
000008d6: JUMP
000008d7: JUMPDEST
000008d8: DUP3
000008d9: PUSH1 0x40
000008db: ADD
000008dc: MLOAD
000008dd: PUSH2 0x08e6
000008e0: SWAP2
000008e1: SWAP1
000008e2: PUSH2 0x146d
000008e5: JUMP
000008e6: JUMPDEST
000008e7: SWAP3
000008e8: POP
000008e9: JUMPDEST
000008ea: POP
000008eb: POP
000008ec: SWAP2
000008ed: SWAP1
000008ee: POP
000008ef: JUMP
000008f0: JUMPDEST
000008f1: PUSH1 0x33
000008f3: SLOAD
000008f4: PUSH1 0x01
000008f6: PUSH1 0x01
000008f8: PUSH1 0xa0
000008fa: SHL
000008fb: SUB
000008fc: AND
000008fd: CALLER
000008fe: EQ
000008ff: PUSH2 0x091a
00000902: JUMPI
00000903: PUSH1 0x40
00000905: MLOAD
00000906: PUSH3 0x461bcd
0000090a: PUSH1 0xe5
0000090c: SHL
0000090d: DUP2
0000090e: MSTORE
0000090f: PUSH1 0x04
00000911: ADD
00000912: PUSH2 0x044e
00000915: SWAP1
00000916: PUSH2 0x13ed
00000919: JUMP
0000091a: JUMPDEST
0000091b: PUSH2 0x0924
0000091e: PUSH1 0x00
00000920: PUSH2 0x10a5
00000923: JUMP
00000924: JUMPDEST
00000925: JUMP
00000926: JUMPDEST
00000927: PUSH1 0x00
00000929: PUSH2 0x0932
0000092c: PUSH1 0x01
0000092e: PUSH2 0x10f7
00000931: JUMP
00000932: JUMPDEST
00000933: SWAP1
00000934: POP
00000935: DUP1
00000936: ISZERO
00000937: PUSH2 0x094a
0000093a: JUMPI
0000093b: PUSH1 0x00
0000093d: DUP1
0000093e: SLOAD
0000093f: PUSH2 0xff00
00000942: NOT
00000943: AND
00000944: PUSH2 0x0100
00000947: OR
00000948: SWAP1
00000949: SSTORE
0000094a: JUMPDEST
0000094b: PUSH2 0x0952
0000094e: PUSH2 0x1184
00000951: JUMP
00000952: JUMPDEST
00000953: PUSH2 0x095a
00000956: PUSH2 0x11b3
00000959: JUMP
0000095a: JUMPDEST
0000095b: PUSH1 0x97
0000095d: DUP1
0000095e: SLOAD
0000095f: PUSH1 0x01
00000961: PUSH1 0x01
00000963: PUSH1 0xa0
00000965: SHL
00000966: SUB
00000967: NOT
00000968: AND
00000969: PUSH1 0x01
0000096b: PUSH1 0x01
0000096d: PUSH1 0xa0
0000096f: SHL
00000970: SUB
00000971: DUP7
00000972: AND
00000973: OR
00000974: SWAP1
00000975: SSTORE
00000976: PUSH1 0x98
00000978: DUP4
00000979: SWAP1
0000097a: SSTORE
0000097b: PUSH1 0x99
0000097d: DUP3
0000097e: SWAP1
0000097f: SSTORE
00000980: PUSH1 0x0a
00000982: PUSH1 0x9d
00000984: SSTORE
00000985: PUSH1 0xb4
00000987: PUSH1 0x9c
00000989: SSTORE
0000098a: PUSH3 0x015180
0000098e: PUSH1 0x9b
00000990: SSTORE
00000991: DUP1
00000992: ISZERO
00000993: PUSH2 0x09d6
00000996: JUMPI
00000997: PUSH1 0x00
00000999: DUP1
0000099a: SLOAD
0000099b: PUSH2 0xff00
0000099e: NOT
0000099f: AND
000009a0: SWAP1
000009a1: SSTORE
000009a2: PUSH1 0x40
000009a4: MLOAD
000009a5: PUSH1 0x01
000009a7: DUP2
000009a8: MSTORE
000009a9: PUSH32 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498
000009ca: SWAP1
000009cb: PUSH1 0x20
000009cd: ADD
000009ce: PUSH1 0x40
000009d0: MLOAD
000009d1: DUP1
000009d2: SWAP2
000009d3: SUB
000009d4: SWAP1
000009d5: LOG1
000009d6: JUMPDEST
000009d7: POP
000009d8: POP
000009d9: POP
000009da: POP
000009db: JUMP
000009dc: JUMPDEST
000009dd: PUSH1 0x33
000009df: SLOAD
000009e0: PUSH1 0x01
000009e2: PUSH1 0x01
000009e4: PUSH1 0xa0
000009e6: SHL
000009e7: SUB
000009e8: AND
000009e9: CALLER
000009ea: EQ
000009eb: PUSH2 0x0a06
000009ee: JUMPI
000009ef: PUSH1 0x40
000009f1: MLOAD
000009f2: PUSH3 0x461bcd
000009f6: PUSH1 0xe5
000009f8: SHL
000009f9: DUP2
000009fa: MSTORE
000009fb: PUSH1 0x04
000009fd: ADD
000009fe: PUSH2 0x044e
00000a01: SWAP1
00000a02: PUSH2 0x13ed
00000a05: JUMP
00000a06: JUMPDEST
00000a07: PUSH1 0x98
00000a09: SSTORE
00000a0a: JUMP
00000a0b: JUMPDEST
00000a0c: PUSH1 0x33
00000a0e: SLOAD
00000a0f: PUSH1 0x01
00000a11: PUSH1 0x01
00000a13: PUSH1 0xa0
00000a15: SHL
00000a16: SUB
00000a17: AND
00000a18: CALLER
00000a19: EQ
00000a1a: PUSH2 0x0a35
00000a1d: JUMPI
00000a1e: PUSH1 0x40
00000a20: MLOAD
00000a21: PUSH3 0x461bcd
00000a25: PUSH1 0xe5
00000a27: SHL
00000a28: DUP2
00000a29: MSTORE
00000a2a: PUSH1 0x04
00000a2c: ADD
00000a2d: PUSH2 0x044e
00000a30: SWAP1
00000a31: PUSH2 0x13ed
00000a34: JUMP
00000a35: JUMPDEST
00000a36: PUSH1 0x99
00000a38: SWAP2
00000a39: SWAP1
00000a3a: SWAP2
00000a3b: SSTORE
00000a3c: PUSH1 0x9a
00000a3e: SSTORE
00000a3f: JUMP
00000a40: JUMPDEST
00000a41: PUSH1 0x02
00000a43: PUSH1 0x65
00000a45: SLOAD
00000a46: EQ
00000a47: ISZERO
00000a48: PUSH2 0x0a93
00000a4b: JUMPI
00000a4c: PUSH1 0x40
00000a4e: MLOAD
00000a4f: PUSH3 0x461bcd
00000a53: PUSH1 0xe5
00000a55: SHL
00000a56: DUP2
00000a57: MSTORE
00000a58: PUSH1 0x20
00000a5a: PUSH1 0x04
00000a5c: DUP3
00000a5d: ADD
00000a5e: MSTORE
00000a5f: PUSH1 0x1f
00000a61: PUSH1 0x24
00000a63: DUP3
00000a64: ADD
00000a65: MSTORE
00000a66: PUSH32 0x5265656e7472616e637947756172643a207265656e7472616e742063616c6c00
00000a87: PUSH1 0x44
00000a89: DUP3
00000a8a: ADD
00000a8b: MSTORE
00000a8c: PUSH1 0x64
00000a8e: ADD
00000a8f: PUSH2 0x044e
00000a92: JUMP
00000a93: JUMPDEST
00000a94: PUSH1 0x02
00000a96: PUSH1 0x65
00000a98: SSTORE
00000a99: PUSH1 0x98
00000a9b: SLOAD
00000a9c: PUSH2 0x0aa5
00000a9f: SWAP1
00000aa0: CALLVALUE
00000aa1: PUSH2 0x14a7
00000aa4: JUMP
00000aa5: JUMPDEST
00000aa6: DUP7
00000aa7: GT
00000aa8: ISZERO
00000aa9: PUSH2 0x0ae8
00000aac: JUMPI
00000aad: PUSH1 0x40
00000aaf: MLOAD
00000ab0: PUSH3 0x461bcd
00000ab4: PUSH1 0xe5
00000ab6: SHL
00000ab7: DUP2
00000ab8: MSTORE
00000ab9: PUSH1 0x20
00000abb: PUSH1 0x04
00000abd: DUP3
00000abe: ADD
00000abf: MSTORE
00000ac0: PUSH1 0x11
00000ac2: PUSH1 0x24
00000ac4: DUP3
00000ac5: ADD
00000ac6: MSTORE
00000ac7: PUSH17 0x56616c75652062656c6f77207072696365
00000ad9: PUSH1 0x78
00000adb: SHL
00000adc: PUSH1 0x44
00000ade: DUP3
00000adf: ADD
00000ae0: MSTORE
00000ae1: PUSH1 0x64
00000ae3: ADD
00000ae4: PUSH2 0x044e
00000ae7: JUMP
00000ae8: JUMPDEST
00000ae9: PUSH1 0x99
00000aeb: SLOAD
00000aec: TIMESTAMP
00000aed: GT
00000aee: PUSH2 0x0b32
00000af1: JUMPI
00000af2: PUSH1 0x40
00000af4: MLOAD
00000af5: PUSH3 0x461bcd
00000af9: PUSH1 0xe5
00000afb: SHL
00000afc: DUP2
00000afd: MSTORE
00000afe: PUSH1 0x20
00000b00: PUSH1 0x04
00000b02: DUP3
00000b03: ADD
00000b04: MSTORE
00000b05: PUSH1 0x16
00000b07: PUSH1 0x24
00000b09: DUP3
00000b0a: ADD
00000b0b: MSTORE
00000b0c: PUSH22 0x2932b3b4b9ba3930ba34b7b739903737ba1037b832b7
00000b23: PUSH1 0x51
00000b25: SHL
00000b26: PUSH1 0x44
00000b28: DUP3
00000b29: ADD
00000b2a: MSTORE
00000b2b: PUSH1 0x64
00000b2d: ADD
00000b2e: PUSH2 0x044e
00000b31: JUMP
00000b32: JUMPDEST
00000b33: PUSH1 0x9a
00000b35: SLOAD
00000b36: TIMESTAMP
00000b37: LT
00000b38: PUSH2 0x0b83
00000b3b: JUMPI
00000b3c: PUSH1 0x40
00000b3e: MLOAD
00000b3f: PUSH3 0x461bcd
00000b43: PUSH1 0xe5
00000b45: SHL
00000b46: DUP2
00000b47: MSTORE
00000b48: PUSH1 0x20
00000b4a: PUSH1 0x04
00000b4c: DUP3
00000b4d: ADD
00000b4e: MSTORE
00000b4f: PUSH1 0x1b
00000b51: PUSH1 0x24
00000b53: DUP3
00000b54: ADD
00000b55: MSTORE
00000b56: PUSH32 0x526567697374726174696f6e732077696e646f7720636c6f7365640000000000
00000b77: PUSH1 0x44
00000b79: DUP3
00000b7a: ADD
00000b7b: MSTORE
00000b7c: PUSH1 0x64
00000b7e: ADD
00000b7f: PUSH2 0x044e
00000b82: JUMP
00000b83: JUMPDEST
00000b84: DUP5
00000b85: DUP7
00000b86: GT
00000b87: ISZERO
00000b88: PUSH2 0x0bca
00000b8b: JUMPI
00000b8c: PUSH1 0x40
00000b8e: MLOAD
00000b8f: PUSH3 0x461bcd
00000b93: PUSH1 0xe5
00000b95: SHL
00000b96: DUP2
00000b97: MSTORE
00000b98: PUSH1 0x20
00000b9a: PUSH1 0x04
00000b9c: DUP3
00000b9d: ADD
00000b9e: MSTORE
00000b9f: PUSH1 0x14
00000ba1: PUSH1 0x24
00000ba3: DUP3
00000ba4: ADD
00000ba5: MSTORE
00000ba6: PUSH20 0x20b63637b1b0ba34b7b71022bc31b2b2b232b217
00000bbb: PUSH1 0x61
00000bbd: SHL
00000bbe: PUSH1 0x44
00000bc0: DUP3
00000bc1: ADD
00000bc2: MSTORE
00000bc3: PUSH1 0x64
00000bc5: ADD
00000bc6: PUSH2 0x044e
00000bc9: JUMP
00000bca: JUMPDEST
00000bcb: PUSH1 0x40
00000bcd: MLOAD
00000bce: PUSH12 0xffffffffffffffffffffffff
00000bdb: NOT
00000bdc: CALLER
00000bdd: PUSH1 0x60
00000bdf: SHL
00000be0: AND
00000be1: PUSH1 0x20
00000be3: DUP3
00000be4: ADD
00000be5: MSTORE
00000be6: PUSH1 0x34
00000be8: DUP2
00000be9: ADD
00000bea: DUP7
00000beb: SWAP1
00000bec: MSTORE
00000bed: PUSH1 0x00
00000bef: SWAP1
00000bf0: PUSH1 0x54
00000bf2: ADD
00000bf3: PUSH1 0x40
00000bf5: MLOAD
00000bf6: PUSH1 0x20
00000bf8: DUP2
00000bf9: DUP4
00000bfa: SUB
00000bfb: SUB
00000bfc: DUP2
00000bfd: MSTORE
00000bfe: SWAP1
00000bff: PUSH1 0x40
00000c01: MSTORE
00000c02: DUP1
00000c03: MLOAD
00000c04: SWAP1
00000c05: PUSH1 0x20
00000c07: ADD
00000c08: KECCAK256
00000c09: SWAP1
00000c0a: POP
00000c0b: DUP5
00000c0c: DUP2
00000c0d: EQ
00000c0e: PUSH2 0x0c48
00000c11: JUMPI
00000c12: PUSH1 0x40
00000c14: MLOAD
00000c15: PUSH3 0x461bcd
00000c19: PUSH1 0xe5
00000c1b: SHL
00000c1c: DUP2
00000c1d: MSTORE
00000c1e: PUSH1 0x20
00000c20: PUSH1 0x04
00000c22: DUP3
00000c23: ADD
00000c24: MSTORE
00000c25: PUSH1 0x0c
00000c27: PUSH1 0x24
00000c29: DUP3
00000c2a: ADD
00000c2b: MSTORE
00000c2c: PUSH12 0x092dcecc2d8d2c840d0c2e6d
00000c39: PUSH1 0xa3
00000c3b: SHL
00000c3c: PUSH1 0x44
00000c3e: DUP3
00000c3f: ADD
00000c40: MSTORE
00000c41: PUSH1 0x64
00000c43: ADD
00000c44: PUSH2 0x044e
00000c47: JUMP
00000c48: JUMPDEST
00000c49: PUSH1 0x40
00000c4b: MLOAD
00000c4c: PUSH32 0x19457468657265756d205369676e6564204d6573736167653a0a333200000000
00000c6d: PUSH1 0x20
00000c6f: DUP3
00000c70: ADD
00000c71: MSTORE
00000c72: PUSH1 0x3c
00000c74: DUP2
00000c75: ADD
00000c76: DUP7
00000c77: SWAP1
00000c78: MSTORE
00000c79: PUSH1 0x00
00000c7b: SWAP1
00000c7c: PUSH1 0x01
00000c7e: SWAP1
00000c7f: PUSH1 0x5c
00000c81: ADD
00000c82: PUSH1 0x40
00000c84: DUP1
00000c85: MLOAD
00000c86: PUSH1 0x1f
00000c88: NOT
00000c89: DUP2
00000c8a: DUP5
00000c8b: SUB
00000c8c: ADD
00000c8d: DUP2
00000c8e: MSTORE
00000c8f: DUP3
00000c90: DUP3
00000c91: MSTORE
00000c92: DUP1
00000c93: MLOAD
00000c94: PUSH1 0x20
00000c96: SWAP2
00000c97: DUP3
00000c98: ADD
00000c99: KECCAK256
00000c9a: PUSH1 0x00
00000c9c: DUP5
00000c9d: MSTORE
00000c9e: SWAP1
00000c9f: DUP4
00000ca0: ADD
00000ca1: DUP1
00000ca2: DUP4
00000ca3: MSTORE
00000ca4: MSTORE
00000ca5: PUSH1 0xff
00000ca7: DUP9
00000ca8: AND
00000ca9: SWAP1
00000caa: DUP3
00000cab: ADD
00000cac: MSTORE
00000cad: PUSH1 0x60
00000caf: DUP2
00000cb0: ADD
00000cb1: DUP7
00000cb2: SWAP1
00000cb3: MSTORE
00000cb4: PUSH1 0x80
00000cb6: DUP2
00000cb7: ADD
00000cb8: DUP6
00000cb9: SWAP1
00000cba: MSTORE
00000cbb: PUSH1 0xa0
00000cbd: ADD
00000cbe: PUSH1 0x20
00000cc0: PUSH1 0x40
00000cc2: MLOAD
00000cc3: PUSH1 0x20
00000cc5: DUP2
00000cc6: SUB
00000cc7: SWAP1
00000cc8: DUP1
00000cc9: DUP5
00000cca: SUB
00000ccb: SWAP1
00000ccc: DUP6
00000ccd: GAS
00000cce: STATICCALL
00000ccf: ISZERO
00000cd0: DUP1
00000cd1: ISZERO
00000cd2: PUSH2 0x0cdf
00000cd5: JUMPI
00000cd6: RETURNDATASIZE
00000cd7: PUSH1 0x00
00000cd9: DUP1
00000cda: RETURNDATACOPY
00000cdb: RETURNDATASIZE
00000cdc: PUSH1 0x00
00000cde: REVERT
00000cdf: JUMPDEST
00000ce0: POP
00000ce1: POP
00000ce2: POP
00000ce3: PUSH1 0x20
00000ce5: PUSH1 0x40
00000ce7: MLOAD
00000ce8: SUB
00000ce9: MLOAD
00000cea: SWAP1
00000ceb: POP
00000cec: DUP1
00000ced: PUSH1 0x01
00000cef: PUSH1 0x01
00000cf1: PUSH1 0xa0
00000cf3: SHL
00000cf4: SUB
00000cf5: AND
00000cf6: PUSH2 0x0d07
00000cf9: PUSH1 0x33
00000cfb: SLOAD
00000cfc: PUSH1 0x01
00000cfe: PUSH1 0x01
00000d00: PUSH1 0xa0
00000d02: SHL
00000d03: SUB
00000d04: AND
00000d05: SWAP1
00000d06: JUMP
00000d07: JUMPDEST
00000d08: PUSH1 0x01
00000d0a: PUSH1 0x01
00000d0c: PUSH1 0xa0
00000d0e: SHL
00000d0f: SUB
00000d10: AND
00000d11: EQ
00000d12: PUSH2 0x0d4d
00000d15: JUMPI
00000d16: PUSH1 0x40
00000d18: MLOAD
00000d19: PUSH3 0x461bcd
00000d1d: PUSH1 0xe5
00000d1f: SHL
00000d20: DUP2
00000d21: MSTORE
00000d22: PUSH1 0x20
00000d24: PUSH1 0x04
00000d26: DUP3
00000d27: ADD
00000d28: MSTORE
00000d29: PUSH1 0x0d
00000d2b: PUSH1 0x24
00000d2d: DUP3
00000d2e: ADD
00000d2f: MSTORE
00000d30: PUSH13 0x1058d8d95cdcc819195b9a5959
00000d3e: PUSH1 0x9a
00000d40: SHL
00000d41: PUSH1 0x44
00000d43: DUP3
00000d44: ADD
00000d45: MSTORE
00000d46: PUSH1 0x64
00000d48: ADD
00000d49: PUSH2 0x044e
00000d4c: JUMP
00000d4d: JUMPDEST
00000d4e: CALLER
00000d4f: PUSH1 0x00
00000d51: SWAP1
00000d52: DUP2
00000d53: MSTORE
00000d54: PUSH1 0x9e
00000d56: PUSH1 0x20
00000d58: MSTORE
00000d59: PUSH1 0x40
00000d5b: SWAP1
00000d5c: KECCAK256
00000d5d: PUSH1 0x01
00000d5f: ADD
00000d60: SLOAD
00000d61: ISZERO
00000d62: PUSH2 0x0da3
00000d65: JUMPI
00000d66: PUSH1 0x40
00000d68: MLOAD
00000d69: PUSH3 0x461bcd
00000d6d: PUSH1 0xe5
00000d6f: SHL
00000d70: DUP2
00000d71: MSTORE
00000d72: PUSH1 0x20
00000d74: PUSH1 0x04
00000d76: DUP3
00000d77: ADD
00000d78: MSTORE
00000d79: PUSH1 0x13
00000d7b: PUSH1 0x24
00000d7d: DUP3
00000d7e: ADD
00000d7f: MSTORE
00000d80: PUSH19 0x416c7265616479205265676973746572656421
00000d94: PUSH1 0x68
00000d96: SHL
00000d97: PUSH1 0x44
00000d99: DUP3
00000d9a: ADD
00000d9b: MSTORE
00000d9c: PUSH1 0x64
00000d9e: ADD
00000d9f: PUSH2 0x044e
00000da2: JUMP
00000da3: JUMPDEST
00000da4: PUSH1 0x40
00000da6: DUP1
00000da7: MLOAD
00000da8: PUSH1 0x60
00000daa: DUP2
00000dab: ADD
00000dac: DUP3
00000dad: MSTORE
00000dae: DUP10
00000daf: DUP2
00000db0: MSTORE
00000db1: PUSH1 0x01
00000db3: PUSH1 0x20
00000db5: DUP1
00000db6: DUP4
00000db7: ADD
00000db8: DUP3
00000db9: DUP2
00000dba: MSTORE
00000dbb: TIMESTAMP
00000dbc: DUP5
00000dbd: DUP7
00000dbe: ADD
00000dbf: SWAP1
00000dc0: DUP2
00000dc1: MSTORE
00000dc2: CALLER
00000dc3: PUSH1 0x00
00000dc5: DUP2
00000dc6: DUP2
00000dc7: MSTORE
00000dc8: PUSH1 0x9e
00000dca: SWAP1
00000dcb: SWAP5
00000dcc: MSTORE
00000dcd: SWAP6
00000dce: SWAP1
00000dcf: SWAP3
00000dd0: KECCAK256
00000dd1: SWAP4
00000dd2: MLOAD
00000dd3: DUP5
00000dd4: SSTORE
00000dd5: MLOAD
00000dd6: SWAP2
00000dd7: DUP4
00000dd8: ADD
00000dd9: SWAP2
00000dda: SWAP1
00000ddb: SWAP2
00000ddc: SSTORE
00000ddd: MLOAD
00000dde: PUSH1 0x02
00000de0: SWAP1
00000de1: SWAP2
00000de2: ADD
00000de3: SSTORE
00000de4: PUSH1 0x97
00000de6: SLOAD
00000de7: PUSH1 0x9d
00000de9: SLOAD
00000dea: PUSH1 0x01
00000dec: PUSH1 0x01
00000dee: PUSH1 0xa0
00000df0: SHL
00000df1: SUB
00000df2: SWAP1
00000df3: SWAP2
00000df4: AND
00000df5: SWAP2
00000df6: PUSH4 0xa9059cbb
00000dfb: SWAP2
00000dfc: PUSH1 0x64
00000dfe: SWAP1
00000dff: PUSH2 0x0e08
00000e02: SWAP1
00000e03: DUP14
00000e04: PUSH2 0x14a7
00000e07: JUMP
00000e08: JUMPDEST
00000e09: PUSH2 0x0e12
00000e0c: SWAP2
00000e0d: SWAP1
00000e0e: PUSH2 0x1485
00000e11: JUMP
00000e12: JUMPDEST
00000e13: PUSH1 0x40
00000e15: MLOAD
00000e16: PUSH1 0x01
00000e18: PUSH1 0x01
00000e1a: PUSH1 0xe0
00000e1c: SHL
00000e1d: SUB
00000e1e: NOT
00000e1f: PUSH1 0xe0
00000e21: DUP6
00000e22: SWAP1
00000e23: SHL
00000e24: AND
00000e25: DUP2
00000e26: MSTORE
00000e27: PUSH1 0x01
00000e29: PUSH1 0x01
00000e2b: PUSH1 0xa0
00000e2d: SHL
00000e2e: SUB
00000e2f: SWAP1
00000e30: SWAP3
00000e31: AND
00000e32: PUSH1 0x04
00000e34: DUP4
00000e35: ADD
00000e36: MSTORE
00000e37: PUSH1 0x24
00000e39: DUP3
00000e3a: ADD
00000e3b: MSTORE
00000e3c: PUSH1 0x44
00000e3e: ADD
00000e3f: PUSH1 0x20
00000e41: PUSH1 0x40
00000e43: MLOAD
00000e44: DUP1
00000e45: DUP4
00000e46: SUB
00000e47: DUP2
00000e48: PUSH1 0x00
00000e4a: DUP8
00000e4b: DUP1
00000e4c: EXTCODESIZE
00000e4d: ISZERO
00000e4e: DUP1
00000e4f: ISZERO
00000e50: PUSH2 0x0e58
00000e53: JUMPI
00000e54: PUSH1 0x00
00000e56: DUP1
00000e57: REVERT
00000e58: JUMPDEST
00000e59: POP
00000e5a: GAS
00000e5b: CALL
00000e5c: ISZERO
00000e5d: DUP1
00000e5e: ISZERO
00000e5f: PUSH2 0x0e6c
00000e62: JUMPI
00000e63: RETURNDATASIZE
00000e64: PUSH1 0x00
00000e66: DUP1
00000e67: RETURNDATACOPY
00000e68: RETURNDATASIZE
00000e69: PUSH1 0x00
00000e6b: REVERT
00000e6c: JUMPDEST
00000e6d: POP
00000e6e: POP
00000e6f: POP
00000e70: POP
00000e71: PUSH1 0x40
00000e73: MLOAD
00000e74: RETURNDATASIZE
00000e75: PUSH1 0x1f
00000e77: NOT
00000e78: PUSH1 0x1f
00000e7a: DUP3
00000e7b: ADD
00000e7c: AND
00000e7d: DUP3
00000e7e: ADD
00000e7f: DUP1
00000e80: PUSH1 0x40
00000e82: MSTORE
00000e83: POP
00000e84: DUP2
00000e85: ADD
00000e86: SWAP1
00000e87: PUSH2 0x0e90
00000e8a: SWAP2
00000e8b: SWAP1
00000e8c: PUSH2 0x12bd
00000e8f: JUMP
00000e90: JUMPDEST
00000e91: POP
00000e92: POP
00000e93: PUSH1 0x01
00000e95: PUSH1 0x65
00000e97: SSTORE
00000e98: POP
00000e99: POP
00000e9a: POP
00000e9b: POP
00000e9c: POP
00000e9d: POP
00000e9e: POP
00000e9f: JUMP
00000ea0: JUMPDEST
00000ea1: PUSH1 0x33
00000ea3: SLOAD
00000ea4: PUSH1 0x01
00000ea6: PUSH1 0x01
00000ea8: PUSH1 0xa0
00000eaa: SHL
00000eab: SUB
00000eac: AND
00000ead: CALLER
00000eae: EQ
00000eaf: PUSH2 0x0eca
00000eb2: JUMPI
00000eb3: PUSH1 0x40
00000eb5: MLOAD
00000eb6: PUSH3 0x461bcd
00000eba: PUSH1 0xe5
00000ebc: SHL
00000ebd: DUP2
00000ebe: MSTORE
00000ebf: PUSH1 0x04
00000ec1: ADD
00000ec2: PUSH2 0x044e
00000ec5: SWAP1
00000ec6: PUSH2 0x13ed
00000ec9: JUMP
00000eca: JUMPDEST
00000ecb: PUSH1 0x97
00000ecd: SLOAD
00000ece: PUSH1 0x40
00000ed0: MLOAD
00000ed1: PUSH4 0xa9059cbb
00000ed6: PUSH1 0xe0
00000ed8: SHL
00000ed9: DUP2
00000eda: MSTORE
00000edb: CALLER
00000edc: PUSH1 0x04
00000ede: DUP3
00000edf: ADD
00000ee0: MSTORE
00000ee1: PUSH1 0x24
00000ee3: DUP2
00000ee4: ADD
00000ee5: DUP4
00000ee6: SWAP1
00000ee7: MSTORE
00000ee8: PUSH1 0x01
00000eea: PUSH1 0x01
00000eec: PUSH1 0xa0
00000eee: SHL
00000eef: SUB
00000ef0: SWAP1
00000ef1: SWAP2
00000ef2: AND
00000ef3: SWAP1
00000ef4: PUSH4 0xa9059cbb
00000ef9: SWAP1
00000efa: PUSH1 0x44
00000efc: ADD
00000efd: PUSH1 0x20
00000eff: PUSH1 0x40
00000f01: MLOAD
00000f02: DUP1
00000f03: DUP4
00000f04: SUB
00000f05: DUP2
00000f06: PUSH1 0x00
00000f08: DUP8
00000f09: DUP1
00000f0a: EXTCODESIZE
00000f0b: ISZERO
00000f0c: DUP1
00000f0d: ISZERO
00000f0e: PUSH2 0x0f16
00000f11: JUMPI
00000f12: PUSH1 0x00
00000f14: DUP1
00000f15: REVERT
00000f16: JUMPDEST
00000f17: POP
00000f18: GAS
00000f19: CALL
00000f1a: ISZERO
00000f1b: DUP1
00000f1c: ISZERO
00000f1d: PUSH2 0x0f2a
00000f20: JUMPI
00000f21: RETURNDATASIZE
00000f22: PUSH1 0x00
00000f24: DUP1
00000f25: RETURNDATACOPY
00000f26: RETURNDATASIZE
00000f27: PUSH1 0x00
00000f29: REVERT
00000f2a: JUMPDEST
00000f2b: POP
00000f2c: POP
00000f2d: POP
00000f2e: POP
00000f2f: PUSH1 0x40
00000f31: MLOAD
00000f32: RETURNDATASIZE
00000f33: PUSH1 0x1f
00000f35: NOT
00000f36: PUSH1 0x1f
00000f38: DUP3
00000f39: ADD
00000f3a: AND
00000f3b: DUP3
00000f3c: ADD
00000f3d: DUP1
00000f3e: PUSH1 0x40
00000f40: MSTORE
00000f41: POP
00000f42: DUP2
00000f43: ADD
00000f44: SWAP1
00000f45: PUSH2 0x061c
00000f48: SWAP2
00000f49: SWAP1
00000f4a: PUSH2 0x12bd
00000f4d: JUMP
00000f4e: JUMPDEST
00000f4f: PUSH1 0x33
00000f51: SLOAD
00000f52: PUSH1 0x01
00000f54: PUSH1 0x01
00000f56: PUSH1 0xa0
00000f58: SHL
00000f59: SUB
00000f5a: AND
00000f5b: CALLER
00000f5c: EQ
00000f5d: PUSH2 0x0f78
00000f60: JUMPI
00000f61: PUSH1 0x40
00000f63: MLOAD
00000f64: PUSH3 0x461bcd
00000f68: PUSH1 0xe5
00000f6a: SHL
00000f6b: DUP2
00000f6c: MSTORE
00000f6d: PUSH1 0x04
00000f6f: ADD
00000f70: PUSH2 0x044e
00000f73: SWAP1
00000f74: PUSH2 0x13ed
00000f77: JUMP
00000f78: JUMPDEST
00000f79: PUSH1 0x01
00000f7b: PUSH1 0x01
00000f7d: PUSH1 0xa0
00000f7f: SHL
00000f80: SUB
00000f81: DUP2
00000f82: AND
00000f83: PUSH2 0x0fdd
00000f86: JUMPI
00000f87: PUSH1 0x40
00000f89: MLOAD
00000f8a: PUSH3 0x461bcd
00000f8e: PUSH1 0xe5
00000f90: SHL
00000f91: DUP2
00000f92: MSTORE
00000f93: PUSH1 0x20
00000f95: PUSH1 0x04
00000f97: DUP3
00000f98: ADD
00000f99: MSTORE
00000f9a: PUSH1 0x26
00000f9c: PUSH1 0x24
00000f9e: DUP3
00000f9f: ADD
00000fa0: MSTORE
00000fa1: PUSH32 0x4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061
00000fc2: PUSH1 0x44
00000fc4: DUP3
00000fc5: ADD
00000fc6: MSTORE
00000fc7: PUSH6 0x646472657373
00000fce: PUSH1 0xd0
00000fd0: SHL
00000fd1: PUSH1 0x64
00000fd3: DUP3
00000fd4: ADD
00000fd5: MSTORE
00000fd6: PUSH1 0x84
00000fd8: ADD
00000fd9: PUSH2 0x044e
00000fdc: JUMP
00000fdd: JUMPDEST
00000fde: PUSH2 0x0fe6
00000fe1: DUP2
00000fe2: PUSH2 0x10a5
00000fe5: JUMP
00000fe6: JUMPDEST
00000fe7: POP
00000fe8: JUMP
00000fe9: JUMPDEST
00000fea: PUSH1 0x33
00000fec: SLOAD
00000fed: PUSH1 0x01
00000fef: PUSH1 0x01
00000ff1: PUSH1 0xa0
00000ff3: SHL
00000ff4: SUB
00000ff5: AND
00000ff6: CALLER
00000ff7: EQ
00000ff8: PUSH2 0x1013
00000ffb: JUMPI
00000ffc: PUSH1 0x40
00000ffe: MLOAD
00000fff: PUSH3 0x461bcd
00001003: PUSH1 0xe5
00001005: SHL
00001006: DUP2
00001007: MSTORE
00001008: PUSH1 0x04
0000100a: ADD
0000100b: PUSH2 0x044e
0000100e: SWAP1
0000100f: PUSH2 0x13ed
00001012: JUMP
00001013: JUMPDEST
00001014: PUSH1 0x40
00001016: DUP1
00001017: MLOAD
00001018: PUSH1 0x60
0000101a: DUP2
0000101b: ADD
0000101c: DUP3
0000101d: MSTORE
0000101e: PUSH1 0x00
00001020: DUP1
00001021: DUP3
00001022: MSTORE
00001023: PUSH1 0x01
00001025: PUSH1 0x20
00001027: DUP1
00001028: DUP5
00001029: ADD
0000102a: DUP3
0000102b: DUP2
0000102c: MSTORE
0000102d: TIMESTAMP
0000102e: DUP6
0000102f: DUP8
00001030: ADD
00001031: SWAP1
00001032: DUP2
00001033: MSTORE
00001034: PUSH1 0x01
00001036: PUSH1 0x01
00001038: PUSH1 0xa0
0000103a: SHL
0000103b: SUB
0000103c: SWAP1
0000103d: SWAP8
0000103e: AND
0000103f: DUP5
00001040: MSTORE
00001041: PUSH1 0x9e
00001043: SWAP1
00001044: SWAP2
00001045: MSTORE
00001046: SWAP4
00001047: SWAP1
00001048: SWAP2
00001049: KECCAK256
0000104a: SWAP2
0000104b: MLOAD
0000104c: DUP3
0000104d: SSTORE
0000104e: SWAP2
0000104f: MLOAD
00001050: SWAP2
00001051: DUP2
00001052: ADD
00001053: SWAP2
00001054: SWAP1
00001055: SWAP2
00001056: SSTORE
00001057: SWAP1
00001058: MLOAD
00001059: PUSH1 0x02
0000105b: SWAP1
0000105c: SWAP2
0000105d: ADD
0000105e: SSTORE
0000105f: JUMP
00001060: JUMPDEST
00001061: PUSH1 0x9b
00001063: SLOAD
00001064: PUSH1 0x00
00001066: SWAP1
00001067: PUSH2 0x1070
0000106a: DUP4
0000106b: TIMESTAMP
0000106c: PUSH2 0x14c6
0000106f: JUMP
00001070: JUMPDEST
00001071: PUSH2 0x107a
00001074: SWAP2
00001075: SWAP1
00001076: PUSH2 0x1485
00001079: JUMP
0000107a: JUMPDEST
0000107b: SWAP1
0000107c: POP
0000107d: PUSH2 0x1094
00001080: DUP2
00001081: PUSH1 0x01
00001083: PUSH1 0x9c
00001085: SLOAD
00001086: PUSH2 0x108f
00001089: SWAP2
0000108a: SWAP1
0000108b: PUSH2 0x14c6
0000108e: JUMP
0000108f: JUMPDEST
00001090: PUSH2 0x11e2
00001093: JUMP
00001094: JUMPDEST
00001095: PUSH2 0x109f
00001098: SWAP1
00001099: PUSH1 0x01
0000109b: PUSH2 0x146d
0000109e: JUMP
0000109f: JUMPDEST
000010a0: SWAP3
000010a1: SWAP2
000010a2: POP
000010a3: POP
000010a4: JUMP
000010a5: JUMPDEST
000010a6: PUSH1 0x33
000010a8: DUP1
000010a9: SLOAD
000010aa: PUSH1 0x01
000010ac: PUSH1 0x01
000010ae: PUSH1 0xa0
000010b0: SHL
000010b1: SUB
000010b2: DUP4
000010b3: DUP2
000010b4: AND
000010b5: PUSH1 0x01
000010b7: PUSH1 0x01
000010b9: PUSH1 0xa0
000010bb: SHL
000010bc: SUB
000010bd: NOT
000010be: DUP4
000010bf: AND
000010c0: DUP2
000010c1: OR
000010c2: SWAP1
000010c3: SWAP4
000010c4: SSTORE
000010c5: PUSH1 0x40
000010c7: MLOAD
000010c8: SWAP2
000010c9: AND
000010ca: SWAP2
000010cb: SWAP1
000010cc: DUP3
000010cd: SWAP1
000010ce: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
000010ef: SWAP1
000010f0: PUSH1 0x00
000010f2: SWAP1
000010f3: LOG3
000010f4: POP
000010f5: POP
000010f6: JUMP
000010f7: JUMPDEST
000010f8: PUSH1 0x00
000010fa: DUP1
000010fb: SLOAD
000010fc: PUSH2 0x0100
000010ff: SWAP1
00001100: DIV
00001101: PUSH1 0xff
00001103: AND
00001104: ISZERO
00001105: PUSH2 0x113e
00001108: JUMPI
00001109: DUP2
0000110a: PUSH1 0xff
0000110c: AND
0000110d: PUSH1 0x01
0000110f: EQ
00001110: DUP1
00001111: ISZERO
00001112: PUSH2 0x111a
00001115: JUMPI
00001116: POP
00001117: ADDRESS
00001118: EXTCODESIZE
00001119: ISZERO
0000111a: JUMPDEST
0000111b: PUSH2 0x1136
0000111e: JUMPI
0000111f: PUSH1 0x40
00001121: MLOAD
00001122: PUSH3 0x461bcd
00001126: PUSH1 0xe5
00001128: SHL
00001129: DUP2
0000112a: MSTORE
0000112b: PUSH1 0x04
0000112d: ADD
0000112e: PUSH2 0x044e
00001131: SWAP1
00001132: PUSH2 0x139f
00001135: JUMP
00001136: JUMPDEST
00001137: POP
00001138: PUSH1 0x00
0000113a: SWAP2
0000113b: SWAP1
0000113c: POP
0000113d: JUMP
0000113e: JUMPDEST
0000113f: PUSH1 0x00
00001141: SLOAD
00001142: PUSH1 0xff
00001144: DUP1
00001145: DUP5
00001146: AND
00001147: SWAP2
00001148: AND
00001149: LT
0000114a: PUSH2 0x1165
0000114d: JUMPI
0000114e: PUSH1 0x40
00001150: MLOAD
00001151: PUSH3 0x461bcd
00001155: PUSH1 0xe5
00001157: SHL
00001158: DUP2
00001159: MSTORE
0000115a: PUSH1 0x04
0000115c: ADD
0000115d: PUSH2 0x044e
00001160: SWAP1
00001161: PUSH2 0x139f
00001164: JUMP
00001165: JUMPDEST
00001166: POP
00001167: PUSH1 0x00
00001169: DUP1
0000116a: SLOAD
0000116b: PUSH1 0xff
0000116d: NOT
0000116e: AND
0000116f: PUSH1 0xff
00001171: SWAP3
00001172: SWAP1
00001173: SWAP3
00001174: AND
00001175: SWAP2
00001176: SWAP1
00001177: SWAP2
00001178: OR
00001179: SWAP1
0000117a: SSTORE
0000117b: PUSH1 0x01
0000117d: SWAP1
0000117e: JUMP
0000117f: JUMPDEST
00001180: SWAP2
00001181: SWAP1
00001182: POP
00001183: JUMP
00001184: JUMPDEST
00001185: PUSH1 0x00
00001187: SLOAD
00001188: PUSH2 0x0100
0000118b: SWAP1
0000118c: DIV
0000118d: PUSH1 0xff
0000118f: AND
00001190: PUSH2 0x11ab
00001193: JUMPI
00001194: PUSH1 0x40
00001196: MLOAD
00001197: PUSH3 0x461bcd
0000119b: PUSH1 0xe5
0000119d: SHL
0000119e: DUP2
0000119f: MSTORE
000011a0: PUSH1 0x04
000011a2: ADD
000011a3: PUSH2 0x044e
000011a6: SWAP1
000011a7: PUSH2 0x1422
000011aa: JUMP
000011ab: JUMPDEST
000011ac: PUSH2 0x0924
000011af: PUSH2 0x11fa
000011b2: JUMP
000011b3: JUMPDEST
000011b4: PUSH1 0x00
000011b6: SLOAD
000011b7: PUSH2 0x0100
000011ba: SWAP1
000011bb: DIV
000011bc: PUSH1 0xff
000011be: AND
000011bf: PUSH2 0x11da
000011c2: JUMPI
000011c3: PUSH1 0x40
000011c5: MLOAD
000011c6: PUSH3 0x461bcd
000011ca: PUSH1 0xe5
000011cc: SHL
000011cd: DUP2
000011ce: MSTORE
000011cf: PUSH1 0x04
000011d1: ADD
000011d2: PUSH2 0x044e
000011d5: SWAP1
000011d6: PUSH2 0x1422
000011d9: JUMP
000011da: JUMPDEST
000011db: PUSH2 0x0924
000011de: PUSH2 0x122a
000011e1: JUMP
000011e2: JUMPDEST
000011e3: PUSH1 0x00
000011e5: DUP2
000011e6: DUP4
000011e7: LT
000011e8: PUSH2 0x11f1
000011eb: JUMPI
000011ec: DUP2
000011ed: PUSH2 0x11f3
000011f0: JUMP
000011f1: JUMPDEST
000011f2: DUP3
000011f3: JUMPDEST
000011f4: SWAP4
000011f5: SWAP3
000011f6: POP
000011f7: POP
000011f8: POP
000011f9: JUMP
000011fa: JUMPDEST
000011fb: PUSH1 0x00
000011fd: SLOAD
000011fe: PUSH2 0x0100
00001201: SWAP1
00001202: DIV
00001203: PUSH1 0xff
00001205: AND
00001206: PUSH2 0x1221
00001209: JUMPI
0000120a: PUSH1 0x40
0000120c: MLOAD
0000120d: PUSH3 0x461bcd
00001211: PUSH1 0xe5
00001213: SHL
00001214: DUP2
00001215: MSTORE
00001216: PUSH1 0x04
00001218: ADD
00001219: PUSH2 0x044e
0000121c: SWAP1
0000121d: PUSH2 0x1422
00001220: JUMP
00001221: JUMPDEST
00001222: PUSH2 0x0924
00001225: CALLER
00001226: PUSH2 0x10a5
00001229: JUMP
0000122a: JUMPDEST
0000122b: PUSH1 0x00
0000122d: SLOAD
0000122e: PUSH2 0x0100
00001231: SWAP1
00001232: DIV
00001233: PUSH1 0xff
00001235: AND
00001236: PUSH2 0x1251
00001239: JUMPI
0000123a: PUSH1 0x40
0000123c: MLOAD
0000123d: PUSH3 0x461bcd
00001241: PUSH1 0xe5
00001243: SHL
00001244: DUP2
00001245: MSTORE
00001246: PUSH1 0x04
00001248: ADD
00001249: PUSH2 0x044e
0000124c: SWAP1
0000124d: PUSH2 0x1422
00001250: JUMP
00001251: JUMPDEST
00001252: PUSH1 0x01
00001254: PUSH1 0x65
00001256: SSTORE
00001257: JUMP
00001258: JUMPDEST
00001259: DUP1
0000125a: CALLDATALOAD
0000125b: PUSH1 0x01
0000125d: PUSH1 0x01
0000125f: PUSH1 0xa0
00001261: SHL
00001262: SUB
00001263: DUP2
00001264: AND
00001265: DUP2
00001266: EQ
00001267: PUSH2 0x117f
0000126a: JUMPI
0000126b: PUSH1 0x00
0000126d: DUP1
0000126e: REVERT
0000126f: JUMPDEST
00001270: PUSH1 0x00
00001272: PUSH1 0x20
00001274: DUP3
00001275: DUP5
00001276: SUB
00001277: SLT
00001278: ISZERO
00001279: PUSH2 0x1281
0000127c: JUMPI
0000127d: PUSH1 0x00
0000127f: DUP1
00001280: REVERT
00001281: JUMPDEST
00001282: PUSH2 0x11f3
00001285: DUP3
00001286: PUSH2 0x1258
00001289: JUMP
0000128a: JUMPDEST
0000128b: PUSH1 0x00
0000128d: DUP1
0000128e: PUSH1 0x00
00001290: PUSH1 0x60
00001292: DUP5
00001293: DUP7
00001294: SUB
00001295: SLT
00001296: ISZERO
00001297: PUSH2 0x129f
0000129a: JUMPI
0000129b: PUSH1 0x00
0000129d: DUP1
0000129e: REVERT
0000129f: JUMPDEST
000012a0: PUSH2 0x12a8
000012a3: DUP5
000012a4: PUSH2 0x1258
000012a7: JUMP
000012a8: JUMPDEST
000012a9: SWAP6
000012aa: PUSH1 0x20
000012ac: DUP6
000012ad: ADD
000012ae: CALLDATALOAD
000012af: SWAP6
000012b0: POP
000012b1: PUSH1 0x40
000012b3: SWAP1
000012b4: SWAP5
000012b5: ADD
000012b6: CALLDATALOAD
000012b7: SWAP4
000012b8: SWAP3
000012b9: POP
000012ba: POP
000012bb: POP
000012bc: JUMP
000012bd: JUMPDEST
000012be: PUSH1 0x00
000012c0: PUSH1 0x20
000012c2: DUP3
000012c3: DUP5
000012c4: SUB
000012c5: SLT
000012c6: ISZERO
000012c7: PUSH2 0x12cf
000012ca: JUMPI
000012cb: PUSH1 0x00
000012cd: DUP1
000012ce: REVERT
000012cf: JUMPDEST
000012d0: DUP2
000012d1: MLOAD
000012d2: DUP1
000012d3: ISZERO
000012d4: ISZERO
000012d5: DUP2
000012d6: EQ
000012d7: PUSH2 0x11f3
000012da: JUMPI
000012db: PUSH1 0x00
000012dd: DUP1
000012de: REVERT
000012df: JUMPDEST
000012e0: PUSH1 0x00
000012e2: PUSH1 0x20
000012e4: DUP3
000012e5: DUP5
000012e6: SUB
000012e7: SLT
000012e8: ISZERO
000012e9: PUSH2 0x12f1
000012ec: JUMPI
000012ed: PUSH1 0x00
000012ef: DUP1
000012f0: REVERT
000012f1: JUMPDEST
000012f2: POP
000012f3: CALLDATALOAD
000012f4: SWAP2
000012f5: SWAP1
000012f6: POP
000012f7: JUMP
000012f8: JUMPDEST
000012f9: PUSH1 0x00
000012fb: DUP1
000012fc: PUSH1 0x40
000012fe: DUP4
000012ff: DUP6
00001300: SUB
00001301: SLT
00001302: ISZERO
00001303: PUSH2 0x130b
00001306: JUMPI
00001307: PUSH1 0x00
00001309: DUP1
0000130a: REVERT
0000130b: JUMPDEST
0000130c: POP
0000130d: POP
0000130e: DUP1
0000130f: CALLDATALOAD
00001310: SWAP3
00001311: PUSH1 0x20
00001313: SWAP1
00001314: SWAP2
00001315: ADD
00001316: CALLDATALOAD
00001317: SWAP2
00001318: POP
00001319: JUMP
0000131a: JUMPDEST
0000131b: PUSH1 0x00
0000131d: DUP1
0000131e: PUSH1 0x00
00001320: DUP1
00001321: PUSH1 0x00
00001323: DUP1
00001324: PUSH1 0xc0
00001326: DUP8
00001327: DUP10
00001328: SUB
00001329: SLT
0000132a: ISZERO
0000132b: PUSH2 0x1333
0000132e: JUMPI
0000132f: PUSH1 0x00
00001331: DUP1
00001332: REVERT
00001333: JUMPDEST
00001334: DUP7
00001335: CALLDATALOAD
00001336: SWAP6
00001337: POP
00001338: PUSH1 0x20
0000133a: DUP8
0000133b: ADD
0000133c: CALLDATALOAD
0000133d: SWAP5
0000133e: POP
0000133f: PUSH1 0x40
00001341: DUP8
00001342: ADD
00001343: CALLDATALOAD
00001344: SWAP4
00001345: POP
00001346: PUSH1 0x60
00001348: DUP8
00001349: ADD
0000134a: CALLDATALOAD
0000134b: PUSH1 0xff
0000134d: DUP2
0000134e: AND
0000134f: DUP2
00001350: EQ
00001351: PUSH2 0x1359
00001354: JUMPI
00001355: PUSH1 0x00
00001357: DUP1
00001358: REVERT
00001359: JUMPDEST
0000135a: SWAP6
0000135b: SWAP9
0000135c: SWAP5
0000135d: SWAP8
0000135e: POP
0000135f: SWAP3
00001360: SWAP6
00001361: PUSH1 0x80
00001363: DUP2
00001364: ADD
00001365: CALLDATALOAD
00001366: SWAP5
00001367: PUSH1 0xa0
00001369: SWAP1
0000136a: SWAP2
0000136b: ADD
0000136c: CALLDATALOAD
0000136d: SWAP4
0000136e: POP
0000136f: SWAP2
00001370: POP
00001371: POP
00001372: JUMP
00001373: JUMPDEST
00001374: PUSH1 0x00
00001376: DUP1
00001377: PUSH1 0x00
00001379: PUSH1 0x60
0000137b: DUP5
0000137c: DUP7
0000137d: SUB
0000137e: SLT
0000137f: ISZERO
00001380: PUSH2 0x1388
00001383: JUMPI
00001384: PUSH1 0x00
00001386: DUP1
00001387: REVERT
00001388: JUMPDEST
00001389: POP
0000138a: POP
0000138b: DUP2
0000138c: CALLDATALOAD
0000138d: SWAP4
0000138e: PUSH1 0x20
00001390: DUP4
00001391: ADD
00001392: CALLDATALOAD
00001393: SWAP4
00001394: POP
00001395: PUSH1 0x40
00001397: SWAP1
00001398: SWAP3
00001399: ADD
0000139a: CALLDATALOAD
0000139b: SWAP2
0000139c: SWAP1
0000139d: POP
0000139e: JUMP
0000139f: JUMPDEST
000013a0: PUSH1 0x20
000013a2: DUP1
000013a3: DUP3
000013a4: MSTORE
000013a5: PUSH1 0x2e
000013a7: SWAP1
000013a8: DUP3
000013a9: ADD
000013aa: MSTORE
000013ab: PUSH32 0x496e697469616c697a61626c653a20636f6e747261637420697320616c726561
000013cc: PUSH1 0x40
000013ce: DUP3
000013cf: ADD
000013d0: MSTORE
000013d1: PUSH14 0x191e481a5b9a5d1a585b1a5e9959
000013e0: PUSH1 0x92
000013e2: SHL
000013e3: PUSH1 0x60
000013e5: DUP3
000013e6: ADD
000013e7: MSTORE
000013e8: PUSH1 0x80
000013ea: ADD
000013eb: SWAP1
000013ec: JUMP
000013ed: JUMPDEST
000013ee: PUSH1 0x20
000013f0: DUP1
000013f1: DUP3
000013f2: MSTORE
000013f3: DUP2
000013f4: DUP2
000013f5: ADD
000013f6: MSTORE
000013f7: PUSH32 0x4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
00001418: PUSH1 0x40
0000141a: DUP3
0000141b: ADD
0000141c: MSTORE
0000141d: PUSH1 0x60
0000141f: ADD
00001420: SWAP1
00001421: JUMP
00001422: JUMPDEST
00001423: PUSH1 0x20
00001425: DUP1
00001426: DUP3
00001427: MSTORE
00001428: PUSH1 0x2b
0000142a: SWAP1
0000142b: DUP3
0000142c: ADD
0000142d: MSTORE
0000142e: PUSH32 0x496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069
0000144f: PUSH1 0x40
00001451: DUP3
00001452: ADD
00001453: MSTORE
00001454: PUSH11 0x6e697469616c697a696e67
00001460: PUSH1 0xa8
00001462: SHL
00001463: PUSH1 0x60
00001465: DUP3
00001466: ADD
00001467: MSTORE
00001468: PUSH1 0x80
0000146a: ADD
0000146b: SWAP1
0000146c: JUMP
0000146d: JUMPDEST
0000146e: PUSH1 0x00
00001470: DUP3
00001471: NOT
00001472: DUP3
00001473: GT
00001474: ISZERO
00001475: PUSH2 0x1480
00001478: JUMPI
00001479: PUSH2 0x1480
0000147c: PUSH2 0x14f8
0000147f: JUMP
00001480: JUMPDEST
00001481: POP
00001482: ADD
00001483: SWAP1
00001484: JUMP
00001485: JUMPDEST
00001486: PUSH1 0x00
00001488: DUP3
00001489: PUSH2 0x14a2
0000148c: JUMPI
0000148d: PUSH4 0x4e487b71
00001492: PUSH1 0xe0
00001494: SHL
00001495: PUSH1 0x00
00001497: MSTORE
00001498: PUSH1 0x12
0000149a: PUSH1 0x04
0000149c: MSTORE
0000149d: PUSH1 0x24
0000149f: PUSH1 0x00
000014a1: REVERT
000014a2: JUMPDEST
000014a3: POP
000014a4: DIV
000014a5: SWAP1
000014a6: JUMP
000014a7: JUMPDEST
000014a8: PUSH1 0x00
000014aa: DUP2
000014ab: PUSH1 0x00
000014ad: NOT
000014ae: DIV
000014af: DUP4
000014b0: GT
000014b1: DUP3
000014b2: ISZERO
000014b3: ISZERO
000014b4: AND
000014b5: ISZERO
000014b6: PUSH2 0x14c1
000014b9: JUMPI
000014ba: PUSH2 0x14c1
000014bd: PUSH2 0x14f8
000014c0: JUMP
000014c1: JUMPDEST
000014c2: POP
000014c3: MUL
000014c4: SWAP1
000014c5: JUMP
000014c6: JUMPDEST
000014c7: PUSH1 0x00
000014c9: DUP3
000014ca: DUP3
000014cb: LT
000014cc: ISZERO
000014cd: PUSH2 0x14d8
000014d0: JUMPI
000014d1: PUSH2 0x14d8
000014d4: PUSH2 0x14f8
000014d7: JUMP
000014d8: JUMPDEST
000014d9: POP
000014da: SUB
000014db: SWAP1
000014dc: JUMP
000014dd: JUMPDEST
000014de: PUSH1 0x00
000014e0: PUSH1 0x00
000014e2: NOT
000014e3: DUP3
000014e4: EQ
000014e5: ISZERO
000014e6: PUSH2 0x14f1
000014e9: JUMPI
000014ea: PUSH2 0x14f1
000014ed: PUSH2 0x14f8
000014f0: JUMP
000014f1: JUMPDEST
000014f2: POP
000014f3: PUSH1 0x01
000014f5: ADD
000014f6: SWAP1
000014f7: JUMP
000014f8: JUMPDEST
000014f9: PUSH4 0x4e487b71
000014fe: PUSH1 0xe0
00001500: SHL
00001501: PUSH1 0x00
00001503: MSTORE
00001504: PUSH1 0x11
00001506: PUSH1 0x04
00001508: MSTORE
00001509: PUSH1 0x24
0000150b: PUSH1 0x00
0000150d: REVERT
0000150e: INVALID
0000150f: LOG2
00001510: PUSH5 0x6970667358
00001516: UNKNOWN(0x22)
00001517: SLT
00001518: KECCAK256
00001519: PUSH24 0x818819284c8c017cfc7aabe377f0b84e1b4a7a4f6e002032
00001532: PUSH0
00001533: UNKNOWN(0xC8)
00001534: UNKNOWN(0xB7)
00001535: EXP
00001536: UNKNOWN(0xB2)
00001537: SWAP1
00001538: PC
00001539: PUSH5 0x736f6c6343
0000153f: STOP
00001540: ADDMOD
00001541: SMOD
00001542: STOP
00001543: CALLER

Findings

validated = confirmed for call sinks; sink observed for others
Severity Category Tool Title Confidence Validated Confirmed Details
high math codex Intervals claimed only incremented by 1 enables repeated over-claims 85 no
view
evidence_json
{
    "evidence": "claim() increments intervalsClaimed by 1 after totalClaimable() calculates based on (intervalsElapsed - intervalsClaimed), so claimed intervals are not fully accounted for.",
    "locations": [
        "contracts/WarriorAllianceNFT/AmmoVault.sol:119",
        "contracts/WarriorAllianceNFT/AmmoVault.sol:130",
        "contracts/WarriorAllianceNFT/AmmoVault.sol:181",
        "contracts/WarriorAllianceNFT/AmmoVault.sol:196"
    ],
    "recommendation": "After paying for all elapsed intervals, set intervalsClaimed to the current intervalsElapsed (or increment by intervalsElapsed - previous intervalsClaimed). This ensures each interval is only claimable once.",
    "exploit_scenario": "A user waits until multiple intervals have elapsed, then calls claim(). totalClaimable() pays for all elapsed-but-unclaimed intervals, but claim() only increments intervalsClaimed by 1. The user can immediately call claim() again to receive the same elapsed intervals again (minus one), repeating until totalIntervals is exhausted and extracting far more tokens than their allocation."
}
high other detector ETH value transfer possible 55 no no
view
trace_id: 0xccfa5bb3fd0907efa31ea49405bd889a3a4837aeb95414dc2b91f42146fc3abd
call_targets: 0x6097a40e38fa1aeea072babfaadea1f513e970a8
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xccfa5bb3fd0907efa31ea49405bd889a3a4837aeb95414dc2b91f42146fc3abd",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x6097a40e38fa1aeea072babfaadea1f513e970a8"
    ],
    "matched_probe": null,
    "target_varies": false,
    "classification": "constant_target"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0xb4256888",
            "selector": "0xb4256888",
            "calldata_variants": [
                "0xb4256888",
                "0xb42568880000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xcee9cef8",
            "selector": "0xcee9cef8",
            "calldata_variants": [
                "0xcee9cef8",
                "0xcee9cef80000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd78276c6",
            "selector": "0xd78276c6",
            "calldata_variants": [
                "0xd78276c6",
                "0xd78276c60000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf2fde38b",
            "selector": "0xf2fde38b",
            "calldata_variants": [
                "0xf2fde38b",
                "0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfc0c546a",
            "selector": "0xfc0c546a",
            "calldata_variants": [
                "0xfc0c546a",
                "0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfcbca456",
            "selector": "0xfcbca456",
            "calldata_variants": [
                "0xfcbca456",
                "0xfcbca4560000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x715018a6",
            "selector": "0x715018a6",
            "calldata_variants": [
                "0x715018a6",
                "0x715018a60000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x7a1ac61e",
            "selector": "0x7a1ac61e",
            "calldata_variants": [
                "0x7a1ac61e",
                "0x7a1ac61e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 1443,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 2084,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 3675,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "eth_value_calls": 4,
    "guards_detected": []
}
high other detector Untrusted CALL target/value reachable 60 no no
view
trace_id: 0xccfa5bb3fd0907efa31ea49405bd889a3a4837aeb95414dc2b91f42146fc3abd
call_targets: 0x6097a40e38fa1aeea072babfaadea1f513e970a8
target_varies: no
classification: constant_target
validation_json
{
    "sink": "CALL",
    "errors": 0,
    "status": "sink_reached",
    "attempts": 1,
    "trace_id": "0xccfa5bb3fd0907efa31ea49405bd889a3a4837aeb95414dc2b91f42146fc3abd",
    "confirmed": false,
    "trace_mode": "callTracer",
    "call_targets": [
        "0x6097a40e38fa1aeea072babfaadea1f513e970a8"
    ],
    "matched_probe": null,
    "target_varies": false,
    "classification": "constant_target"
}
witness_json
{
    "notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
    "constraints": [],
    "entrypoints": [
        {
            "calldata": "0xb4256888",
            "selector": "0xb4256888",
            "calldata_variants": [
                "0xb4256888",
                "0xb42568880000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xcee9cef8",
            "selector": "0xcee9cef8",
            "calldata_variants": [
                "0xcee9cef8",
                "0xcee9cef80000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xd78276c6",
            "selector": "0xd78276c6",
            "calldata_variants": [
                "0xd78276c6",
                "0xd78276c60000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xf2fde38b",
            "selector": "0xf2fde38b",
            "calldata_variants": [
                "0xf2fde38b",
                "0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfc0c546a",
            "selector": "0xfc0c546a",
            "calldata_variants": [
                "0xfc0c546a",
                "0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0xfcbca456",
            "selector": "0xfcbca456",
            "calldata_variants": [
                "0xfcbca456",
                "0xfcbca4560000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x715018a6",
            "selector": "0x715018a6",
            "calldata_variants": [
                "0x715018a6",
                "0x715018a60000000000000000000000000000000000000000000000000000000000000000"
            ]
        },
        {
            "calldata": "0x7a1ac61e",
            "selector": "0x7a1ac61e",
            "calldata_variants": [
                "0x7a1ac61e",
                "0x7a1ac61e0000000000000000000000000000000000000000000000000000000000000000"
            ]
        }
    ]
}
evidence_json
{
    "examples": [
        {
            "pc": 1443,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 2084,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        },
        {
            "pc": 3675,
            "opcode": "CALL",
            "returndata_checked": null,
            "value_expression_category": "computed",
            "target_expression_category": "computed"
        }
    ],
    "call_count": 4,
    "guards_detected": [],
    "untrusted_call_count": 4
}
medium auth codex Whitelist signature lacks domain separation, enabling replay across contracts/chains 75 no
view
evidence_json
{
    "evidence": "The signed payload only hashes msg.sender and maxAmount, and uses a raw EIP-191 prefix without domain separation or nonce.",
    "locations": [
        "contracts/WarriorAllianceNFT/AmmoVault.sol:149",
        "contracts/WarriorAllianceNFT/AmmoVault.sol:155"
    ],
    "recommendation": "Use EIP-712 typed data with domain separator including contract address and chainId, and include a nonce or unique identifier in the signed message. Optionally include the exact amount intended to be purchased.",
    "exploit_scenario": "A user obtains a valid signature for (user, maxAmount) from the owner on one deployment or chain. Because the signed payload does not include the contract address, chainId, or a nonce, the same signature can be replayed on another deployment or chain where the owner key is the same, allowing unauthorized registrations/claims."
}
low other codex Unchecked ERC20 transfer return values can desync accounting 65 no
view
evidence_json
{
    "evidence": "token.transfer(...) calls are not checked for return values.",
    "locations": [
        "contracts/WarriorAllianceNFT/AmmoVault.sol:110",
        "contracts/WarriorAllianceNFT/AmmoVault.sol:133",
        "contracts/WarriorAllianceNFT/AmmoVault.sol:172"
    ],
    "recommendation": "Use SafeERC20 (safeTransfer/safeTransferFrom) or require(token.transfer(...)) to ensure failures revert.",
    "exploit_scenario": "If the ERC20 token returns false (non-standard behavior) instead of reverting, claim() and whitelistRegister() will update user state as if tokens were paid, while no tokens are transferred. This can lock user allocations and misrepresent payouts."
}