4d2430de-9b62-4280-b240-500b58b1688c
Open this run to answer one question: is this real attacker-relevant behavior with real impact, or just normal contract plumbing?
| ID | Type | Status | Attempts | Heartbeat |
|---|---|---|---|---|
| 30537 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 104081 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 104082 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 104083 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 104084 | capability.graph | complete | 1 / 3 | 1 week ago |
| 104085 | detector.run | complete | 1 / 3 | 1 week ago |
| 104086 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:1085787] OpenAI Codex v0.77.0 (research preview)
[codex:1085787] --------
[codex:1085787] workdir: /tmp/codex-multi-phhxgbws
[codex:1085787] model: gpt-5.2-codex
[codex:1085787] provider: openai
[codex:1085787] approval: never
[codex:1085787] sandbox: read-only
[codex:1085787] reasoning effort: xhigh
[codex:1085787] reasoning summaries: auto
[codex:1085787] session id: 019b6b16-22e8-7f81-ab19-785c386c6ea3
[codex:1085787] --------
[codex:1085787] user
[codex:1085787] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:1085787] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:1085787] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:1085787]
[codex:1085787] Scope rules:
[codex:1085787] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:1085787] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:1085787]
[codex:1085787] Output MUST be valid JSON matching the provided schema.
[codex:1085787] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:1085787] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:1085787]
[codex:1085787] Output constraints (IMPORTANT):
[codex:1085787] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1085787] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1085787] mcp startup: no servers
[codex:1085787]
[codex:1085787] thinking
[codex:1085787] **Reviewing instructions and audit bundle**
[codex:1085787] exec
[codex:1085787] /bin/bash -lc ls in /tmp/codex-multi-phhxgbws succeeded in 5ms:
[codex:1085787] AUDIT_BUNDLE.txt
[codex:1085787] codex-output-schema.json
[codex:1085787] contracts
[codex:1085787] exec
[codex:1085787] /bin/bash -lc "sed -n '1,200p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-phhxgbws succeeded in 5ms:
[codex:1085787] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:1085787]
[codex:1085787] ================================================================================
[codex:1085787] FILE: contracts/lib/openzeppelin-contracts/contracts/access/Ownable.sol
[codex:1085787] ================================================================================
[codex:1085787] // SPDX-License-Identifier: MIT
[codex:1085787] // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
[codex:1085787]
[codex:1085787] pragma solidity ^0.8.20;
[codex:1085787]
[codex:1085787] import {Context} from "../utils/Context.sol";
[codex:1085787]
[codex:1085787] /**
[codex:1085787] * @dev Contract module which provides a basic access control mechanism, where
[codex:1085787] * there is an account (an owner) that can be granted exclusive access to
[codex:1085787] * specific functions.
[codex:1085787] *
[codex:1085787] * The initial owner is set to the address provided by the deployer. This can
[codex:1085787] * later be changed with {transferOwnership}.
[codex:1085787] *
[codex:1085787]
[codex:1085787] thinking
[codex:1085787] **Identifying first-party contract files**
[codex:1085787] exec
[codex:1085787] /bin/bash -lc 'rg "''^FILE:" -n AUDIT_BUNDLE.txt' in /tmp/codex-multi-phhxgbws succeeded in 8ms:
[codex:1085787] 4:FILE: contracts/lib/openzeppelin-contracts/contracts/access/Ownable.sol
[codex:1085787] 108:FILE: contracts/lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol
[codex:1085787] 171:FILE: contracts/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
[codex:1085787] 254:FILE: contracts/lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol
[codex:1085787] 348:FILE: contracts/lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol
[codex:1085787] 470:FILE: contracts/lib/openzeppelin-contracts/contracts/utils/Address.sol
[codex:1085787] 633:FILE: contracts/lib/openzeppelin-contracts/contracts/utils/Context.sol
[codex:1085787] 665:FILE: contracts/lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol
[codex:1085787] 753:FILE: contracts/src/SimpleStakingERC20.sol
[codex:1085787] 852:FILE: contracts/src/interfaces/ISimpleStakingERC20.sol
[codex:1085787]
[codex:1085787] thinking
[codex:1085787] **Reviewing first-party contract files**
[codex:1085787] exec
[codex:1085787] /bin/bash -lc "sed -n '740,920p' AUDIT_BUNDLE.txt" in /tmp/codex-multi-phhxgbws succeeded in 5ms:
[codex:1085787] _status = NOT_ENTERED;
[codex:1085787] }
[codex:1085787]
[codex:1085787] /**
[codex:1085787] * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
[codex:1085787] * `nonReentrant` function in the call stack.
[codex:1085787] */
[codex:1085787] function _reentrancyGuardEntered() internal view returns (bool) {
[codex:1085787] return _status == ENTERED;
[codex:1085787] }
[codex:1085787] }
[codex:1085787]
[codex:1085787] ================================================================================
[codex:1085787] FILE: contracts/src/SimpleStakingERC20.sol
[codex:1085787] ================================================================================
[codex:1085787] // SPDX-License-Identifier: UNLICENSED
[codex:1085787] pragma solidity 0.8.23;
[codex:1085787]
[codex:1085787] // External dependencies
[codex:1085787] import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
[codex:1085787]
[codex:1085787]
[codex:1085787] thinking
[codex:1085787] **Analyzing staking contract vulnerabilities**
[codex:1085787] thinking
[codex:1085787] **Evaluating token fee and withdraw accounting issues**
[codex:1085787]
[codex:1085787] I've found a key issue where tokens that charge fees on transfers out break the accounting of staked balances and total supply. This can cause users to lose funds due to divergence between recorded stakes and actual tokens, leading to stuck withdrawals or insolvency. Rescue operations can unintentionally drain staked funds when fee-on-transfer tokens are involved, since transferring "excess" tokens also triggers fees reducing the contract's balance below total stakes. This mismatch is important and could be considered a medium severity vulnerability, especially if the owner supports such tokens. I'll note that deposit handles deflationary fees, but withdraw and rescue do not, causing these inconsistencies.
[codex:1085787] exec
[codex:1085787] /bin/bash -lc 'nl -ba contracts/src/SimpleStakingERC20.sol' in /tmp/codex-multi-phhxgbws succeeded in 6ms:
[codex:1085787] 1 // SPDX-License-Identifier: UNLICENSED
[codex:1085787] 2 pragma solidity 0.8.23;
[codex:1085787] 3
[codex:1085787] 4 // External dependencies
[codex:1085787] 5 import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
[codex:1085787] 6 import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
[codex:1085787] 7 import {ReentrancyGuard} from "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
[codex:1085787] 8 import {Ownable, Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol";
[codex:1085787] 9
[codex:1085787] 10 // Internal dependencies
[codex:1085787] 11 import {ISimpleStakingERC20} from "./interfaces/ISimpleStakingERC20.sol";
[codex:1085787] 12
[codex:1085787] 13 contract SimpleStakingERC20 is Ownable2Step, ReentrancyGuard, ISimpleStakingERC20 {
[codex:1085787] 14 using SafeERC20 for IERC20;
[codex:1085787] 15
[codex:1085787] 16 /*//////////////////////////////////////////////////////////////
[codex:1085787] 17 VARIABLES
[codex:1085787] 18 //////////////////////////////////////////////////////////////*/
[codex:1085787] 19
[codex:1085787] 20 /// @notice Mapping of supported tokens
[codex:1085787]
[codex:1085787] thinking
[codex:1085787] **Preparing to reference code and schema**
[codex:1085787] exec
[codex:1085787] /bin/bash -lc 'cat codex-output-schema.json' in /tmp/codex-multi-phhxgbws succeeded in 5ms:
[codex:1085787] {"type": "object", "additionalProperties": false, "required": ["no_findings", "summary", "findings"], "properties": {"no_findings": {"type": "boolean"}, "summary": {"type": "string"}, "findings": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["severity", "category", "title", "evidence", "locations", "exploit_scenario", "recommendation"], "properties": {"severity": {"type": "string", "enum": ["info", "low", "medium", "high", "critical"]}, "category": {"type": "string", "enum": ["access_control", "reentrancy", "math", "oracle", "upgradeability", "auth", "other"]}, "title": {"type": "string"}, "exploit_scenario": {"type": "string"}, "recommendation": {"type": "string"}, "evidence": {"type": "string"}, "locations": {"type": "array", "items": {"type": "string"}}}}}}}
[codex:1085787]
[codex:1085787] thinking
[codex:1085787] **Preparing detailed vulnerability summary and JSON output**
[codex:1085787]
[codex:1085787] I'm constructing a precise JSON report describing a medium-severity accounting bug caused by fee-on-transfer or rebasing tokens that break internal balance invariants, potentially causing contract insolvency and blocking withdrawals. I'll include evidence, exploit scenarios, file locations, and clear recommendations focused on balance adjustments during withdraw and rescue operations.
[codex:1085787] codex
[codex:1085787] {"no_findings":false,"summary":"1 medium-severity accounting issue found in SimpleStakingERC20 related to fee-on-transfer/rebasing tokens causing balance desynchronization and potential withdrawal failures.","findings":[{"severity":"medium","category":"math","title":"Fee-on-transfer/rebasing tokens can desync accounting and make withdrawals insolvent","exploit_scenario":"If the owner supports a token that charges transfer fees or rebases, deposits are credited by the actual received amount, but withdrawals and rescue transfers debit internal balances by the requested amount only. For a fee-on-transfer token, each withdrawal reduces the contract’s real balance by more than `_amount` (fee is taken from the contract), while `totalStakedBalance` is reduced by exactly `_amount`. Over time the contract becomes undercollateralized and later withdrawals revert or cannot be fully honored. If a small excess exists, calling `rescueERC20` can also burn into staked funds due to transfer fees, accelerating insolvency. A malicious fee-collector token could profit from this undercollateralization.","recommendation":"If fee-on-transfer or rebasing tokens are intended to be supported, update accounting on withdrawal/rescue using balance-before/after deltas and ensure `totalStakedBalance` matches the actual balance change. Alternatively, explicitly reject such tokens (e.g., require `balanceAfter == balanceBefore - amount` on withdrawals/rescues) and document the limitation in `supportToken`.","evidence":"`deposit` adjusts `_amount` based on balance delta for deflationary tokens, but `withdraw` and `rescueERC20` decrement internal balances by the requested amount without considering transfer fees or balance changes outside the contract, allowing `totalStakedBalance` to exceed actual token balance.","locations":["contracts/src/SimpleStakingERC20.sol:52","contracts/src/SimpleStakingERC20.sol:66","contracts/src/SimpleStakingERC20.sol:80"]}]}
[codex:1085787] tokens used
[codex:1085787] 24,453
[codex:1085787] {"no_findings":false,"summary":"1 medium-severity accounting issue found in SimpleStakingERC20 related to fee-on-transfer/rebasing tokens causing balance desynchronization and potential withdrawal failures.","findings":[{"severity":"medium","category":"math","title":"Fee-on-transfer/rebasing tokens can desync accounting and make withdrawals insolvent","exploit_scenario":"If the owner supports a token that charges transfer fees or rebases, deposits are credited by the actual received amount, but withdrawals and rescue transfers debit internal balances by the requested amount only. For a fee-on-transfer token, each withdrawal reduces the contract’s real balance by more than `_amount` (fee is taken from the contract), while `totalStakedBalance` is reduced by exactly `_amount`. Over time the contract becomes undercollateralized and later withdrawals revert or cannot be fully honored. If a small excess exists, calling `rescueERC20` can also burn into staked funds due to transfer fees, accelerating insolvency. A malicious fee-collector token could profit from this undercollateralization.","recommendation":"If fee-on-transfer or rebasing tokens are intended to be supported, update accounting on withdrawal/rescue using balance-before/after deltas and ensure `totalStakedBalance` matches the actual balance change. Alternatively, explicitly reject such tokens (e.g., require `balanceAfter == balanceBefore - amount` on withdrawals/rescues) and document the limitation in `supportToken`.","evidence":"`deposit` adjusts `_amount` based on balance delta for deflationary tokens, but `withdraw` and `rescueERC20` decrement internal balances by the requested amount without considering transfer fees or balance changes outside the contract, allowing `totalStakedBalance` to exceed actual token balance.","locations":["contracts/src/SimpleStakingERC20.sol:52","contracts/src/SimpleStakingERC20.sol:66","contracts/src/SimpleStakingERC20.sol:80"]}]}
{
"codex": {
"ran_at": "2025-12-29T17:12:14.229473+00:00",
"returncode": 0
},
"summary": "1 medium-severity accounting issue found in SimpleStakingERC20 related to fee-on-transfer/rebasing tokens causing balance desynchronization and potential withdrawal failures.",
"raw_final": {
"summary": "1 medium-severity accounting issue found in SimpleStakingERC20 related to fee-on-transfer/rebasing tokens causing balance desynchronization and potential withdrawal failures.",
"findings": [
{
"title": "Fee-on-transfer/rebasing tokens can desync accounting and make withdrawals insolvent",
"category": "math",
"evidence": "`deposit` adjusts `_amount` based on balance delta for deflationary tokens, but `withdraw` and `rescueERC20` decrement internal balances by the requested amount without considering transfer fees or balance changes outside the contract, allowing `totalStakedBalance` to exceed actual token balance.",
"severity": "medium",
"locations": [
"contracts/src/SimpleStakingERC20.sol:52",
"contracts/src/SimpleStakingERC20.sol:66",
"contracts/src/SimpleStakingERC20.sol:80"
],
"recommendation": "If fee-on-transfer or rebasing tokens are intended to be supported, update accounting on withdrawal/rescue using balance-before/after deltas and ensure `totalStakedBalance` matches the actual balance change. Alternatively, explicitly reject such tokens (e.g., require `balanceAfter == balanceBefore - amount` on withdrawals/rescues) and document the limitation in `supportToken`.",
"exploit_scenario": "If the owner supports a token that charges transfer fees or rebases, deposits are credited by the actual received amount, but withdrawals and rescue transfers debit internal balances by the requested amount only. For a fee-on-transfer token, each withdrawal reduces the contract\u2019s real balance by more than `_amount` (fee is taken from the contract), while `totalStakedBalance` is reduced by exactly `_amount`. Over time the contract becomes undercollateralized and later withdrawals revert or cannot be fully honored. If a small excess exists, calling `rescueERC20` can also burn into staked funds due to transfer fees, accelerating insolvency. A malicious fee-collector token could profit from this undercollateralization."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: CALLVALUE 00000006: DUP1 00000007: ISZERO 00000008: PUSH2 0x000f 0000000b: JUMPI 0000000c: PUSH0 0000000d: DUP1 0000000e: REVERT 0000000f: JUMPDEST 00000010: POP 00000011: PUSH1 0x04 00000013: CALLDATASIZE 00000014: LT 00000015: PUSH2 0x00b1 00000018: JUMPI 00000019: PUSH0 0000001a: CALLDATALOAD 0000001b: PUSH1 0xe0 0000001d: SHR 0000001e: DUP1 0000001f: PUSH4 0x8da5cb5b 00000024: GT 00000025: PUSH2 0x006e 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0x8da5cb5b 0000002f: EQ 00000030: PUSH2 0x0161 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xa4560996 0000003a: EQ 0000003b: PUSH2 0x0185 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xccec3716 00000045: EQ 00000046: PUSH2 0x01af 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xe30c3978 00000050: EQ 00000051: PUSH2 0x01c2 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0xf2fde38b 0000005b: EQ 0000005c: PUSH2 0x01d3 0000005f: JUMPI 00000060: DUP1 00000061: PUSH4 0xf45346dc 00000066: EQ 00000067: PUSH2 0x01e6 0000006a: JUMPI 0000006b: PUSH0 0000006c: DUP1 0000006d: REVERT 0000006e: JUMPDEST 0000006f: DUP1 00000070: PUSH4 0x3e82e419 00000075: EQ 00000076: PUSH2 0x00b5 00000079: JUMPI 0000007a: DUP1 0000007b: PUSH4 0x68c4ac26 00000080: EQ 00000081: PUSH2 0x00ca 00000084: JUMPI 00000085: DUP1 00000086: PUSH4 0x69328dec 0000008b: EQ 0000008c: PUSH2 0x0111 0000008f: JUMPI 00000090: DUP1 00000091: PUSH4 0x715018a6 00000096: EQ 00000097: PUSH2 0x0124 0000009a: JUMPI 0000009b: DUP1 0000009c: PUSH4 0x79ba5097 000000a1: EQ 000000a2: PUSH2 0x012c 000000a5: JUMPI 000000a6: DUP1 000000a7: PUSH4 0x7c329830 000000ac: EQ 000000ad: PUSH2 0x0134 000000b0: JUMPI 000000b1: JUMPDEST 000000b2: PUSH0 000000b3: DUP1 000000b4: REVERT 000000b5: JUMPDEST 000000b6: PUSH2 0x00c8 000000b9: PUSH2 0x00c3 000000bc: CALLDATASIZE 000000bd: PUSH1 0x04 000000bf: PUSH2 0x0aa4 000000c2: JUMP 000000c3: JUMPDEST 000000c4: PUSH2 0x01f9 000000c7: JUMP 000000c8: JUMPDEST 000000c9: STOP 000000ca: JUMPDEST 000000cb: PUSH2 0x00f5 000000ce: PUSH2 0x00d8 000000d1: CALLDATASIZE 000000d2: PUSH1 0x04 000000d4: PUSH2 0x0ae2 000000d7: JUMP 000000d8: JUMPDEST 000000d9: PUSH1 0x03 000000db: PUSH1 0x20 000000dd: MSTORE 000000de: PUSH0 000000df: SWAP1 000000e0: DUP2 000000e1: MSTORE 000000e2: PUSH1 0x40 000000e4: SWAP1 000000e5: KECCAK256 000000e6: SLOAD 000000e7: PUSH1 0xff 000000e9: DUP1 000000ea: DUP3 000000eb: AND 000000ec: SWAP2 000000ed: PUSH2 0x0100 000000f0: SWAP1 000000f1: DIV 000000f2: AND 000000f3: DUP3 000000f4: JUMP 000000f5: JUMPDEST 000000f6: PUSH1 0x40 000000f8: DUP1 000000f9: MLOAD 000000fa: SWAP3 000000fb: ISZERO 000000fc: ISZERO 000000fd: DUP4 000000fe: MSTORE 000000ff: SWAP1 00000100: ISZERO 00000101: ISZERO 00000102: PUSH1 0x20 00000104: DUP4 00000105: ADD 00000106: MSTORE 00000107: ADD 00000108: JUMPDEST 00000109: PUSH1 0x40 0000010b: MLOAD 0000010c: DUP1 0000010d: SWAP2 0000010e: SUB 0000010f: SWAP1 00000110: RETURN 00000111: JUMPDEST 00000112: PUSH2 0x00c8 00000115: PUSH2 0x011f 00000118: CALLDATASIZE 00000119: PUSH1 0x04 0000011b: PUSH2 0x0afd 0000011e: JUMP 0000011f: JUMPDEST 00000120: PUSH2 0x0293 00000123: JUMP 00000124: JUMPDEST 00000125: PUSH2 0x00c8 00000128: PUSH2 0x0406 0000012b: JUMP 0000012c: JUMPDEST 0000012d: PUSH2 0x00c8 00000130: PUSH2 0x0419 00000133: JUMP 00000134: JUMPDEST 00000135: PUSH2 0x0153 00000138: PUSH2 0x0142 0000013b: CALLDATASIZE 0000013c: PUSH1 0x04 0000013e: PUSH2 0x0ae2 00000141: JUMP 00000142: JUMPDEST 00000143: PUSH1 0x04 00000145: PUSH1 0x20 00000147: MSTORE 00000148: PUSH0 00000149: SWAP1 0000014a: DUP2 0000014b: MSTORE 0000014c: PUSH1 0x40 0000014e: SWAP1 0000014f: KECCAK256 00000150: SLOAD 00000151: DUP2 00000152: JUMP 00000153: JUMPDEST 00000154: PUSH1 0x40 00000156: MLOAD 00000157: SWAP1 00000158: DUP2 00000159: MSTORE 0000015a: PUSH1 0x20 0000015c: ADD 0000015d: PUSH2 0x0108 00000160: JUMP 00000161: JUMPDEST 00000162: PUSH0 00000163: SLOAD 00000164: PUSH1 0x01 00000166: PUSH1 0x01 00000168: PUSH1 0xa0 0000016a: SHL 0000016b: SUB 0000016c: AND 0000016d: JUMPDEST 0000016e: PUSH1 0x40 00000170: MLOAD 00000171: PUSH1 0x01 00000173: PUSH1 0x01 00000175: PUSH1 0xa0 00000177: SHL 00000178: SUB 00000179: SWAP1 0000017a: SWAP2 0000017b: AND 0000017c: DUP2 0000017d: MSTORE 0000017e: PUSH1 0x20 00000180: ADD 00000181: PUSH2 0x0108 00000184: JUMP 00000185: JUMPDEST 00000186: PUSH2 0x0153 00000189: PUSH2 0x0193 0000018c: CALLDATASIZE 0000018d: PUSH1 0x04 0000018f: PUSH2 0x0b3c 00000192: JUMP 00000193: JUMPDEST 00000194: PUSH1 0x05 00000196: PUSH1 0x20 00000198: SWAP1 00000199: DUP2 0000019a: MSTORE 0000019b: PUSH0 0000019c: SWAP3 0000019d: DUP4 0000019e: MSTORE 0000019f: PUSH1 0x40 000001a1: DUP1 000001a2: DUP5 000001a3: KECCAK256 000001a4: SWAP1 000001a5: SWAP2 000001a6: MSTORE 000001a7: SWAP1 000001a8: DUP3 000001a9: MSTORE 000001aa: SWAP1 000001ab: KECCAK256 000001ac: SLOAD 000001ad: DUP2 000001ae: JUMP 000001af: JUMPDEST 000001b0: PUSH2 0x00c8 000001b3: PUSH2 0x01bd 000001b6: CALLDATASIZE 000001b7: PUSH1 0x04 000001b9: PUSH2 0x0ae2 000001bc: JUMP 000001bd: JUMPDEST 000001be: PUSH2 0x045d 000001c1: JUMP 000001c2: JUMPDEST 000001c3: PUSH1 0x01 000001c5: SLOAD 000001c6: PUSH1 0x01 000001c8: PUSH1 0x01 000001ca: PUSH1 0xa0 000001cc: SHL 000001cd: SUB 000001ce: AND 000001cf: PUSH2 0x016d 000001d2: JUMP 000001d3: JUMPDEST 000001d4: PUSH2 0x00c8 000001d7: PUSH2 0x01e1 000001da: CALLDATASIZE 000001db: PUSH1 0x04 000001dd: PUSH2 0x0ae2 000001e0: JUMP 000001e1: JUMPDEST 000001e2: PUSH2 0x050f 000001e5: JUMP 000001e6: JUMPDEST 000001e7: PUSH2 0x00c8 000001ea: PUSH2 0x01f4 000001ed: CALLDATASIZE 000001ee: PUSH1 0x04 000001f0: PUSH2 0x0afd 000001f3: JUMP 000001f4: JUMPDEST 000001f5: PUSH2 0x057f 000001f8: JUMP 000001f9: JUMPDEST 000001fa: PUSH2 0x0201 000001fd: PUSH2 0x079f 00000200: JUMP 00000201: JUMPDEST 00000202: PUSH1 0x01 00000204: PUSH1 0x01 00000206: PUSH1 0xa0 00000208: SHL 00000209: SUB 0000020a: DUP3 0000020b: AND 0000020c: PUSH2 0x0228 0000020f: JUMPI 00000210: PUSH1 0x40 00000212: MLOAD 00000213: PUSH4 0xc61d2985 00000218: PUSH1 0xe0 0000021a: SHL 0000021b: DUP2 0000021c: MSTORE 0000021d: PUSH1 0x04 0000021f: ADD 00000220: PUSH1 0x40 00000222: MLOAD 00000223: DUP1 00000224: SWAP2 00000225: SUB 00000226: SWAP1 00000227: REVERT 00000228: JUMPDEST 00000229: PUSH1 0x01 0000022b: PUSH1 0x01 0000022d: PUSH1 0xa0 0000022f: SHL 00000230: SUB 00000231: DUP3 00000232: AND 00000233: PUSH0 00000234: SWAP1 00000235: DUP2 00000236: MSTORE 00000237: PUSH1 0x03 00000239: PUSH1 0x20 0000023b: MSTORE 0000023c: PUSH1 0x40 0000023e: SWAP1 0000023f: KECCAK256 00000240: DUP2 00000241: SWAP1 00000242: PUSH2 0x024b 00000245: DUP3 00000246: DUP3 00000247: PUSH2 0x0b80 0000024a: JUMP 0000024b: JUMPDEST 0000024c: SWAP1 0000024d: POP 0000024e: POP 0000024f: DUP2 00000250: PUSH1 0x01 00000252: PUSH1 0x01 00000254: PUSH1 0xa0 00000256: SHL 00000257: SUB 00000258: AND 00000259: PUSH32 0xfe57ba8a30e3ce0a471426cfec2ccdab2f7c7b516f9de8e5a8c8ace909dcfd03 0000027a: DUP3 0000027b: PUSH1 0x40 0000027d: MLOAD 0000027e: PUSH2 0x0287 00000281: SWAP2 00000282: SWAP1 00000283: PUSH2 0x0bc6 00000286: JUMP 00000287: JUMPDEST 00000288: PUSH1 0x40 0000028a: MLOAD 0000028b: DUP1 0000028c: SWAP2 0000028d: SUB 0000028e: SWAP1 0000028f: LOG2 00000290: POP 00000291: POP 00000292: JUMP 00000293: JUMPDEST 00000294: PUSH2 0x029b 00000297: PUSH2 0x07cb 0000029a: JUMP 0000029b: JUMPDEST 0000029c: DUP2 0000029d: PUSH0 0000029e: SUB 0000029f: PUSH2 0x02bb 000002a2: JUMPI 000002a3: PUSH1 0x40 000002a5: MLOAD 000002a6: PUSH4 0x12073f6d 000002ab: PUSH1 0xe2 000002ad: SHL 000002ae: DUP2 000002af: MSTORE 000002b0: PUSH1 0x04 000002b2: ADD 000002b3: PUSH1 0x40 000002b5: MLOAD 000002b6: DUP1 000002b7: SWAP2 000002b8: SUB 000002b9: SWAP1 000002ba: REVERT 000002bb: JUMPDEST 000002bc: CALLER 000002bd: PUSH0 000002be: SWAP1 000002bf: DUP2 000002c0: MSTORE 000002c1: PUSH1 0x05 000002c3: PUSH1 0x20 000002c5: SWAP1 000002c6: DUP2 000002c7: MSTORE 000002c8: PUSH1 0x40 000002ca: DUP1 000002cb: DUP4 000002cc: KECCAK256 000002cd: PUSH1 0x01 000002cf: PUSH1 0x01 000002d1: PUSH1 0xa0 000002d3: SHL 000002d4: SUB 000002d5: DUP8 000002d6: AND 000002d7: DUP5 000002d8: MSTORE 000002d9: SWAP1 000002da: SWAP2 000002db: MSTORE 000002dc: SWAP1 000002dd: KECCAK256 000002de: SLOAD 000002df: DUP3 000002e0: GT 000002e1: ISZERO 000002e2: PUSH2 0x02fe 000002e5: JUMPI 000002e6: PUSH1 0x40 000002e8: MLOAD 000002e9: PUSH4 0x2858f9ab 000002ee: PUSH1 0xe1 000002f0: SHL 000002f1: DUP2 000002f2: MSTORE 000002f3: PUSH1 0x04 000002f5: ADD 000002f6: PUSH1 0x40 000002f8: MLOAD 000002f9: DUP1 000002fa: SWAP2 000002fb: SUB 000002fc: SWAP1 000002fd: REVERT 000002fe: JUMPDEST 000002ff: PUSH1 0x01 00000301: PUSH1 0x01 00000303: PUSH1 0xa0 00000305: SHL 00000306: SUB 00000307: DUP2 00000308: AND 00000309: PUSH2 0x0325 0000030c: JUMPI 0000030d: PUSH1 0x40 0000030f: MLOAD 00000310: PUSH4 0xc61d2985 00000315: PUSH1 0xe0 00000317: SHL 00000318: DUP2 00000319: MSTORE 0000031a: PUSH1 0x04 0000031c: ADD 0000031d: PUSH1 0x40 0000031f: MLOAD 00000320: DUP1 00000321: SWAP2 00000322: SUB 00000323: SWAP1 00000324: REVERT 00000325: JUMPDEST 00000326: PUSH1 0x01 00000328: PUSH1 0x01 0000032a: PUSH1 0xa0 0000032c: SHL 0000032d: SUB 0000032e: DUP4 0000032f: AND 00000330: PUSH0 00000331: SWAP1 00000332: DUP2 00000333: MSTORE 00000334: PUSH1 0x03 00000336: PUSH1 0x20 00000338: MSTORE 00000339: PUSH1 0x40 0000033b: SWAP1 0000033c: KECCAK256 0000033d: SLOAD 0000033e: PUSH2 0x0100 00000341: SWAP1 00000342: DIV 00000343: PUSH1 0xff 00000345: AND 00000346: PUSH2 0x0372 00000349: JUMPI 0000034a: PUSH1 0x40 0000034c: MLOAD 0000034d: PUSH4 0x015e27a3 00000352: PUSH1 0xe0 00000354: SHL 00000355: DUP2 00000356: MSTORE 00000357: PUSH1 0x01 00000359: PUSH1 0x01 0000035b: PUSH1 0xa0 0000035d: SHL 0000035e: SUB 0000035f: DUP5 00000360: AND 00000361: PUSH1 0x04 00000363: DUP3 00000364: ADD 00000365: MSTORE 00000366: PUSH1 0x24 00000368: ADD 00000369: JUMPDEST 0000036a: PUSH1 0x40 0000036c: MLOAD 0000036d: DUP1 0000036e: SWAP2 0000036f: SUB 00000370: SWAP1 00000371: REVERT 00000372: JUMPDEST 00000373: PUSH1 0x01 00000375: PUSH1 0x01 00000377: PUSH1 0xa0 00000379: SHL 0000037a: SUB 0000037b: DUP4 0000037c: AND 0000037d: PUSH0 0000037e: DUP2 0000037f: DUP2 00000380: MSTORE 00000381: PUSH1 0x04 00000383: PUSH1 0x20 00000385: SWAP1 00000386: DUP2 00000387: MSTORE 00000388: PUSH1 0x40 0000038a: DUP1 0000038b: DUP4 0000038c: KECCAK256 0000038d: DUP1 0000038e: SLOAD 0000038f: DUP8 00000390: SWAP1 00000391: SUB 00000392: SWAP1 00000393: SSTORE 00000394: CALLER 00000395: DUP4 00000396: MSTORE 00000397: PUSH1 0x05 00000399: DUP3 0000039a: MSTORE 0000039b: DUP1 0000039c: DUP4 0000039d: KECCAK256 0000039e: DUP5 0000039f: DUP5 000003a0: MSTORE 000003a1: SWAP1 000003a2: SWAP2 000003a3: MSTORE 000003a4: SWAP1 000003a5: KECCAK256 000003a6: DUP1 000003a7: SLOAD 000003a8: DUP5 000003a9: SWAP1 000003aa: SUB 000003ab: SWAP1 000003ac: SSTORE 000003ad: PUSH2 0x03b7 000003b0: SWAP1 000003b1: DUP3 000003b2: DUP5 000003b3: PUSH2 0x07f3 000003b6: JUMP 000003b7: JUMPDEST 000003b8: PUSH1 0x40 000003ba: MLOAD 000003bb: DUP3 000003bc: DUP2 000003bd: MSTORE 000003be: CALLER 000003bf: SWAP1 000003c0: PUSH1 0x01 000003c2: PUSH1 0x01 000003c4: PUSH1 0xa0 000003c6: SHL 000003c7: SUB 000003c8: DUP6 000003c9: AND 000003ca: SWAP1 000003cb: PUSH32 0x9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb 000003ec: SWAP1 000003ed: PUSH1 0x20 000003ef: ADD 000003f0: PUSH1 0x40 000003f2: MLOAD 000003f3: DUP1 000003f4: SWAP2 000003f5: SUB 000003f6: SWAP1 000003f7: LOG3 000003f8: PUSH2 0x0401 000003fb: PUSH1 0x01 000003fd: PUSH1 0x02 000003ff: SSTORE 00000400: JUMP 00000401: JUMPDEST 00000402: POP 00000403: POP 00000404: POP 00000405: JUMP 00000406: JUMPDEST 00000407: PUSH2 0x040e 0000040a: PUSH2 0x079f 0000040d: JUMP 0000040e: JUMPDEST 0000040f: PUSH2 0x0417 00000412: PUSH0 00000413: PUSH2 0x0852 00000416: JUMP 00000417: JUMPDEST 00000418: JUMP 00000419: JUMPDEST 0000041a: PUSH1 0x01 0000041c: SLOAD 0000041d: CALLER 0000041e: SWAP1 0000041f: PUSH1 0x01 00000421: PUSH1 0x01 00000423: PUSH1 0xa0 00000425: SHL 00000426: SUB 00000427: AND 00000428: DUP2 00000429: EQ 0000042a: PUSH2 0x0451 0000042d: JUMPI 0000042e: PUSH1 0x40 00000430: MLOAD 00000431: PUSH4 0x118cdaa7 00000436: PUSH1 0xe0 00000438: SHL 00000439: DUP2 0000043a: MSTORE 0000043b: PUSH1 0x01 0000043d: PUSH1 0x01 0000043f: PUSH1 0xa0 00000441: SHL 00000442: SUB 00000443: DUP3 00000444: AND 00000445: PUSH1 0x04 00000447: DUP3 00000448: ADD 00000449: MSTORE 0000044a: PUSH1 0x24 0000044c: ADD 0000044d: PUSH2 0x0369 00000450: JUMP 00000451: JUMPDEST 00000452: PUSH2 0x045a 00000455: DUP2 00000456: PUSH2 0x0852 00000459: JUMP 0000045a: JUMPDEST 0000045b: POP 0000045c: JUMP 0000045d: JUMPDEST 0000045e: PUSH2 0x0465 00000461: PUSH2 0x079f 00000464: JUMP 00000465: JUMPDEST 00000466: PUSH2 0x045a 00000469: PUSH2 0x0479 0000046c: PUSH0 0000046d: SLOAD 0000046e: PUSH1 0x01 00000470: PUSH1 0x01 00000472: PUSH1 0xa0 00000474: SHL 00000475: SUB 00000476: AND 00000477: SWAP1 00000478: JUMP 00000479: JUMPDEST 0000047a: PUSH1 0x01 0000047c: PUSH1 0x01 0000047e: PUSH1 0xa0 00000480: SHL 00000481: SUB 00000482: DUP4 00000483: AND 00000484: PUSH0 00000485: DUP2 00000486: DUP2 00000487: MSTORE 00000488: PUSH1 0x04 0000048a: PUSH1 0x20 0000048c: DUP2 0000048d: SWAP1 0000048e: MSTORE 0000048f: PUSH1 0x40 00000491: SWAP2 00000492: DUP3 00000493: SWAP1 00000494: KECCAK256 00000495: SLOAD 00000496: SWAP2 00000497: MLOAD 00000498: PUSH4 0x70a08231 0000049d: PUSH1 0xe0 0000049f: SHL 000004a0: DUP2 000004a1: MSTORE 000004a2: ADDRESS 000004a3: SWAP2 000004a4: DUP2 000004a5: ADD 000004a6: SWAP2 000004a7: SWAP1 000004a8: SWAP2 000004a9: MSTORE 000004aa: SWAP1 000004ab: SWAP2 000004ac: SWAP1 000004ad: PUSH4 0x70a08231 000004b2: SWAP1 000004b3: PUSH1 0x24 000004b5: ADD 000004b6: PUSH1 0x20 000004b8: PUSH1 0x40 000004ba: MLOAD 000004bb: DUP1 000004bc: DUP4 000004bd: SUB 000004be: DUP2 000004bf: DUP7 000004c0: GAS 000004c1: STATICCALL 000004c2: ISZERO 000004c3: DUP1 000004c4: ISZERO 000004c5: PUSH2 0x04d0 000004c8: JUMPI 000004c9: RETURNDATASIZE 000004ca: PUSH0 000004cb: DUP1 000004cc: RETURNDATACOPY 000004cd: RETURNDATASIZE 000004ce: PUSH0 000004cf: REVERT 000004d0: JUMPDEST 000004d1: POP 000004d2: POP 000004d3: POP 000004d4: POP 000004d5: PUSH1 0x40 000004d7: MLOAD 000004d8: RETURNDATASIZE 000004d9: PUSH1 0x1f 000004db: NOT 000004dc: PUSH1 0x1f 000004de: DUP3 000004df: ADD 000004e0: AND 000004e1: DUP3 000004e2: ADD 000004e3: DUP1 000004e4: PUSH1 0x40 000004e6: MSTORE 000004e7: POP 000004e8: DUP2 000004e9: ADD 000004ea: SWAP1 000004eb: PUSH2 0x04f4 000004ee: SWAP2 000004ef: SWAP1 000004f0: PUSH2 0x0bf6 000004f3: JUMP 000004f4: JUMPDEST 000004f5: PUSH2 0x04fe 000004f8: SWAP2 000004f9: SWAP1 000004fa: PUSH2 0x0c21 000004fd: JUMP 000004fe: JUMPDEST 000004ff: PUSH1 0x01 00000501: PUSH1 0x01 00000503: PUSH1 0xa0 00000505: SHL 00000506: SUB 00000507: DUP5 00000508: AND 00000509: SWAP2 0000050a: SWAP1 0000050b: PUSH2 0x07f3 0000050e: JUMP 0000050f: JUMPDEST 00000510: PUSH2 0x0517 00000513: PUSH2 0x079f 00000516: JUMP 00000517: JUMPDEST 00000518: PUSH1 0x01 0000051a: DUP1 0000051b: SLOAD 0000051c: PUSH1 0x01 0000051e: PUSH1 0x01 00000520: PUSH1 0xa0 00000522: SHL 00000523: SUB 00000524: DUP4 00000525: AND 00000526: PUSH1 0x01 00000528: PUSH1 0x01 0000052a: PUSH1 0xa0 0000052c: SHL 0000052d: SUB 0000052e: NOT 0000052f: SWAP1 00000530: SWAP2 00000531: AND 00000532: DUP2 00000533: OR 00000534: SWAP1 00000535: SWAP2 00000536: SSTORE 00000537: PUSH2 0x0547 0000053a: PUSH0 0000053b: SLOAD 0000053c: PUSH1 0x01 0000053e: PUSH1 0x01 00000540: PUSH1 0xa0 00000542: SHL 00000543: SUB 00000544: AND 00000545: SWAP1 00000546: JUMP 00000547: JUMPDEST 00000548: PUSH1 0x01 0000054a: PUSH1 0x01 0000054c: PUSH1 0xa0 0000054e: SHL 0000054f: SUB 00000550: AND 00000551: PUSH32 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700 00000572: PUSH1 0x40 00000574: MLOAD 00000575: PUSH1 0x40 00000577: MLOAD 00000578: DUP1 00000579: SWAP2 0000057a: SUB 0000057b: SWAP1 0000057c: LOG3 0000057d: POP 0000057e: JUMP 0000057f: JUMPDEST 00000580: PUSH2 0x0587 00000583: PUSH2 0x07cb 00000586: JUMP 00000587: JUMPDEST 00000588: DUP2 00000589: PUSH0 0000058a: SUB 0000058b: PUSH2 0x05a7 0000058e: JUMPI 0000058f: PUSH1 0x40 00000591: MLOAD 00000592: PUSH4 0x12073f6d 00000597: PUSH1 0xe2 00000599: SHL 0000059a: DUP2 0000059b: MSTORE 0000059c: PUSH1 0x04 0000059e: ADD 0000059f: PUSH1 0x40 000005a1: MLOAD 000005a2: DUP1 000005a3: SWAP2 000005a4: SUB 000005a5: SWAP1 000005a6: REVERT 000005a7: JUMPDEST 000005a8: PUSH1 0x01 000005aa: PUSH1 0x01 000005ac: PUSH1 0xa0 000005ae: SHL 000005af: SUB 000005b0: DUP2 000005b1: AND 000005b2: PUSH2 0x05ce 000005b5: JUMPI 000005b6: PUSH1 0x40 000005b8: MLOAD 000005b9: PUSH4 0xc61d2985 000005be: PUSH1 0xe0 000005c0: SHL 000005c1: DUP2 000005c2: MSTORE 000005c3: PUSH1 0x04 000005c5: ADD 000005c6: PUSH1 0x40 000005c8: MLOAD 000005c9: DUP1 000005ca: SWAP2 000005cb: SUB 000005cc: SWAP1 000005cd: REVERT 000005ce: JUMPDEST 000005cf: PUSH1 0x01 000005d1: PUSH1 0x01 000005d3: PUSH1 0xa0 000005d5: SHL 000005d6: SUB 000005d7: DUP4 000005d8: AND 000005d9: PUSH0 000005da: SWAP1 000005db: DUP2 000005dc: MSTORE 000005dd: PUSH1 0x03 000005df: PUSH1 0x20 000005e1: MSTORE 000005e2: PUSH1 0x40 000005e4: SWAP1 000005e5: KECCAK256 000005e6: SLOAD 000005e7: PUSH1 0xff 000005e9: AND 000005ea: PUSH2 0x0611 000005ed: JUMPI 000005ee: PUSH1 0x40 000005f0: MLOAD 000005f1: PUSH4 0x015e27a3 000005f6: PUSH1 0xe0 000005f8: SHL 000005f9: DUP2 000005fa: MSTORE 000005fb: PUSH1 0x01 000005fd: PUSH1 0x01 000005ff: PUSH1 0xa0 00000601: SHL 00000602: SUB 00000603: DUP5 00000604: AND 00000605: PUSH1 0x04 00000607: DUP3 00000608: ADD 00000609: MSTORE 0000060a: PUSH1 0x24 0000060c: ADD 0000060d: PUSH2 0x0369 00000610: JUMP 00000611: JUMPDEST 00000612: PUSH1 0x40 00000614: MLOAD 00000615: PUSH4 0x70a08231 0000061a: PUSH1 0xe0 0000061c: SHL 0000061d: DUP2 0000061e: MSTORE 0000061f: ADDRESS 00000620: PUSH1 0x04 00000622: DUP3 00000623: ADD 00000624: MSTORE 00000625: PUSH0 00000626: SWAP1 00000627: PUSH1 0x01 00000629: PUSH1 0x01 0000062b: PUSH1 0xa0 0000062d: SHL 0000062e: SUB 0000062f: DUP6 00000630: AND 00000631: SWAP1 00000632: PUSH4 0x70a08231 00000637: SWAP1 00000638: PUSH1 0x24 0000063a: ADD 0000063b: PUSH1 0x20 0000063d: PUSH1 0x40 0000063f: MLOAD 00000640: DUP1 00000641: DUP4 00000642: SUB 00000643: DUP2 00000644: DUP7 00000645: GAS 00000646: STATICCALL 00000647: ISZERO 00000648: DUP1 00000649: ISZERO 0000064a: PUSH2 0x0655 0000064d: JUMPI 0000064e: RETURNDATASIZE 0000064f: PUSH0 00000650: DUP1 00000651: RETURNDATACOPY 00000652: RETURNDATASIZE 00000653: PUSH0 00000654: REVERT 00000655: JUMPDEST 00000656: POP 00000657: POP 00000658: POP 00000659: POP 0000065a: PUSH1 0x40 0000065c: MLOAD 0000065d: RETURNDATASIZE 0000065e: PUSH1 0x1f 00000660: NOT 00000661: PUSH1 0x1f 00000663: DUP3 00000664: ADD 00000665: AND 00000666: DUP3 00000667: ADD 00000668: DUP1 00000669: PUSH1 0x40 0000066b: MSTORE 0000066c: POP 0000066d: DUP2 0000066e: ADD 0000066f: SWAP1 00000670: PUSH2 0x0679 00000673: SWAP2 00000674: SWAP1 00000675: PUSH2 0x0bf6 00000678: JUMP 00000679: JUMPDEST 0000067a: SWAP1 0000067b: POP 0000067c: PUSH2 0x0690 0000067f: PUSH1 0x01 00000681: PUSH1 0x01 00000683: PUSH1 0xa0 00000685: SHL 00000686: SUB 00000687: DUP6 00000688: AND 00000689: CALLER 0000068a: ADDRESS 0000068b: DUP7 0000068c: PUSH2 0x086b 0000068f: JUMP 00000690: JUMPDEST 00000691: PUSH1 0x40 00000693: MLOAD 00000694: PUSH4 0x70a08231 00000699: PUSH1 0xe0 0000069b: SHL 0000069c: DUP2 0000069d: MSTORE 0000069e: ADDRESS 0000069f: PUSH1 0x04 000006a1: DUP3 000006a2: ADD 000006a3: MSTORE 000006a4: DUP2 000006a5: SWAP1 000006a6: PUSH1 0x01 000006a8: PUSH1 0x01 000006aa: PUSH1 0xa0 000006ac: SHL 000006ad: SUB 000006ae: DUP7 000006af: AND 000006b0: SWAP1 000006b1: PUSH4 0x70a08231 000006b6: SWAP1 000006b7: PUSH1 0x24 000006b9: ADD 000006ba: PUSH1 0x20 000006bc: PUSH1 0x40 000006be: MLOAD 000006bf: DUP1 000006c0: DUP4 000006c1: SUB 000006c2: DUP2 000006c3: DUP7 000006c4: GAS 000006c5: STATICCALL 000006c6: ISZERO 000006c7: DUP1 000006c8: ISZERO 000006c9: PUSH2 0x06d4 000006cc: JUMPI 000006cd: RETURNDATASIZE 000006ce: PUSH0 000006cf: DUP1 000006d0: RETURNDATACOPY 000006d1: RETURNDATASIZE 000006d2: PUSH0 000006d3: REVERT 000006d4: JUMPDEST 000006d5: POP 000006d6: POP 000006d7: POP 000006d8: POP 000006d9: PUSH1 0x40 000006db: MLOAD 000006dc: RETURNDATASIZE 000006dd: PUSH1 0x1f 000006df: NOT 000006e0: PUSH1 0x1f 000006e2: DUP3 000006e3: ADD 000006e4: AND 000006e5: DUP3 000006e6: ADD 000006e7: DUP1 000006e8: PUSH1 0x40 000006ea: MSTORE 000006eb: POP 000006ec: DUP2 000006ed: ADD 000006ee: SWAP1 000006ef: PUSH2 0x06f8 000006f2: SWAP2 000006f3: SWAP1 000006f4: PUSH2 0x0bf6 000006f7: JUMP 000006f8: JUMPDEST 000006f9: PUSH2 0x0702 000006fc: SWAP2 000006fd: SWAP1 000006fe: PUSH2 0x0c21 00000701: JUMP 00000702: JUMPDEST 00000703: PUSH1 0x01 00000705: PUSH1 0x01 00000707: PUSH1 0xa0 00000709: SHL 0000070a: SUB 0000070b: DUP6 0000070c: AND 0000070d: PUSH0 0000070e: SWAP1 0000070f: DUP2 00000710: MSTORE 00000711: PUSH1 0x04 00000713: PUSH1 0x20 00000715: MSTORE 00000716: PUSH1 0x40 00000718: DUP2 00000719: KECCAK256 0000071a: DUP1 0000071b: SLOAD 0000071c: SWAP3 0000071d: SWAP6 0000071e: POP 0000071f: DUP6 00000720: SWAP3 00000721: SWAP1 00000722: SWAP2 00000723: SWAP1 00000724: PUSH2 0x072e 00000727: SWAP1 00000728: DUP5 00000729: SWAP1 0000072a: PUSH2 0x0c34 0000072d: JUMP 0000072e: JUMPDEST 0000072f: SWAP1 00000730: SWAP2 00000731: SSTORE 00000732: POP 00000733: POP 00000734: PUSH1 0x01 00000736: PUSH1 0x01 00000738: PUSH1 0xa0 0000073a: SHL 0000073b: SUB 0000073c: DUP3 0000073d: DUP2 0000073e: AND 0000073f: PUSH0 00000740: DUP2 00000741: DUP2 00000742: MSTORE 00000743: PUSH1 0x05 00000745: PUSH1 0x20 00000747: SWAP1 00000748: DUP2 00000749: MSTORE 0000074a: PUSH1 0x40 0000074c: DUP1 0000074d: DUP4 0000074e: KECCAK256 0000074f: SWAP5 00000750: DUP10 00000751: AND 00000752: DUP1 00000753: DUP5 00000754: MSTORE 00000755: SWAP5 00000756: DUP3 00000757: MSTORE 00000758: SWAP2 00000759: DUP3 0000075a: SWAP1 0000075b: KECCAK256 0000075c: DUP1 0000075d: SLOAD 0000075e: DUP9 0000075f: ADD 00000760: SWAP1 00000761: SSTORE 00000762: SWAP1 00000763: MLOAD 00000764: DUP7 00000765: DUP2 00000766: MSTORE 00000767: SWAP2 00000768: SWAP3 00000769: SWAP2 0000076a: PUSH32 0x5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62 0000078b: SWAP2 0000078c: ADD 0000078d: PUSH1 0x40 0000078f: MLOAD 00000790: DUP1 00000791: SWAP2 00000792: SUB 00000793: SWAP1 00000794: LOG3 00000795: POP 00000796: PUSH2 0x0401 00000799: PUSH1 0x01 0000079b: PUSH1 0x02 0000079d: SSTORE 0000079e: JUMP 0000079f: JUMPDEST 000007a0: PUSH0 000007a1: SLOAD 000007a2: PUSH1 0x01 000007a4: PUSH1 0x01 000007a6: PUSH1 0xa0 000007a8: SHL 000007a9: SUB 000007aa: AND 000007ab: CALLER 000007ac: EQ 000007ad: PUSH2 0x0417 000007b0: JUMPI 000007b1: PUSH1 0x40 000007b3: MLOAD 000007b4: PUSH4 0x118cdaa7 000007b9: PUSH1 0xe0 000007bb: SHL 000007bc: DUP2 000007bd: MSTORE 000007be: CALLER 000007bf: PUSH1 0x04 000007c1: DUP3 000007c2: ADD 000007c3: MSTORE 000007c4: PUSH1 0x24 000007c6: ADD 000007c7: PUSH2 0x0369 000007ca: JUMP 000007cb: JUMPDEST 000007cc: PUSH1 0x02 000007ce: DUP1 000007cf: SLOAD 000007d0: SUB 000007d1: PUSH2 0x07ed 000007d4: JUMPI 000007d5: PUSH1 0x40 000007d7: MLOAD 000007d8: PUSH4 0x3ee5aeb5 000007dd: PUSH1 0xe0 000007df: SHL 000007e0: DUP2 000007e1: MSTORE 000007e2: PUSH1 0x04 000007e4: ADD 000007e5: PUSH1 0x40 000007e7: MLOAD 000007e8: DUP1 000007e9: SWAP2 000007ea: SUB 000007eb: SWAP1 000007ec: REVERT 000007ed: JUMPDEST 000007ee: PUSH1 0x02 000007f0: DUP1 000007f1: SSTORE 000007f2: JUMP 000007f3: JUMPDEST 000007f4: PUSH1 0x40 000007f6: MLOAD 000007f7: PUSH1 0x01 000007f9: PUSH1 0x01 000007fb: PUSH1 0xa0 000007fd: SHL 000007fe: SUB 000007ff: DUP4 00000800: DUP2 00000801: AND 00000802: PUSH1 0x24 00000804: DUP4 00000805: ADD 00000806: MSTORE 00000807: PUSH1 0x44 00000809: DUP3 0000080a: ADD 0000080b: DUP4 0000080c: SWAP1 0000080d: MSTORE 0000080e: PUSH2 0x0401 00000811: SWAP2 00000812: DUP6 00000813: SWAP2 00000814: DUP3 00000815: AND 00000816: SWAP1 00000817: PUSH4 0xa9059cbb 0000081c: SWAP1 0000081d: PUSH1 0x64 0000081f: ADD 00000820: JUMPDEST 00000821: PUSH1 0x40 00000823: MLOAD 00000824: PUSH1 0x20 00000826: DUP2 00000827: DUP4 00000828: SUB 00000829: SUB 0000082a: DUP2 0000082b: MSTORE 0000082c: SWAP1 0000082d: PUSH1 0x40 0000082f: MSTORE 00000830: SWAP2 00000831: POP 00000832: PUSH1 0xe0 00000834: SHL 00000835: PUSH1 0x20 00000837: DUP3 00000838: ADD 00000839: DUP1 0000083a: MLOAD 0000083b: PUSH1 0x01 0000083d: PUSH1 0x01 0000083f: PUSH1 0xe0 00000841: SHL 00000842: SUB 00000843: DUP4 00000844: DUP2 00000845: DUP4 00000846: AND 00000847: OR 00000848: DUP4 00000849: MSTORE 0000084a: POP 0000084b: POP 0000084c: POP 0000084d: POP 0000084e: PUSH2 0x08aa 00000851: JUMP 00000852: JUMPDEST 00000853: PUSH1 0x01 00000855: DUP1 00000856: SLOAD 00000857: PUSH1 0x01 00000859: PUSH1 0x01 0000085b: PUSH1 0xa0 0000085d: SHL 0000085e: SUB 0000085f: NOT 00000860: AND 00000861: SWAP1 00000862: SSTORE 00000863: PUSH2 0x045a 00000866: DUP2 00000867: PUSH2 0x090b 0000086a: JUMP 0000086b: JUMPDEST 0000086c: PUSH1 0x40 0000086e: MLOAD 0000086f: PUSH1 0x01 00000871: PUSH1 0x01 00000873: PUSH1 0xa0 00000875: SHL 00000876: SUB 00000877: DUP5 00000878: DUP2 00000879: AND 0000087a: PUSH1 0x24 0000087c: DUP4 0000087d: ADD 0000087e: MSTORE 0000087f: DUP4 00000880: DUP2 00000881: AND 00000882: PUSH1 0x44 00000884: DUP4 00000885: ADD 00000886: MSTORE 00000887: PUSH1 0x64 00000889: DUP3 0000088a: ADD 0000088b: DUP4 0000088c: SWAP1 0000088d: MSTORE 0000088e: PUSH2 0x08a4 00000891: SWAP2 00000892: DUP7 00000893: SWAP2 00000894: DUP3 00000895: AND 00000896: SWAP1 00000897: PUSH4 0x23b872dd 0000089c: SWAP1 0000089d: PUSH1 0x84 0000089f: ADD 000008a0: PUSH2 0x0820 000008a3: JUMP 000008a4: JUMPDEST 000008a5: POP 000008a6: POP 000008a7: POP 000008a8: POP 000008a9: JUMP 000008aa: JUMPDEST 000008ab: PUSH0 000008ac: PUSH2 0x08be 000008af: PUSH1 0x01 000008b1: PUSH1 0x01 000008b3: PUSH1 0xa0 000008b5: SHL 000008b6: SUB 000008b7: DUP5 000008b8: AND 000008b9: DUP4 000008ba: PUSH2 0x095a 000008bd: JUMP 000008be: JUMPDEST 000008bf: SWAP1 000008c0: POP 000008c1: DUP1 000008c2: MLOAD 000008c3: PUSH0 000008c4: EQ 000008c5: ISZERO 000008c6: DUP1 000008c7: ISZERO 000008c8: PUSH2 0x08e2 000008cb: JUMPI 000008cc: POP 000008cd: DUP1 000008ce: DUP1 000008cf: PUSH1 0x20 000008d1: ADD 000008d2: SWAP1 000008d3: MLOAD 000008d4: DUP2 000008d5: ADD 000008d6: SWAP1 000008d7: PUSH2 0x08e0 000008da: SWAP2 000008db: SWAP1 000008dc: PUSH2 0x0c47 000008df: JUMP 000008e0: JUMPDEST 000008e1: ISZERO 000008e2: JUMPDEST 000008e3: ISZERO 000008e4: PUSH2 0x0401 000008e7: JUMPI 000008e8: PUSH1 0x40 000008ea: MLOAD 000008eb: PUSH4 0x5274afe7 000008f0: PUSH1 0xe0 000008f2: SHL 000008f3: DUP2 000008f4: MSTORE 000008f5: PUSH1 0x01 000008f7: PUSH1 0x01 000008f9: PUSH1 0xa0 000008fb: SHL 000008fc: SUB 000008fd: DUP5 000008fe: AND 000008ff: PUSH1 0x04 00000901: DUP3 00000902: ADD 00000903: MSTORE 00000904: PUSH1 0x24 00000906: ADD 00000907: PUSH2 0x0369 0000090a: JUMP 0000090b: JUMPDEST 0000090c: PUSH0 0000090d: DUP1 0000090e: SLOAD 0000090f: PUSH1 0x01 00000911: PUSH1 0x01 00000913: PUSH1 0xa0 00000915: SHL 00000916: SUB 00000917: DUP4 00000918: DUP2 00000919: AND 0000091a: PUSH1 0x01 0000091c: PUSH1 0x01 0000091e: PUSH1 0xa0 00000920: SHL 00000921: SUB 00000922: NOT 00000923: DUP4 00000924: AND 00000925: DUP2 00000926: OR 00000927: DUP5 00000928: SSTORE 00000929: PUSH1 0x40 0000092b: MLOAD 0000092c: SWAP2 0000092d: SWAP1 0000092e: SWAP3 0000092f: AND 00000930: SWAP3 00000931: DUP4 00000932: SWAP2 00000933: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 00000954: SWAP2 00000955: SWAP1 00000956: LOG3 00000957: POP 00000958: POP 00000959: JUMP 0000095a: JUMPDEST 0000095b: PUSH1 0x60 0000095d: PUSH2 0x0967 00000960: DUP4 00000961: DUP4 00000962: PUSH0 00000963: PUSH2 0x0970 00000966: JUMP 00000967: JUMPDEST 00000968: SWAP1 00000969: POP 0000096a: JUMPDEST 0000096b: SWAP3 0000096c: SWAP2 0000096d: POP 0000096e: POP 0000096f: JUMP 00000970: JUMPDEST 00000971: PUSH1 0x60 00000973: DUP2 00000974: SELFBALANCE 00000975: LT 00000976: ISZERO 00000977: PUSH2 0x0995 0000097a: JUMPI 0000097b: PUSH1 0x40 0000097d: MLOAD 0000097e: PUSH4 0xcd786059 00000983: PUSH1 0xe0 00000985: SHL 00000986: DUP2 00000987: MSTORE 00000988: ADDRESS 00000989: PUSH1 0x04 0000098b: DUP3 0000098c: ADD 0000098d: MSTORE 0000098e: PUSH1 0x24 00000990: ADD 00000991: PUSH2 0x0369 00000994: JUMP 00000995: JUMPDEST 00000996: PUSH0 00000997: DUP1 00000998: DUP6 00000999: PUSH1 0x01 0000099b: PUSH1 0x01 0000099d: PUSH1 0xa0 0000099f: SHL 000009a0: SUB 000009a1: AND 000009a2: DUP5 000009a3: DUP7 000009a4: PUSH1 0x40 000009a6: MLOAD 000009a7: PUSH2 0x09b0 000009aa: SWAP2 000009ab: SWAP1 000009ac: PUSH2 0x0c62 000009af: JUMP 000009b0: JUMPDEST 000009b1: PUSH0 000009b2: PUSH1 0x40 000009b4: MLOAD 000009b5: DUP1 000009b6: DUP4 000009b7: SUB 000009b8: DUP2 000009b9: DUP6 000009ba: DUP8 000009bb: GAS 000009bc: CALL 000009bd: SWAP3 000009be: POP 000009bf: POP 000009c0: POP 000009c1: RETURNDATASIZE 000009c2: DUP1 000009c3: PUSH0 000009c4: DUP2 000009c5: EQ 000009c6: PUSH2 0x09ea 000009c9: JUMPI 000009ca: PUSH1 0x40 000009cc: MLOAD 000009cd: SWAP2 000009ce: POP 000009cf: PUSH1 0x1f 000009d1: NOT 000009d2: PUSH1 0x3f 000009d4: RETURNDATASIZE 000009d5: ADD 000009d6: AND 000009d7: DUP3 000009d8: ADD 000009d9: PUSH1 0x40 000009db: MSTORE 000009dc: RETURNDATASIZE 000009dd: DUP3 000009de: MSTORE 000009df: RETURNDATASIZE 000009e0: PUSH0 000009e1: PUSH1 0x20 000009e3: DUP5 000009e4: ADD 000009e5: RETURNDATACOPY 000009e6: PUSH2 0x09ef 000009e9: JUMP 000009ea: JUMPDEST 000009eb: PUSH1 0x60 000009ed: SWAP2 000009ee: POP 000009ef: JUMPDEST 000009f0: POP 000009f1: SWAP2 000009f2: POP 000009f3: SWAP2 000009f4: POP 000009f5: PUSH2 0x09ff 000009f8: DUP7 000009f9: DUP4 000009fa: DUP4 000009fb: PUSH2 0x0a0b 000009fe: JUMP 000009ff: JUMPDEST 00000a00: SWAP3 00000a01: POP 00000a02: POP 00000a03: POP 00000a04: JUMPDEST 00000a05: SWAP4 00000a06: SWAP3 00000a07: POP 00000a08: POP 00000a09: POP 00000a0a: JUMP 00000a0b: JUMPDEST 00000a0c: PUSH1 0x60 00000a0e: DUP3 00000a0f: PUSH2 0x0a20 00000a12: JUMPI 00000a13: PUSH2 0x0a1b 00000a16: DUP3 00000a17: PUSH2 0x0a67 00000a1a: JUMP 00000a1b: JUMPDEST 00000a1c: PUSH2 0x0a04 00000a1f: JUMP 00000a20: JUMPDEST 00000a21: DUP2 00000a22: MLOAD 00000a23: ISZERO 00000a24: DUP1 00000a25: ISZERO 00000a26: PUSH2 0x0a37 00000a29: JUMPI 00000a2a: POP 00000a2b: PUSH1 0x01 00000a2d: PUSH1 0x01 00000a2f: PUSH1 0xa0 00000a31: SHL 00000a32: SUB 00000a33: DUP5 00000a34: AND 00000a35: EXTCODESIZE 00000a36: ISZERO 00000a37: JUMPDEST 00000a38: ISZERO 00000a39: PUSH2 0x0a60 00000a3c: JUMPI 00000a3d: PUSH1 0x40 00000a3f: MLOAD 00000a40: PUSH4 0x9996b315 00000a45: PUSH1 0xe0 00000a47: SHL 00000a48: DUP2 00000a49: MSTORE 00000a4a: PUSH1 0x01 00000a4c: PUSH1 0x01 00000a4e: PUSH1 0xa0 00000a50: SHL 00000a51: SUB 00000a52: DUP6 00000a53: AND 00000a54: PUSH1 0x04 00000a56: DUP3 00000a57: ADD 00000a58: MSTORE 00000a59: PUSH1 0x24 00000a5b: ADD 00000a5c: PUSH2 0x0369 00000a5f: JUMP 00000a60: JUMPDEST 00000a61: POP 00000a62: DUP1 00000a63: PUSH2 0x0a04 00000a66: JUMP 00000a67: JUMPDEST 00000a68: DUP1 00000a69: MLOAD 00000a6a: ISZERO 00000a6b: PUSH2 0x0a77 00000a6e: JUMPI 00000a6f: DUP1 00000a70: MLOAD 00000a71: DUP1 00000a72: DUP3 00000a73: PUSH1 0x20 00000a75: ADD 00000a76: REVERT 00000a77: JUMPDEST 00000a78: PUSH1 0x40 00000a7a: MLOAD 00000a7b: PUSH4 0x0a12f521 00000a80: PUSH1 0xe1 00000a82: SHL 00000a83: DUP2 00000a84: MSTORE 00000a85: PUSH1 0x04 00000a87: ADD 00000a88: PUSH1 0x40 00000a8a: MLOAD 00000a8b: DUP1 00000a8c: SWAP2 00000a8d: SUB 00000a8e: SWAP1 00000a8f: REVERT 00000a90: JUMPDEST 00000a91: PUSH1 0x01 00000a93: PUSH1 0x01 00000a95: PUSH1 0xa0 00000a97: SHL 00000a98: SUB 00000a99: DUP2 00000a9a: AND 00000a9b: DUP2 00000a9c: EQ 00000a9d: PUSH2 0x045a 00000aa0: JUMPI 00000aa1: PUSH0 00000aa2: DUP1 00000aa3: REVERT 00000aa4: JUMPDEST 00000aa5: PUSH0 00000aa6: DUP1 00000aa7: DUP3 00000aa8: DUP5 00000aa9: SUB 00000aaa: PUSH1 0x60 00000aac: DUP2 00000aad: SLT 00000aae: ISZERO 00000aaf: PUSH2 0x0ab6 00000ab2: JUMPI 00000ab3: PUSH0 00000ab4: DUP1 00000ab5: REVERT 00000ab6: JUMPDEST 00000ab7: DUP4 00000ab8: CALLDATALOAD 00000ab9: PUSH2 0x0ac1 00000abc: DUP2 00000abd: PUSH2 0x0a90 00000ac0: JUMP 00000ac1: JUMPDEST 00000ac2: SWAP3 00000ac3: POP 00000ac4: PUSH1 0x40 00000ac6: PUSH1 0x1f 00000ac8: NOT 00000ac9: DUP3 00000aca: ADD 00000acb: SLT 00000acc: ISZERO 00000acd: PUSH2 0x0ad4 00000ad0: JUMPI 00000ad1: PUSH0 00000ad2: DUP1 00000ad3: REVERT 00000ad4: JUMPDEST 00000ad5: POP 00000ad6: PUSH1 0x20 00000ad8: DUP4 00000ad9: ADD 00000ada: SWAP1 00000adb: POP 00000adc: SWAP3 00000add: POP 00000ade: SWAP3 00000adf: SWAP1 00000ae0: POP 00000ae1: JUMP 00000ae2: JUMPDEST 00000ae3: PUSH0 00000ae4: PUSH1 0x20 00000ae6: DUP3 00000ae7: DUP5 00000ae8: SUB 00000ae9: SLT 00000aea: ISZERO 00000aeb: PUSH2 0x0af2 00000aee: JUMPI 00000aef: PUSH0 00000af0: DUP1 00000af1: REVERT 00000af2: JUMPDEST 00000af3: DUP2 00000af4: CALLDATALOAD 00000af5: PUSH2 0x0a04 00000af8: DUP2 00000af9: PUSH2 0x0a90 00000afc: JUMP 00000afd: JUMPDEST 00000afe: PUSH0 00000aff: DUP1 00000b00: PUSH0 00000b01: PUSH1 0x60 00000b03: DUP5 00000b04: DUP7 00000b05: SUB 00000b06: SLT 00000b07: ISZERO 00000b08: PUSH2 0x0b0f 00000b0b: JUMPI 00000b0c: PUSH0 00000b0d: DUP1 00000b0e: REVERT 00000b0f: JUMPDEST 00000b10: DUP4 00000b11: CALLDATALOAD 00000b12: PUSH2 0x0b1a 00000b15: DUP2 00000b16: PUSH2 0x0a90 00000b19: JUMP 00000b1a: JUMPDEST 00000b1b: SWAP3 00000b1c: POP 00000b1d: PUSH1 0x20 00000b1f: DUP5 00000b20: ADD 00000b21: CALLDATALOAD 00000b22: SWAP2 00000b23: POP 00000b24: PUSH1 0x40 00000b26: DUP5 00000b27: ADD 00000b28: CALLDATALOAD 00000b29: PUSH2 0x0b31 00000b2c: DUP2 00000b2d: PUSH2 0x0a90 00000b30: JUMP 00000b31: JUMPDEST 00000b32: DUP1 00000b33: SWAP2 00000b34: POP 00000b35: POP 00000b36: SWAP3 00000b37: POP 00000b38: SWAP3 00000b39: POP 00000b3a: SWAP3 00000b3b: JUMP 00000b3c: JUMPDEST 00000b3d: PUSH0 00000b3e: DUP1 00000b3f: PUSH1 0x40 00000b41: DUP4 00000b42: DUP6 00000b43: SUB 00000b44: SLT 00000b45: ISZERO 00000b46: PUSH2 0x0b4d 00000b49: JUMPI 00000b4a: PUSH0 00000b4b: DUP1 00000b4c: REVERT 00000b4d: JUMPDEST 00000b4e: DUP3 00000b4f: CALLDATALOAD 00000b50: PUSH2 0x0b58 00000b53: DUP2 00000b54: PUSH2 0x0a90 00000b57: JUMP 00000b58: JUMPDEST 00000b59: SWAP2 00000b5a: POP 00000b5b: PUSH1 0x20 00000b5d: DUP4 00000b5e: ADD 00000b5f: CALLDATALOAD 00000b60: PUSH2 0x0b68 00000b63: DUP2 00000b64: PUSH2 0x0a90 00000b67: JUMP 00000b68: JUMPDEST 00000b69: DUP1 00000b6a: SWAP2 00000b6b: POP 00000b6c: POP 00000b6d: SWAP3 00000b6e: POP 00000b6f: SWAP3 00000b70: SWAP1 00000b71: POP 00000b72: JUMP 00000b73: JUMPDEST 00000b74: DUP1 00000b75: ISZERO 00000b76: ISZERO 00000b77: DUP2 00000b78: EQ 00000b79: PUSH2 0x045a 00000b7c: JUMPI 00000b7d: PUSH0 00000b7e: DUP1 00000b7f: REVERT 00000b80: JUMPDEST 00000b81: DUP2 00000b82: CALLDATALOAD 00000b83: PUSH2 0x0b8b 00000b86: DUP2 00000b87: PUSH2 0x0b73 00000b8a: JUMP 00000b8b: JUMPDEST 00000b8c: DUP2 00000b8d: SLOAD 00000b8e: PUSH1 0xff 00000b90: NOT 00000b91: DUP2 00000b92: AND 00000b93: SWAP2 00000b94: ISZERO 00000b95: ISZERO 00000b96: PUSH1 0xff 00000b98: AND 00000b99: SWAP2 00000b9a: DUP3 00000b9b: OR 00000b9c: DUP4 00000b9d: SSTORE 00000b9e: PUSH1 0x20 00000ba0: DUP5 00000ba1: ADD 00000ba2: CALLDATALOAD 00000ba3: PUSH2 0x0bab 00000ba6: DUP2 00000ba7: PUSH2 0x0b73 00000baa: JUMP 00000bab: JUMPDEST 00000bac: PUSH2 0xffff 00000baf: NOT 00000bb0: SWAP2 00000bb1: SWAP1 00000bb2: SWAP2 00000bb3: AND 00000bb4: SWAP1 00000bb5: SWAP2 00000bb6: OR 00000bb7: SWAP1 00000bb8: ISZERO 00000bb9: ISZERO 00000bba: PUSH1 0x08 00000bbc: SHL 00000bbd: PUSH2 0xff00 00000bc0: AND 00000bc1: OR 00000bc2: SWAP1 00000bc3: SSTORE 00000bc4: POP 00000bc5: JUMP 00000bc6: JUMPDEST 00000bc7: PUSH1 0x40 00000bc9: DUP2 00000bca: ADD 00000bcb: DUP3 00000bcc: CALLDATALOAD 00000bcd: PUSH2 0x0bd5 00000bd0: DUP2 00000bd1: PUSH2 0x0b73 00000bd4: JUMP 00000bd5: JUMPDEST 00000bd6: ISZERO 00000bd7: ISZERO 00000bd8: DUP3 00000bd9: MSTORE 00000bda: PUSH1 0x20 00000bdc: DUP4 00000bdd: ADD 00000bde: CALLDATALOAD 00000bdf: PUSH2 0x0be7 00000be2: DUP2 00000be3: PUSH2 0x0b73 00000be6: JUMP 00000be7: JUMPDEST 00000be8: DUP1 00000be9: ISZERO 00000bea: ISZERO 00000beb: PUSH1 0x20 00000bed: DUP5 00000bee: ADD 00000bef: MSTORE 00000bf0: POP 00000bf1: SWAP3 00000bf2: SWAP2 00000bf3: POP 00000bf4: POP 00000bf5: JUMP 00000bf6: JUMPDEST 00000bf7: PUSH0 00000bf8: PUSH1 0x20 00000bfa: DUP3 00000bfb: DUP5 00000bfc: SUB 00000bfd: SLT 00000bfe: ISZERO 00000bff: PUSH2 0x0c06 00000c02: JUMPI 00000c03: PUSH0 00000c04: DUP1 00000c05: REVERT 00000c06: JUMPDEST 00000c07: POP 00000c08: MLOAD 00000c09: SWAP2 00000c0a: SWAP1 00000c0b: POP 00000c0c: JUMP 00000c0d: JUMPDEST 00000c0e: PUSH4 0x4e487b71 00000c13: PUSH1 0xe0 00000c15: SHL 00000c16: PUSH0 00000c17: MSTORE 00000c18: PUSH1 0x11 00000c1a: PUSH1 0x04 00000c1c: MSTORE 00000c1d: PUSH1 0x24 00000c1f: PUSH0 00000c20: REVERT 00000c21: JUMPDEST 00000c22: DUP2 00000c23: DUP2 00000c24: SUB 00000c25: DUP2 00000c26: DUP2 00000c27: GT 00000c28: ISZERO 00000c29: PUSH2 0x096a 00000c2c: JUMPI 00000c2d: PUSH2 0x096a 00000c30: PUSH2 0x0c0d 00000c33: JUMP 00000c34: JUMPDEST 00000c35: DUP1 00000c36: DUP3 00000c37: ADD 00000c38: DUP1 00000c39: DUP3 00000c3a: GT 00000c3b: ISZERO 00000c3c: PUSH2 0x096a 00000c3f: JUMPI 00000c40: PUSH2 0x096a 00000c43: PUSH2 0x0c0d 00000c46: JUMP 00000c47: JUMPDEST 00000c48: PUSH0 00000c49: PUSH1 0x20 00000c4b: DUP3 00000c4c: DUP5 00000c4d: SUB 00000c4e: SLT 00000c4f: ISZERO 00000c50: PUSH2 0x0c57 00000c53: JUMPI 00000c54: PUSH0 00000c55: DUP1 00000c56: REVERT 00000c57: JUMPDEST 00000c58: DUP2 00000c59: MLOAD 00000c5a: PUSH2 0x0a04 00000c5d: DUP2 00000c5e: PUSH2 0x0b73 00000c61: JUMP 00000c62: JUMPDEST 00000c63: PUSH0 00000c64: DUP3 00000c65: MLOAD 00000c66: PUSH0 00000c67: JUMPDEST 00000c68: DUP2 00000c69: DUP2 00000c6a: LT 00000c6b: ISZERO 00000c6c: PUSH2 0x0c81 00000c6f: JUMPI 00000c70: PUSH1 0x20 00000c72: DUP2 00000c73: DUP7 00000c74: ADD 00000c75: DUP2 00000c76: ADD 00000c77: MLOAD 00000c78: DUP6 00000c79: DUP4 00000c7a: ADD 00000c7b: MSTORE 00000c7c: ADD 00000c7d: PUSH2 0x0c67 00000c80: JUMP 00000c81: JUMPDEST 00000c82: POP 00000c83: PUSH0 00000c84: SWAP3 00000c85: ADD 00000c86: SWAP2 00000c87: DUP3 00000c88: MSTORE 00000c89: POP 00000c8a: SWAP2 00000c8b: SWAP1 00000c8c: POP 00000c8d: JUMP 00000c8e: INVALID 00000c8f: LOG2 00000c90: PUSH5 0x6970667358 00000c96: UNKNOWN(0x22) 00000c97: SLT 00000c98: KECCAK256 00000c99: UNKNOWN(0xCF) 00000c9a: UNKNOWN(0xA8) 00000c9b: UNKNOWN(0xDD) 00000c9c: BLOBBASEFEE 00000c9d: UNKNOWN(0xC9) 00000c9e: INVALID 00000c9f: GASPRICE 00000ca0: UNKNOWN(0xCD) 00000ca1: BALANCE 00000ca2: UNKNOWN(0x29) 00000ca3: BLOBHASH 00000ca4: UNKNOWN(0x0F) 00000ca5: UNKNOWN(0xA7) 00000ca6: TIMESTAMP 00000ca7: UNKNOWN(0xC7) 00000ca8: UNKNOWN(0xD7) 00000ca9: DUP9 00000caa: UNKNOWN(0xA9) 00000cab: SWAP7 00000cac: EXTCODEHASH 00000cad: UNKNOWN(0xB9) 00000cae: UNKNOWN(0xFC) 00000caf: SWAP10 00000cb0: NOT 00000cb1: UNKNOWN(0xBC) 00000cb2: SWAP5 00000cb3: UNKNOWN(0xED) 00000cb4: CALL 00000cb5: EXTCODEHASH 00000cb6: SWAP10 00000cb7: DIFFICULTY 00000cb8: SWAP8 00000cb9: PUSH5 0x736f6c6343 00000cbf: STOP 00000cc0: ADDMOD 00000cc1: OR 00000cc2: STOP 00000cc3: CALLER
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0x080f6abf9ddc6c057cdcc7b6bc61ad584af18f66ba46da7197d88a2ba1b203c4
call_targets:
0x38d43a6cb8da0e855a42fb6b0733a0498531d774
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x080f6abf9ddc6c057cdcc7b6bc61ad584af18f66ba46da7197d88a2ba1b203c4",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x38d43a6cb8da0e855a42fb6b0733a0498531d774"
],
"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": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa4560996",
"selector": "0xa4560996",
"calldata_variants": [
"0xa4560996",
"0xa45609960000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xccec3716",
"selector": "0xccec3716",
"calldata_variants": [
"0xccec3716",
"0xccec37160000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe30c3978",
"selector": "0xe30c3978",
"calldata_variants": [
"0xe30c3978",
"0xe30c39780000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf45346dc",
"selector": "0xf45346dc",
"calldata_variants": [
"0xf45346dc",
"0xf45346dc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3e82e419",
"selector": "0x3e82e419",
"calldata_variants": [
"0x3e82e419",
"0x3e82e4190000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x68c4ac26",
"selector": "0x68c4ac26",
"calldata_variants": [
"0x68c4ac26",
"0x68c4ac260000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 2492,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3252,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 2,
"guards_detected": [],
"untrusted_call_count": 2
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0x080f6abf9ddc6c057cdcc7b6bc61ad584af18f66ba46da7197d88a2ba1b203c4
call_targets:
0x38d43a6cb8da0e855a42fb6b0733a0498531d774
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x080f6abf9ddc6c057cdcc7b6bc61ad584af18f66ba46da7197d88a2ba1b203c4",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0x38d43a6cb8da0e855a42fb6b0733a0498531d774"
],
"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": "0x8da5cb5b",
"selector": "0x8da5cb5b",
"calldata_variants": [
"0x8da5cb5b",
"0x8da5cb5b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xa4560996",
"selector": "0xa4560996",
"calldata_variants": [
"0xa4560996",
"0xa45609960000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xccec3716",
"selector": "0xccec3716",
"calldata_variants": [
"0xccec3716",
"0xccec37160000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe30c3978",
"selector": "0xe30c3978",
"calldata_variants": [
"0xe30c3978",
"0xe30c39780000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf45346dc",
"selector": "0xf45346dc",
"calldata_variants": [
"0xf45346dc",
"0xf45346dc0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x3e82e419",
"selector": "0x3e82e419",
"calldata_variants": [
"0x3e82e419",
"0x3e82e4190000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x68c4ac26",
"selector": "0x68c4ac26",
"calldata_variants": [
"0x68c4ac26",
"0x68c4ac260000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 2492,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 3252,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 2,
"guards_detected": []
}
|
| medium | math | codex | Fee-on-transfer/rebasing tokens can desync accounting and make withdrawals insolvent | 75 | no | — |
viewevidence_json{
"evidence": "`deposit` adjusts `_amount` based on balance delta for deflationary tokens, but `withdraw` and `rescueERC20` decrement internal balances by the requested amount without considering transfer fees or balance changes outside the contract, allowing `totalStakedBalance` to exceed actual token balance.",
"locations": [
"contracts/src/SimpleStakingERC20.sol:52",
"contracts/src/SimpleStakingERC20.sol:66",
"contracts/src/SimpleStakingERC20.sol:80"
],
"recommendation": "If fee-on-transfer or rebasing tokens are intended to be supported, update accounting on withdrawal/rescue using balance-before/after deltas and ensure `totalStakedBalance` matches the actual balance change. Alternatively, explicitly reject such tokens (e.g., require `balanceAfter == balanceBefore - amount` on withdrawals/rescues) and document the limitation in `supportToken`.",
"exploit_scenario": "If the owner supports a token that charges transfer fees or rebases, deposits are credited by the actual received amount, but withdrawals and rescue transfers debit internal balances by the requested amount only. For a fee-on-transfer token, each withdrawal reduces the contract\u2019s real balance by more than `_amount` (fee is taken from the contract), while `totalStakedBalance` is reduced by exactly `_amount`. Over time the contract becomes undercollateralized and later withdrawals revert or cannot be fully honored. If a small excess exists, calling `rescueERC20` can also burn into staked funds due to transfer fees, accelerating insolvency. A malicious fee-collector token could profit from this undercollateralization."
}
|