57893a6f-7c59-4454-928f-4e100bf02a14
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 |
|---|---|---|---|---|
| 30259 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 73738 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 73739 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 73740 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 73741 | capability.graph | complete | 1 / 3 | 1 week ago |
| 73742 | detector.run | complete | 1 / 3 | 1 week ago |
| 73743 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:1084535] OpenAI Codex v0.77.0 (research preview)
[codex:1084535] --------
[codex:1084535] workdir: /tmp/codex-multi-jjdlf1zy
[codex:1084535] model: gpt-5.2-codex
[codex:1084535] provider: openai
[codex:1084535] approval: never
[codex:1084535] sandbox: read-only
[codex:1084535] reasoning effort: xhigh
[codex:1084535] reasoning summaries: auto
[codex:1084535] session id: 019b628a-8ca9-7103-ab0c-695bad1e7ca8
[codex:1084535] --------
[codex:1084535] user
[codex:1084535] You are a security auditor. Audit this Solidity codebase for exploitable vulnerabilities.
[codex:1084535] Focus on: reentrancy, access control, upgradeability/proxy issues, signature validation, oracle manipulation,
[codex:1084535] accounting/invariant breaks, external call patterns, unchecked return values, and dangerous delegatecall.
[codex:1084535]
[codex:1084535] Scope rules:
[codex:1084535] - You MUST fully read `AUDIT_BUNDLE.txt` before concluding. It contains the complete contents of all first-party `contracts/**/*.sol` files.
[codex:1084535] - Treat `lib/` and `@openzeppelin/` as third-party dependencies; skip them unless there is a concrete misuse angle in first-party code.
[codex:1084535]
[codex:1084535] Output MUST be valid JSON matching the provided schema.
[codex:1084535] - If you find nothing meaningful: set no_findings=true and findings=[].
[codex:1084535] - Otherwise: set no_findings=false and include findings with severity/category/title and file/line locations when possible.
[codex:1084535]
[codex:1084535] Output constraints (IMPORTANT):
[codex:1084535] - severity MUST be exactly one of: info, low, medium, high, critical (lowercase).
[codex:1084535] - category MUST be exactly one of: access_control, reentrancy, math, oracle, upgradeability, auth, other.
[codex:1084535] mcp startup: no servers
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Checking for skills and reading AUDIT_BUNDLE.txt**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc ls in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] AUDIT_BUNDLE.txt
[codex:1084535] codex-output-schema.json
[codex:1084535] contracts
[codex:1084535] exec
[codex:1084535] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] This file concatenates the full contents of first-party Solidity sources for auditing.
[codex:1084535]
[codex:1084535] ================================================================================
[codex:1084535] FILE: contracts/contracts/ConnectorPlug.sol
[codex:1084535] ================================================================================
[codex:1084535] // SPDX-License-Identifier: MIT
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] import "./utils/RescueBase.sol";
[codex:1084535] import {ISocket} from "./interfaces/ISocket.sol";
[codex:1084535] import {IPlug} from "./interfaces/IPlug.sol";
[codex:1084535] import {IConnector} from "./interfaces/IConnector.sol";
[codex:1084535] import {IBridge} from "./interfaces/IBridge.sol";
[codex:1084535] import "./common/Errors.sol";
[codex:1084535]
[codex:1084535] contract ConnectorPlug is IConnector, IPlug, RescueBase {
[codex:1084535] IBridge public immutable bridge__;
[codex:1084535] ISocket public immutable socket__;
[codex:1084535] uint32 public immutable siblingChainSlug;
[codex:1084535] uint256 public messageIdPart;
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Planning full audit bundle analysis**
[codex:1084535]
[codex:1084535] I need to read the entire AUDIT_BUNDLE.txt to analyze it properly, despite earlier truncated output. I'll use tools like sed and ripgrep to segment and search through the file, aiming to identify contracts and relevant lines to check for vulnerabilities such as reentrancy and access control issues.
[codex:1084535] exec
[codex:1084535] /bin/bash -lc 'rg -n "''^FILE:" AUDIT_BUNDLE.txt' in /tmp/codex-multi-jjdlf1zy succeeded in 6ms:
[codex:1084535] 4:FILE: contracts/contracts/ConnectorPlug.sol
[codex:1084535] 126:FILE: contracts/contracts/bridge/Base.sol
[codex:1084535] 467:FILE: contracts/contracts/bridge/Controller.sol
[codex:1084535] 585:FILE: contracts/contracts/bridge/FiatTokenV2_1/FiatTokenV2_1_Controller.sol
[codex:1084535] 606:FILE: contracts/contracts/bridge/FiatTokenV2_1/IFiatTokenV2_1_Mintable.sol
[codex:1084535] 621:FILE: contracts/contracts/bridge/Vault.sol
[codex:1084535] 752:FILE: contracts/contracts/common/Constants.sol
[codex:1084535] 776:FILE: contracts/contracts/common/Errors.sol
[codex:1084535] 807:FILE: contracts/contracts/common/Structs.sol
[codex:1084535] 876:FILE: contracts/contracts/hooks/Controller_YieldLimitExecHook.sol
[codex:1084535] 1177:FILE: contracts/contracts/hooks/HookBase.sol
[codex:1084535] 1215:FILE: contracts/contracts/hooks/LimitExecutionHook.sol
[codex:1084535] 1471:FILE: contracts/contracts/hooks/LimitHook.sol
[codex:1084535] 1674:FILE: contracts/contracts/hooks/Vault_YieldLimitExecHook.sol
[codex:1084535] 2045:FILE: contracts/contracts/hooks/plugins/ConnectorPoolPlugin.sol
[codex:1084535] 2106:FILE: contracts/contracts/hooks/plugins/ExecutionHelper.sol
[codex:1084535] 2168:FILE: contracts/contracts/hooks/plugins/LimitPlugin.sol
[codex:1084535] 2293:FILE: contracts/contracts/interfaces/IBridge.sol
[codex:1084535] 2316:FILE: contracts/contracts/interfaces/IConnector.sol
[codex:1084535] 2338:FILE: contracts/contracts/interfaces/IController.sol
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Preparing to audit first-party contracts**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/bridge/Controller.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] import "./Base.sol";
[codex:1084535]
[codex:1084535] contract Controller is Base {
[codex:1084535] uint256 public totalMinted;
[codex:1084535]
[codex:1084535] constructor(address token_) Base(token_) {
[codex:1084535] bridgeType = NORMAL_CONTROLLER;
[codex:1084535] }
[codex:1084535]
[codex:1084535] /**
[codex:1084535] * @notice Bridges tokens between chains.
[codex:1084535] * @dev This function allows bridging tokens between different chains.
[codex:1084535] * @param receiver_ The address to receive the bridged tokens.
[codex:1084535] * @param amount_ The amount of tokens to bridge.
[codex:1084535] * @param msgGasLimit_ The gas limit for the execution of the bridging process.
[codex:1084535] * @param connector_ The address of the connector contract responsible for the bridge.
[codex:1084535] * @param execPayload_ The payload for executing the bridging process on the connector.
[codex:1084535] * @param options_ Additional options for the bridging process.
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Inspecting additional base files**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,240p' contracts/contracts/bridge/Base.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] import {IMintableERC20} from "../interfaces/IMintableERC20.sol";
[codex:1084535] import {IConnector} from "../interfaces/IConnector.sol";
[codex:1084535] import "lib/solmate/src/utils/SafeTransferLib.sol";
[codex:1084535] import "../interfaces/IHook.sol";
[codex:1084535] import "../common/Errors.sol";
[codex:1084535] import "lib/solmate/src/utils/ReentrancyGuard.sol";
[codex:1084535] import "../interfaces/IBridge.sol";
[codex:1084535] import "../utils/RescueBase.sol";
[codex:1084535] import "../common/Constants.sol";
[codex:1084535]
[codex:1084535] abstract contract Base is ReentrancyGuard, IBridge, RescueBase {
[codex:1084535] address public immutable token;
[codex:1084535] bytes32 public bridgeType;
[codex:1084535] IHook public hook__;
[codex:1084535] // message identifier => cache
[codex:1084535] mapping(bytes32 => bytes) public identifierCache;
[codex:1084535]
[codex:1084535] // connector => cache
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '240,520p' contracts/contracts/bridge/Base.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] )
[codex:1084535] );
[codex:1084535]
[codex:1084535] identifierCache[messageId_] = cacheData.identifierCache;
[codex:1084535] connectorCache[msg.sender] = cacheData.connectorCache;
[codex:1084535] }
[codex:1084535]
[codex:1084535] emit TokensBridged(
[codex:1084535] msg.sender,
[codex:1084535] transferInfo_.receiver,
[codex:1084535] transferInfo_.amount,
[codex:1084535] messageId_
[codex:1084535] );
[codex:1084535] }
[codex:1084535]
[codex:1084535] /**
[codex:1084535] * @notice Executes pre-retry operations before retrying a failed transaction.
[codex:1084535] * @dev This internal function is called before retrying a failed transaction.
[codex:1084535] * It validates the connector, retrieves cache data for the given message ID,
[codex:1084535] * and executes the pre-retry hook if defined.
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Exploring Vault file**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,240p' contracts/contracts/bridge/Vault.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 6ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] import "./Base.sol";
[codex:1084535] import "../interfaces/IConnector.sol";
[codex:1084535] import "lib/solmate/src/tokens/ERC20.sol";
[codex:1084535]
[codex:1084535] /**
[codex:1084535] * @title SuperToken
[codex:1084535] * @notice A contract which enables bridging a token to its sibling chains.
[codex:1084535] * @dev This contract implements ISuperTokenOrVault to support message bridging through IMessageBridge compliant contracts.
[codex:1084535] */
[codex:1084535] contract Vault is Base {
[codex:1084535] using SafeTransferLib for ERC20;
[codex:1084535]
[codex:1084535] // /**
[codex:1084535] // * @notice constructor for creating a new SuperTokenVault.
[codex:1084535] // * @param token_ token contract address which is to be bridged.
[codex:1084535] // */
[codex:1084535]
[codex:1084535] constructor(address token_) Base(token_) {
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Reviewing related contract files**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,220p' contracts/contracts/utils/AccessControl.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 6ms:
[codex:1084535] // SPDX-License-Identifier: GPL-3.0-only
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] import "./Ownable.sol";
[codex:1084535]
[codex:1084535] /**
[codex:1084535] * @title AccessControl
[codex:1084535] * @dev This abstract contract implements access control mechanism based on roles.
[codex:1084535] * Each role can have one or more addresses associated with it, which are granted
[codex:1084535] * permission to execute functions with the onlyRole modifier.
[codex:1084535] */
[codex:1084535] abstract contract AccessControl is Ownable {
[codex:1084535] /**
[codex:1084535] * @dev A mapping of roles to a mapping of addresses to boolean values indicating whether or not they have the role.
[codex:1084535] */
[codex:1084535] mapping(bytes32 => mapping(address => bool)) private _permits;
[codex:1084535]
[codex:1084535] /**
[codex:1084535] * @dev Emitted when a role is granted to an address.
[codex:1084535] */
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Identifying key concept**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/utils/Ownable.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // SPDX-License-Identifier: GPL-3.0-only
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] /**
[codex:1084535] * @title Ownable
[codex:1084535] * @dev The Ownable contract provides a simple way to manage ownership of a contract
[codex:1084535] * and allows for ownership to be transferred to a nominated address.
[codex:1084535] */
[codex:1084535] abstract contract Ownable {
[codex:1084535] address private _owner;
[codex:1084535] address private _nominee;
[codex:1084535]
[codex:1084535] event OwnerNominated(address indexed nominee);
[codex:1084535] event OwnerClaimed(address indexed claimer);
[codex:1084535]
[codex:1084535] error OnlyOwner();
[codex:1084535] error OnlyNominee();
[codex:1084535]
[codex:1084535] /**
[codex:1084535] * @dev Sets the contract's owner to the address that is passed to the constructor.
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Identifying project name**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/utils/RescueBase.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // SPDX-License-Identifier: MIT
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] import {RescueFundsLib} from "../libraries/RescueFundsLib.sol";
[codex:1084535] import {AccessControl} from "./AccessControl.sol";
[codex:1084535]
[codex:1084535] /**
[codex:1084535] * @title Base contract for super token and vault
[codex:1084535] * @notice It contains relevant execution payload storages.
[codex:1084535] * @dev This contract implements Socket's IPlug to enable message bridging and IMessageBridge
[codex:1084535] * to support any type of message bridge.
[codex:1084535] */
[codex:1084535] abstract contract RescueBase is AccessControl {
[codex:1084535] bytes32 constant RESCUE_ROLE = keccak256("RESCUE_ROLE");
[codex:1084535]
[codex:1084535] /**
[codex:1084535] * @notice Rescues funds from the contract if they are locked by mistake.
[codex:1084535] * @param token_ The address of the token contract.
[codex:1084535] * @param rescueTo_ The address where rescued tokens need to be sent.
[codex:1084535] * @param amount_ The amount of tokens to be rescued.
[codex:1084535] */
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Reviewing additional contracts and modules**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/common/Errors.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] error SiblingNotSupported();
[codex:1084535] error NotAuthorized();
[codex:1084535] error NotBridge();
[codex:1084535] error NotSocket();
[codex:1084535] error ConnectorUnavailable();
[codex:1084535] error InvalidPoolId();
[codex:1084535] error CannotTransferOrExecuteOnBridgeContracts();
[codex:1084535] error NoPendingData();
[codex:1084535] error MessageIdMisMatched();
[codex:1084535] error NotMessageBridge();
[codex:1084535] error InvalidSiblingChainSlug();
[codex:1084535] error InvalidTokenContract();
[codex:1084535] error InvalidExchangeRateContract();
[codex:1084535] error InvalidConnector();
[codex:1084535] error InvalidConnectorPoolId();
[codex:1084535] error ZeroAddressReceiver();
[codex:1084535] error ZeroAddress();
[codex:1084535] error ZeroAmount();
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Identifying common constants**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/common/Constants.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] address constant ETH_ADDRESS = address(
[codex:1084535] 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE
[codex:1084535] );
[codex:1084535]
[codex:1084535] bytes32 constant NORMAL_CONTROLLER = keccak256("NORMAL_CONTROLLER");
[codex:1084535] bytes32 constant FIAT_TOKEN_CONTROLLER = keccak256("FIAT_TOKEN_CONTROLLER");
[codex:1084535]
[codex:1084535] bytes32 constant LIMIT_HOOK = keccak256("LIMIT_HOOK");
[codex:1084535] bytes32 constant LIMIT_EXECUTION_HOOK = keccak256("LIMIT_EXECUTION_HOOK");
[codex:1084535] bytes32 constant LIMIT_EXECUTION_YIELD_HOOK = keccak256(
[codex:1084535] "LIMIT_EXECUTION_YIELD_HOOK"
[codex:1084535] );
[codex:1084535] bytes32 constant LIMIT_EXECUTION_YIELD_TOKEN_HOOK = keccak256(
[codex:1084535] "LIMIT_EXECUTION_YIELD_TOKEN_HOOK"
[codex:1084535] );
[codex:1084535]
[codex:1084535] bytes32 constant ERC20_VAULT = keccak256("ERC20_VAULT");
[codex:1084535] bytes32 constant NATIVE_VAULT = keccak256("NATIVE_VAULT");
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Reviewing structs**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/common/Structs.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] struct UpdateLimitParams {
[codex:1084535] bool isMint;
[codex:1084535] address connector;
[codex:1084535] uint256 maxLimit;
[codex:1084535] uint256 ratePerSecond;
[codex:1084535] }
[codex:1084535]
[codex:1084535] struct SrcPreHookCallParams {
[codex:1084535] address connector;
[codex:1084535] address msgSender;
[codex:1084535] TransferInfo transferInfo;
[codex:1084535] }
[codex:1084535]
[codex:1084535] struct SrcPostHookCallParams {
[codex:1084535] address connector;
[codex:1084535] bytes options;
[codex:1084535] bytes postSrcHookData;
[codex:1084535] TransferInfo transferInfo;
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Inspecting hook vulnerabilities**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,260p' contracts/contracts/hooks/Controller_YieldLimitExecHook.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // // // SPDX-License-Identifier: GPL-3.0-only
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] import "lib/openzeppelin-contracts/contracts/utils/math/Math.sol";
[codex:1084535] import {FixedPointMathLib} from "lib/solmate/src/utils/FixedPointMathLib.sol";
[codex:1084535] import {IStrategy} from "../interfaces/IStrategy.sol";
[codex:1084535] import {IMintableERC20} from "../interfaces/IMintableERC20.sol";
[codex:1084535] import "lib/solmate/src/utils/SafeTransferLib.sol";
[codex:1084535] import {IConnector} from "../ConnectorPlug.sol";
[codex:1084535] import "./LimitExecutionHook.sol";
[codex:1084535]
[codex:1084535] interface IYieldToken {
[codex:1084535] function updateTotalUnderlyingAssets(uint256 amount_) external;
[codex:1084535]
[codex:1084535] function calculateMintAmount(uint256 amount_) external returns (uint256);
[codex:1084535]
[codex:1084535] function convertToShares(
[codex:1084535] uint256 underlyingAssets
[codex:1084535] ) external view returns (uint256);
[codex:1084535]
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '260,620p' contracts/contracts/hooks/Controller_YieldLimitExecHook.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535]
[codex:1084535] (uint256 consumedShares, uint256 pendingShares) = _limitDstHook(
[codex:1084535] params_.connector,
[codex:1084535] totalPendingShares
[codex:1084535] );
[codex:1084535]
[codex:1084535] postRetryHookData = abi.encode(receiver, consumedShares, pendingShares);
[codex:1084535] uint256 consumedUnderlying = yieldToken__.convertToAssets(
[codex:1084535] consumedShares
[codex:1084535] );
[codex:1084535] yieldToken__.transfer(receiver, consumedUnderlying);
[codex:1084535]
[codex:1084535] transferInfo = TransferInfo(transferInfo.receiver, 0, bytes(""));
[codex:1084535] }
[codex:1084535]
[codex:1084535] // /**
[codex:1084535] // * @notice Handles post-retry hook logic after execution.
[codex:1084535] // * @dev This function updates the identifier cache and sibling chain cache based on the post-hook data.
[codex:1084535] // * @param siblingChainSlug_ The unique identifier of the sibling chain.
[codex:1084535] // * @param identifierCache_ Identifier cache containing pending mint information.
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Investigating execution limit hooks**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,260p' contracts/contracts/hooks/LimitExecutionHook.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] import "./plugins/LimitPlugin.sol";
[codex:1084535] import "./plugins/ExecutionHelper.sol";
[codex:1084535] import "./plugins/ConnectorPoolPlugin.sol";
[codex:1084535] import "../interfaces/IController.sol";
[codex:1084535]
[codex:1084535] contract LimitExecutionHook is LimitPlugin, ConnectorPoolPlugin {
[codex:1084535] bool public useControllerPools;
[codex:1084535] ExecutionHelper executionHelper__;
[codex:1084535]
[codex:1084535] event MessageExecuted(bytes32 indexed messageId, address indexed receiver);
[codex:1084535]
[codex:1084535] /**
[codex:1084535] * @notice Constructor for creating a new SuperToken.
[codex:1084535] * @param owner_ Owner of this contract.
[codex:1084535] */
[codex:1084535] constructor(
[codex:1084535] address owner_,
[codex:1084535] address controller_,
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Identifying Need for LimitHook**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,240p' contracts/contracts/hooks/LimitHook.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] import "./plugins/LimitPlugin.sol";
[codex:1084535] import "../interfaces/IController.sol";
[codex:1084535] import "./plugins/ConnectorPoolPlugin.sol";
[codex:1084535]
[codex:1084535] contract LimitHook is LimitPlugin, ConnectorPoolPlugin {
[codex:1084535] bool public immutable useControllerPools;
[codex:1084535]
[codex:1084535] /**
[codex:1084535] * @notice Constructor for creating a new SuperToken.
[codex:1084535] * @param owner_ Owner of this contract.
[codex:1084535] */
[codex:1084535] constructor(
[codex:1084535] address owner_,
[codex:1084535] address controller_,
[codex:1084535] bool useControllerPools_
[codex:1084535] ) HookBase(owner_, controller_) {
[codex:1084535] useControllerPools = useControllerPools_;
[codex:1084535] hookType = LIMIT_HOOK;
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Inspecting HookBase and plugins**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/hooks/HookBase.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] import "lib/solmate/src/utils/ReentrancyGuard.sol";
[codex:1084535] import "../common/Errors.sol";
[codex:1084535] import "../common/Constants.sol";
[codex:1084535] import "../interfaces/IHook.sol";
[codex:1084535] import "../utils/RescueBase.sol";
[codex:1084535]
[codex:1084535] /**
[codex:1084535] * @title Base contract for super token and vault
[codex:1084535] * @notice It contains relevant execution payload storages.
[codex:1084535] * @dev This contract implements Socket's IPlug to enable message bridging and IMessageBridge
[codex:1084535] * to support any type of message bridge.
[codex:1084535] */
[codex:1084535] abstract contract HookBase is ReentrancyGuard, IHook, RescueBase {
[codex:1084535] address public immutable vaultOrController;
[codex:1084535] bytes32 public hookType;
[codex:1084535]
[codex:1084535] /**
[codex:1084535] * @notice Constructor for creating a new SuperToken.
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Listing plugins**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,240p' contracts/contracts/hooks/plugins/ConnectorPoolPlugin.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] import "../HookBase.sol";
[codex:1084535]
[codex:1084535] abstract contract ConnectorPoolPlugin is HookBase {
[codex:1084535] // connectorPoolId => totalLockedAmount
[codex:1084535] mapping(uint256 => uint256) public poolLockedAmounts;
[codex:1084535]
[codex:1084535] // connector => connectorPoolId
[codex:1084535] mapping(address => uint256) public connectorPoolIds;
[codex:1084535]
[codex:1084535] event ConnectorPoolIdUpdated(address connector, uint256 poolId);
[codex:1084535] event PoolLockedAmountUpdated(uint256 poolId, uint256 amount);
[codex:1084535]
[codex:1084535] function updateConnectorPoolId(
[codex:1084535] address[] calldata connectors,
[codex:1084535] uint256[] calldata poolIds_
[codex:1084535] ) external onlyOwner {
[codex:1084535] uint256 length = connectors.length;
[codex:1084535] for (uint256 i; i < length; i++) {
[codex:1084535] if (poolIds_[i] == 0) revert InvalidPoolId();
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Identifying ExecutionHelper**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,240p' contracts/contracts/hooks/plugins/ExecutionHelper.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // SPDX-License-Identifier: MIT
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] import "../../libraries/ExcessivelySafeCall.sol";
[codex:1084535] import "../../utils/RescueBase.sol";
[codex:1084535] import "../../common/Errors.sol";
[codex:1084535]
[codex:1084535] /**
[codex:1084535] * @title ExecutionHelper
[codex:1084535] * @notice It is an untrusted contract used for payload execution by Super token and Vault.
[codex:1084535] */
[codex:1084535] contract ExecutionHelper is RescueBase {
[codex:1084535] using ExcessivelySafeCall for address;
[codex:1084535] uint16 private constant MAX_COPY_BYTES = 0;
[codex:1084535] address public hook;
[codex:1084535] bytes32 public messageId;
[codex:1084535] uint256 public bridgeAmount;
[codex:1084535]
[codex:1084535] constructor(address owner_) AccessControl(owner_) {
[codex:1084535] _grantRole(RESCUE_ROLE, owner_);
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Identifying plugin name**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,320p' contracts/contracts/hooks/plugins/LimitPlugin.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 6ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] import "../HookBase.sol";
[codex:1084535] import {Gauge} from "../../utils/Gauge.sol";
[codex:1084535]
[codex:1084535] abstract contract LimitPlugin is Gauge, HookBase {
[codex:1084535] bytes32 constant LIMIT_UPDATER_ROLE = keccak256("LIMIT_UPDATER_ROLE");
[codex:1084535]
[codex:1084535] // connector => receivingLimitParams
[codex:1084535] mapping(address => LimitParams) _receivingLimitParams;
[codex:1084535]
[codex:1084535] // connector => sendingLimitParams
[codex:1084535] mapping(address => LimitParams) _sendingLimitParams;
[codex:1084535]
[codex:1084535] ////////////////////////////////////////////////////////
[codex:1084535] ////////////////////// EVENTS //////////////////////////
[codex:1084535] ////////////////////////////////////////////////////////
[codex:1084535]
[codex:1084535] // Emitted when limit parameters are updated
[codex:1084535] event LimitParamsUpdated(UpdateLimitParams[] updates);
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Measuring progress**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,240p' contracts/contracts/utils/Gauge.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // SPDX-License-Identifier: MIT
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535] import "../common/Structs.sol";
[codex:1084535]
[codex:1084535] abstract contract Gauge {
[codex:1084535] error AmountOutsideLimit();
[codex:1084535]
[codex:1084535] function _getCurrentLimit(
[codex:1084535] LimitParams storage _params
[codex:1084535] ) internal view returns (uint256 _limit) {
[codex:1084535] uint256 timeElapsed = block.timestamp - _params.lastUpdateTimestamp;
[codex:1084535] uint256 limitIncrease = timeElapsed * _params.ratePerSecond;
[codex:1084535]
[codex:1084535] if (limitIncrease + _params.lastUpdateLimit > _params.maxLimit) {
[codex:1084535] _limit = _params.maxLimit;
[codex:1084535] } else {
[codex:1084535] _limit = limitIncrease + _params.lastUpdateLimit;
[codex:1084535] }
[codex:1084535] }
[codex:1084535]
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Reviewing Vault_YieldLimitExecHook**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,260p' contracts/contracts/hooks/Vault_YieldLimitExecHook.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // // // SPDX-License-Identifier: GPL-3.0-only
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] import "lib/openzeppelin-contracts/contracts/utils/math/Math.sol";
[codex:1084535] import {FixedPointMathLib} from "lib/solmate/src/utils/FixedPointMathLib.sol";
[codex:1084535] import {IStrategy} from "../interfaces/IStrategy.sol";
[codex:1084535] import "lib/solmate/src/tokens/ERC20.sol";
[codex:1084535]
[codex:1084535] import "lib/solmate/src/utils/SafeTransferLib.sol";
[codex:1084535] import {IConnector} from "../ConnectorPlug.sol";
[codex:1084535]
[codex:1084535] import "./LimitExecutionHook.sol";
[codex:1084535]
[codex:1084535] contract Vault_YieldLimitExecHook is LimitExecutionHook {
[codex:1084535] using SafeTransferLib for ERC20;
[codex:1084535] using FixedPointMathLib for uint256;
[codex:1084535]
[codex:1084535] uint256 private constant MAX_BPS = 10_000;
[codex:1084535]
[codex:1084535] IStrategy public strategy; // address of the strategy contract
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '260,620p' contracts/contracts/hooks/Vault_YieldLimitExecHook.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] totalIdle -= credit;
[codex:1084535] totalDebt += credit;
[codex:1084535] totalLockedInStrategy += credit;
[codex:1084535] underlyingAsset__.safeTransferFrom(
[codex:1084535] vaultOrController,
[codex:1084535] address(strategy),
[codex:1084535] credit
[codex:1084535] );
[codex:1084535] strategy.invest();
[codex:1084535] } else if (pendingDebt > 0) {
[codex:1084535] // Credit deficit, take from Strategy
[codex:1084535] _withdrawFromStrategy(pendingDebt);
[codex:1084535] }
[codex:1084535]
[codex:1084535] emit Rebalanced(totalIdle, totalDebt, credit, pendingDebt);
[codex:1084535] }
[codex:1084535]
[codex:1084535] /// @notice Returns the total quantity of all underlyingAssets under control of this
[codex:1084535] /// Vault, whether they're loaned out to a Strategy, or currently held in
[codex:1084535] /// the Vault.
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Inspecting token contracts**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,260p' contracts/contracts/token/SuperToken.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] import "lib/solmate/src/tokens/ERC20.sol";
[codex:1084535] import "../utils/RescueBase.sol";
[codex:1084535] import "../interfaces/IHook.sol";
[codex:1084535]
[codex:1084535] /**
[codex:1084535] * @title SuperToken
[codex:1084535] * @notice An ERC20 contract which enables bridging a token to its sibling chains.
[codex:1084535] * @dev This contract implements ISuperTokenOrVault to support message bridging through IMessageBridge compliant contracts.
[codex:1084535] */
[codex:1084535] contract SuperToken is ERC20, RescueBase {
[codex:1084535] // for all controller access (mint, burn)
[codex:1084535] bytes32 constant CONTROLLER_ROLE = keccak256("CONTROLLER_ROLE");
[codex:1084535]
[codex:1084535] /**
[codex:1084535] * @notice constructor for creating a new SuperToken.
[codex:1084535] * @param name_ token name
[codex:1084535] * @param symbol_ token symbol
[codex:1084535] * @param decimals_ token decimals (should be same on all chains)
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Yielding token contracts**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,260p' contracts/contracts/token/yield-token/YieldToken.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // SPDX-License-Identifier: GPL-3.0-only
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] import "./YieldTokenBase.sol";
[codex:1084535] import {IStrategy} from "../../interfaces/IStrategy.sol";
[codex:1084535] import {IConnector} from "../../interfaces/IConnector.sol";
[codex:1084535] import {IHook} from "../../interfaces/IHook.sol";
[codex:1084535]
[codex:1084535] // add shutdown
[codex:1084535] contract YieldToken is YieldTokenBase {
[codex:1084535] using FixedPointMathLib for uint256;
[codex:1084535]
[codex:1084535] bytes32 constant MINTER_ROLE = keccak256("MINTER_ROLE");
[codex:1084535] bytes32 constant HOOK_ROLE = keccak256("HOOK_ROLE");
[codex:1084535]
[codex:1084535] constructor(
[codex:1084535] string memory name_,
[codex:1084535] string memory symbol_,
[codex:1084535] uint8 decimals_
[codex:1084535] ) YieldTokenBase(name_, symbol_, decimals_) AccessControl(msg.sender) {
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Identifying YieldTokenBase**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,360p' contracts/contracts/token/yield-token/YieldTokenBase.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // SPDX-License-Identifier: AGPL-3.0-only
[codex:1084535] pragma solidity >=0.8.0;
[codex:1084535]
[codex:1084535] import "lib/openzeppelin-contracts/contracts/security/ReentrancyGuard.sol";
[codex:1084535] import {FixedPointMathLib} from "lib/solmate/src/utils/FixedPointMathLib.sol";
[codex:1084535] import "../../utils/RescueBase.sol";
[codex:1084535] import "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";
[codex:1084535] import {PermitDeadlineExpired, InvalidSigner} from "../../common/Errors.sol";
[codex:1084535]
[codex:1084535] abstract contract YieldTokenBase is RescueBase, ReentrancyGuard, IERC20 {
[codex:1084535] using FixedPointMathLib for uint256;
[codex:1084535]
[codex:1084535] /*//////////////////////////////////////////////////////////////
[codex:1084535] METADATA STORAGE
[codex:1084535] //////////////////////////////////////////////////////////////*/
[codex:1084535]
[codex:1084535] string public name;
[codex:1084535]
[codex:1084535] string public symbol;
[codex:1084535]
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Examining token share-amount interactions**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,260p' contracts/contracts/bridge/FiatTokenV2_1/FiatTokenV2_1_Controller.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 6ms:
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] import {IFiatTokenV2_1_Mintable} from "./IFiatTokenV2_1_Mintable.sol";
[codex:1084535] import "../Controller.sol";
[codex:1084535]
[codex:1084535] contract FiatTokenV2_1_Controller is Controller {
[codex:1084535] using SafeTransferLib for ERC20;
[codex:1084535]
[codex:1084535] constructor(address token_) Controller(token_) {
[codex:1084535] bridgeType = FIAT_TOKEN_CONTROLLER;
[codex:1084535] }
[codex:1084535]
[codex:1084535] function _burn(address user_, uint256 burnAmount_) internal override {
[codex:1084535] ERC20(token).safeTransferFrom(user_, address(this), burnAmount_);
[codex:1084535] IFiatTokenV2_1_Mintable(address(token)).burn(burnAmount_);
[codex:1084535] }
[codex:1084535] }
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Noting IFiatTokenV2_1_Mintable reference**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,160p' contracts/contracts/bridge/FiatTokenV2_1/IFiatTokenV2_1_Mintable.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 6ms:
[codex:1084535] // SPDX-License-Identifier: MIT
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] import "lib/solmate/src/tokens/ERC20.sol";
[codex:1084535]
[codex:1084535] // USDC's standard token
[codex:1084535] abstract contract IFiatTokenV2_1_Mintable is ERC20 {
[codex:1084535] function mint(address receiver_, uint256 amount_) external virtual;
[codex:1084535]
[codex:1084535] function burn(uint256 _amount) external virtual;
[codex:1084535] }
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Reviewing contract security aspects**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/libraries/RescueFundsLib.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // SPDX-License-Identifier: GPL-3.0-only
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] import "lib/solmate/src/utils/SafeTransferLib.sol";
[codex:1084535] import "lib/solmate/src/tokens/ERC20.sol";
[codex:1084535]
[codex:1084535] error ZeroAddress();
[codex:1084535]
[codex:1084535] /**
[codex:1084535] * @title RescueFundsLib
[codex:1084535] * @dev A library that provides a function to rescue funds from a contract.
[codex:1084535] */
[codex:1084535]
[codex:1084535] library RescueFundsLib {
[codex:1084535] /**
[codex:1084535] * @dev The address used to identify ETH.
[codex:1084535] */
[codex:1084535] address public constant ETH_ADDRESS =
[codex:1084535] address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);
[codex:1084535]
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Checking contract interfaces and inheritance**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/interfaces/IBridge.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity ^0.8.3;
[codex:1084535]
[codex:1084535] interface IBridge {
[codex:1084535] function bridge(
[codex:1084535] address receiver_,
[codex:1084535] uint256 amount_,
[codex:1084535] uint256 msgGasLimit_,
[codex:1084535] address connector_,
[codex:1084535] bytes calldata execPayload_,
[codex:1084535] bytes calldata options_
[codex:1084535] ) external payable;
[codex:1084535]
[codex:1084535] function receiveInbound(
[codex:1084535] uint32 siblingChainSlug_,
[codex:1084535] bytes memory payload_
[codex:1084535] ) external payable;
[codex:1084535]
[codex:1084535] function retry(address connector_, bytes32 messageId_) external;
[codex:1084535] }
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Identifying IConnector**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/interfaces/IConnector.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity ^0.8.13;
[codex:1084535]
[codex:1084535] interface IConnector {
[codex:1084535] function outbound(
[codex:1084535] uint256 msgGasLimit_,
[codex:1084535] bytes memory payload_,
[codex:1084535] bytes memory options_
[codex:1084535] ) external payable returns (bytes32 messageId_);
[codex:1084535]
[codex:1084535] function siblingChainSlug() external view returns (uint32);
[codex:1084535]
[codex:1084535] function getMinFees(
[codex:1084535] uint256 msgGasLimit_,
[codex:1084535] uint256 payloadSize_
[codex:1084535] ) external view returns (uint256 totalFees);
[codex:1084535]
[codex:1084535] function getMessageId() external view returns (bytes32);
[codex:1084535] }
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Investigating IController usage**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/interfaces/IController.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] pragma solidity ^0.8.13;
[codex:1084535]
[codex:1084535] interface IController {
[codex:1084535] function identifierCache(
[codex:1084535] bytes32 messageId_
[codex:1084535] ) external payable returns (bytes memory cache);
[codex:1084535]
[codex:1084535] function connectorCache(
[codex:1084535] address connector_
[codex:1084535] ) external payable returns (bytes memory cache);
[codex:1084535] }
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Noticing mention of IHook**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/interfaces/IHook.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 6ms:
[codex:1084535] pragma solidity ^0.8.3;
[codex:1084535] import "../common/Structs.sol";
[codex:1084535]
[codex:1084535] interface IHook {
[codex:1084535] /**
[codex:1084535] * @notice Executes pre-hook call for source underlyingAsset.
[codex:1084535] * @dev This function is used to execute a pre-hook call for the source underlyingAsset before initiating a transfer.
[codex:1084535] * @param params_ Parameters for the pre-hook call.
[codex:1084535] * @return transferInfo Information about the transfer.
[codex:1084535] * @return postSrcHookData returned from the pre-hook call.
[codex:1084535] */
[codex:1084535] function srcPreHookCall(
[codex:1084535] SrcPreHookCallParams calldata params_
[codex:1084535] )
[codex:1084535] external
[codex:1084535] returns (
[codex:1084535] TransferInfo memory transferInfo,
[codex:1084535] bytes memory postSrcHookData
[codex:1084535] );
[codex:1084535]
[codex:1084535]
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Analyzing potential vulnerabilities and access controls**
[codex:1084535]
[codex:1084535] This is quite a detailed security review! I’m carefully examining bridging logic, hooks, reentrancy guards, signature validation, and access checks to spot any exploitable flaws or overlooked edge cases, especially around retry functions, array length mismatches, and how asset conversions handle totals during bridging.
[codex:1084535] thinking
[codex:1084535] **Evaluating executionHelper and owner-settable components**
[codex:1084535]
[codex:1084535] I'm digging into how executionHelper enables arbitrary calls via bridging, the risks from owner-settable addresses, and whether array length mismatches or unchecked returns pose issues—checking patterns carefully to separate intended features from potential flaws.
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,240p' contracts/contracts/libraries/ExcessivelySafeCall.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 7ms:
[codex:1084535] // SPDX-License-Identifier: MIT OR Apache-2.0
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] library ExcessivelySafeCall {
[codex:1084535] uint constant LOW_28_MASK =
[codex:1084535] 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff;
[codex:1084535]
[codex:1084535] /// @notice Use when you _really_ really _really_ don't trust the called
[codex:1084535] /// contract. This prevents the called contract from causing reversion of
[codex:1084535] /// the caller in as many ways as we can.
[codex:1084535] /// @dev The main difference between this and a solidity low-level call is
[codex:1084535] /// that we limit the number of bytes that the callee can cause to be
[codex:1084535] /// copied to caller memory. This prevents stupid things like malicious
[codex:1084535] /// contracts returning 10,000,000 bytes causing a local OOG when copying
[codex:1084535] /// to memory.
[codex:1084535] /// @param _target The address to call
[codex:1084535] /// @param _gas The amount of gas to forward to the remote contract
[codex:1084535] /// @param _maxCopy The maximum number of bytes of returndata to copy
[codex:1084535] /// to memory.
[codex:1084535] /// @param _calldata The data to send to the remote contract
[codex:1084535]
[codex:1084535]
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Analyzing smart contract vulnerabilities**
[codex:1084535]
[codex:1084535] I'm reviewing various contract functions and hooks, checking for potential issues like reentrancy, underflows, event inconsistencies, and arithmetic errors in yield token calculations. There’s a lot to unpack about token share conversions, permit signatures, and bridging logic that might cause unexpected behaviors or edge-case vulnerabilities. Let’s explore these intricate interactions carefully!
[codex:1084535] thinking
[codex:1084535] **Examining yield token bridging logic and reentrancy risks**
[codex:1084535]
[codex:1084535] There’s a deep dive into how the controller and vault hooks handle total underlying assets during bridging, confirming that deposit amounts get included properly to avoid inflation issues. I’m also scrutinizing possible reentrancy concerns in vault hook withdrawals due to external token calls without consistent nonReentrant guards. On top of that, I’m exploring subtle signature handling nuances in permits and potential event or allowance inconsistencies related to share-to-asset conversions. There’s a lot to unpack in these cross-contract interactions!
[codex:1084535] thinking
[codex:1084535] **Inspecting edge cases in bridging and cache handling**
[codex:1084535]
[codex:1084535] I’m reviewing potential hazards like zero-address receivers slipping through minting flows and subtle adjustments in transfer limits when vault idle funds run low. Additionally, I’m thinking about how mismatched array lengths or large user-supplied cache data might cause unintended errors or storage bloat. It’s interesting to see how access controls and data validations interplay here!
[codex:1084535] exec
[codex:1084535] /bin/bash -lc 'rg -n "delegatecall|callcode" -S contracts/contracts' in /tmp/codex-multi-jjdlf1zy exited 1 in 11ms:
[codex:1084535]
[codex:1084535]
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Analyzing bridging and reentrancy risks**
[codex:1084535]
[codex:1084535] I'm reviewing call patterns, message ID handling, and reentrancy, focusing on potential replay attacks in bridging functions and state updates during rebalances. There are concerns about missing on-chain replay protection, underflow in totalMinted accounting with initial supplies, unchecked token transfer return values possibly causing misaccounting, and open access to a rebalance function that might allow reentrancy through strategy callbacks. I’m also checking role management consistency after ownership transfers and cache underflow risks in limit execution hooks. This analysis highlights nuanced trade-offs between trust assumptions and contract safeguards.
[codex:1084535] thinking
[codex:1084535] **Evaluating connector state and yield token accounting**
[codex:1084535]
[codex:1084535] I'm examining how message ID handling interacts with connector connection state, noticing missing checks that might cause bridging calls to fail if connectors aren’t fully connected. There’s also a subtle bug in yield token share accounting within the yield limit hook: consumed and pending shares are miscalculated and swapped, which can cause stuck pending tokens by making retries fail due to insufficient shares in the hook contract. This issue could lead to locked funds and disrupt normal bridging operations, highlighting the importance of precise state tracking in complex token flows.
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "nl -ba contracts/contracts/hooks/Controller_YieldLimitExecHook.sol | sed -n '130,240p'" in /tmp/codex-multi-jjdlf1zy succeeded in 6ms:
[codex:1084535] 130 );
[codex:1084535] 131
[codex:1084535] 132 postHookData = abi.encode(
[codex:1084535] 133 consumedUnderlying,
[codex:1084535] 134 pendingUnderlying,
[codex:1084535] 135 params_.transferInfo.amount,
[codex:1084535] 136 params_.transferInfo.receiver
[codex:1084535] 137 );
[codex:1084535] 138
[codex:1084535] 139 transferInfo = params_.transferInfo;
[codex:1084535] 140 if (pendingUnderlying != 0) transferInfo.receiver = address(this);
[codex:1084535] 141 transferInfo.amount = sharesToMint;
[codex:1084535] 142 transferInfo.data = payload;
[codex:1084535] 143 }
[codex:1084535] 144
[codex:1084535] 145 /**
[codex:1084535] 146 * @notice Handles post-hook logic after the execution of a destination hook.
[codex:1084535] 147 * @dev This function processes post-hook data to update the identifier cache and sibling chain cache.
[codex:1084535] 148 */
[codex:1084535] 149 function dstPostHookCall(
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Analyzing potential bugs in share calculations and vault hooks**
[codex:1084535]
[codex:1084535] I’m carefully examining a likely bug where consumed and pending shares are swapped, causing misaccounting and potential blocking of pending transfers. I’m also checking various vault hooks and controller functions for inconsistencies or logic errors, including possible issues with emergency shutdown, array length validation, token burn mechanics, yield token calculations leading to division by zero, ETH bridging mechanics, and hook approval checks. My main focus is confirming the severity and impact of these findings.
[codex:1084535] exec
[codex:1084535] /bin/bash -lc 'rg -n "pendingUnderlying" contracts/contracts/hooks -S' in /tmp/codex-multi-jjdlf1zy succeeded in 9ms:
[codex:1084535] contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:124: (uint256 consumedUnderlying, uint256 pendingUnderlying) = _limitDstHook(
[codex:1084535] contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:134: pendingUnderlying,
[codex:1084535] contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:140: if (pendingUnderlying != 0) transferInfo.receiver = address(this);
[codex:1084535] contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:160: uint256 pendingUnderlying,
[codex:1084535] contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:174: if (pendingUnderlying > 0) {
[codex:1084535] contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:177: pendingUnderlying) / depositUnderlying;
[codex:1084535] contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:145: uint256 pendingUnderlying,
[codex:1084535] contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:149: pendingUnderlying += transferInfo.amount - totalIdle;
[codex:1084535] contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:152: pendingUnderlying,
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Analyzing potential token and hook vulnerabilities**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc 'rg -n "TODO|FIXME|re check|recheck|fix" contracts/contracts -S' in /tmp/codex-multi-jjdlf1zy succeeded in 9ms:
[codex:1084535] contracts/contracts/bridge/Controller.sol:39: // re check this logic for mint and mint use cases and if other minter involved
[codex:1084535] contracts/contracts/token/yield-token/YieldToken.sol:25: // fix to round up and check other cases
[codex:1084535] contracts/contracts/token/yield-token/YieldTokenBase.sol:93: // recheck for multi yield
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Analyzing potential vulnerabilities and logic flows**
[codex:1084535]
[codex:1084535] I'm carefully examining various contract functions, especially around retry hooks and execution helpers, to identify security or logic flaws. There are subtle checks on connector matching, and I'm verifying if any gaps exist in hook calls or token transfers that could be exploited or cause unintended behavior. I'm focusing on inconsistencies in state updates and permission constraints.
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,220p' contracts/lib/solmate/src/tokens/ERC20.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // SPDX-License-Identifier: AGPL-3.0-only
[codex:1084535] pragma solidity >=0.8.0;
[codex:1084535]
[codex:1084535] /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation.
[codex:1084535] /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol)
[codex:1084535] /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol)
[codex:1084535] /// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it.
[codex:1084535] abstract contract ERC20 {
[codex:1084535] /*//////////////////////////////////////////////////////////////
[codex:1084535] EVENTS
[codex:1084535] //////////////////////////////////////////////////////////////*/
[codex:1084535]
[codex:1084535] event Transfer(address indexed from, address indexed to, uint256 amount);
[codex:1084535]
[codex:1084535] event Approval(address indexed owner, address indexed spender, uint256 amount);
[codex:1084535]
[codex:1084535] /*//////////////////////////////////////////////////////////////
[codex:1084535] METADATA STORAGE
[codex:1084535] //////////////////////////////////////////////////////////////*/
[codex:1084535]
[codex:1084535]
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Analyzing unchecked ERC20 transfers and accounting risks**
[codex:1084535]
[codex:1084535] I'm investigating how the code uses raw ERC20 transfers without checking their return values, especially in hooks like Vault_YieldLimitExecHook, which could cause silent failures with non-standard tokens. I'm also looking into potential underflow and reentrancy issues around strategy withdrawals and bridging, weighing their exploitability and severity while considering typical token behaviors and system assumptions.
[codex:1084535] thinking
[codex:1084535] **Reviewing strategy withdrawal and vault accounting**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "sed -n '1,200p' contracts/contracts/interfaces/IStrategy.sol" in /tmp/codex-multi-jjdlf1zy succeeded in 5ms:
[codex:1084535] // SPDX-License-Identifier: GPL-3.0-only
[codex:1084535] pragma solidity 0.8.13;
[codex:1084535]
[codex:1084535] /**
[codex:1084535] * @title IStrategy
[codex:1084535] * @notice Interface for strategy contract which interacts with other protocols
[codex:1084535] */
[codex:1084535] interface IStrategy {
[codex:1084535] function withdraw(uint256 amount_) external returns (uint256 loss_);
[codex:1084535]
[codex:1084535] function withdrawAll() external;
[codex:1084535]
[codex:1084535] function estimatedTotalAssets()
[codex:1084535] external
[codex:1084535] view
[codex:1084535] returns (uint256 totalUnderlyingAssets_);
[codex:1084535]
[codex:1084535] function invest() external;
[codex:1084535] }
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Analyzing potential vulnerabilities and findings**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "nl -ba contracts/contracts/hooks/Vault_YieldLimitExecHook.sol | sed -n '200,360p'" in /tmp/codex-multi-jjdlf1zy succeeded in 6ms:
[codex:1084535] 200 }
[codex:1084535] 201
[codex:1084535] 202 function postRetryHook(
[codex:1084535] 203 PostRetryHookCallParams calldata params_
[codex:1084535] 204 ) public override returns (CacheData memory cacheData) {
[codex:1084535] 205 return super.postRetryHook(params_);
[codex:1084535] 206 }
[codex:1084535] 207
[codex:1084535] 208 function withdrawFromStrategy(
[codex:1084535] 209 uint256 underlyingAsset_
[codex:1084535] 210 ) external onlyOwner returns (uint256) {
[codex:1084535] 211 return _withdrawFromStrategy(underlyingAsset_);
[codex:1084535] 212 }
[codex:1084535] 213
[codex:1084535] 214 function _withdrawFromStrategy(
[codex:1084535] 215 uint256 underlyingAsset_
[codex:1084535] 216 ) internal returns (uint256 withdrawn) {
[codex:1084535] 217 uint256 preBalance = underlyingAsset__.balanceOf(address(this));
[codex:1084535] 218 strategy.withdraw(underlyingAsset_);
[codex:1084535] 219 withdrawn = underlyingAsset__.balanceOf(address(this)) - preBalance;
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Analyzing unchecked transfers and permit signature issues**
[codex:1084535] exec
[codex:1084535] /bin/bash -lc "nl -ba contracts/contracts/token/yield-token/YieldTokenBase.sol | sed -n '120,240p'" in /tmp/codex-multi-jjdlf1zy succeeded in 6ms:
[codex:1084535] 120 unchecked {
[codex:1084535] 121 _balanceOf[to_] += sharesToTransfer;
[codex:1084535] 122 }
[codex:1084535] 123
[codex:1084535] 124 emit Transfer(msg.sender, to_, amount_);
[codex:1084535] 125
[codex:1084535] 126 return true;
[codex:1084535] 127 }
[codex:1084535] 128
[codex:1084535] 129 // transfer changes shares balance but reduces the amount
[codex:1084535] 130 function transferFrom(
[codex:1084535] 131 address from_,
[codex:1084535] 132 address to_,
[codex:1084535] 133 uint256 amount_
[codex:1084535] 134 ) public override returns (bool) {
[codex:1084535] 135 uint256 sharesToTransfer = convertToShares(amount_);
[codex:1084535] 136
[codex:1084535] 137 uint256 allowed = allowance[from_][msg.sender]; // Saves gas for limited approvals.
[codex:1084535] 138
[codex:1084535] 139 if (allowed != type(uint256).max)
[codex:1084535]
[codex:1084535] thinking
[codex:1084535] **Summarizing audit findings and exploit scenarios**
[codex:1084535]
[codex:1084535] I'm organizing detailed findings on vulnerabilities including a medium-severity pending share accounting bug causing locked funds, a low-severity unchecked ERC20 transfer risk leading to accounting inconsistencies, and a low-severity permit signature fragility that allows front-run invalidation. I'll craft exploit scenarios, evidence with code line references, and recommendations for each in a clear summary and structured JSON output.
[codex:1084535] codex
[codex:1084535] {"no_findings":false,"summary":"Found 3 issues: 1 medium accounting bug that can lock pending funds, and 2 low-severity issues around unchecked transfers and permit signature fragility.","findings":[{"severity":"medium","category":"math","title":"Pending share accounting uses pendingUnderlying instead of consumedUnderlying, locking pending funds","exploit_scenario":"When a transfer exceeds the receive limit, `pendingUnderlying > 0` and the hook mints shares to itself then transfers the consumed portion to the receiver. However, `dstPostHookCall` computes `consumedShares` using `pendingUnderlying`, so `pendingShares` ends up representing the consumed portion. The cache then tracks more pending shares than the hook actually holds. A subsequent `retry()` attempts to transfer these inflated pending shares, underflows the hook’s share balance, and reverts, leaving the pending funds stuck unless an admin rescues them.","recommendation":"Compute shares based on `consumedUnderlying` (not `pendingUnderlying`) and derive `pendingShares` from the remaining shares. For example: `consumedShares = totalShares * consumedUnderlying / depositUnderlying; pendingShares = totalShares - consumedShares;` then cache/emit using those corrected values.","evidence":"In `dstPostHookCall`, the comment indicates consumedU, but the calculation uses `pendingUnderlying`, and the resulting `pendingShares` are cached and emitted as pending.","locations":["contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:175"]},{"severity":"low","category":"other","title":"Unchecked ERC20 transfers when returning funds from strategy can desync accounting","exploit_scenario":"If the underlying token is non-standard and returns `false` instead of reverting, `_withdrawFromStrategy` and `_withdrawAllFromStrategy` will still update `totalIdle`/`totalDebt` and emit events even though the transfer to the vault failed. This can leave the vault underfunded and cause later withdrawals/bridges to revert or funds to become stuck in the hook contract.","recommendation":"Use `SafeTransferLib.safeTransfer` (or check the return value) for transfers back to the vault to ensure failures revert and accounting stays consistent.","evidence":"Both `_withdrawFromStrategy` and `_withdrawAllFromStrategy` use raw `transfer` without checking the return value.","locations":["contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:223","contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:235"]},{"severity":"low","category":"auth","title":"Permit signatures depend on mutable conversion rate, enabling front‑run invalidation","exploit_scenario":"`permit()` hashes `convertToShares(value)` at execution time. Any change in `totalUnderlyingAssets` between signing and submission (e.g., another bridge or yield sync) changes the conversion rate and invalidates the signature. An attacker can front‑run a permit submission by causing a small rate change, forcing `InvalidSigner` and blocking gasless approvals.","recommendation":"Make the signed value deterministic: accept a `valueShares` parameter for permit, or include a stable conversion rate snapshot in the signed data, or store allowances in asset units instead of shares.","evidence":"The signature hash and allowance both use `convertToShares(value)` which depends on mutable `totalUnderlyingAssets`.","locations":["contracts/contracts/token/yield-token/YieldTokenBase.sol:159"]}]}
[codex:1084535] tokens used
[codex:1084535] 172,326
[codex:1084535] {"no_findings":false,"summary":"Found 3 issues: 1 medium accounting bug that can lock pending funds, and 2 low-severity issues around unchecked transfers and permit signature fragility.","findings":[{"severity":"medium","category":"math","title":"Pending share accounting uses pendingUnderlying instead of consumedUnderlying, locking pending funds","exploit_scenario":"When a transfer exceeds the receive limit, `pendingUnderlying > 0` and the hook mints shares to itself then transfers the consumed portion to the receiver. However, `dstPostHookCall` computes `consumedShares` using `pendingUnderlying`, so `pendingShares` ends up representing the consumed portion. The cache then tracks more pending shares than the hook actually holds. A subsequent `retry()` attempts to transfer these inflated pending shares, underflows the hook’s share balance, and reverts, leaving the pending funds stuck unless an admin rescues them.","recommendation":"Compute shares based on `consumedUnderlying` (not `pendingUnderlying`) and derive `pendingShares` from the remaining shares. For example: `consumedShares = totalShares * consumedUnderlying / depositUnderlying; pendingShares = totalShares - consumedShares;` then cache/emit using those corrected values.","evidence":"In `dstPostHookCall`, the comment indicates consumedU, but the calculation uses `pendingUnderlying`, and the resulting `pendingShares` are cached and emitted as pending.","locations":["contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:175"]},{"severity":"low","category":"other","title":"Unchecked ERC20 transfers when returning funds from strategy can desync accounting","exploit_scenario":"If the underlying token is non-standard and returns `false` instead of reverting, `_withdrawFromStrategy` and `_withdrawAllFromStrategy` will still update `totalIdle`/`totalDebt` and emit events even though the transfer to the vault failed. This can leave the vault underfunded and cause later withdrawals/bridges to revert or funds to become stuck in the hook contract.","recommendation":"Use `SafeTransferLib.safeTransfer` (or check the return value) for transfers back to the vault to ensure failures revert and accounting stays consistent.","evidence":"Both `_withdrawFromStrategy` and `_withdrawAllFromStrategy` use raw `transfer` without checking the return value.","locations":["contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:223","contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:235"]},{"severity":"low","category":"auth","title":"Permit signatures depend on mutable conversion rate, enabling front‑run invalidation","exploit_scenario":"`permit()` hashes `convertToShares(value)` at execution time. Any change in `totalUnderlyingAssets` between signing and submission (e.g., another bridge or yield sync) changes the conversion rate and invalidates the signature. An attacker can front‑run a permit submission by causing a small rate change, forcing `InvalidSigner` and blocking gasless approvals.","recommendation":"Make the signed value deterministic: accept a `valueShares` parameter for permit, or include a stable conversion rate snapshot in the signed data, or store allowances in asset units instead of shares.","evidence":"The signature hash and allowance both use `convertToShares(value)` which depends on mutable `totalUnderlyingAssets`.","locations":["contracts/contracts/token/yield-token/YieldTokenBase.sol:159"]}]}
{
"codex": {
"ran_at": "2025-12-28T01:33:27.347992+00:00",
"returncode": 0
},
"summary": "Found 3 issues: 1 medium accounting bug that can lock pending funds, and 2 low-severity issues around unchecked transfers and permit signature fragility.",
"raw_final": {
"summary": "Found 3 issues: 1 medium accounting bug that can lock pending funds, and 2 low-severity issues around unchecked transfers and permit signature fragility.",
"findings": [
{
"title": "Pending share accounting uses pendingUnderlying instead of consumedUnderlying, locking pending funds",
"category": "math",
"evidence": "In `dstPostHookCall`, the comment indicates consumedU, but the calculation uses `pendingUnderlying`, and the resulting `pendingShares` are cached and emitted as pending.",
"severity": "medium",
"locations": [
"contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:175"
],
"recommendation": "Compute shares based on `consumedUnderlying` (not `pendingUnderlying`) and derive `pendingShares` from the remaining shares. For example: `consumedShares = totalShares * consumedUnderlying / depositUnderlying; pendingShares = totalShares - consumedShares;` then cache/emit using those corrected values.",
"exploit_scenario": "When a transfer exceeds the receive limit, `pendingUnderlying > 0` and the hook mints shares to itself then transfers the consumed portion to the receiver. However, `dstPostHookCall` computes `consumedShares` using `pendingUnderlying`, so `pendingShares` ends up representing the consumed portion. The cache then tracks more pending shares than the hook actually holds. A subsequent `retry()` attempts to transfer these inflated pending shares, underflows the hook\u2019s share balance, and reverts, leaving the pending funds stuck unless an admin rescues them."
},
{
"title": "Unchecked ERC20 transfers when returning funds from strategy can desync accounting",
"category": "other",
"evidence": "Both `_withdrawFromStrategy` and `_withdrawAllFromStrategy` use raw `transfer` without checking the return value.",
"severity": "low",
"locations": [
"contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:223",
"contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:235"
],
"recommendation": "Use `SafeTransferLib.safeTransfer` (or check the return value) for transfers back to the vault to ensure failures revert and accounting stays consistent.",
"exploit_scenario": "If the underlying token is non-standard and returns `false` instead of reverting, `_withdrawFromStrategy` and `_withdrawAllFromStrategy` will still update `totalIdle`/`totalDebt` and emit events even though the transfer to the vault failed. This can leave the vault underfunded and cause later withdrawals/bridges to revert or funds to become stuck in the hook contract."
},
{
"title": "Permit signatures depend on mutable conversion rate, enabling front\u2011run invalidation",
"category": "auth",
"evidence": "The signature hash and allowance both use `convertToShares(value)` which depends on mutable `totalUnderlyingAssets`.",
"severity": "low",
"locations": [
"contracts/contracts/token/yield-token/YieldTokenBase.sol:159"
],
"recommendation": "Make the signed value deterministic: accept a `valueShares` parameter for permit, or include a stable conversion rate snapshot in the signed data, or store allowances in asset units instead of shares.",
"exploit_scenario": "`permit()` hashes `convertToShares(value)` at execution time. Any change in `totalUnderlyingAssets` between signing and submission (e.g., another bridge or yield sync) changes the conversion rate and invalidates the signature. An attacker can front\u2011run a permit submission by causing a small rate change, forcing `InvalidSigner` and blocking gasless approvals."
}
],
"no_findings": false
},
"no_findings": false,
"schema_version": 1
}
00000000: PUSH1 0x80 00000002: PUSH1 0x40 00000004: MSTORE 00000005: PUSH1 0x04 00000007: CALLDATASIZE 00000008: LT 00000009: PUSH2 0x015f 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x8da5cb5b 00000019: GT 0000001a: PUSH2 0x00c0 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0xe272ad3f 00000024: GT 00000025: PUSH2 0x0074 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0xf290aafa 0000002f: GT 00000030: PUSH2 0x0059 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xf290aafa 0000003a: EQ 0000003b: PUSH2 0x03db 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xfc0c546a 00000045: EQ 00000046: PUSH2 0x03fb 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xfc3a7b98 00000050: EQ 00000051: PUSH2 0x042f 00000054: JUMPI 00000055: PUSH1 0x00 00000057: DUP1 00000058: REVERT 00000059: JUMPDEST 0000005a: DUP1 0000005b: PUSH4 0xe272ad3f 00000060: EQ 00000061: PUSH2 0x038b 00000064: JUMPI 00000065: DUP1 00000066: PUSH4 0xe9ee1eaf 0000006b: EQ 0000006c: PUSH2 0x03ab 0000006f: JUMPI 00000070: PUSH1 0x00 00000072: DUP1 00000073: REVERT 00000074: JUMPDEST 00000075: DUP1 00000076: PUSH4 0x9dc7b023 0000007b: GT 0000007c: PUSH2 0x00a5 0000007f: JUMPI 00000080: DUP1 00000081: PUSH4 0x9dc7b023 00000086: EQ 00000087: PUSH2 0x032b 0000008a: JUMPI 0000008b: DUP1 0000008c: PUSH4 0xaad48d80 00000091: EQ 00000092: PUSH2 0x034b 00000095: JUMPI 00000096: DUP1 00000097: PUSH4 0xd547741f 0000009c: EQ 0000009d: PUSH2 0x036b 000000a0: JUMPI 000000a1: PUSH1 0x00 000000a3: DUP1 000000a4: REVERT 000000a5: JUMPDEST 000000a6: DUP1 000000a7: PUSH4 0x8da5cb5b 000000ac: EQ 000000ad: PUSH2 0x02d0 000000b0: JUMPI 000000b1: DUP1 000000b2: PUSH4 0x91d14854 000000b7: EQ 000000b8: PUSH2 0x02fb 000000bb: JUMPI 000000bc: PUSH1 0x00 000000be: DUP1 000000bf: REVERT 000000c0: JUMPDEST 000000c1: DUP1 000000c2: PUSH4 0x4b0a8854 000000c7: GT 000000c8: PUSH2 0x0117 000000cb: JUMPI 000000cc: DUP1 000000cd: PUSH4 0x6ccae054 000000d2: GT 000000d3: PUSH2 0x00fc 000000d6: JUMPI 000000d7: DUP1 000000d8: PUSH4 0x6ccae054 000000dd: EQ 000000de: PUSH2 0x0270 000000e1: JUMPI 000000e2: DUP1 000000e3: PUSH4 0x70bab2c0 000000e8: EQ 000000e9: PUSH2 0x0290 000000ec: JUMPI 000000ed: DUP1 000000ee: PUSH4 0x873ea755 000000f3: EQ 000000f4: PUSH2 0x02bd 000000f7: JUMPI 000000f8: PUSH1 0x00 000000fa: DUP1 000000fb: REVERT 000000fc: JUMPDEST 000000fd: DUP1 000000fe: PUSH4 0x4b0a8854 00000103: EQ 00000104: PUSH2 0x0223 00000107: JUMPI 00000108: DUP1 00000109: PUSH4 0x5b94db27 0000010e: EQ 0000010f: PUSH2 0x0250 00000112: JUMPI 00000113: PUSH1 0x00 00000115: DUP1 00000116: REVERT 00000117: JUMPDEST 00000118: DUP1 00000119: PUSH4 0x2f2ff15d 0000011e: GT 0000011f: PUSH2 0x0148 00000122: JUMPI 00000123: DUP1 00000124: PUSH4 0x2f2ff15d 00000129: EQ 0000012a: PUSH2 0x01d9 0000012d: JUMPI 0000012e: DUP1 0000012f: PUSH4 0x3bd1adec 00000134: EQ 00000135: PUSH2 0x01fb 00000138: JUMPI 00000139: DUP1 0000013a: PUSH4 0x405e720a 0000013f: EQ 00000140: PUSH2 0x0210 00000143: JUMPI 00000144: PUSH1 0x00 00000146: DUP1 00000147: REVERT 00000148: JUMPDEST 00000149: DUP1 0000014a: PUSH4 0x20f99c0a 0000014f: EQ 00000150: PUSH2 0x0164 00000153: JUMPI 00000154: DUP1 00000155: PUSH4 0x2421e155 0000015a: EQ 0000015b: PUSH2 0x01b5 0000015e: JUMPI 0000015f: JUMPDEST 00000160: PUSH1 0x00 00000162: DUP1 00000163: REVERT 00000164: JUMPDEST 00000165: CALLVALUE 00000166: DUP1 00000167: ISZERO 00000168: PUSH2 0x0170 0000016b: JUMPI 0000016c: PUSH1 0x00 0000016e: DUP1 0000016f: REVERT 00000170: JUMPDEST 00000171: POP 00000172: PUSH1 0x02 00000174: SLOAD 00000175: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000018a: AND 0000018b: JUMPDEST 0000018c: PUSH1 0x40 0000018e: MLOAD 0000018f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000001a4: SWAP1 000001a5: SWAP2 000001a6: AND 000001a7: DUP2 000001a8: MSTORE 000001a9: PUSH1 0x20 000001ab: ADD 000001ac: JUMPDEST 000001ad: PUSH1 0x40 000001af: MLOAD 000001b0: DUP1 000001b1: SWAP2 000001b2: SUB 000001b3: SWAP1 000001b4: RETURN 000001b5: JUMPDEST 000001b6: CALLVALUE 000001b7: DUP1 000001b8: ISZERO 000001b9: PUSH2 0x01c1 000001bc: JUMPI 000001bd: PUSH1 0x00 000001bf: DUP1 000001c0: REVERT 000001c1: JUMPDEST 000001c2: POP 000001c3: PUSH2 0x01cb 000001c6: PUSH1 0x04 000001c8: SLOAD 000001c9: DUP2 000001ca: JUMP 000001cb: JUMPDEST 000001cc: PUSH1 0x40 000001ce: MLOAD 000001cf: SWAP1 000001d0: DUP2 000001d1: MSTORE 000001d2: PUSH1 0x20 000001d4: ADD 000001d5: PUSH2 0x01ac 000001d8: JUMP 000001d9: JUMPDEST 000001da: CALLVALUE 000001db: DUP1 000001dc: ISZERO 000001dd: PUSH2 0x01e5 000001e0: JUMPI 000001e1: PUSH1 0x00 000001e3: DUP1 000001e4: REVERT 000001e5: JUMPDEST 000001e6: POP 000001e7: PUSH2 0x01f9 000001ea: PUSH2 0x01f4 000001ed: CALLDATASIZE 000001ee: PUSH1 0x04 000001f0: PUSH2 0x2732 000001f3: JUMP 000001f4: JUMPDEST 000001f5: PUSH2 0x044f 000001f8: JUMP 000001f9: JUMPDEST 000001fa: STOP 000001fb: JUMPDEST 000001fc: CALLVALUE 000001fd: DUP1 000001fe: ISZERO 000001ff: PUSH2 0x0207 00000202: JUMPI 00000203: PUSH1 0x00 00000205: DUP1 00000206: REVERT 00000207: JUMPDEST 00000208: POP 00000209: PUSH2 0x01f9 0000020c: PUSH2 0x04ae 0000020f: JUMP 00000210: JUMPDEST 00000211: PUSH2 0x01f9 00000214: PUSH2 0x021e 00000217: CALLDATASIZE 00000218: PUSH1 0x04 0000021a: PUSH2 0x27a4 0000021d: JUMP 0000021e: JUMPDEST 0000021f: PUSH2 0x050a 00000222: JUMP 00000223: JUMPDEST 00000224: CALLVALUE 00000225: DUP1 00000226: ISZERO 00000227: PUSH2 0x022f 0000022a: JUMPI 0000022b: PUSH1 0x00 0000022d: DUP1 0000022e: REVERT 0000022f: JUMPDEST 00000230: POP 00000231: PUSH2 0x0243 00000234: PUSH2 0x023e 00000237: CALLDATASIZE 00000238: PUSH1 0x04 0000023a: PUSH2 0x284c 0000023d: JUMP 0000023e: JUMPDEST 0000023f: PUSH2 0x065b 00000242: JUMP 00000243: JUMPDEST 00000244: PUSH1 0x40 00000246: MLOAD 00000247: PUSH2 0x01ac 0000024a: SWAP2 0000024b: SWAP1 0000024c: PUSH2 0x28df 0000024f: JUMP 00000250: JUMPDEST 00000251: CALLVALUE 00000252: DUP1 00000253: ISZERO 00000254: PUSH2 0x025c 00000257: JUMPI 00000258: PUSH1 0x00 0000025a: DUP1 0000025b: REVERT 0000025c: JUMPDEST 0000025d: POP 0000025e: PUSH2 0x01f9 00000261: PUSH2 0x026b 00000264: CALLDATASIZE 00000265: PUSH1 0x04 00000267: PUSH2 0x284c 0000026a: JUMP 0000026b: JUMPDEST 0000026c: PUSH2 0x06f5 0000026f: JUMP 00000270: JUMPDEST 00000271: CALLVALUE 00000272: DUP1 00000273: ISZERO 00000274: PUSH2 0x027c 00000277: JUMPI 00000278: PUSH1 0x00 0000027a: DUP1 0000027b: REVERT 0000027c: JUMPDEST 0000027d: POP 0000027e: PUSH2 0x01f9 00000281: PUSH2 0x028b 00000284: CALLDATASIZE 00000285: PUSH1 0x04 00000287: PUSH2 0x28f2 0000028a: JUMP 0000028b: JUMPDEST 0000028c: PUSH2 0x07b5 0000028f: JUMP 00000290: JUMPDEST 00000291: CALLVALUE 00000292: DUP1 00000293: ISZERO 00000294: PUSH2 0x029c 00000297: JUMPI 00000298: PUSH1 0x00 0000029a: DUP1 0000029b: REVERT 0000029c: JUMPDEST 0000029d: POP 0000029e: PUSH1 0x05 000002a0: SLOAD 000002a1: PUSH2 0x018b 000002a4: SWAP1 000002a5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000002ba: AND 000002bb: DUP2 000002bc: JUMP 000002bd: JUMPDEST 000002be: PUSH2 0x01f9 000002c1: PUSH2 0x02cb 000002c4: CALLDATASIZE 000002c5: PUSH1 0x04 000002c7: PUSH2 0x29f7 000002ca: JUMP 000002cb: JUMPDEST 000002cc: PUSH2 0x0853 000002cf: JUMP 000002d0: JUMPDEST 000002d1: CALLVALUE 000002d2: DUP1 000002d3: ISZERO 000002d4: PUSH2 0x02dc 000002d7: JUMPI 000002d8: PUSH1 0x00 000002da: DUP1 000002db: REVERT 000002dc: JUMPDEST 000002dd: POP 000002de: PUSH1 0x01 000002e0: SLOAD 000002e1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000002f6: AND 000002f7: PUSH2 0x018b 000002fa: JUMP 000002fb: JUMPDEST 000002fc: CALLVALUE 000002fd: DUP1 000002fe: ISZERO 000002ff: PUSH2 0x0307 00000302: JUMPI 00000303: PUSH1 0x00 00000305: DUP1 00000306: REVERT 00000307: JUMPDEST 00000308: POP 00000309: PUSH2 0x031b 0000030c: PUSH2 0x0316 0000030f: CALLDATASIZE 00000310: PUSH1 0x04 00000312: PUSH2 0x2732 00000315: JUMP 00000316: JUMPDEST 00000317: PUSH2 0x095c 0000031a: JUMP 0000031b: JUMPDEST 0000031c: PUSH1 0x40 0000031e: MLOAD 0000031f: SWAP1 00000320: ISZERO 00000321: ISZERO 00000322: DUP2 00000323: MSTORE 00000324: PUSH1 0x20 00000326: ADD 00000327: PUSH2 0x01ac 0000032a: JUMP 0000032b: JUMPDEST 0000032c: CALLVALUE 0000032d: DUP1 0000032e: ISZERO 0000032f: PUSH2 0x0337 00000332: JUMPI 00000333: PUSH1 0x00 00000335: DUP1 00000336: REVERT 00000337: JUMPDEST 00000338: POP 00000339: PUSH2 0x01f9 0000033c: PUSH2 0x0346 0000033f: CALLDATASIZE 00000340: PUSH1 0x04 00000342: PUSH2 0x2a93 00000345: JUMP 00000346: JUMPDEST 00000347: PUSH2 0x0997 0000034a: JUMP 0000034b: JUMPDEST 0000034c: CALLVALUE 0000034d: DUP1 0000034e: ISZERO 0000034f: PUSH2 0x0357 00000352: JUMPI 00000353: PUSH1 0x00 00000355: DUP1 00000356: REVERT 00000357: JUMPDEST 00000358: POP 00000359: PUSH2 0x01f9 0000035c: PUSH2 0x0366 0000035f: CALLDATASIZE 00000360: PUSH1 0x04 00000362: PUSH2 0x2ad4 00000365: JUMP 00000366: JUMPDEST 00000367: PUSH2 0x0a41 0000036a: JUMP 0000036b: JUMPDEST 0000036c: CALLVALUE 0000036d: DUP1 0000036e: ISZERO 0000036f: PUSH2 0x0377 00000372: JUMPI 00000373: PUSH1 0x00 00000375: DUP1 00000376: REVERT 00000377: JUMPDEST 00000378: POP 00000379: PUSH2 0x01f9 0000037c: PUSH2 0x0386 0000037f: CALLDATASIZE 00000380: PUSH1 0x04 00000382: PUSH2 0x2732 00000385: JUMP 00000386: JUMPDEST 00000387: PUSH2 0x0cb6 0000038a: JUMP 0000038b: JUMPDEST 0000038c: CALLVALUE 0000038d: DUP1 0000038e: ISZERO 0000038f: PUSH2 0x0397 00000392: JUMPI 00000393: PUSH1 0x00 00000395: DUP1 00000396: REVERT 00000397: JUMPDEST 00000398: POP 00000399: PUSH2 0x01f9 0000039c: PUSH2 0x03a6 0000039f: CALLDATASIZE 000003a0: PUSH1 0x04 000003a2: PUSH2 0x2b4e 000003a5: JUMP 000003a6: JUMPDEST 000003a7: PUSH2 0x0d11 000003aa: JUMP 000003ab: JUMPDEST 000003ac: CALLVALUE 000003ad: DUP1 000003ae: ISZERO 000003af: PUSH2 0x03b7 000003b2: JUMPI 000003b3: PUSH1 0x00 000003b5: DUP1 000003b6: REVERT 000003b7: JUMPDEST 000003b8: POP 000003b9: PUSH2 0x031b 000003bc: PUSH2 0x03c6 000003bf: CALLDATASIZE 000003c0: PUSH1 0x04 000003c2: PUSH2 0x284c 000003c5: JUMP 000003c6: JUMPDEST 000003c7: PUSH1 0x08 000003c9: PUSH1 0x20 000003cb: MSTORE 000003cc: PUSH1 0x00 000003ce: SWAP1 000003cf: DUP2 000003d0: MSTORE 000003d1: PUSH1 0x40 000003d3: SWAP1 000003d4: KECCAK256 000003d5: SLOAD 000003d6: PUSH1 0xff 000003d8: AND 000003d9: DUP2 000003da: JUMP 000003db: JUMPDEST 000003dc: CALLVALUE 000003dd: DUP1 000003de: ISZERO 000003df: PUSH2 0x03e7 000003e2: JUMPI 000003e3: PUSH1 0x00 000003e5: DUP1 000003e6: REVERT 000003e7: JUMPDEST 000003e8: POP 000003e9: PUSH2 0x0243 000003ec: PUSH2 0x03f6 000003ef: CALLDATASIZE 000003f0: PUSH1 0x04 000003f2: PUSH2 0x2bba 000003f5: JUMP 000003f6: JUMPDEST 000003f7: PUSH2 0x0ecb 000003fa: JUMP 000003fb: JUMPDEST 000003fc: CALLVALUE 000003fd: DUP1 000003fe: ISZERO 000003ff: PUSH2 0x0407 00000402: JUMPI 00000403: PUSH1 0x00 00000405: DUP1 00000406: REVERT 00000407: JUMPDEST 00000408: POP 00000409: PUSH2 0x018b 0000040c: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 0000042d: DUP2 0000042e: JUMP 0000042f: JUMPDEST 00000430: CALLVALUE 00000431: DUP1 00000432: ISZERO 00000433: PUSH2 0x043b 00000436: JUMPI 00000437: PUSH1 0x00 00000439: DUP1 0000043a: REVERT 0000043b: JUMPDEST 0000043c: POP 0000043d: PUSH2 0x01cb 00000440: PUSH2 0x044a 00000443: CALLDATASIZE 00000444: PUSH1 0x04 00000446: PUSH2 0x2bd3 00000449: JUMP 0000044a: JUMPDEST 0000044b: PUSH2 0x0ee4 0000044e: JUMP 0000044f: JUMPDEST 00000450: PUSH1 0x01 00000452: SLOAD 00000453: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000468: AND 00000469: CALLER 0000046a: EQ 0000046b: PUSH2 0x04a0 0000046e: JUMPI 0000046f: PUSH1 0x40 00000471: MLOAD 00000472: PUSH32 0x5fc483c500000000000000000000000000000000000000000000000000000000 00000493: DUP2 00000494: MSTORE 00000495: PUSH1 0x04 00000497: ADD 00000498: PUSH1 0x40 0000049a: MLOAD 0000049b: DUP1 0000049c: SWAP2 0000049d: SUB 0000049e: SWAP1 0000049f: REVERT 000004a0: JUMPDEST 000004a1: PUSH2 0x04aa 000004a4: DUP3 000004a5: DUP3 000004a6: PUSH2 0x0f85 000004a9: JUMP 000004aa: JUMPDEST 000004ab: POP 000004ac: POP 000004ad: JUMP 000004ae: JUMPDEST 000004af: PUSH1 0x02 000004b1: SLOAD 000004b2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000004c7: AND 000004c8: CALLER 000004c9: EQ 000004ca: PUSH2 0x04ff 000004cd: JUMPI 000004ce: PUSH1 0x40 000004d0: MLOAD 000004d1: PUSH32 0x7c91ccdd00000000000000000000000000000000000000000000000000000000 000004f2: DUP2 000004f3: MSTORE 000004f4: PUSH1 0x04 000004f6: ADD 000004f7: PUSH1 0x40 000004f9: MLOAD 000004fa: DUP1 000004fb: SWAP2 000004fc: SUB 000004fd: SWAP1 000004fe: REVERT 000004ff: JUMPDEST 00000500: PUSH2 0x0508 00000503: CALLER 00000504: PUSH2 0x100b 00000507: JUMP 00000508: JUMPDEST 00000509: JUMP 0000050a: JUMPDEST 0000050b: PUSH1 0x00 0000050d: SLOAD 0000050e: PUSH1 0x01 00000510: EQ 00000511: PUSH2 0x057b 00000514: JUMPI 00000515: PUSH1 0x40 00000517: MLOAD 00000518: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000539: DUP2 0000053a: MSTORE 0000053b: PUSH1 0x20 0000053d: PUSH1 0x04 0000053f: DUP3 00000540: ADD 00000541: MSTORE 00000542: PUSH1 0x0a 00000544: PUSH1 0x24 00000546: DUP3 00000547: ADD 00000548: MSTORE 00000549: PUSH32 0x5245454e5452414e435900000000000000000000000000000000000000000000 0000056a: PUSH1 0x44 0000056c: DUP3 0000056d: ADD 0000056e: MSTORE 0000056f: PUSH1 0x64 00000571: ADD 00000572: JUMPDEST 00000573: PUSH1 0x40 00000575: MLOAD 00000576: DUP1 00000577: SWAP2 00000578: SUB 00000579: SWAP1 0000057a: REVERT 0000057b: JUMPDEST 0000057c: PUSH1 0x02 0000057e: PUSH1 0x00 00000580: DUP2 00000581: SWAP1 00000582: SSTORE 00000583: POP 00000584: PUSH1 0x00 00000586: DUP1 00000587: PUSH2 0x05f4 0000058a: DUP8 0000058b: PUSH1 0x40 0000058d: MLOAD 0000058e: DUP1 0000058f: PUSH1 0x60 00000591: ADD 00000592: PUSH1 0x40 00000594: MSTORE 00000595: DUP1 00000596: DUP14 00000597: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000005ac: AND 000005ad: DUP2 000005ae: MSTORE 000005af: PUSH1 0x20 000005b1: ADD 000005b2: DUP13 000005b3: DUP2 000005b4: MSTORE 000005b5: PUSH1 0x20 000005b7: ADD 000005b8: DUP10 000005b9: DUP10 000005ba: DUP1 000005bb: DUP1 000005bc: PUSH1 0x1f 000005be: ADD 000005bf: PUSH1 0x20 000005c1: DUP1 000005c2: SWAP2 000005c3: DIV 000005c4: MUL 000005c5: PUSH1 0x20 000005c7: ADD 000005c8: PUSH1 0x40 000005ca: MLOAD 000005cb: SWAP1 000005cc: DUP2 000005cd: ADD 000005ce: PUSH1 0x40 000005d0: MSTORE 000005d1: DUP1 000005d2: SWAP4 000005d3: SWAP3 000005d4: SWAP2 000005d5: SWAP1 000005d6: DUP2 000005d7: DUP2 000005d8: MSTORE 000005d9: PUSH1 0x20 000005db: ADD 000005dc: DUP4 000005dd: DUP4 000005de: DUP1 000005df: DUP3 000005e0: DUP5 000005e1: CALLDATACOPY 000005e2: PUSH1 0x00 000005e4: SWAP3 000005e5: ADD 000005e6: SWAP2 000005e7: SWAP1 000005e8: SWAP2 000005e9: MSTORE 000005ea: POP 000005eb: POP 000005ec: POP 000005ed: SWAP2 000005ee: MSTORE 000005ef: POP 000005f0: PUSH2 0x1084 000005f3: JUMP 000005f4: JUMPDEST 000005f5: SWAP2 000005f6: POP 000005f7: SWAP2 000005f8: POP 000005f9: PUSH2 0x0605 000005fc: DUP3 000005fd: PUSH1 0x20 000005ff: ADD 00000600: MLOAD 00000601: PUSH2 0x12e3 00000604: JUMP 00000605: JUMPDEST 00000606: PUSH2 0x064a 00000609: DUP9 0000060a: DUP9 0000060b: DUP7 0000060c: DUP7 0000060d: DUP1 0000060e: DUP1 0000060f: PUSH1 0x1f 00000611: ADD 00000612: PUSH1 0x20 00000614: DUP1 00000615: SWAP2 00000616: DIV 00000617: MUL 00000618: PUSH1 0x20 0000061a: ADD 0000061b: PUSH1 0x40 0000061d: MLOAD 0000061e: SWAP1 0000061f: DUP2 00000620: ADD 00000621: PUSH1 0x40 00000623: MSTORE 00000624: DUP1 00000625: SWAP4 00000626: SWAP3 00000627: SWAP2 00000628: SWAP1 00000629: DUP2 0000062a: DUP2 0000062b: MSTORE 0000062c: PUSH1 0x20 0000062e: ADD 0000062f: DUP4 00000630: DUP4 00000631: DUP1 00000632: DUP3 00000633: DUP5 00000634: CALLDATACOPY 00000635: PUSH1 0x00 00000637: SWAP3 00000638: ADD 00000639: SWAP2 0000063a: SWAP1 0000063b: SWAP2 0000063c: MSTORE 0000063d: POP 0000063e: DUP8 0000063f: SWAP3 00000640: POP 00000641: DUP9 00000642: SWAP2 00000643: POP 00000644: PUSH2 0x1386 00000647: SWAP1 00000648: POP 00000649: JUMP 0000064a: JUMPDEST 0000064b: POP 0000064c: POP 0000064d: PUSH1 0x01 0000064f: PUSH1 0x00 00000651: SSTORE 00000652: POP 00000653: POP 00000654: POP 00000655: POP 00000656: POP 00000657: POP 00000658: POP 00000659: POP 0000065a: JUMP 0000065b: JUMPDEST 0000065c: PUSH1 0x07 0000065e: PUSH1 0x20 00000660: MSTORE 00000661: PUSH1 0x00 00000663: SWAP1 00000664: DUP2 00000665: MSTORE 00000666: PUSH1 0x40 00000668: SWAP1 00000669: KECCAK256 0000066a: DUP1 0000066b: SLOAD 0000066c: PUSH2 0x0674 0000066f: SWAP1 00000670: PUSH2 0x2c08 00000673: JUMP 00000674: JUMPDEST 00000675: DUP1 00000676: PUSH1 0x1f 00000678: ADD 00000679: PUSH1 0x20 0000067b: DUP1 0000067c: SWAP2 0000067d: DIV 0000067e: MUL 0000067f: PUSH1 0x20 00000681: ADD 00000682: PUSH1 0x40 00000684: MLOAD 00000685: SWAP1 00000686: DUP2 00000687: ADD 00000688: PUSH1 0x40 0000068a: MSTORE 0000068b: DUP1 0000068c: SWAP3 0000068d: SWAP2 0000068e: SWAP1 0000068f: DUP2 00000690: DUP2 00000691: MSTORE 00000692: PUSH1 0x20 00000694: ADD 00000695: DUP3 00000696: DUP1 00000697: SLOAD 00000698: PUSH2 0x06a0 0000069b: SWAP1 0000069c: PUSH2 0x2c08 0000069f: JUMP 000006a0: JUMPDEST 000006a1: DUP1 000006a2: ISZERO 000006a3: PUSH2 0x06ed 000006a6: JUMPI 000006a7: DUP1 000006a8: PUSH1 0x1f 000006aa: LT 000006ab: PUSH2 0x06c2 000006ae: JUMPI 000006af: PUSH2 0x0100 000006b2: DUP1 000006b3: DUP4 000006b4: SLOAD 000006b5: DIV 000006b6: MUL 000006b7: DUP4 000006b8: MSTORE 000006b9: SWAP2 000006ba: PUSH1 0x20 000006bc: ADD 000006bd: SWAP2 000006be: PUSH2 0x06ed 000006c1: JUMP 000006c2: JUMPDEST 000006c3: DUP3 000006c4: ADD 000006c5: SWAP2 000006c6: SWAP1 000006c7: PUSH1 0x00 000006c9: MSTORE 000006ca: PUSH1 0x20 000006cc: PUSH1 0x00 000006ce: KECCAK256 000006cf: SWAP1 000006d0: JUMPDEST 000006d1: DUP2 000006d2: SLOAD 000006d3: DUP2 000006d4: MSTORE 000006d5: SWAP1 000006d6: PUSH1 0x01 000006d8: ADD 000006d9: SWAP1 000006da: PUSH1 0x20 000006dc: ADD 000006dd: DUP1 000006de: DUP4 000006df: GT 000006e0: PUSH2 0x06d0 000006e3: JUMPI 000006e4: DUP3 000006e5: SWAP1 000006e6: SUB 000006e7: PUSH1 0x1f 000006e9: AND 000006ea: DUP3 000006eb: ADD 000006ec: SWAP2 000006ed: JUMPDEST 000006ee: POP 000006ef: POP 000006f0: POP 000006f1: POP 000006f2: POP 000006f3: DUP2 000006f4: JUMP 000006f5: JUMPDEST 000006f6: PUSH1 0x01 000006f8: SLOAD 000006f9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000070e: AND 0000070f: CALLER 00000710: EQ 00000711: PUSH2 0x0746 00000714: JUMPI 00000715: PUSH1 0x40 00000717: MLOAD 00000718: PUSH32 0x5fc483c500000000000000000000000000000000000000000000000000000000 00000739: DUP2 0000073a: MSTORE 0000073b: PUSH1 0x04 0000073d: ADD 0000073e: PUSH1 0x40 00000740: MLOAD 00000741: DUP1 00000742: SWAP2 00000743: SUB 00000744: SWAP1 00000745: REVERT 00000746: JUMPDEST 00000747: PUSH1 0x02 00000749: DUP1 0000074a: SLOAD 0000074b: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 0000076c: AND 0000076d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000782: DUP4 00000783: AND 00000784: SWAP1 00000785: DUP2 00000786: OR 00000787: SWAP1 00000788: SWAP2 00000789: SSTORE 0000078a: PUSH1 0x40 0000078c: MLOAD 0000078d: PUSH32 0x906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce22 000007ae: SWAP1 000007af: PUSH1 0x00 000007b1: SWAP1 000007b2: LOG2 000007b3: POP 000007b4: JUMP 000007b5: JUMPDEST 000007b6: CALLER 000007b7: PUSH1 0x00 000007b9: SWAP1 000007ba: DUP2 000007bb: MSTORE 000007bc: PUSH32 0x271b3e2292ab6fd3ff496cd98d6d375af02f11568a701741f48bba7789f13a70 000007dd: PUSH1 0x20 000007df: MSTORE 000007e0: PUSH1 0x40 000007e2: SWAP1 000007e3: KECCAK256 000007e4: SLOAD 000007e5: PUSH32 0xc4c453d647953c0fd35db5a34ee76e60fb4abc3a8fb891a25936b70b38f29253 00000806: SWAP1 00000807: PUSH1 0xff 00000809: AND 0000080a: PUSH2 0x0842 0000080d: JUMPI 0000080e: PUSH1 0x40 00000810: MLOAD 00000811: PUSH32 0x962f633300000000000000000000000000000000000000000000000000000000 00000832: DUP2 00000833: MSTORE 00000834: PUSH1 0x04 00000836: DUP2 00000837: ADD 00000838: DUP3 00000839: SWAP1 0000083a: MSTORE 0000083b: PUSH1 0x24 0000083d: ADD 0000083e: PUSH2 0x0572 00000841: JUMP 00000842: JUMPDEST 00000843: PUSH2 0x084d 00000846: DUP5 00000847: DUP5 00000848: DUP5 00000849: PUSH2 0x16cb 0000084c: JUMP 0000084d: JUMPDEST 0000084e: POP 0000084f: POP 00000850: POP 00000851: POP 00000852: JUMP 00000853: JUMPDEST 00000854: PUSH1 0x00 00000856: SLOAD 00000857: PUSH1 0x01 00000859: EQ 0000085a: PUSH2 0x08bf 0000085d: JUMPI 0000085e: PUSH1 0x40 00000860: MLOAD 00000861: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000882: DUP2 00000883: MSTORE 00000884: PUSH1 0x20 00000886: PUSH1 0x04 00000888: DUP3 00000889: ADD 0000088a: MSTORE 0000088b: PUSH1 0x0a 0000088d: PUSH1 0x24 0000088f: DUP3 00000890: ADD 00000891: MSTORE 00000892: PUSH32 0x5245454e5452414e435900000000000000000000000000000000000000000000 000008b3: PUSH1 0x44 000008b5: DUP3 000008b6: ADD 000008b7: MSTORE 000008b8: PUSH1 0x64 000008ba: ADD 000008bb: PUSH2 0x0572 000008be: JUMP 000008bf: JUMPDEST 000008c0: PUSH1 0x02 000008c2: PUSH1 0x00 000008c4: DUP2 000008c5: SWAP1 000008c6: SSTORE 000008c7: POP 000008c8: PUSH1 0x00 000008ca: DUP1 000008cb: PUSH1 0x00 000008cd: DUP1 000008ce: DUP5 000008cf: DUP1 000008d0: PUSH1 0x20 000008d2: ADD 000008d3: SWAP1 000008d4: MLOAD 000008d5: DUP2 000008d6: ADD 000008d7: SWAP1 000008d8: PUSH2 0x08e1 000008db: SWAP2 000008dc: SWAP1 000008dd: PUSH2 0x2ca0 000008e0: JUMP 000008e1: JUMPDEST 000008e2: SWAP4 000008e3: POP 000008e4: SWAP4 000008e5: POP 000008e6: SWAP4 000008e7: POP 000008e8: SWAP4 000008e9: POP 000008ea: PUSH1 0x00 000008ec: PUSH1 0x40 000008ee: MLOAD 000008ef: DUP1 000008f0: PUSH1 0x60 000008f2: ADD 000008f3: PUSH1 0x40 000008f5: MSTORE 000008f6: DUP1 000008f7: DUP7 000008f8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000090d: AND 0000090e: DUP2 0000090f: MSTORE 00000910: PUSH1 0x20 00000912: ADD 00000913: DUP6 00000914: DUP2 00000915: MSTORE 00000916: PUSH1 0x20 00000918: ADD 00000919: DUP4 0000091a: DUP2 0000091b: MSTORE 0000091c: POP 0000091d: SWAP1 0000091e: POP 0000091f: PUSH1 0x60 00000921: PUSH2 0x092a 00000924: DUP9 00000925: DUP4 00000926: PUSH2 0x17c0 00000929: JUMP 0000092a: JUMPDEST 0000092b: DUP1 0000092c: MLOAD 0000092d: PUSH1 0x20 0000092f: DUP3 00000930: ADD 00000931: MLOAD 00000932: SWAP2 00000933: SWAP5 00000934: POP 00000935: SWAP2 00000936: SWAP3 00000937: POP 00000938: PUSH2 0x0941 0000093b: SWAP2 0000093c: SWAP1 0000093d: PUSH2 0x1a43 00000940: JUMP 00000941: JUMPDEST 00000942: PUSH2 0x094d 00000945: DUP6 00000946: DUP6 00000947: DUP4 00000948: DUP6 00000949: PUSH2 0x1af7 0000094c: JUMP 0000094d: JUMPDEST 0000094e: POP 0000094f: POP 00000950: PUSH1 0x01 00000952: PUSH1 0x00 00000954: SSTORE 00000955: POP 00000956: POP 00000957: POP 00000958: POP 00000959: POP 0000095a: POP 0000095b: JUMP 0000095c: JUMPDEST 0000095d: PUSH1 0x00 0000095f: DUP3 00000960: DUP2 00000961: MSTORE 00000962: PUSH1 0x03 00000964: PUSH1 0x20 00000966: SWAP1 00000967: DUP2 00000968: MSTORE 00000969: PUSH1 0x40 0000096b: DUP1 0000096c: DUP4 0000096d: KECCAK256 0000096e: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000983: DUP6 00000984: AND 00000985: DUP5 00000986: MSTORE 00000987: SWAP1 00000988: SWAP2 00000989: MSTORE 0000098a: DUP2 0000098b: KECCAK256 0000098c: SLOAD 0000098d: PUSH1 0xff 0000098f: AND 00000990: JUMPDEST 00000991: SWAP4 00000992: SWAP3 00000993: POP 00000994: POP 00000995: POP 00000996: JUMP 00000997: JUMPDEST 00000998: PUSH1 0x00 0000099a: SLOAD 0000099b: PUSH1 0x01 0000099d: EQ 0000099e: PUSH2 0x0a03 000009a1: JUMPI 000009a2: PUSH1 0x40 000009a4: MLOAD 000009a5: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000009c6: DUP2 000009c7: MSTORE 000009c8: PUSH1 0x20 000009ca: PUSH1 0x04 000009cc: DUP3 000009cd: ADD 000009ce: MSTORE 000009cf: PUSH1 0x0a 000009d1: PUSH1 0x24 000009d3: DUP3 000009d4: ADD 000009d5: MSTORE 000009d6: PUSH32 0x5245454e5452414e435900000000000000000000000000000000000000000000 000009f7: PUSH1 0x44 000009f9: DUP3 000009fa: ADD 000009fb: MSTORE 000009fc: PUSH1 0x64 000009fe: ADD 000009ff: PUSH2 0x0572 00000a02: JUMP 00000a03: JUMPDEST 00000a04: PUSH1 0x02 00000a06: PUSH1 0x00 00000a08: SWAP1 00000a09: DUP2 00000a0a: SSTORE 00000a0b: DUP1 00000a0c: PUSH2 0x0a15 00000a0f: DUP5 00000a10: DUP5 00000a11: PUSH2 0x1d33 00000a14: JUMP 00000a15: JUMPDEST 00000a16: SWAP2 00000a17: POP 00000a18: SWAP2 00000a19: POP 00000a1a: PUSH2 0x0a2b 00000a1d: DUP2 00000a1e: PUSH1 0x00 00000a20: ADD 00000a21: MLOAD 00000a22: DUP3 00000a23: PUSH1 0x20 00000a25: ADD 00000a26: MLOAD 00000a27: PUSH2 0x1a43 00000a2a: JUMP 00000a2b: JUMPDEST 00000a2c: PUSH2 0x0a36 00000a2f: DUP5 00000a30: DUP5 00000a31: DUP5 00000a32: PUSH2 0x203b 00000a35: JUMP 00000a36: JUMPDEST 00000a37: POP 00000a38: POP 00000a39: PUSH1 0x01 00000a3b: PUSH1 0x00 00000a3d: SSTORE 00000a3e: POP 00000a3f: POP 00000a40: JUMP 00000a41: JUMPDEST 00000a42: PUSH1 0x01 00000a44: SLOAD 00000a45: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a5a: AND 00000a5b: CALLER 00000a5c: EQ 00000a5d: PUSH2 0x0a92 00000a60: JUMPI 00000a61: PUSH1 0x40 00000a63: MLOAD 00000a64: PUSH32 0x5fc483c500000000000000000000000000000000000000000000000000000000 00000a85: DUP2 00000a86: MSTORE 00000a87: PUSH1 0x04 00000a89: ADD 00000a8a: PUSH1 0x40 00000a8c: MLOAD 00000a8d: DUP1 00000a8e: SWAP2 00000a8f: SUB 00000a90: SWAP1 00000a91: REVERT 00000a92: JUMPDEST 00000a93: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00000ab4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ac9: AND 00000aca: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 00000adf: EQ 00000ae0: PUSH2 0x0c3c 00000ae3: JUMPI 00000ae4: PUSH1 0x05 00000ae6: SLOAD 00000ae7: PUSH1 0x40 00000ae9: MLOAD 00000aea: PUSH32 0xdd62ed3e00000000000000000000000000000000000000000000000000000000 00000b0b: DUP2 00000b0c: MSTORE 00000b0d: ADDRESS 00000b0e: PUSH1 0x04 00000b10: DUP3 00000b11: ADD 00000b12: MSTORE 00000b13: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b28: SWAP2 00000b29: DUP3 00000b2a: AND 00000b2b: PUSH1 0x24 00000b2d: DUP3 00000b2e: ADD 00000b2f: MSTORE 00000b30: PUSH1 0x00 00000b32: SWAP2 00000b33: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00000b54: AND 00000b55: SWAP1 00000b56: PUSH4 0xdd62ed3e 00000b5b: SWAP1 00000b5c: PUSH1 0x44 00000b5e: ADD 00000b5f: PUSH1 0x20 00000b61: PUSH1 0x40 00000b63: MLOAD 00000b64: DUP1 00000b65: DUP4 00000b66: SUB 00000b67: DUP2 00000b68: DUP7 00000b69: GAS 00000b6a: STATICCALL 00000b6b: ISZERO 00000b6c: DUP1 00000b6d: ISZERO 00000b6e: PUSH2 0x0b7b 00000b71: JUMPI 00000b72: RETURNDATASIZE 00000b73: PUSH1 0x00 00000b75: DUP1 00000b76: RETURNDATACOPY 00000b77: RETURNDATASIZE 00000b78: PUSH1 0x00 00000b7a: REVERT 00000b7b: JUMPDEST 00000b7c: POP 00000b7d: POP 00000b7e: POP 00000b7f: POP 00000b80: PUSH1 0x40 00000b82: MLOAD 00000b83: RETURNDATASIZE 00000b84: PUSH1 0x1f 00000b86: NOT 00000b87: PUSH1 0x1f 00000b89: DUP3 00000b8a: ADD 00000b8b: AND 00000b8c: DUP3 00000b8d: ADD 00000b8e: DUP1 00000b8f: PUSH1 0x40 00000b91: MSTORE 00000b92: POP 00000b93: DUP2 00000b94: ADD 00000b95: SWAP1 00000b96: PUSH2 0x0b9f 00000b99: SWAP2 00000b9a: SWAP1 00000b9b: PUSH2 0x2d05 00000b9e: JUMP 00000b9f: JUMPDEST 00000ba0: GT 00000ba1: ISZERO 00000ba2: PUSH2 0x0beb 00000ba5: JUMPI 00000ba6: PUSH1 0x05 00000ba8: SLOAD 00000ba9: PUSH2 0x0beb 00000bac: SWAP1 00000bad: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00000bce: SWAP1 00000bcf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000be4: AND 00000be5: PUSH1 0x00 00000be7: PUSH2 0x22f6 00000bea: JUMP 00000beb: JUMPDEST 00000bec: DUP1 00000bed: ISZERO 00000bee: PUSH2 0x0c3c 00000bf1: JUMPI 00000bf2: PUSH2 0x0c3c 00000bf5: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00000c16: DUP4 00000c17: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00000c38: PUSH2 0x22f6 00000c3b: JUMP 00000c3c: JUMPDEST 00000c3d: PUSH1 0x05 00000c3f: DUP1 00000c40: SLOAD 00000c41: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00000c62: AND 00000c63: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c78: DUP5 00000c79: AND 00000c7a: SWAP1 00000c7b: DUP2 00000c7c: OR 00000c7d: SWAP1 00000c7e: SWAP2 00000c7f: SSTORE 00000c80: PUSH1 0x40 00000c82: MLOAD 00000c83: SWAP1 00000c84: DUP2 00000c85: MSTORE 00000c86: PUSH32 0xe816c20840d998c8612f9b624b91687a80510eeb293cb09f7637379f6d73342d 00000ca7: SWAP1 00000ca8: PUSH1 0x20 00000caa: ADD 00000cab: PUSH1 0x40 00000cad: MLOAD 00000cae: DUP1 00000caf: SWAP2 00000cb0: SUB 00000cb1: SWAP1 00000cb2: LOG1 00000cb3: POP 00000cb4: POP 00000cb5: JUMP 00000cb6: JUMPDEST 00000cb7: PUSH1 0x01 00000cb9: SLOAD 00000cba: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ccf: AND 00000cd0: CALLER 00000cd1: EQ 00000cd2: PUSH2 0x0d07 00000cd5: JUMPI 00000cd6: PUSH1 0x40 00000cd8: MLOAD 00000cd9: PUSH32 0x5fc483c500000000000000000000000000000000000000000000000000000000 00000cfa: DUP2 00000cfb: MSTORE 00000cfc: PUSH1 0x04 00000cfe: ADD 00000cff: PUSH1 0x40 00000d01: MLOAD 00000d02: DUP1 00000d03: SWAP2 00000d04: SUB 00000d05: SWAP1 00000d06: REVERT 00000d07: JUMPDEST 00000d08: PUSH2 0x04aa 00000d0b: DUP3 00000d0c: DUP3 00000d0d: PUSH2 0x23c5 00000d10: JUMP 00000d11: JUMPDEST 00000d12: PUSH1 0x01 00000d14: SLOAD 00000d15: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d2a: AND 00000d2b: CALLER 00000d2c: EQ 00000d2d: PUSH2 0x0d62 00000d30: JUMPI 00000d31: PUSH1 0x40 00000d33: MLOAD 00000d34: PUSH32 0x5fc483c500000000000000000000000000000000000000000000000000000000 00000d55: DUP2 00000d56: MSTORE 00000d57: PUSH1 0x04 00000d59: ADD 00000d5a: PUSH1 0x40 00000d5c: MLOAD 00000d5d: DUP1 00000d5e: SWAP2 00000d5f: SUB 00000d60: SWAP1 00000d61: REVERT 00000d62: JUMPDEST 00000d63: DUP3 00000d64: PUSH1 0x00 00000d66: JUMPDEST 00000d67: DUP2 00000d68: DUP2 00000d69: LT 00000d6a: ISZERO 00000d6b: PUSH2 0x0ec3 00000d6e: JUMPI 00000d6f: DUP4 00000d70: DUP4 00000d71: DUP3 00000d72: DUP2 00000d73: DUP2 00000d74: LT 00000d75: PUSH2 0x0d80 00000d78: JUMPI 00000d79: PUSH2 0x0d80 00000d7c: PUSH2 0x2d1e 00000d7f: JUMP 00000d80: JUMPDEST 00000d81: SWAP1 00000d82: POP 00000d83: PUSH1 0x20 00000d85: MUL 00000d86: ADD 00000d87: PUSH1 0x20 00000d89: DUP2 00000d8a: ADD 00000d8b: SWAP1 00000d8c: PUSH2 0x0d95 00000d8f: SWAP2 00000d90: SWAP1 00000d91: PUSH2 0x2d4d 00000d94: JUMP 00000d95: JUMPDEST 00000d96: PUSH1 0x08 00000d98: PUSH1 0x00 00000d9a: DUP9 00000d9b: DUP9 00000d9c: DUP6 00000d9d: DUP2 00000d9e: DUP2 00000d9f: LT 00000da0: PUSH2 0x0dab 00000da3: JUMPI 00000da4: PUSH2 0x0dab 00000da7: PUSH2 0x2d1e 00000daa: JUMP 00000dab: JUMPDEST 00000dac: SWAP1 00000dad: POP 00000dae: PUSH1 0x20 00000db0: MUL 00000db1: ADD 00000db2: PUSH1 0x20 00000db4: DUP2 00000db5: ADD 00000db6: SWAP1 00000db7: PUSH2 0x0dc0 00000dba: SWAP2 00000dbb: SWAP1 00000dbc: PUSH2 0x284c 00000dbf: JUMP 00000dc0: JUMPDEST 00000dc1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000dd6: AND 00000dd7: DUP2 00000dd8: MSTORE 00000dd9: PUSH1 0x20 00000ddb: DUP2 00000ddc: ADD 00000ddd: SWAP2 00000dde: SWAP1 00000ddf: SWAP2 00000de0: MSTORE 00000de1: PUSH1 0x40 00000de3: ADD 00000de4: PUSH1 0x00 00000de6: KECCAK256 00000de7: DUP1 00000de8: SLOAD 00000de9: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 00000e0a: AND 00000e0b: SWAP2 00000e0c: ISZERO 00000e0d: ISZERO 00000e0e: SWAP2 00000e0f: SWAP1 00000e10: SWAP2 00000e11: OR 00000e12: SWAP1 00000e13: SSTORE 00000e14: PUSH32 0x857309f1a328784e9fc9749624be5d32fd8e7afab58e7fe9a218dd613a37f15c 00000e35: DUP7 00000e36: DUP7 00000e37: DUP4 00000e38: DUP2 00000e39: DUP2 00000e3a: LT 00000e3b: PUSH2 0x0e46 00000e3e: JUMPI 00000e3f: PUSH2 0x0e46 00000e42: PUSH2 0x2d1e 00000e45: JUMP 00000e46: JUMPDEST 00000e47: SWAP1 00000e48: POP 00000e49: PUSH1 0x20 00000e4b: MUL 00000e4c: ADD 00000e4d: PUSH1 0x20 00000e4f: DUP2 00000e50: ADD 00000e51: SWAP1 00000e52: PUSH2 0x0e5b 00000e55: SWAP2 00000e56: SWAP1 00000e57: PUSH2 0x284c 00000e5a: JUMP 00000e5b: JUMPDEST 00000e5c: DUP6 00000e5d: DUP6 00000e5e: DUP5 00000e5f: DUP2 00000e60: DUP2 00000e61: LT 00000e62: PUSH2 0x0e6d 00000e65: JUMPI 00000e66: PUSH2 0x0e6d 00000e69: PUSH2 0x2d1e 00000e6c: JUMP 00000e6d: JUMPDEST 00000e6e: SWAP1 00000e6f: POP 00000e70: PUSH1 0x20 00000e72: MUL 00000e73: ADD 00000e74: PUSH1 0x20 00000e76: DUP2 00000e77: ADD 00000e78: SWAP1 00000e79: PUSH2 0x0e82 00000e7c: SWAP2 00000e7d: SWAP1 00000e7e: PUSH2 0x2d4d 00000e81: JUMP 00000e82: JUMPDEST 00000e83: PUSH1 0x40 00000e85: DUP1 00000e86: MLOAD 00000e87: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e9c: SWAP1 00000e9d: SWAP4 00000e9e: AND 00000e9f: DUP4 00000ea0: MSTORE 00000ea1: SWAP1 00000ea2: ISZERO 00000ea3: ISZERO 00000ea4: PUSH1 0x20 00000ea6: DUP4 00000ea7: ADD 00000ea8: MSTORE 00000ea9: ADD 00000eaa: PUSH1 0x40 00000eac: MLOAD 00000ead: DUP1 00000eae: SWAP2 00000eaf: SUB 00000eb0: SWAP1 00000eb1: LOG1 00000eb2: DUP1 00000eb3: PUSH2 0x0ebb 00000eb6: DUP2 00000eb7: PUSH2 0x2d97 00000eba: JUMP 00000ebb: JUMPDEST 00000ebc: SWAP2 00000ebd: POP 00000ebe: POP 00000ebf: PUSH2 0x0d66 00000ec2: JUMP 00000ec3: JUMPDEST 00000ec4: POP 00000ec5: POP 00000ec6: POP 00000ec7: POP 00000ec8: POP 00000ec9: POP 00000eca: JUMP 00000ecb: JUMPDEST 00000ecc: PUSH1 0x06 00000ece: PUSH1 0x20 00000ed0: MSTORE 00000ed1: PUSH1 0x00 00000ed3: SWAP1 00000ed4: DUP2 00000ed5: MSTORE 00000ed6: PUSH1 0x40 00000ed8: SWAP1 00000ed9: KECCAK256 00000eda: DUP1 00000edb: SLOAD 00000edc: PUSH2 0x0674 00000edf: SWAP1 00000ee0: PUSH2 0x2c08 00000ee3: JUMP 00000ee4: JUMPDEST 00000ee5: PUSH1 0x40 00000ee7: MLOAD 00000ee8: PUSH32 0x666758ca00000000000000000000000000000000000000000000000000000000 00000f09: DUP2 00000f0a: MSTORE 00000f0b: PUSH1 0x04 00000f0d: DUP2 00000f0e: ADD 00000f0f: DUP4 00000f10: SWAP1 00000f11: MSTORE 00000f12: PUSH1 0x24 00000f14: DUP2 00000f15: ADD 00000f16: DUP3 00000f17: SWAP1 00000f18: MSTORE 00000f19: PUSH1 0x00 00000f1b: SWAP1 00000f1c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f31: DUP6 00000f32: AND 00000f33: SWAP1 00000f34: PUSH4 0x666758ca 00000f39: SWAP1 00000f3a: PUSH1 0x44 00000f3c: ADD 00000f3d: PUSH1 0x20 00000f3f: PUSH1 0x40 00000f41: MLOAD 00000f42: DUP1 00000f43: DUP4 00000f44: SUB 00000f45: DUP2 00000f46: DUP7 00000f47: GAS 00000f48: STATICCALL 00000f49: ISZERO 00000f4a: DUP1 00000f4b: ISZERO 00000f4c: PUSH2 0x0f59 00000f4f: JUMPI 00000f50: RETURNDATASIZE 00000f51: PUSH1 0x00 00000f53: DUP1 00000f54: RETURNDATACOPY 00000f55: RETURNDATASIZE 00000f56: PUSH1 0x00 00000f58: REVERT 00000f59: JUMPDEST 00000f5a: POP 00000f5b: POP 00000f5c: POP 00000f5d: POP 00000f5e: PUSH1 0x40 00000f60: MLOAD 00000f61: RETURNDATASIZE 00000f62: PUSH1 0x1f 00000f64: NOT 00000f65: PUSH1 0x1f 00000f67: DUP3 00000f68: ADD 00000f69: AND 00000f6a: DUP3 00000f6b: ADD 00000f6c: DUP1 00000f6d: PUSH1 0x40 00000f6f: MSTORE 00000f70: POP 00000f71: DUP2 00000f72: ADD 00000f73: SWAP1 00000f74: PUSH2 0x0f7d 00000f77: SWAP2 00000f78: SWAP1 00000f79: PUSH2 0x2d05 00000f7c: JUMP 00000f7d: JUMPDEST 00000f7e: SWAP5 00000f7f: SWAP4 00000f80: POP 00000f81: POP 00000f82: POP 00000f83: POP 00000f84: JUMP 00000f85: JUMPDEST 00000f86: PUSH1 0x00 00000f88: DUP3 00000f89: DUP2 00000f8a: MSTORE 00000f8b: PUSH1 0x03 00000f8d: PUSH1 0x20 00000f8f: SWAP1 00000f90: DUP2 00000f91: MSTORE 00000f92: PUSH1 0x40 00000f94: DUP1 00000f95: DUP4 00000f96: KECCAK256 00000f97: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000fac: DUP6 00000fad: AND 00000fae: DUP1 00000faf: DUP6 00000fb0: MSTORE 00000fb1: SWAP3 00000fb2: MSTORE 00000fb3: DUP1 00000fb4: DUP4 00000fb5: KECCAK256 00000fb6: DUP1 00000fb7: SLOAD 00000fb8: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 00000fd9: AND 00000fda: PUSH1 0x01 00000fdc: OR 00000fdd: SWAP1 00000fde: SSTORE 00000fdf: MLOAD 00000fe0: SWAP1 00000fe1: SWAP2 00000fe2: DUP5 00000fe3: SWAP2 00000fe4: PUSH32 0x2ae6a113c0ed5b78a53413ffbb7679881f11145ccfba4fb92e863dfcd5a1d2f3 00001005: SWAP2 00001006: SWAP1 00001007: LOG3 00001008: POP 00001009: POP 0000100a: JUMP 0000100b: JUMPDEST 0000100c: PUSH1 0x01 0000100e: DUP1 0000100f: SLOAD 00001010: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001025: DUP4 00001026: AND 00001027: PUSH32 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 00001048: SWAP2 00001049: DUP3 0000104a: AND 0000104b: DUP2 0000104c: OR 0000104d: SWAP1 0000104e: SWAP3 0000104f: SSTORE 00001050: PUSH1 0x02 00001052: DUP1 00001053: SLOAD 00001054: SWAP1 00001055: SWAP2 00001056: AND 00001057: SWAP1 00001058: SSTORE 00001059: PUSH1 0x40 0000105b: MLOAD 0000105c: PUSH32 0xfbe19c9b601f5ee90b44c7390f3fa2319eba01762d34ee372aeafd59b25c7f87 0000107d: SWAP1 0000107e: PUSH1 0x00 00001080: SWAP1 00001081: LOG2 00001082: POP 00001083: JUMP 00001084: JUMPDEST 00001085: PUSH1 0x40 00001087: DUP1 00001088: MLOAD 00001089: PUSH1 0x60 0000108b: DUP1 0000108c: DUP3 0000108d: ADD 0000108e: DUP4 0000108f: MSTORE 00001090: PUSH1 0x00 00001092: DUP1 00001093: DUP4 00001094: MSTORE 00001095: PUSH1 0x20 00001097: DUP4 00001098: ADD 00001099: MSTORE 0000109a: SWAP2 0000109b: DUP2 0000109c: ADD 0000109d: SWAP2 0000109e: SWAP1 0000109f: SWAP2 000010a0: MSTORE 000010a1: DUP2 000010a2: MLOAD 000010a3: PUSH1 0x60 000010a5: SWAP1 000010a6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000010bb: AND 000010bc: PUSH2 0x10f1 000010bf: JUMPI 000010c0: PUSH1 0x40 000010c2: MLOAD 000010c3: PUSH32 0x96bbcf1e00000000000000000000000000000000000000000000000000000000 000010e4: DUP2 000010e5: MSTORE 000010e6: PUSH1 0x04 000010e8: ADD 000010e9: PUSH1 0x40 000010eb: MLOAD 000010ec: DUP1 000010ed: SWAP2 000010ee: SUB 000010ef: SWAP1 000010f0: REVERT 000010f1: JUMPDEST 000010f2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001107: DUP5 00001108: AND 00001109: PUSH1 0x00 0000110b: SWAP1 0000110c: DUP2 0000110d: MSTORE 0000110e: PUSH1 0x08 00001110: PUSH1 0x20 00001112: MSTORE 00001113: PUSH1 0x40 00001115: SWAP1 00001116: KECCAK256 00001117: SLOAD 00001118: PUSH1 0xff 0000111a: AND 0000111b: PUSH2 0x1150 0000111e: JUMPI 0000111f: PUSH1 0x40 00001121: MLOAD 00001122: PUSH32 0x5b0a758300000000000000000000000000000000000000000000000000000000 00001143: DUP2 00001144: MSTORE 00001145: PUSH1 0x04 00001147: ADD 00001148: PUSH1 0x40 0000114a: MLOAD 0000114b: DUP1 0000114c: SWAP2 0000114d: SUB 0000114e: SWAP1 0000114f: REVERT 00001150: JUMPDEST 00001151: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00001172: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001187: AND 00001188: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 0000119d: EQ 0000119e: DUP1 0000119f: ISZERO 000011a0: PUSH2 0x11ac 000011a3: JUMPI 000011a4: POP 000011a5: DUP3 000011a6: PUSH1 0x20 000011a8: ADD 000011a9: MLOAD 000011aa: CALLVALUE 000011ab: LT 000011ac: JUMPDEST 000011ad: ISZERO 000011ae: PUSH2 0x11e3 000011b1: JUMPI 000011b2: PUSH1 0x40 000011b4: MLOAD 000011b5: PUSH32 0x78f38f7600000000000000000000000000000000000000000000000000000000 000011d6: DUP2 000011d7: MSTORE 000011d8: PUSH1 0x04 000011da: ADD 000011db: PUSH1 0x40 000011dd: MLOAD 000011de: DUP1 000011df: SWAP2 000011e0: SUB 000011e1: SWAP1 000011e2: REVERT 000011e3: JUMPDEST 000011e4: PUSH1 0x05 000011e6: SLOAD 000011e7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000011fc: AND 000011fd: ISZERO 000011fe: PUSH2 0x12dc 00001201: JUMPI 00001202: PUSH1 0x05 00001204: SLOAD 00001205: PUSH1 0x40 00001207: DUP1 00001208: MLOAD 00001209: PUSH1 0x60 0000120b: DUP2 0000120c: ADD 0000120d: DUP3 0000120e: MSTORE 0000120f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001224: DUP8 00001225: DUP2 00001226: AND 00001227: DUP3 00001228: MSTORE 00001229: CALLER 0000122a: PUSH1 0x20 0000122c: DUP4 0000122d: ADD 0000122e: MSTORE 0000122f: DUP2 00001230: DUP4 00001231: ADD 00001232: DUP8 00001233: SWAP1 00001234: MSTORE 00001235: SWAP2 00001236: MLOAD 00001237: PUSH32 0xf59ad99000000000000000000000000000000000000000000000000000000000 00001258: DUP2 00001259: MSTORE 0000125a: SWAP2 0000125b: SWAP1 0000125c: SWAP3 0000125d: AND 0000125e: SWAP2 0000125f: PUSH4 0xf59ad990 00001264: SWAP2 00001265: PUSH2 0x1271 00001268: SWAP2 00001269: SWAP1 0000126a: PUSH1 0x04 0000126c: ADD 0000126d: PUSH2 0x2e0e 00001270: JUMP 00001271: JUMPDEST 00001272: PUSH1 0x00 00001274: PUSH1 0x40 00001276: MLOAD 00001277: DUP1 00001278: DUP4 00001279: SUB 0000127a: DUP2 0000127b: PUSH1 0x00 0000127d: DUP8 0000127e: GAS 0000127f: CALL 00001280: ISZERO 00001281: DUP1 00001282: ISZERO 00001283: PUSH2 0x1290 00001286: JUMPI 00001287: RETURNDATASIZE 00001288: PUSH1 0x00 0000128a: DUP1 0000128b: RETURNDATACOPY 0000128c: RETURNDATASIZE 0000128d: PUSH1 0x00 0000128f: REVERT 00001290: JUMPDEST 00001291: POP 00001292: POP 00001293: POP 00001294: POP 00001295: PUSH1 0x40 00001297: MLOAD 00001298: RETURNDATASIZE 00001299: PUSH1 0x00 0000129b: DUP3 0000129c: RETURNDATACOPY 0000129d: PUSH1 0x1f 0000129f: RETURNDATASIZE 000012a0: SWAP1 000012a1: DUP2 000012a2: ADD 000012a3: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 000012c4: AND 000012c5: DUP3 000012c6: ADD 000012c7: PUSH1 0x40 000012c9: MSTORE 000012ca: PUSH2 0x12d6 000012cd: SWAP2 000012ce: SWAP1 000012cf: DUP2 000012d0: ADD 000012d1: SWAP1 000012d2: PUSH2 0x2edc 000012d5: JUMP 000012d6: JUMPDEST 000012d7: SWAP1 000012d8: SWAP3 000012d9: POP 000012da: SWAP1 000012db: POP 000012dc: JUMPDEST 000012dd: SWAP3 000012de: POP 000012df: SWAP3 000012e0: SWAP1 000012e1: POP 000012e2: JUMP 000012e3: JUMPDEST 000012e4: DUP1 000012e5: ISZERO 000012e6: DUP1 000012e7: PUSH2 0x1339 000012ea: JUMPI 000012eb: POP 000012ec: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 0000130d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001322: AND 00001323: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 00001338: EQ 00001339: JUMPDEST 0000133a: ISZERO 0000133b: PUSH2 0x1341 0000133e: JUMPI 0000133f: POP 00001340: JUMP 00001341: JUMPDEST 00001342: PUSH2 0x1383 00001345: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000135a: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 0000137b: AND 0000137c: CALLER 0000137d: ADDRESS 0000137e: DUP5 0000137f: PUSH2 0x2448 00001382: JUMP 00001383: JUMPDEST 00001384: POP 00001385: JUMP 00001386: JUMPDEST 00001387: PUSH1 0x05 00001389: SLOAD 0000138a: DUP2 0000138b: SWAP1 0000138c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013a1: AND 000013a2: ISZERO 000013a3: PUSH2 0x1486 000013a6: JUMPI 000013a7: PUSH1 0x05 000013a9: SLOAD 000013aa: PUSH1 0x40 000013ac: DUP1 000013ad: MLOAD 000013ae: PUSH1 0x80 000013b0: DUP2 000013b1: ADD 000013b2: DUP3 000013b3: MSTORE 000013b4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000013c9: DUP9 000013ca: DUP2 000013cb: AND 000013cc: DUP3 000013cd: MSTORE 000013ce: PUSH1 0x20 000013d0: DUP3 000013d1: ADD 000013d2: DUP9 000013d3: SWAP1 000013d4: MSTORE 000013d5: DUP2 000013d6: DUP4 000013d7: ADD 000013d8: DUP8 000013d9: SWAP1 000013da: MSTORE 000013db: PUSH1 0x60 000013dd: DUP3 000013de: ADD 000013df: DUP7 000013e0: SWAP1 000013e1: MSTORE 000013e2: SWAP2 000013e3: MLOAD 000013e4: PUSH32 0x62811bf200000000000000000000000000000000000000000000000000000000 00001405: DUP2 00001406: MSTORE 00001407: SWAP2 00001408: SWAP1 00001409: SWAP3 0000140a: AND 0000140b: SWAP2 0000140c: PUSH4 0x62811bf2 00001411: SWAP2 00001412: PUSH2 0x141e 00001415: SWAP2 00001416: SWAP1 00001417: PUSH1 0x04 00001419: ADD 0000141a: PUSH2 0x2f40 0000141d: JUMP 0000141e: JUMPDEST 0000141f: PUSH1 0x00 00001421: PUSH1 0x40 00001423: MLOAD 00001424: DUP1 00001425: DUP4 00001426: SUB 00001427: DUP2 00001428: PUSH1 0x00 0000142a: DUP8 0000142b: GAS 0000142c: CALL 0000142d: ISZERO 0000142e: DUP1 0000142f: ISZERO 00001430: PUSH2 0x143d 00001433: JUMPI 00001434: RETURNDATASIZE 00001435: PUSH1 0x00 00001437: DUP1 00001438: RETURNDATACOPY 00001439: RETURNDATASIZE 0000143a: PUSH1 0x00 0000143c: REVERT 0000143d: JUMPDEST 0000143e: POP 0000143f: POP 00001440: POP 00001441: POP 00001442: PUSH1 0x40 00001444: MLOAD 00001445: RETURNDATASIZE 00001446: PUSH1 0x00 00001448: DUP3 00001449: RETURNDATACOPY 0000144a: PUSH1 0x1f 0000144c: RETURNDATASIZE 0000144d: SWAP1 0000144e: DUP2 0000144f: ADD 00001450: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00001471: AND 00001472: DUP3 00001473: ADD 00001474: PUSH1 0x40 00001476: MSTORE 00001477: PUSH2 0x1483 0000147a: SWAP2 0000147b: SWAP1 0000147c: DUP2 0000147d: ADD 0000147e: SWAP1 0000147f: PUSH2 0x2fdf 00001482: JUMP 00001483: JUMPDEST 00001484: SWAP1 00001485: POP 00001486: JUMPDEST 00001487: PUSH1 0x00 00001489: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 000014aa: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000014bf: AND 000014c0: PUSH20 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 000014d5: EQ 000014d6: PUSH2 0x14df 000014d9: JUMPI 000014da: CALLVALUE 000014db: PUSH2 0x14ee 000014de: JUMP 000014df: JUMPDEST 000014e0: PUSH1 0x20 000014e2: DUP3 000014e3: ADD 000014e4: MLOAD 000014e5: PUSH2 0x14ee 000014e8: SWAP1 000014e9: CALLVALUE 000014ea: PUSH2 0x3014 000014ed: JUMP 000014ee: JUMPDEST 000014ef: SWAP1 000014f0: POP 000014f1: PUSH1 0x00 000014f3: DUP7 000014f4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001509: AND 0000150a: PUSH4 0x74fa24a6 0000150f: PUSH1 0x40 00001511: MLOAD 00001512: DUP2 00001513: PUSH4 0xffffffff 00001518: AND 00001519: PUSH1 0xe0 0000151b: SHL 0000151c: DUP2 0000151d: MSTORE 0000151e: PUSH1 0x04 00001520: ADD 00001521: PUSH1 0x20 00001523: PUSH1 0x40 00001525: MLOAD 00001526: DUP1 00001527: DUP4 00001528: SUB 00001529: DUP2 0000152a: DUP7 0000152b: GAS 0000152c: STATICCALL 0000152d: ISZERO 0000152e: DUP1 0000152f: ISZERO 00001530: PUSH2 0x153d 00001533: JUMPI 00001534: RETURNDATASIZE 00001535: PUSH1 0x00 00001537: DUP1 00001538: RETURNDATACOPY 00001539: RETURNDATASIZE 0000153a: PUSH1 0x00 0000153c: REVERT 0000153d: JUMPDEST 0000153e: POP 0000153f: POP 00001540: POP 00001541: POP 00001542: PUSH1 0x40 00001544: MLOAD 00001545: RETURNDATASIZE 00001546: PUSH1 0x1f 00001548: NOT 00001549: PUSH1 0x1f 0000154b: DUP3 0000154c: ADD 0000154d: AND 0000154e: DUP3 0000154f: ADD 00001550: DUP1 00001551: PUSH1 0x40 00001553: MSTORE 00001554: POP 00001555: DUP2 00001556: ADD 00001557: SWAP1 00001558: PUSH2 0x1561 0000155b: SWAP2 0000155c: SWAP1 0000155d: PUSH2 0x2d05 00001560: JUMP 00001561: JUMPDEST 00001562: SWAP1 00001563: POP 00001564: PUSH1 0x00 00001566: DUP8 00001567: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000157c: AND 0000157d: PUSH4 0xac0710cb 00001582: DUP5 00001583: DUP12 00001584: DUP8 00001585: PUSH1 0x00 00001587: ADD 00001588: MLOAD 00001589: DUP9 0000158a: PUSH1 0x20 0000158c: ADD 0000158d: MLOAD 0000158e: DUP8 0000158f: DUP11 00001590: PUSH1 0x40 00001592: ADD 00001593: MLOAD 00001594: PUSH1 0x40 00001596: MLOAD 00001597: PUSH1 0x20 00001599: ADD 0000159a: PUSH2 0x15a6 0000159d: SWAP5 0000159e: SWAP4 0000159f: SWAP3 000015a0: SWAP2 000015a1: SWAP1 000015a2: PUSH2 0x302b 000015a5: JUMP 000015a6: JUMPDEST 000015a7: PUSH1 0x40 000015a9: MLOAD 000015aa: PUSH1 0x20 000015ac: DUP2 000015ad: DUP4 000015ae: SUB 000015af: SUB 000015b0: DUP2 000015b1: MSTORE 000015b2: SWAP1 000015b3: PUSH1 0x40 000015b5: MSTORE 000015b6: DUP12 000015b7: PUSH1 0x40 000015b9: MLOAD 000015ba: DUP6 000015bb: PUSH4 0xffffffff 000015c0: AND 000015c1: PUSH1 0xe0 000015c3: SHL 000015c4: DUP2 000015c5: MSTORE 000015c6: PUSH1 0x04 000015c8: ADD 000015c9: PUSH2 0x15d4 000015cc: SWAP4 000015cd: SWAP3 000015ce: SWAP2 000015cf: SWAP1 000015d0: PUSH2 0x3070 000015d3: JUMP 000015d4: JUMPDEST 000015d5: PUSH1 0x20 000015d7: PUSH1 0x40 000015d9: MLOAD 000015da: DUP1 000015db: DUP4 000015dc: SUB 000015dd: DUP2 000015de: DUP6 000015df: DUP9 000015e0: GAS 000015e1: CALL 000015e2: ISZERO 000015e3: DUP1 000015e4: ISZERO 000015e5: PUSH2 0x15f2 000015e8: JUMPI 000015e9: RETURNDATASIZE 000015ea: PUSH1 0x00 000015ec: DUP1 000015ed: RETURNDATACOPY 000015ee: RETURNDATASIZE 000015ef: PUSH1 0x00 000015f1: REVERT 000015f2: JUMPDEST 000015f3: POP 000015f4: POP 000015f5: POP 000015f6: POP 000015f7: POP 000015f8: PUSH1 0x40 000015fa: MLOAD 000015fb: RETURNDATASIZE 000015fc: PUSH1 0x1f 000015fe: NOT 000015ff: PUSH1 0x1f 00001601: DUP3 00001602: ADD 00001603: AND 00001604: DUP3 00001605: ADD 00001606: DUP1 00001607: PUSH1 0x40 00001609: MSTORE 0000160a: POP 0000160b: DUP2 0000160c: ADD 0000160d: SWAP1 0000160e: PUSH2 0x1617 00001611: SWAP2 00001612: SWAP1 00001613: PUSH2 0x2d05 00001616: JUMP 00001617: JUMPDEST 00001618: SWAP1 00001619: POP 0000161a: DUP2 0000161b: DUP2 0000161c: EQ 0000161d: PUSH2 0x1652 00001620: JUMPI 00001621: PUSH1 0x40 00001623: MLOAD 00001624: PUSH32 0x7b7bbbe000000000000000000000000000000000000000000000000000000000 00001645: DUP2 00001646: MSTORE 00001647: PUSH1 0x04 00001649: ADD 0000164a: PUSH1 0x40 0000164c: MLOAD 0000164d: DUP1 0000164e: SWAP2 0000164f: SUB 00001650: SWAP1 00001651: REVERT 00001652: JUMPDEST 00001653: DUP4 00001654: MLOAD 00001655: PUSH1 0x20 00001657: DUP1 00001658: DUP7 00001659: ADD 0000165a: MLOAD 0000165b: PUSH1 0x40 0000165d: DUP1 0000165e: MLOAD 0000165f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001674: DUP14 00001675: DUP2 00001676: AND 00001677: DUP3 00001678: MSTORE 00001679: CALLER 0000167a: SWAP5 0000167b: DUP3 0000167c: ADD 0000167d: SWAP5 0000167e: SWAP1 0000167f: SWAP5 00001680: MSTORE 00001681: SWAP3 00001682: SWAP1 00001683: SWAP4 00001684: AND 00001685: DUP3 00001686: DUP5 00001687: ADD 00001688: MSTORE 00001689: PUSH1 0x60 0000168b: DUP3 0000168c: ADD 0000168d: MSTORE 0000168e: PUSH1 0x80 00001690: DUP2 00001691: ADD 00001692: DUP5 00001693: SWAP1 00001694: MSTORE 00001695: SWAP1 00001696: MLOAD 00001697: PUSH32 0xc74a00177d2c63e6eead5ea7936974ad9d0121f86140723b8909f8ec9662cc61 000016b8: SWAP2 000016b9: DUP2 000016ba: SWAP1 000016bb: SUB 000016bc: PUSH1 0xa0 000016be: ADD 000016bf: SWAP1 000016c0: LOG1 000016c1: POP 000016c2: POP 000016c3: POP 000016c4: POP 000016c5: POP 000016c6: POP 000016c7: POP 000016c8: POP 000016c9: POP 000016ca: JUMP 000016cb: JUMPDEST 000016cc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000016e1: DUP3 000016e2: AND 000016e3: PUSH2 0x1718 000016e6: JUMPI 000016e7: PUSH1 0x40 000016e9: MLOAD 000016ea: PUSH32 0xd92e233d00000000000000000000000000000000000000000000000000000000 0000170b: DUP2 0000170c: MSTORE 0000170d: PUSH1 0x04 0000170f: ADD 00001710: PUSH1 0x40 00001712: MLOAD 00001713: DUP1 00001714: SWAP2 00001715: SUB 00001716: SWAP1 00001717: REVERT 00001718: JUMPDEST 00001719: PUSH32 0xffffffffffffffffffffffff1111111111111111111111111111111111111112 0000173a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000174f: DUP5 00001750: AND 00001751: ADD 00001752: PUSH2 0x1764 00001755: JUMPI 00001756: PUSH2 0x175f 00001759: DUP3 0000175a: DUP3 0000175b: PUSH2 0x2533 0000175e: JUMP 0000175f: JUMPDEST 00001760: POP 00001761: POP 00001762: POP 00001763: JUMP 00001764: JUMPDEST 00001765: DUP3 00001766: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000177b: AND 0000177c: EXTCODESIZE 0000177d: PUSH1 0x00 0000177f: SUB 00001780: PUSH2 0x17b5 00001783: JUMPI 00001784: PUSH1 0x40 00001786: MLOAD 00001787: PUSH32 0x1eb00b0600000000000000000000000000000000000000000000000000000000 000017a8: DUP2 000017a9: MSTORE 000017aa: PUSH1 0x04 000017ac: ADD 000017ad: PUSH1 0x40 000017af: MLOAD 000017b0: DUP1 000017b1: SWAP2 000017b2: SUB 000017b3: SWAP1 000017b4: REVERT 000017b5: JUMPDEST 000017b6: PUSH2 0x175f 000017b9: DUP4 000017ba: DUP4 000017bb: DUP4 000017bc: PUSH2 0x25a8 000017bf: JUMP 000017c0: JUMPDEST 000017c1: PUSH1 0x40 000017c3: DUP1 000017c4: MLOAD 000017c5: PUSH1 0x60 000017c7: DUP2 000017c8: DUP2 000017c9: ADD 000017ca: DUP4 000017cb: MSTORE 000017cc: PUSH1 0x00 000017ce: DUP1 000017cf: DUP4 000017d0: MSTORE 000017d1: PUSH1 0x20 000017d3: DUP4 000017d4: ADD 000017d5: MSTORE 000017d6: SWAP2 000017d7: DUP2 000017d8: ADD 000017d9: DUP3 000017da: SWAP1 000017db: MSTORE 000017dc: CALLER 000017dd: PUSH1 0x00 000017df: SWAP1 000017e0: DUP2 000017e1: MSTORE 000017e2: PUSH1 0x08 000017e4: PUSH1 0x20 000017e6: MSTORE 000017e7: PUSH1 0x40 000017e9: SWAP1 000017ea: KECCAK256 000017eb: SLOAD 000017ec: PUSH1 0xff 000017ee: AND 000017ef: PUSH2 0x1824 000017f2: JUMPI 000017f3: PUSH1 0x40 000017f5: MLOAD 000017f6: PUSH32 0x5b0a758300000000000000000000000000000000000000000000000000000000 00001817: DUP2 00001818: MSTORE 00001819: PUSH1 0x04 0000181b: ADD 0000181c: PUSH1 0x40 0000181e: MLOAD 0000181f: DUP1 00001820: SWAP2 00001821: SUB 00001822: SWAP1 00001823: REVERT 00001824: JUMPDEST 00001825: DUP3 00001826: MLOAD 00001827: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000183c: AND 0000183d: ADDRESS 0000183e: EQ 0000183f: DUP1 00001840: PUSH2 0x1898 00001843: JUMPI 00001844: POP 00001845: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00001866: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000187b: AND 0000187c: DUP4 0000187d: PUSH1 0x00 0000187f: ADD 00001880: MLOAD 00001881: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001896: AND 00001897: EQ 00001898: JUMPDEST 00001899: ISZERO 0000189a: PUSH2 0x18cf 0000189d: JUMPI 0000189e: PUSH1 0x40 000018a0: MLOAD 000018a1: PUSH32 0x285c601600000000000000000000000000000000000000000000000000000000 000018c2: DUP2 000018c3: MSTORE 000018c4: PUSH1 0x04 000018c6: ADD 000018c7: PUSH1 0x40 000018c9: MLOAD 000018ca: DUP1 000018cb: SWAP2 000018cc: SUB 000018cd: SWAP1 000018ce: REVERT 000018cf: JUMPDEST 000018d0: PUSH1 0x05 000018d2: SLOAD 000018d3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000018e8: AND 000018e9: ISZERO 000018ea: PUSH2 0x12dc 000018ed: JUMPI 000018ee: PUSH1 0x05 000018f0: SLOAD 000018f1: PUSH1 0x40 000018f3: DUP1 000018f4: MLOAD 000018f5: PUSH1 0x60 000018f7: DUP2 000018f8: ADD 000018f9: DUP3 000018fa: MSTORE 000018fb: CALLER 000018fc: DUP1 000018fd: DUP3 000018fe: MSTORE 000018ff: PUSH1 0x00 00001901: SWAP1 00001902: DUP2 00001903: MSTORE 00001904: PUSH1 0x07 00001906: PUSH1 0x20 00001908: SWAP1 00001909: DUP2 0000190a: MSTORE 0000190b: SWAP3 0000190c: SWAP1 0000190d: KECCAK256 0000190e: DUP1 0000190f: SLOAD 00001910: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001925: SWAP1 00001926: SWAP5 00001927: AND 00001928: SWAP4 00001929: PUSH4 0xcf36b917 0000192e: SWAP4 0000192f: DUP4 00001930: ADD 00001931: SWAP2 00001932: SWAP1 00001933: PUSH2 0x193b 00001936: SWAP1 00001937: PUSH2 0x2c08 0000193a: JUMP 0000193b: JUMPDEST 0000193c: DUP1 0000193d: PUSH1 0x1f 0000193f: ADD 00001940: PUSH1 0x20 00001942: DUP1 00001943: SWAP2 00001944: DIV 00001945: MUL 00001946: PUSH1 0x20 00001948: ADD 00001949: PUSH1 0x40 0000194b: MLOAD 0000194c: SWAP1 0000194d: DUP2 0000194e: ADD 0000194f: PUSH1 0x40 00001951: MSTORE 00001952: DUP1 00001953: SWAP3 00001954: SWAP2 00001955: SWAP1 00001956: DUP2 00001957: DUP2 00001958: MSTORE 00001959: PUSH1 0x20 0000195b: ADD 0000195c: DUP3 0000195d: DUP1 0000195e: SLOAD 0000195f: PUSH2 0x1967 00001962: SWAP1 00001963: PUSH2 0x2c08 00001966: JUMP 00001967: JUMPDEST 00001968: DUP1 00001969: ISZERO 0000196a: PUSH2 0x19b4 0000196d: JUMPI 0000196e: DUP1 0000196f: PUSH1 0x1f 00001971: LT 00001972: PUSH2 0x1989 00001975: JUMPI 00001976: PUSH2 0x0100 00001979: DUP1 0000197a: DUP4 0000197b: SLOAD 0000197c: DIV 0000197d: MUL 0000197e: DUP4 0000197f: MSTORE 00001980: SWAP2 00001981: PUSH1 0x20 00001983: ADD 00001984: SWAP2 00001985: PUSH2 0x19b4 00001988: JUMP 00001989: JUMPDEST 0000198a: DUP3 0000198b: ADD 0000198c: SWAP2 0000198d: SWAP1 0000198e: PUSH1 0x00 00001990: MSTORE 00001991: PUSH1 0x20 00001993: PUSH1 0x00 00001995: KECCAK256 00001996: SWAP1 00001997: JUMPDEST 00001998: DUP2 00001999: SLOAD 0000199a: DUP2 0000199b: MSTORE 0000199c: SWAP1 0000199d: PUSH1 0x01 0000199f: ADD 000019a0: SWAP1 000019a1: PUSH1 0x20 000019a3: ADD 000019a4: DUP1 000019a5: DUP4 000019a6: GT 000019a7: PUSH2 0x1997 000019aa: JUMPI 000019ab: DUP3 000019ac: SWAP1 000019ad: SUB 000019ae: PUSH1 0x1f 000019b0: AND 000019b1: DUP3 000019b2: ADD 000019b3: SWAP2 000019b4: JUMPDEST 000019b5: POP 000019b6: POP 000019b7: POP 000019b8: POP 000019b9: POP 000019ba: DUP2 000019bb: MSTORE 000019bc: PUSH1 0x20 000019be: ADD 000019bf: DUP7 000019c0: DUP2 000019c1: MSTORE 000019c2: POP 000019c3: PUSH1 0x40 000019c5: MLOAD 000019c6: DUP3 000019c7: PUSH4 0xffffffff 000019cc: AND 000019cd: PUSH1 0xe0 000019cf: SHL 000019d0: DUP2 000019d1: MSTORE 000019d2: PUSH1 0x04 000019d4: ADD 000019d5: PUSH2 0x19de 000019d8: SWAP2 000019d9: SWAP1 000019da: PUSH2 0x309b 000019dd: JUMP 000019de: JUMPDEST 000019df: PUSH1 0x00 000019e1: PUSH1 0x40 000019e3: MLOAD 000019e4: DUP1 000019e5: DUP4 000019e6: SUB 000019e7: DUP2 000019e8: PUSH1 0x00 000019ea: DUP8 000019eb: GAS 000019ec: CALL 000019ed: ISZERO 000019ee: DUP1 000019ef: ISZERO 000019f0: PUSH2 0x19fd 000019f3: JUMPI 000019f4: RETURNDATASIZE 000019f5: PUSH1 0x00 000019f7: DUP1 000019f8: RETURNDATACOPY 000019f9: RETURNDATASIZE 000019fa: PUSH1 0x00 000019fc: REVERT 000019fd: JUMPDEST 000019fe: POP 000019ff: POP 00001a00: POP 00001a01: POP 00001a02: PUSH1 0x40 00001a04: MLOAD 00001a05: RETURNDATASIZE 00001a06: PUSH1 0x00 00001a08: DUP3 00001a09: RETURNDATACOPY 00001a0a: PUSH1 0x1f 00001a0c: RETURNDATASIZE 00001a0d: SWAP1 00001a0e: DUP2 00001a0f: ADD 00001a10: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00001a31: AND 00001a32: DUP3 00001a33: ADD 00001a34: PUSH1 0x40 00001a36: MSTORE 00001a37: PUSH2 0x12d6 00001a3a: SWAP2 00001a3b: SWAP1 00001a3c: DUP2 00001a3d: ADD 00001a3e: SWAP1 00001a3f: PUSH2 0x3112 00001a42: JUMP 00001a43: JUMPDEST 00001a44: DUP1 00001a45: PUSH1 0x00 00001a47: SUB 00001a48: PUSH2 0x1a4f 00001a4b: JUMPI 00001a4c: POP 00001a4d: POP 00001a4e: JUMP 00001a4f: JUMPDEST 00001a50: PUSH32 0xffffffffffffffffffffffff1111111111111111111111111111111111111112 00001a71: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00001a92: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001aa7: AND 00001aa8: ADD 00001aa9: PUSH2 0x1ab6 00001aac: JUMPI 00001aad: PUSH2 0x04aa 00001ab0: DUP3 00001ab1: DUP3 00001ab2: PUSH2 0x2533 00001ab5: JUMP 00001ab6: JUMPDEST 00001ab7: PUSH2 0x04aa 00001aba: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001acf: PUSH32 0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48 00001af0: AND 00001af1: DUP4 00001af2: DUP4 00001af3: PUSH2 0x25a8 00001af6: JUMP 00001af7: JUMPDEST 00001af8: PUSH1 0x05 00001afa: SLOAD 00001afb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b10: AND 00001b11: ISZERO 00001b12: PUSH2 0x1cc9 00001b15: JUMPI 00001b16: PUSH1 0x05 00001b18: SLOAD 00001b19: PUSH1 0x40 00001b1b: DUP1 00001b1c: MLOAD 00001b1d: PUSH1 0xa0 00001b1f: DUP2 00001b20: ADD 00001b21: DUP3 00001b22: MSTORE 00001b23: CALLER 00001b24: DUP1 00001b25: DUP3 00001b26: MSTORE 00001b27: PUSH1 0x20 00001b29: DUP1 00001b2a: DUP4 00001b2b: ADD 00001b2c: DUP9 00001b2d: SWAP1 00001b2e: MSTORE 00001b2f: PUSH1 0x00 00001b31: SWAP2 00001b32: DUP3 00001b33: MSTORE 00001b34: PUSH1 0x07 00001b36: SWAP1 00001b37: MSTORE 00001b38: DUP3 00001b39: DUP2 00001b3a: KECCAK256 00001b3b: DUP1 00001b3c: SLOAD 00001b3d: SWAP2 00001b3e: SWAP5 00001b3f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b54: AND 00001b55: SWAP4 00001b56: PUSH4 0xdd19fe38 00001b5b: SWAP4 00001b5c: SWAP3 00001b5d: SWAP1 00001b5e: DUP4 00001b5f: ADD 00001b60: SWAP2 00001b61: SWAP1 00001b62: PUSH2 0x1b6a 00001b65: SWAP1 00001b66: PUSH2 0x2c08 00001b69: JUMP 00001b6a: JUMPDEST 00001b6b: DUP1 00001b6c: PUSH1 0x1f 00001b6e: ADD 00001b6f: PUSH1 0x20 00001b71: DUP1 00001b72: SWAP2 00001b73: DIV 00001b74: MUL 00001b75: PUSH1 0x20 00001b77: ADD 00001b78: PUSH1 0x40 00001b7a: MLOAD 00001b7b: SWAP1 00001b7c: DUP2 00001b7d: ADD 00001b7e: PUSH1 0x40 00001b80: MSTORE 00001b81: DUP1 00001b82: SWAP3 00001b83: SWAP2 00001b84: SWAP1 00001b85: DUP2 00001b86: DUP2 00001b87: MSTORE 00001b88: PUSH1 0x20 00001b8a: ADD 00001b8b: DUP3 00001b8c: DUP1 00001b8d: SLOAD 00001b8e: PUSH2 0x1b96 00001b91: SWAP1 00001b92: PUSH2 0x2c08 00001b95: JUMP 00001b96: JUMPDEST 00001b97: DUP1 00001b98: ISZERO 00001b99: PUSH2 0x1be3 00001b9c: JUMPI 00001b9d: DUP1 00001b9e: PUSH1 0x1f 00001ba0: LT 00001ba1: PUSH2 0x1bb8 00001ba4: JUMPI 00001ba5: PUSH2 0x0100 00001ba8: DUP1 00001ba9: DUP4 00001baa: SLOAD 00001bab: DIV 00001bac: MUL 00001bad: DUP4 00001bae: MSTORE 00001baf: SWAP2 00001bb0: PUSH1 0x20 00001bb2: ADD 00001bb3: SWAP2 00001bb4: PUSH2 0x1be3 00001bb7: JUMP 00001bb8: JUMPDEST 00001bb9: DUP3 00001bba: ADD 00001bbb: SWAP2 00001bbc: SWAP1 00001bbd: PUSH1 0x00 00001bbf: MSTORE 00001bc0: PUSH1 0x20 00001bc2: PUSH1 0x00 00001bc4: KECCAK256 00001bc5: SWAP1 00001bc6: JUMPDEST 00001bc7: DUP2 00001bc8: SLOAD 00001bc9: DUP2 00001bca: MSTORE 00001bcb: SWAP1 00001bcc: PUSH1 0x01 00001bce: ADD 00001bcf: SWAP1 00001bd0: PUSH1 0x20 00001bd2: ADD 00001bd3: DUP1 00001bd4: DUP4 00001bd5: GT 00001bd6: PUSH2 0x1bc6 00001bd9: JUMPI 00001bda: DUP3 00001bdb: SWAP1 00001bdc: SUB 00001bdd: PUSH1 0x1f 00001bdf: AND 00001be0: DUP3 00001be1: ADD 00001be2: SWAP2 00001be3: JUMPDEST 00001be4: POP 00001be5: POP 00001be6: POP 00001be7: POP 00001be8: POP 00001be9: DUP2 00001bea: MSTORE 00001beb: PUSH1 0x20 00001bed: ADD 00001bee: DUP7 00001bef: DUP2 00001bf0: MSTORE 00001bf1: PUSH1 0x20 00001bf3: ADD 00001bf4: DUP6 00001bf5: DUP2 00001bf6: MSTORE 00001bf7: POP 00001bf8: PUSH1 0x40 00001bfa: MLOAD 00001bfb: DUP3 00001bfc: PUSH4 0xffffffff 00001c01: AND 00001c02: PUSH1 0xe0 00001c04: SHL 00001c05: DUP2 00001c06: MSTORE 00001c07: PUSH1 0x04 00001c09: ADD 00001c0a: PUSH2 0x1c13 00001c0d: SWAP2 00001c0e: SWAP1 00001c0f: PUSH2 0x316c 00001c12: JUMP 00001c13: JUMPDEST 00001c14: PUSH1 0x00 00001c16: PUSH1 0x40 00001c18: MLOAD 00001c19: DUP1 00001c1a: DUP4 00001c1b: SUB 00001c1c: DUP2 00001c1d: PUSH1 0x00 00001c1f: DUP8 00001c20: GAS 00001c21: CALL 00001c22: ISZERO 00001c23: DUP1 00001c24: ISZERO 00001c25: PUSH2 0x1c32 00001c28: JUMPI 00001c29: RETURNDATASIZE 00001c2a: PUSH1 0x00 00001c2c: DUP1 00001c2d: RETURNDATACOPY 00001c2e: RETURNDATASIZE 00001c2f: PUSH1 0x00 00001c31: REVERT 00001c32: JUMPDEST 00001c33: POP 00001c34: POP 00001c35: POP 00001c36: POP 00001c37: PUSH1 0x40 00001c39: MLOAD 00001c3a: RETURNDATASIZE 00001c3b: PUSH1 0x00 00001c3d: DUP3 00001c3e: RETURNDATACOPY 00001c3f: PUSH1 0x1f 00001c41: RETURNDATASIZE 00001c42: SWAP1 00001c43: DUP2 00001c44: ADD 00001c45: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00001c66: AND 00001c67: DUP3 00001c68: ADD 00001c69: PUSH1 0x40 00001c6b: MSTORE 00001c6c: PUSH2 0x1c78 00001c6f: SWAP2 00001c70: SWAP1 00001c71: DUP2 00001c72: ADD 00001c73: SWAP1 00001c74: PUSH2 0x320c 00001c77: JUMP 00001c78: JUMPDEST 00001c79: DUP1 00001c7a: MLOAD 00001c7b: PUSH1 0x00 00001c7d: DUP7 00001c7e: DUP2 00001c7f: MSTORE 00001c80: PUSH1 0x06 00001c82: PUSH1 0x20 00001c84: SWAP1 00001c85: DUP2 00001c86: MSTORE 00001c87: PUSH1 0x40 00001c89: SWAP1 00001c8a: SWAP2 00001c8b: KECCAK256 00001c8c: DUP3 00001c8d: MLOAD 00001c8e: SWAP4 00001c8f: SWAP5 00001c90: POP 00001c91: PUSH2 0x1ca0 00001c94: SWAP4 00001c95: SWAP1 00001c96: SWAP3 00001c97: SWAP2 00001c98: SWAP1 00001c99: SWAP2 00001c9a: ADD 00001c9b: SWAP1 00001c9c: PUSH2 0x2677 00001c9f: JUMP 00001ca0: JUMPDEST 00001ca1: POP 00001ca2: PUSH1 0x20 00001ca4: DUP1 00001ca5: DUP3 00001ca6: ADD 00001ca7: MLOAD 00001ca8: CALLER 00001ca9: PUSH1 0x00 00001cab: SWAP1 00001cac: DUP2 00001cad: MSTORE 00001cae: PUSH1 0x07 00001cb0: DUP4 00001cb1: MSTORE 00001cb2: PUSH1 0x40 00001cb4: SWAP1 00001cb5: KECCAK256 00001cb6: DUP2 00001cb7: MLOAD 00001cb8: PUSH2 0x1cc6 00001cbb: SWAP4 00001cbc: SWAP2 00001cbd: SWAP3 00001cbe: SWAP1 00001cbf: SWAP2 00001cc0: ADD 00001cc1: SWAP1 00001cc2: PUSH2 0x2677 00001cc5: JUMP 00001cc6: JUMPDEST 00001cc7: POP 00001cc8: POP 00001cc9: JUMPDEST 00001cca: DUP1 00001ccb: MLOAD 00001ccc: PUSH1 0x20 00001cce: DUP1 00001ccf: DUP4 00001cd0: ADD 00001cd1: MLOAD 00001cd2: PUSH1 0x40 00001cd4: DUP1 00001cd5: MLOAD 00001cd6: CALLER 00001cd7: DUP2 00001cd8: MSTORE 00001cd9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001cee: SWAP1 00001cef: SWAP5 00001cf0: AND 00001cf1: SWAP3 00001cf2: DUP5 00001cf3: ADD 00001cf4: SWAP3 00001cf5: SWAP1 00001cf6: SWAP3 00001cf7: MSTORE 00001cf8: DUP3 00001cf9: DUP3 00001cfa: ADD 00001cfb: MSTORE 00001cfc: PUSH1 0x60 00001cfe: DUP3 00001cff: ADD 00001d00: DUP6 00001d01: SWAP1 00001d02: MSTORE 00001d03: MLOAD 00001d04: PUSH32 0x9afd47907e25028cdaca89d193518c302bbb128617d5a992c5abd45815526593 00001d25: SWAP2 00001d26: DUP2 00001d27: SWAP1 00001d28: SUB 00001d29: PUSH1 0x80 00001d2b: ADD 00001d2c: SWAP1 00001d2d: LOG1 00001d2e: POP 00001d2f: POP 00001d30: POP 00001d31: POP 00001d32: JUMP 00001d33: JUMPDEST 00001d34: PUSH1 0x40 00001d36: DUP1 00001d37: MLOAD 00001d38: PUSH1 0x60 00001d3a: DUP2 00001d3b: DUP2 00001d3c: ADD 00001d3d: DUP4 00001d3e: MSTORE 00001d3f: PUSH1 0x00 00001d41: DUP1 00001d42: DUP4 00001d43: MSTORE 00001d44: PUSH1 0x20 00001d46: DUP4 00001d47: ADD 00001d48: MSTORE 00001d49: SWAP2 00001d4a: DUP2 00001d4b: ADD 00001d4c: DUP3 00001d4d: SWAP1 00001d4e: MSTORE 00001d4f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001d64: DUP5 00001d65: AND 00001d66: PUSH1 0x00 00001d68: SWAP1 00001d69: DUP2 00001d6a: MSTORE 00001d6b: PUSH1 0x08 00001d6d: PUSH1 0x20 00001d6f: MSTORE 00001d70: PUSH1 0x40 00001d72: SWAP1 00001d73: KECCAK256 00001d74: SLOAD 00001d75: PUSH1 0xff 00001d77: AND 00001d78: PUSH2 0x1dad 00001d7b: JUMPI 00001d7c: PUSH1 0x40 00001d7e: MLOAD 00001d7f: PUSH32 0x5b0a758300000000000000000000000000000000000000000000000000000000 00001da0: DUP2 00001da1: MSTORE 00001da2: PUSH1 0x04 00001da4: ADD 00001da5: PUSH1 0x40 00001da7: MLOAD 00001da8: DUP1 00001da9: SWAP2 00001daa: SUB 00001dab: SWAP1 00001dac: REVERT 00001dad: JUMPDEST 00001dae: PUSH1 0x40 00001db0: DUP1 00001db1: MLOAD 00001db2: DUP1 00001db3: DUP3 00001db4: ADD 00001db5: DUP3 00001db6: MSTORE 00001db7: PUSH1 0x00 00001db9: DUP6 00001dba: DUP2 00001dbb: MSTORE 00001dbc: PUSH1 0x06 00001dbe: PUSH1 0x20 00001dc0: MSTORE 00001dc1: SWAP2 00001dc2: DUP3 00001dc3: KECCAK256 00001dc4: DUP1 00001dc5: SLOAD 00001dc6: DUP3 00001dc7: SWAP2 00001dc8: SWAP1 00001dc9: PUSH2 0x1dd1 00001dcc: SWAP1 00001dcd: PUSH2 0x2c08 00001dd0: JUMP 00001dd1: JUMPDEST 00001dd2: DUP1 00001dd3: PUSH1 0x1f 00001dd5: ADD 00001dd6: PUSH1 0x20 00001dd8: DUP1 00001dd9: SWAP2 00001dda: DIV 00001ddb: MUL 00001ddc: PUSH1 0x20 00001dde: ADD 00001ddf: PUSH1 0x40 00001de1: MLOAD 00001de2: SWAP1 00001de3: DUP2 00001de4: ADD 00001de5: PUSH1 0x40 00001de7: MSTORE 00001de8: DUP1 00001de9: SWAP3 00001dea: SWAP2 00001deb: SWAP1 00001dec: DUP2 00001ded: DUP2 00001dee: MSTORE 00001def: PUSH1 0x20 00001df1: ADD 00001df2: DUP3 00001df3: DUP1 00001df4: SLOAD 00001df5: PUSH2 0x1dfd 00001df8: SWAP1 00001df9: PUSH2 0x2c08 00001dfc: JUMP 00001dfd: JUMPDEST 00001dfe: DUP1 00001dff: ISZERO 00001e00: PUSH2 0x1e4a 00001e03: JUMPI 00001e04: DUP1 00001e05: PUSH1 0x1f 00001e07: LT 00001e08: PUSH2 0x1e1f 00001e0b: JUMPI 00001e0c: PUSH2 0x0100 00001e0f: DUP1 00001e10: DUP4 00001e11: SLOAD 00001e12: DIV 00001e13: MUL 00001e14: DUP4 00001e15: MSTORE 00001e16: SWAP2 00001e17: PUSH1 0x20 00001e19: ADD 00001e1a: SWAP2 00001e1b: PUSH2 0x1e4a 00001e1e: JUMP 00001e1f: JUMPDEST 00001e20: DUP3 00001e21: ADD 00001e22: SWAP2 00001e23: SWAP1 00001e24: PUSH1 0x00 00001e26: MSTORE 00001e27: PUSH1 0x20 00001e29: PUSH1 0x00 00001e2b: KECCAK256 00001e2c: SWAP1 00001e2d: JUMPDEST 00001e2e: DUP2 00001e2f: SLOAD 00001e30: DUP2 00001e31: MSTORE 00001e32: SWAP1 00001e33: PUSH1 0x01 00001e35: ADD 00001e36: SWAP1 00001e37: PUSH1 0x20 00001e39: ADD 00001e3a: DUP1 00001e3b: DUP4 00001e3c: GT 00001e3d: PUSH2 0x1e2d 00001e40: JUMPI 00001e41: DUP3 00001e42: SWAP1 00001e43: SUB 00001e44: PUSH1 0x1f 00001e46: AND 00001e47: DUP3 00001e48: ADD 00001e49: SWAP2 00001e4a: JUMPDEST 00001e4b: POP 00001e4c: POP 00001e4d: POP 00001e4e: POP 00001e4f: POP 00001e50: DUP2 00001e51: MSTORE 00001e52: PUSH1 0x20 00001e54: ADD 00001e55: PUSH1 0x07 00001e57: PUSH1 0x00 00001e59: DUP9 00001e5a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001e6f: AND 00001e70: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001e85: AND 00001e86: DUP2 00001e87: MSTORE 00001e88: PUSH1 0x20 00001e8a: ADD 00001e8b: SWAP1 00001e8c: DUP2 00001e8d: MSTORE 00001e8e: PUSH1 0x20 00001e90: ADD 00001e91: PUSH1 0x00 00001e93: KECCAK256 00001e94: DUP1 00001e95: SLOAD 00001e96: PUSH2 0x1e9e 00001e99: SWAP1 00001e9a: PUSH2 0x2c08 00001e9d: JUMP 00001e9e: JUMPDEST 00001e9f: DUP1 00001ea0: PUSH1 0x1f 00001ea2: ADD 00001ea3: PUSH1 0x20 00001ea5: DUP1 00001ea6: SWAP2 00001ea7: DIV 00001ea8: MUL 00001ea9: PUSH1 0x20 00001eab: ADD 00001eac: PUSH1 0x40 00001eae: MLOAD 00001eaf: SWAP1 00001eb0: DUP2 00001eb1: ADD 00001eb2: PUSH1 0x40 00001eb4: MSTORE 00001eb5: DUP1 00001eb6: SWAP3 00001eb7: SWAP2 00001eb8: SWAP1 00001eb9: DUP2 00001eba: DUP2 00001ebb: MSTORE 00001ebc: PUSH1 0x20 00001ebe: ADD 00001ebf: DUP3 00001ec0: DUP1 00001ec1: SLOAD 00001ec2: PUSH2 0x1eca 00001ec5: SWAP1 00001ec6: PUSH2 0x2c08 00001ec9: JUMP 00001eca: JUMPDEST 00001ecb: DUP1 00001ecc: ISZERO 00001ecd: PUSH2 0x1f17 00001ed0: JUMPI 00001ed1: DUP1 00001ed2: PUSH1 0x1f 00001ed4: LT 00001ed5: PUSH2 0x1eec 00001ed8: JUMPI 00001ed9: PUSH2 0x0100 00001edc: DUP1 00001edd: DUP4 00001ede: SLOAD 00001edf: DIV 00001ee0: MUL 00001ee1: DUP4 00001ee2: MSTORE 00001ee3: SWAP2 00001ee4: PUSH1 0x20 00001ee6: ADD 00001ee7: SWAP2 00001ee8: PUSH2 0x1f17 00001eeb: JUMP 00001eec: JUMPDEST 00001eed: DUP3 00001eee: ADD 00001eef: SWAP2 00001ef0: SWAP1 00001ef1: PUSH1 0x00 00001ef3: MSTORE 00001ef4: PUSH1 0x20 00001ef6: PUSH1 0x00 00001ef8: KECCAK256 00001ef9: SWAP1 00001efa: JUMPDEST 00001efb: DUP2 00001efc: SLOAD 00001efd: DUP2 00001efe: MSTORE 00001eff: SWAP1 00001f00: PUSH1 0x01 00001f02: ADD 00001f03: SWAP1 00001f04: PUSH1 0x20 00001f06: ADD 00001f07: DUP1 00001f08: DUP4 00001f09: GT 00001f0a: PUSH2 0x1efa 00001f0d: JUMPI 00001f0e: DUP3 00001f0f: SWAP1 00001f10: SUB 00001f11: PUSH1 0x1f 00001f13: AND 00001f14: DUP3 00001f15: ADD 00001f16: SWAP2 00001f17: JUMPDEST 00001f18: POP 00001f19: POP 00001f1a: POP 00001f1b: POP 00001f1c: POP 00001f1d: DUP2 00001f1e: MSTORE 00001f1f: POP 00001f20: SWAP1 00001f21: POP 00001f22: DUP1 00001f23: PUSH1 0x00 00001f25: ADD 00001f26: MLOAD 00001f27: MLOAD 00001f28: PUSH1 0x00 00001f2a: SUB 00001f2b: PUSH2 0x1f60 00001f2e: JUMPI 00001f2f: PUSH1 0x40 00001f31: MLOAD 00001f32: PUSH32 0xd3d38f6800000000000000000000000000000000000000000000000000000000 00001f53: DUP2 00001f54: MSTORE 00001f55: PUSH1 0x04 00001f57: ADD 00001f58: PUSH1 0x40 00001f5a: MLOAD 00001f5b: DUP1 00001f5c: SWAP2 00001f5d: SUB 00001f5e: SWAP1 00001f5f: REVERT 00001f60: JUMPDEST 00001f61: PUSH1 0x05 00001f63: SLOAD 00001f64: PUSH1 0x40 00001f66: DUP1 00001f67: MLOAD 00001f68: DUP1 00001f69: DUP3 00001f6a: ADD 00001f6b: DUP3 00001f6c: MSTORE 00001f6d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f82: DUP9 00001f83: DUP2 00001f84: AND 00001f85: DUP3 00001f86: MSTORE 00001f87: PUSH1 0x20 00001f89: DUP3 00001f8a: ADD 00001f8b: DUP6 00001f8c: SWAP1 00001f8d: MSTORE 00001f8e: SWAP2 00001f8f: MLOAD 00001f90: PUSH32 0x7afb995300000000000000000000000000000000000000000000000000000000 00001fb1: DUP2 00001fb2: MSTORE 00001fb3: SWAP2 00001fb4: SWAP1 00001fb5: SWAP3 00001fb6: AND 00001fb7: SWAP2 00001fb8: PUSH4 0x7afb9953 00001fbd: SWAP2 00001fbe: PUSH2 0x1fca 00001fc1: SWAP2 00001fc2: SWAP1 00001fc3: PUSH1 0x04 00001fc5: ADD 00001fc6: PUSH2 0x32e1 00001fc9: JUMP 00001fca: JUMPDEST 00001fcb: PUSH1 0x00 00001fcd: PUSH1 0x40 00001fcf: MLOAD 00001fd0: DUP1 00001fd1: DUP4 00001fd2: SUB 00001fd3: DUP2 00001fd4: PUSH1 0x00 00001fd6: DUP8 00001fd7: GAS 00001fd8: CALL 00001fd9: ISZERO 00001fda: DUP1 00001fdb: ISZERO 00001fdc: PUSH2 0x1fe9 00001fdf: JUMPI 00001fe0: RETURNDATASIZE 00001fe1: PUSH1 0x00 00001fe3: DUP1 00001fe4: RETURNDATACOPY 00001fe5: RETURNDATASIZE 00001fe6: PUSH1 0x00 00001fe8: REVERT 00001fe9: JUMPDEST 00001fea: POP 00001feb: POP 00001fec: POP 00001fed: POP 00001fee: PUSH1 0x40 00001ff0: MLOAD 00001ff1: RETURNDATASIZE 00001ff2: PUSH1 0x00 00001ff4: DUP3 00001ff5: RETURNDATACOPY 00001ff6: PUSH1 0x1f 00001ff8: RETURNDATASIZE 00001ff9: SWAP1 00001ffa: DUP2 00001ffb: ADD 00001ffc: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 0000201d: AND 0000201e: DUP3 0000201f: ADD 00002020: PUSH1 0x40 00002022: MSTORE 00002023: PUSH2 0x202f 00002026: SWAP2 00002027: SWAP1 00002028: DUP2 00002029: ADD 0000202a: SWAP1 0000202b: PUSH2 0x3112 0000202e: JUMP 0000202f: JUMPDEST 00002030: SWAP1 00002031: SWAP7 00002032: SWAP1 00002033: SWAP6 00002034: POP 00002035: SWAP4 00002036: POP 00002037: POP 00002038: POP 00002039: POP 0000203a: JUMP 0000203b: JUMPDEST 0000203c: PUSH1 0x40 0000203e: DUP1 0000203f: MLOAD 00002040: DUP1 00002041: DUP3 00002042: ADD 00002043: DUP3 00002044: MSTORE 00002045: PUSH1 0x00 00002047: DUP5 00002048: DUP2 00002049: MSTORE 0000204a: PUSH1 0x06 0000204c: PUSH1 0x20 0000204e: MSTORE 0000204f: SWAP2 00002050: DUP3 00002051: KECCAK256 00002052: DUP1 00002053: SLOAD 00002054: DUP3 00002055: SWAP2 00002056: SWAP1 00002057: PUSH2 0x205f 0000205a: SWAP1 0000205b: PUSH2 0x2c08 0000205e: JUMP 0000205f: JUMPDEST 00002060: DUP1 00002061: PUSH1 0x1f 00002063: ADD 00002064: PUSH1 0x20 00002066: DUP1 00002067: SWAP2 00002068: DIV 00002069: MUL 0000206a: PUSH1 0x20 0000206c: ADD 0000206d: PUSH1 0x40 0000206f: MLOAD 00002070: SWAP1 00002071: DUP2 00002072: ADD 00002073: PUSH1 0x40 00002075: MSTORE 00002076: DUP1 00002077: SWAP3 00002078: SWAP2 00002079: SWAP1 0000207a: DUP2 0000207b: DUP2 0000207c: MSTORE 0000207d: PUSH1 0x20 0000207f: ADD 00002080: DUP3 00002081: DUP1 00002082: SLOAD 00002083: PUSH2 0x208b 00002086: SWAP1 00002087: PUSH2 0x2c08 0000208a: JUMP 0000208b: JUMPDEST 0000208c: DUP1 0000208d: ISZERO 0000208e: PUSH2 0x20d8 00002091: JUMPI 00002092: DUP1 00002093: PUSH1 0x1f 00002095: LT 00002096: PUSH2 0x20ad 00002099: JUMPI 0000209a: PUSH2 0x0100 0000209d: DUP1 0000209e: DUP4 0000209f: SLOAD 000020a0: DIV 000020a1: MUL 000020a2: DUP4 000020a3: MSTORE 000020a4: SWAP2 000020a5: PUSH1 0x20 000020a7: ADD 000020a8: SWAP2 000020a9: PUSH2 0x20d8 000020ac: JUMP 000020ad: JUMPDEST 000020ae: DUP3 000020af: ADD 000020b0: SWAP2 000020b1: SWAP1 000020b2: PUSH1 0x00 000020b4: MSTORE 000020b5: PUSH1 0x20 000020b7: PUSH1 0x00 000020b9: KECCAK256 000020ba: SWAP1 000020bb: JUMPDEST 000020bc: DUP2 000020bd: SLOAD 000020be: DUP2 000020bf: MSTORE 000020c0: SWAP1 000020c1: PUSH1 0x01 000020c3: ADD 000020c4: SWAP1 000020c5: PUSH1 0x20 000020c7: ADD 000020c8: DUP1 000020c9: DUP4 000020ca: GT 000020cb: PUSH2 0x20bb 000020ce: JUMPI 000020cf: DUP3 000020d0: SWAP1 000020d1: SUB 000020d2: PUSH1 0x1f 000020d4: AND 000020d5: DUP3 000020d6: ADD 000020d7: SWAP2 000020d8: JUMPDEST 000020d9: POP 000020da: POP 000020db: POP 000020dc: POP 000020dd: POP 000020de: DUP2 000020df: MSTORE 000020e0: PUSH1 0x20 000020e2: ADD 000020e3: PUSH1 0x07 000020e5: PUSH1 0x00 000020e7: DUP8 000020e8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000020fd: AND 000020fe: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002113: AND 00002114: DUP2 00002115: MSTORE 00002116: PUSH1 0x20 00002118: ADD 00002119: SWAP1 0000211a: DUP2 0000211b: MSTORE 0000211c: PUSH1 0x20 0000211e: ADD 0000211f: PUSH1 0x00 00002121: KECCAK256 00002122: DUP1 00002123: SLOAD 00002124: PUSH2 0x212c 00002127: SWAP1 00002128: PUSH2 0x2c08 0000212b: JUMP 0000212c: JUMPDEST 0000212d: DUP1 0000212e: PUSH1 0x1f 00002130: ADD 00002131: PUSH1 0x20 00002133: DUP1 00002134: SWAP2 00002135: DIV 00002136: MUL 00002137: PUSH1 0x20 00002139: ADD 0000213a: PUSH1 0x40 0000213c: MLOAD 0000213d: SWAP1 0000213e: DUP2 0000213f: ADD 00002140: PUSH1 0x40 00002142: MSTORE 00002143: DUP1 00002144: SWAP3 00002145: SWAP2 00002146: SWAP1 00002147: DUP2 00002148: DUP2 00002149: MSTORE 0000214a: PUSH1 0x20 0000214c: ADD 0000214d: DUP3 0000214e: DUP1 0000214f: SLOAD 00002150: PUSH2 0x2158 00002153: SWAP1 00002154: PUSH2 0x2c08 00002157: JUMP 00002158: JUMPDEST 00002159: DUP1 0000215a: ISZERO 0000215b: PUSH2 0x21a5 0000215e: JUMPI 0000215f: DUP1 00002160: PUSH1 0x1f 00002162: LT 00002163: PUSH2 0x217a 00002166: JUMPI 00002167: PUSH2 0x0100 0000216a: DUP1 0000216b: DUP4 0000216c: SLOAD 0000216d: DIV 0000216e: MUL 0000216f: DUP4 00002170: MSTORE 00002171: SWAP2 00002172: PUSH1 0x20 00002174: ADD 00002175: SWAP2 00002176: PUSH2 0x21a5 00002179: JUMP 0000217a: JUMPDEST 0000217b: DUP3 0000217c: ADD 0000217d: SWAP2 0000217e: SWAP1 0000217f: PUSH1 0x00 00002181: MSTORE 00002182: PUSH1 0x20 00002184: PUSH1 0x00 00002186: KECCAK256 00002187: SWAP1 00002188: JUMPDEST 00002189: DUP2 0000218a: SLOAD 0000218b: DUP2 0000218c: MSTORE 0000218d: SWAP1 0000218e: PUSH1 0x01 00002190: ADD 00002191: SWAP1 00002192: PUSH1 0x20 00002194: ADD 00002195: DUP1 00002196: DUP4 00002197: GT 00002198: PUSH2 0x2188 0000219b: JUMPI 0000219c: DUP3 0000219d: SWAP1 0000219e: SUB 0000219f: PUSH1 0x1f 000021a1: AND 000021a2: DUP3 000021a3: ADD 000021a4: SWAP2 000021a5: JUMPDEST 000021a6: POP 000021a7: POP 000021a8: POP 000021a9: SWAP2 000021aa: SWAP1 000021ab: SWAP3 000021ac: MSTORE 000021ad: POP 000021ae: POP 000021af: PUSH1 0x05 000021b1: SLOAD 000021b2: PUSH1 0x40 000021b4: DUP1 000021b5: MLOAD 000021b6: PUSH1 0x80 000021b8: DUP2 000021b9: ADD 000021ba: DUP3 000021bb: MSTORE 000021bc: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000021d1: DUP9 000021d2: DUP2 000021d3: AND 000021d4: DUP3 000021d5: MSTORE 000021d6: PUSH1 0x20 000021d8: DUP3 000021d9: ADD 000021da: DUP9 000021db: SWAP1 000021dc: MSTORE 000021dd: DUP2 000021de: DUP4 000021df: ADD 000021e0: DUP8 000021e1: SWAP1 000021e2: MSTORE 000021e3: PUSH1 0x60 000021e5: DUP3 000021e6: ADD 000021e7: DUP6 000021e8: SWAP1 000021e9: MSTORE 000021ea: SWAP2 000021eb: MLOAD 000021ec: PUSH32 0x1306ac3b00000000000000000000000000000000000000000000000000000000 0000220d: DUP2 0000220e: MSTORE 0000220f: SWAP4 00002210: SWAP5 00002211: POP 00002212: SWAP2 00002213: AND 00002214: SWAP2 00002215: PUSH4 0x1306ac3b 0000221a: SWAP2 0000221b: PUSH2 0x2226 0000221e: SWAP2 0000221f: PUSH1 0x04 00002221: ADD 00002222: PUSH2 0x331c 00002225: JUMP 00002226: JUMPDEST 00002227: PUSH1 0x00 00002229: PUSH1 0x40 0000222b: MLOAD 0000222c: DUP1 0000222d: DUP4 0000222e: SUB 0000222f: DUP2 00002230: PUSH1 0x00 00002232: DUP8 00002233: GAS 00002234: CALL 00002235: ISZERO 00002236: DUP1 00002237: ISZERO 00002238: PUSH2 0x2245 0000223b: JUMPI 0000223c: RETURNDATASIZE 0000223d: PUSH1 0x00 0000223f: DUP1 00002240: RETURNDATACOPY 00002241: RETURNDATASIZE 00002242: PUSH1 0x00 00002244: REVERT 00002245: JUMPDEST 00002246: POP 00002247: POP 00002248: POP 00002249: POP 0000224a: PUSH1 0x40 0000224c: MLOAD 0000224d: RETURNDATASIZE 0000224e: PUSH1 0x00 00002250: DUP3 00002251: RETURNDATACOPY 00002252: PUSH1 0x1f 00002254: RETURNDATASIZE 00002255: SWAP1 00002256: DUP2 00002257: ADD 00002258: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00002279: AND 0000227a: DUP3 0000227b: ADD 0000227c: PUSH1 0x40 0000227e: MSTORE 0000227f: PUSH2 0x228b 00002282: SWAP2 00002283: SWAP1 00002284: DUP2 00002285: ADD 00002286: SWAP1 00002287: PUSH2 0x320c 0000228a: JUMP 0000228b: JUMPDEST 0000228c: DUP1 0000228d: MLOAD 0000228e: PUSH1 0x00 00002290: DUP6 00002291: DUP2 00002292: MSTORE 00002293: PUSH1 0x06 00002295: PUSH1 0x20 00002297: SWAP1 00002298: DUP2 00002299: MSTORE 0000229a: PUSH1 0x40 0000229c: SWAP1 0000229d: SWAP2 0000229e: KECCAK256 0000229f: DUP3 000022a0: MLOAD 000022a1: SWAP4 000022a2: SWAP5 000022a3: POP 000022a4: PUSH2 0x22b3 000022a7: SWAP4 000022a8: SWAP1 000022a9: SWAP3 000022aa: SWAP2 000022ab: SWAP1 000022ac: SWAP2 000022ad: ADD 000022ae: SWAP1 000022af: PUSH2 0x2677 000022b2: JUMP 000022b3: JUMPDEST 000022b4: POP 000022b5: PUSH1 0x20 000022b7: DUP1 000022b8: DUP3 000022b9: ADD 000022ba: MLOAD 000022bb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000022d0: DUP7 000022d1: AND 000022d2: PUSH1 0x00 000022d4: SWAP1 000022d5: DUP2 000022d6: MSTORE 000022d7: PUSH1 0x07 000022d9: DUP4 000022da: MSTORE 000022db: PUSH1 0x40 000022dd: SWAP1 000022de: KECCAK256 000022df: DUP2 000022e0: MLOAD 000022e1: PUSH2 0x22ef 000022e4: SWAP4 000022e5: SWAP2 000022e6: SWAP3 000022e7: SWAP1 000022e8: SWAP2 000022e9: ADD 000022ea: SWAP1 000022eb: PUSH2 0x2677 000022ee: JUMP 000022ef: JUMPDEST 000022f0: POP 000022f1: POP 000022f2: POP 000022f3: POP 000022f4: POP 000022f5: JUMP 000022f6: JUMPDEST 000022f7: PUSH1 0x00 000022f9: PUSH1 0x40 000022fb: MLOAD 000022fc: PUSH32 0x095ea7b300000000000000000000000000000000000000000000000000000000 0000231d: DUP2 0000231e: MSTORE 0000231f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002334: DUP5 00002335: AND 00002336: PUSH1 0x04 00002338: DUP3 00002339: ADD 0000233a: MSTORE 0000233b: DUP3 0000233c: PUSH1 0x24 0000233e: DUP3 0000233f: ADD 00002340: MSTORE 00002341: PUSH1 0x20 00002343: PUSH1 0x00 00002345: PUSH1 0x44 00002347: DUP4 00002348: PUSH1 0x00 0000234a: DUP10 0000234b: GAS 0000234c: CALL 0000234d: RETURNDATASIZE 0000234e: ISZERO 0000234f: PUSH1 0x1f 00002351: RETURNDATASIZE 00002352: GT 00002353: PUSH1 0x01 00002355: PUSH1 0x00 00002357: MLOAD 00002358: EQ 00002359: AND 0000235a: OR 0000235b: AND 0000235c: SWAP2 0000235d: POP 0000235e: POP 0000235f: DUP1 00002360: PUSH2 0x084d 00002363: JUMPI 00002364: PUSH1 0x40 00002366: MLOAD 00002367: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00002388: DUP2 00002389: MSTORE 0000238a: PUSH1 0x20 0000238c: PUSH1 0x04 0000238e: DUP3 0000238f: ADD 00002390: MSTORE 00002391: PUSH1 0x0e 00002393: PUSH1 0x24 00002395: DUP3 00002396: ADD 00002397: MSTORE 00002398: PUSH32 0x415050524f56455f4641494c4544000000000000000000000000000000000000 000023b9: PUSH1 0x44 000023bb: DUP3 000023bc: ADD 000023bd: MSTORE 000023be: PUSH1 0x64 000023c0: ADD 000023c1: PUSH2 0x0572 000023c4: JUMP 000023c5: JUMPDEST 000023c6: PUSH1 0x00 000023c8: DUP3 000023c9: DUP2 000023ca: MSTORE 000023cb: PUSH1 0x03 000023cd: PUSH1 0x20 000023cf: SWAP1 000023d0: DUP2 000023d1: MSTORE 000023d2: PUSH1 0x40 000023d4: DUP1 000023d5: DUP4 000023d6: KECCAK256 000023d7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000023ec: DUP6 000023ed: AND 000023ee: DUP1 000023ef: DUP6 000023f0: MSTORE 000023f1: SWAP3 000023f2: MSTORE 000023f3: DUP1 000023f4: DUP4 000023f5: KECCAK256 000023f6: DUP1 000023f7: SLOAD 000023f8: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00 00002419: AND 0000241a: SWAP1 0000241b: SSTORE 0000241c: MLOAD 0000241d: SWAP1 0000241e: SWAP2 0000241f: DUP5 00002420: SWAP2 00002421: PUSH32 0x155aaafb6329a2098580462df33ec4b7441b19729b9601c5fc17ae1cf99a8a52 00002442: SWAP2 00002443: SWAP1 00002444: LOG3 00002445: POP 00002446: POP 00002447: JUMP 00002448: JUMPDEST 00002449: PUSH1 0x00 0000244b: PUSH1 0x40 0000244d: MLOAD 0000244e: PUSH32 0x23b872dd00000000000000000000000000000000000000000000000000000000 0000246f: DUP2 00002470: MSTORE 00002471: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002486: DUP6 00002487: AND 00002488: PUSH1 0x04 0000248a: DUP3 0000248b: ADD 0000248c: MSTORE 0000248d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000024a2: DUP5 000024a3: AND 000024a4: PUSH1 0x24 000024a6: DUP3 000024a7: ADD 000024a8: MSTORE 000024a9: DUP3 000024aa: PUSH1 0x44 000024ac: DUP3 000024ad: ADD 000024ae: MSTORE 000024af: PUSH1 0x20 000024b1: PUSH1 0x00 000024b3: PUSH1 0x64 000024b5: DUP4 000024b6: PUSH1 0x00 000024b8: DUP11 000024b9: GAS 000024ba: CALL 000024bb: RETURNDATASIZE 000024bc: ISZERO 000024bd: PUSH1 0x1f 000024bf: RETURNDATASIZE 000024c0: GT 000024c1: PUSH1 0x01 000024c3: PUSH1 0x00 000024c5: MLOAD 000024c6: EQ 000024c7: AND 000024c8: OR 000024c9: AND 000024ca: SWAP2 000024cb: POP 000024cc: POP 000024cd: DUP1 000024ce: PUSH2 0x22ef 000024d1: JUMPI 000024d2: PUSH1 0x40 000024d4: MLOAD 000024d5: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000024f6: DUP2 000024f7: MSTORE 000024f8: PUSH1 0x20 000024fa: PUSH1 0x04 000024fc: DUP3 000024fd: ADD 000024fe: MSTORE 000024ff: PUSH1 0x14 00002501: PUSH1 0x24 00002503: DUP3 00002504: ADD 00002505: MSTORE 00002506: PUSH32 0x5452414e534645525f46524f4d5f4641494c4544000000000000000000000000 00002527: PUSH1 0x44 00002529: DUP3 0000252a: ADD 0000252b: MSTORE 0000252c: PUSH1 0x64 0000252e: ADD 0000252f: PUSH2 0x0572 00002532: JUMP 00002533: JUMPDEST 00002534: PUSH1 0x00 00002536: DUP1 00002537: PUSH1 0x00 00002539: DUP1 0000253a: PUSH1 0x00 0000253c: DUP6 0000253d: DUP8 0000253e: GAS 0000253f: CALL 00002540: SWAP1 00002541: POP 00002542: DUP1 00002543: PUSH2 0x175f 00002546: JUMPI 00002547: PUSH1 0x40 00002549: MLOAD 0000254a: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000256b: DUP2 0000256c: MSTORE 0000256d: PUSH1 0x20 0000256f: PUSH1 0x04 00002571: DUP3 00002572: ADD 00002573: MSTORE 00002574: PUSH1 0x13 00002576: PUSH1 0x24 00002578: DUP3 00002579: ADD 0000257a: MSTORE 0000257b: PUSH32 0x4554485f5452414e534645525f4641494c454400000000000000000000000000 0000259c: PUSH1 0x44 0000259e: DUP3 0000259f: ADD 000025a0: MSTORE 000025a1: PUSH1 0x64 000025a3: ADD 000025a4: PUSH2 0x0572 000025a7: JUMP 000025a8: JUMPDEST 000025a9: PUSH1 0x00 000025ab: PUSH1 0x40 000025ad: MLOAD 000025ae: PUSH32 0xa9059cbb00000000000000000000000000000000000000000000000000000000 000025cf: DUP2 000025d0: MSTORE 000025d1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000025e6: DUP5 000025e7: AND 000025e8: PUSH1 0x04 000025ea: DUP3 000025eb: ADD 000025ec: MSTORE 000025ed: DUP3 000025ee: PUSH1 0x24 000025f0: DUP3 000025f1: ADD 000025f2: MSTORE 000025f3: PUSH1 0x20 000025f5: PUSH1 0x00 000025f7: PUSH1 0x44 000025f9: DUP4 000025fa: PUSH1 0x00 000025fc: DUP10 000025fd: GAS 000025fe: CALL 000025ff: RETURNDATASIZE 00002600: ISZERO 00002601: PUSH1 0x1f 00002603: RETURNDATASIZE 00002604: GT 00002605: PUSH1 0x01 00002607: PUSH1 0x00 00002609: MLOAD 0000260a: EQ 0000260b: AND 0000260c: OR 0000260d: AND 0000260e: SWAP2 0000260f: POP 00002610: POP 00002611: DUP1 00002612: PUSH2 0x084d 00002615: JUMPI 00002616: PUSH1 0x40 00002618: MLOAD 00002619: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000263a: DUP2 0000263b: MSTORE 0000263c: PUSH1 0x20 0000263e: PUSH1 0x04 00002640: DUP3 00002641: ADD 00002642: MSTORE 00002643: PUSH1 0x0f 00002645: PUSH1 0x24 00002647: DUP3 00002648: ADD 00002649: MSTORE 0000264a: PUSH32 0x5452414e534645525f4641494c45440000000000000000000000000000000000 0000266b: PUSH1 0x44 0000266d: DUP3 0000266e: ADD 0000266f: MSTORE 00002670: PUSH1 0x64 00002672: ADD 00002673: PUSH2 0x0572 00002676: JUMP 00002677: JUMPDEST 00002678: DUP3 00002679: DUP1 0000267a: SLOAD 0000267b: PUSH2 0x2683 0000267e: SWAP1 0000267f: PUSH2 0x2c08 00002682: JUMP 00002683: JUMPDEST 00002684: SWAP1 00002685: PUSH1 0x00 00002687: MSTORE 00002688: PUSH1 0x20 0000268a: PUSH1 0x00 0000268c: KECCAK256 0000268d: SWAP1 0000268e: PUSH1 0x1f 00002690: ADD 00002691: PUSH1 0x20 00002693: SWAP1 00002694: DIV 00002695: DUP2 00002696: ADD 00002697: SWAP3 00002698: DUP3 00002699: PUSH2 0x26a5 0000269c: JUMPI 0000269d: PUSH1 0x00 0000269f: DUP6 000026a0: SSTORE 000026a1: PUSH2 0x26eb 000026a4: JUMP 000026a5: JUMPDEST 000026a6: DUP3 000026a7: PUSH1 0x1f 000026a9: LT 000026aa: PUSH2 0x26be 000026ad: JUMPI 000026ae: DUP1 000026af: MLOAD 000026b0: PUSH1 0xff 000026b2: NOT 000026b3: AND 000026b4: DUP4 000026b5: DUP1 000026b6: ADD 000026b7: OR 000026b8: DUP6 000026b9: SSTORE 000026ba: PUSH2 0x26eb 000026bd: JUMP 000026be: JUMPDEST 000026bf: DUP3 000026c0: DUP1 000026c1: ADD 000026c2: PUSH1 0x01 000026c4: ADD 000026c5: DUP6 000026c6: SSTORE 000026c7: DUP3 000026c8: ISZERO 000026c9: PUSH2 0x26eb 000026cc: JUMPI 000026cd: SWAP2 000026ce: DUP3 000026cf: ADD 000026d0: JUMPDEST 000026d1: DUP3 000026d2: DUP2 000026d3: GT 000026d4: ISZERO 000026d5: PUSH2 0x26eb 000026d8: JUMPI 000026d9: DUP3 000026da: MLOAD 000026db: DUP3 000026dc: SSTORE 000026dd: SWAP2 000026de: PUSH1 0x20 000026e0: ADD 000026e1: SWAP2 000026e2: SWAP1 000026e3: PUSH1 0x01 000026e5: ADD 000026e6: SWAP1 000026e7: PUSH2 0x26d0 000026ea: JUMP 000026eb: JUMPDEST 000026ec: POP 000026ed: PUSH2 0x26f7 000026f0: SWAP3 000026f1: SWAP2 000026f2: POP 000026f3: PUSH2 0x26fb 000026f6: JUMP 000026f7: JUMPDEST 000026f8: POP 000026f9: SWAP1 000026fa: JUMP 000026fb: JUMPDEST 000026fc: JUMPDEST 000026fd: DUP1 000026fe: DUP3 000026ff: GT 00002700: ISZERO 00002701: PUSH2 0x26f7 00002704: JUMPI 00002705: PUSH1 0x00 00002707: DUP2 00002708: SSTORE 00002709: PUSH1 0x01 0000270b: ADD 0000270c: PUSH2 0x26fc 0000270f: JUMP 00002710: JUMPDEST 00002711: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002726: DUP2 00002727: AND 00002728: DUP2 00002729: EQ 0000272a: PUSH2 0x1383 0000272d: JUMPI 0000272e: PUSH1 0x00 00002730: DUP1 00002731: REVERT 00002732: JUMPDEST 00002733: PUSH1 0x00 00002735: DUP1 00002736: PUSH1 0x40 00002738: DUP4 00002739: DUP6 0000273a: SUB 0000273b: SLT 0000273c: ISZERO 0000273d: PUSH2 0x2745 00002740: JUMPI 00002741: PUSH1 0x00 00002743: DUP1 00002744: REVERT 00002745: JUMPDEST 00002746: DUP3 00002747: CALLDATALOAD 00002748: SWAP2 00002749: POP 0000274a: PUSH1 0x20 0000274c: DUP4 0000274d: ADD 0000274e: CALLDATALOAD 0000274f: PUSH2 0x2757 00002752: DUP2 00002753: PUSH2 0x2710 00002756: JUMP 00002757: JUMPDEST 00002758: DUP1 00002759: SWAP2 0000275a: POP 0000275b: POP 0000275c: SWAP3 0000275d: POP 0000275e: SWAP3 0000275f: SWAP1 00002760: POP 00002761: JUMP 00002762: JUMPDEST 00002763: PUSH1 0x00 00002765: DUP1 00002766: DUP4 00002767: PUSH1 0x1f 00002769: DUP5 0000276a: ADD 0000276b: SLT 0000276c: PUSH2 0x2774 0000276f: JUMPI 00002770: PUSH1 0x00 00002772: DUP1 00002773: REVERT 00002774: JUMPDEST 00002775: POP 00002776: DUP2 00002777: CALLDATALOAD 00002778: PUSH8 0xffffffffffffffff 00002781: DUP2 00002782: GT 00002783: ISZERO 00002784: PUSH2 0x278c 00002787: JUMPI 00002788: PUSH1 0x00 0000278a: DUP1 0000278b: REVERT 0000278c: JUMPDEST 0000278d: PUSH1 0x20 0000278f: DUP4 00002790: ADD 00002791: SWAP2 00002792: POP 00002793: DUP4 00002794: PUSH1 0x20 00002796: DUP3 00002797: DUP6 00002798: ADD 00002799: ADD 0000279a: GT 0000279b: ISZERO 0000279c: PUSH2 0x12dc 0000279f: JUMPI 000027a0: PUSH1 0x00 000027a2: DUP1 000027a3: REVERT 000027a4: JUMPDEST 000027a5: PUSH1 0x00 000027a7: DUP1 000027a8: PUSH1 0x00 000027aa: DUP1 000027ab: PUSH1 0x00 000027ad: DUP1 000027ae: PUSH1 0x00 000027b0: DUP1 000027b1: PUSH1 0xc0 000027b3: DUP10 000027b4: DUP12 000027b5: SUB 000027b6: SLT 000027b7: ISZERO 000027b8: PUSH2 0x27c0 000027bb: JUMPI 000027bc: PUSH1 0x00 000027be: DUP1 000027bf: REVERT 000027c0: JUMPDEST 000027c1: DUP9 000027c2: CALLDATALOAD 000027c3: PUSH2 0x27cb 000027c6: DUP2 000027c7: PUSH2 0x2710 000027ca: JUMP 000027cb: JUMPDEST 000027cc: SWAP8 000027cd: POP 000027ce: PUSH1 0x20 000027d0: DUP10 000027d1: ADD 000027d2: CALLDATALOAD 000027d3: SWAP7 000027d4: POP 000027d5: PUSH1 0x40 000027d7: DUP10 000027d8: ADD 000027d9: CALLDATALOAD 000027da: SWAP6 000027db: POP 000027dc: PUSH1 0x60 000027de: DUP10 000027df: ADD 000027e0: CALLDATALOAD 000027e1: PUSH2 0x27e9 000027e4: DUP2 000027e5: PUSH2 0x2710 000027e8: JUMP 000027e9: JUMPDEST 000027ea: SWAP5 000027eb: POP 000027ec: PUSH1 0x80 000027ee: DUP10 000027ef: ADD 000027f0: CALLDATALOAD 000027f1: PUSH8 0xffffffffffffffff 000027fa: DUP1 000027fb: DUP3 000027fc: GT 000027fd: ISZERO 000027fe: PUSH2 0x2806 00002801: JUMPI 00002802: PUSH1 0x00 00002804: DUP1 00002805: REVERT 00002806: JUMPDEST 00002807: PUSH2 0x2812 0000280a: DUP13 0000280b: DUP4 0000280c: DUP14 0000280d: ADD 0000280e: PUSH2 0x2762 00002811: JUMP 00002812: JUMPDEST 00002813: SWAP1 00002814: SWAP7 00002815: POP 00002816: SWAP5 00002817: POP 00002818: PUSH1 0xa0 0000281a: DUP12 0000281b: ADD 0000281c: CALLDATALOAD 0000281d: SWAP2 0000281e: POP 0000281f: DUP1 00002820: DUP3 00002821: GT 00002822: ISZERO 00002823: PUSH2 0x282b 00002826: JUMPI 00002827: PUSH1 0x00 00002829: DUP1 0000282a: REVERT 0000282b: JUMPDEST 0000282c: POP 0000282d: PUSH2 0x2838 00002830: DUP12 00002831: DUP3 00002832: DUP13 00002833: ADD 00002834: PUSH2 0x2762 00002837: JUMP 00002838: JUMPDEST 00002839: SWAP10 0000283a: SWAP13 0000283b: SWAP9 0000283c: SWAP12 0000283d: POP 0000283e: SWAP7 0000283f: SWAP10 00002840: POP 00002841: SWAP5 00002842: SWAP8 00002843: SWAP4 00002844: SWAP7 00002845: SWAP3 00002846: SWAP6 00002847: SWAP5 00002848: POP 00002849: POP 0000284a: POP 0000284b: JUMP 0000284c: JUMPDEST 0000284d: PUSH1 0x00 0000284f: PUSH1 0x20 00002851: DUP3 00002852: DUP5 00002853: SUB 00002854: SLT 00002855: ISZERO 00002856: PUSH2 0x285e 00002859: JUMPI 0000285a: PUSH1 0x00 0000285c: DUP1 0000285d: REVERT 0000285e: JUMPDEST 0000285f: DUP2 00002860: CALLDATALOAD 00002861: PUSH2 0x0990 00002864: DUP2 00002865: PUSH2 0x2710 00002868: JUMP 00002869: JUMPDEST 0000286a: PUSH1 0x00 0000286c: JUMPDEST 0000286d: DUP4 0000286e: DUP2 0000286f: LT 00002870: ISZERO 00002871: PUSH2 0x2884 00002874: JUMPI 00002875: DUP2 00002876: DUP2 00002877: ADD 00002878: MLOAD 00002879: DUP4 0000287a: DUP3 0000287b: ADD 0000287c: MSTORE 0000287d: PUSH1 0x20 0000287f: ADD 00002880: PUSH2 0x286c 00002883: JUMP 00002884: JUMPDEST 00002885: DUP4 00002886: DUP2 00002887: GT 00002888: ISZERO 00002889: PUSH2 0x084d 0000288c: JUMPI 0000288d: POP 0000288e: POP 0000288f: PUSH1 0x00 00002891: SWAP2 00002892: ADD 00002893: MSTORE 00002894: JUMP 00002895: JUMPDEST 00002896: PUSH1 0x00 00002898: DUP2 00002899: MLOAD 0000289a: DUP1 0000289b: DUP5 0000289c: MSTORE 0000289d: PUSH2 0x28ad 000028a0: DUP2 000028a1: PUSH1 0x20 000028a3: DUP7 000028a4: ADD 000028a5: PUSH1 0x20 000028a7: DUP7 000028a8: ADD 000028a9: PUSH2 0x2869 000028ac: JUMP 000028ad: JUMPDEST 000028ae: PUSH1 0x1f 000028b0: ADD 000028b1: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 000028d2: AND 000028d3: SWAP3 000028d4: SWAP1 000028d5: SWAP3 000028d6: ADD 000028d7: PUSH1 0x20 000028d9: ADD 000028da: SWAP3 000028db: SWAP2 000028dc: POP 000028dd: POP 000028de: JUMP 000028df: JUMPDEST 000028e0: PUSH1 0x20 000028e2: DUP2 000028e3: MSTORE 000028e4: PUSH1 0x00 000028e6: PUSH2 0x0990 000028e9: PUSH1 0x20 000028eb: DUP4 000028ec: ADD 000028ed: DUP5 000028ee: PUSH2 0x2895 000028f1: JUMP 000028f2: JUMPDEST 000028f3: PUSH1 0x00 000028f5: DUP1 000028f6: PUSH1 0x00 000028f8: PUSH1 0x60 000028fa: DUP5 000028fb: DUP7 000028fc: SUB 000028fd: SLT 000028fe: ISZERO 000028ff: PUSH2 0x2907 00002902: JUMPI 00002903: PUSH1 0x00 00002905: DUP1 00002906: REVERT 00002907: JUMPDEST 00002908: DUP4 00002909: CALLDATALOAD 0000290a: PUSH2 0x2912 0000290d: DUP2 0000290e: PUSH2 0x2710 00002911: JUMP 00002912: JUMPDEST 00002913: SWAP3 00002914: POP 00002915: PUSH1 0x20 00002917: DUP5 00002918: ADD 00002919: CALLDATALOAD 0000291a: PUSH2 0x2922 0000291d: DUP2 0000291e: PUSH2 0x2710 00002921: JUMP 00002922: JUMPDEST 00002923: SWAP3 00002924: SWAP6 00002925: SWAP3 00002926: SWAP5 00002927: POP 00002928: POP 00002929: POP 0000292a: PUSH1 0x40 0000292c: SWAP2 0000292d: SWAP1 0000292e: SWAP2 0000292f: ADD 00002930: CALLDATALOAD 00002931: SWAP1 00002932: JUMP 00002933: JUMPDEST 00002934: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00002955: PUSH1 0x00 00002957: MSTORE 00002958: PUSH1 0x41 0000295a: PUSH1 0x04 0000295c: MSTORE 0000295d: PUSH1 0x24 0000295f: PUSH1 0x00 00002961: REVERT 00002962: JUMPDEST 00002963: PUSH1 0x40 00002965: MLOAD 00002966: PUSH1 0x1f 00002968: DUP3 00002969: ADD 0000296a: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 0000298b: AND 0000298c: DUP2 0000298d: ADD 0000298e: PUSH8 0xffffffffffffffff 00002997: DUP2 00002998: GT 00002999: DUP3 0000299a: DUP3 0000299b: LT 0000299c: OR 0000299d: ISZERO 0000299e: PUSH2 0x29a9 000029a1: JUMPI 000029a2: PUSH2 0x29a9 000029a5: PUSH2 0x2933 000029a8: JUMP 000029a9: JUMPDEST 000029aa: PUSH1 0x40 000029ac: MSTORE 000029ad: SWAP2 000029ae: SWAP1 000029af: POP 000029b0: JUMP 000029b1: JUMPDEST 000029b2: PUSH1 0x00 000029b4: PUSH8 0xffffffffffffffff 000029bd: DUP3 000029be: GT 000029bf: ISZERO 000029c0: PUSH2 0x29cb 000029c3: JUMPI 000029c4: PUSH2 0x29cb 000029c7: PUSH2 0x2933 000029ca: JUMP 000029cb: JUMPDEST 000029cc: POP 000029cd: PUSH1 0x1f 000029cf: ADD 000029d0: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 000029f1: AND 000029f2: PUSH1 0x20 000029f4: ADD 000029f5: SWAP1 000029f6: JUMP 000029f7: JUMPDEST 000029f8: PUSH1 0x00 000029fa: DUP1 000029fb: PUSH1 0x40 000029fd: DUP4 000029fe: DUP6 000029ff: SUB 00002a00: SLT 00002a01: ISZERO 00002a02: PUSH2 0x2a0a 00002a05: JUMPI 00002a06: PUSH1 0x00 00002a08: DUP1 00002a09: REVERT 00002a0a: JUMPDEST 00002a0b: DUP3 00002a0c: CALLDATALOAD 00002a0d: PUSH4 0xffffffff 00002a12: DUP2 00002a13: AND 00002a14: DUP2 00002a15: EQ 00002a16: PUSH2 0x2a1e 00002a19: JUMPI 00002a1a: PUSH1 0x00 00002a1c: DUP1 00002a1d: REVERT 00002a1e: JUMPDEST 00002a1f: SWAP2 00002a20: POP 00002a21: PUSH1 0x20 00002a23: DUP4 00002a24: ADD 00002a25: CALLDATALOAD 00002a26: PUSH8 0xffffffffffffffff 00002a2f: DUP2 00002a30: GT 00002a31: ISZERO 00002a32: PUSH2 0x2a3a 00002a35: JUMPI 00002a36: PUSH1 0x00 00002a38: DUP1 00002a39: REVERT 00002a3a: JUMPDEST 00002a3b: DUP4 00002a3c: ADD 00002a3d: PUSH1 0x1f 00002a3f: DUP2 00002a40: ADD 00002a41: DUP6 00002a42: SGT 00002a43: PUSH2 0x2a4b 00002a46: JUMPI 00002a47: PUSH1 0x00 00002a49: DUP1 00002a4a: REVERT 00002a4b: JUMPDEST 00002a4c: DUP1 00002a4d: CALLDATALOAD 00002a4e: PUSH2 0x2a5e 00002a51: PUSH2 0x2a59 00002a54: DUP3 00002a55: PUSH2 0x29b1 00002a58: JUMP 00002a59: JUMPDEST 00002a5a: PUSH2 0x2962 00002a5d: JUMP 00002a5e: JUMPDEST 00002a5f: DUP2 00002a60: DUP2 00002a61: MSTORE 00002a62: DUP7 00002a63: PUSH1 0x20 00002a65: DUP4 00002a66: DUP6 00002a67: ADD 00002a68: ADD 00002a69: GT 00002a6a: ISZERO 00002a6b: PUSH2 0x2a73 00002a6e: JUMPI 00002a6f: PUSH1 0x00 00002a71: DUP1 00002a72: REVERT 00002a73: JUMPDEST 00002a74: DUP2 00002a75: PUSH1 0x20 00002a77: DUP5 00002a78: ADD 00002a79: PUSH1 0x20 00002a7b: DUP4 00002a7c: ADD 00002a7d: CALLDATACOPY 00002a7e: PUSH1 0x00 00002a80: PUSH1 0x20 00002a82: DUP4 00002a83: DUP4 00002a84: ADD 00002a85: ADD 00002a86: MSTORE 00002a87: DUP1 00002a88: SWAP4 00002a89: POP 00002a8a: POP 00002a8b: POP 00002a8c: POP 00002a8d: SWAP3 00002a8e: POP 00002a8f: SWAP3 00002a90: SWAP1 00002a91: POP 00002a92: JUMP 00002a93: JUMPDEST 00002a94: PUSH1 0x00 00002a96: DUP1 00002a97: PUSH1 0x40 00002a99: DUP4 00002a9a: DUP6 00002a9b: SUB 00002a9c: SLT 00002a9d: ISZERO 00002a9e: PUSH2 0x2aa6 00002aa1: JUMPI 00002aa2: PUSH1 0x00 00002aa4: DUP1 00002aa5: REVERT 00002aa6: JUMPDEST 00002aa7: DUP3 00002aa8: CALLDATALOAD 00002aa9: PUSH2 0x2ab1 00002aac: DUP2 00002aad: PUSH2 0x2710 00002ab0: JUMP 00002ab1: JUMPDEST 00002ab2: SWAP5 00002ab3: PUSH1 0x20 00002ab5: SWAP4 00002ab6: SWAP1 00002ab7: SWAP4 00002ab8: ADD 00002ab9: CALLDATALOAD 00002aba: SWAP4 00002abb: POP 00002abc: POP 00002abd: POP 00002abe: JUMP 00002abf: JUMPDEST 00002ac0: DUP1 00002ac1: CALLDATALOAD 00002ac2: DUP1 00002ac3: ISZERO 00002ac4: ISZERO 00002ac5: DUP2 00002ac6: EQ 00002ac7: PUSH2 0x2acf 00002aca: JUMPI 00002acb: PUSH1 0x00 00002acd: DUP1 00002ace: REVERT 00002acf: JUMPDEST 00002ad0: SWAP2 00002ad1: SWAP1 00002ad2: POP 00002ad3: JUMP 00002ad4: JUMPDEST 00002ad5: PUSH1 0x00 00002ad7: DUP1 00002ad8: PUSH1 0x40 00002ada: DUP4 00002adb: DUP6 00002adc: SUB 00002add: SLT 00002ade: ISZERO 00002adf: PUSH2 0x2ae7 00002ae2: JUMPI 00002ae3: PUSH1 0x00 00002ae5: DUP1 00002ae6: REVERT 00002ae7: JUMPDEST 00002ae8: DUP3 00002ae9: CALLDATALOAD 00002aea: PUSH2 0x2af2 00002aed: DUP2 00002aee: PUSH2 0x2710 00002af1: JUMP 00002af2: JUMPDEST 00002af3: SWAP2 00002af4: POP 00002af5: PUSH2 0x2b00 00002af8: PUSH1 0x20 00002afa: DUP5 00002afb: ADD 00002afc: PUSH2 0x2abf 00002aff: JUMP 00002b00: JUMPDEST 00002b01: SWAP1 00002b02: POP 00002b03: SWAP3 00002b04: POP 00002b05: SWAP3 00002b06: SWAP1 00002b07: POP 00002b08: JUMP 00002b09: JUMPDEST 00002b0a: PUSH1 0x00 00002b0c: DUP1 00002b0d: DUP4 00002b0e: PUSH1 0x1f 00002b10: DUP5 00002b11: ADD 00002b12: SLT 00002b13: PUSH2 0x2b1b 00002b16: JUMPI 00002b17: PUSH1 0x00 00002b19: DUP1 00002b1a: REVERT 00002b1b: JUMPDEST 00002b1c: POP 00002b1d: DUP2 00002b1e: CALLDATALOAD 00002b1f: PUSH8 0xffffffffffffffff 00002b28: DUP2 00002b29: GT 00002b2a: ISZERO 00002b2b: PUSH2 0x2b33 00002b2e: JUMPI 00002b2f: PUSH1 0x00 00002b31: DUP1 00002b32: REVERT 00002b33: JUMPDEST 00002b34: PUSH1 0x20 00002b36: DUP4 00002b37: ADD 00002b38: SWAP2 00002b39: POP 00002b3a: DUP4 00002b3b: PUSH1 0x20 00002b3d: DUP3 00002b3e: PUSH1 0x05 00002b40: SHL 00002b41: DUP6 00002b42: ADD 00002b43: ADD 00002b44: GT 00002b45: ISZERO 00002b46: PUSH2 0x12dc 00002b49: JUMPI 00002b4a: PUSH1 0x00 00002b4c: DUP1 00002b4d: REVERT 00002b4e: JUMPDEST 00002b4f: PUSH1 0x00 00002b51: DUP1 00002b52: PUSH1 0x00 00002b54: DUP1 00002b55: PUSH1 0x40 00002b57: DUP6 00002b58: DUP8 00002b59: SUB 00002b5a: SLT 00002b5b: ISZERO 00002b5c: PUSH2 0x2b64 00002b5f: JUMPI 00002b60: PUSH1 0x00 00002b62: DUP1 00002b63: REVERT 00002b64: JUMPDEST 00002b65: DUP5 00002b66: CALLDATALOAD 00002b67: PUSH8 0xffffffffffffffff 00002b70: DUP1 00002b71: DUP3 00002b72: GT 00002b73: ISZERO 00002b74: PUSH2 0x2b7c 00002b77: JUMPI 00002b78: PUSH1 0x00 00002b7a: DUP1 00002b7b: REVERT 00002b7c: JUMPDEST 00002b7d: PUSH2 0x2b88 00002b80: DUP9 00002b81: DUP4 00002b82: DUP10 00002b83: ADD 00002b84: PUSH2 0x2b09 00002b87: JUMP 00002b88: JUMPDEST 00002b89: SWAP1 00002b8a: SWAP7 00002b8b: POP 00002b8c: SWAP5 00002b8d: POP 00002b8e: PUSH1 0x20 00002b90: DUP8 00002b91: ADD 00002b92: CALLDATALOAD 00002b93: SWAP2 00002b94: POP 00002b95: DUP1 00002b96: DUP3 00002b97: GT 00002b98: ISZERO 00002b99: PUSH2 0x2ba1 00002b9c: JUMPI 00002b9d: PUSH1 0x00 00002b9f: DUP1 00002ba0: REVERT 00002ba1: JUMPDEST 00002ba2: POP 00002ba3: PUSH2 0x2bae 00002ba6: DUP8 00002ba7: DUP3 00002ba8: DUP9 00002ba9: ADD 00002baa: PUSH2 0x2b09 00002bad: JUMP 00002bae: JUMPDEST 00002baf: SWAP6 00002bb0: SWAP9 00002bb1: SWAP5 00002bb2: SWAP8 00002bb3: POP 00002bb4: SWAP6 00002bb5: POP 00002bb6: POP 00002bb7: POP 00002bb8: POP 00002bb9: JUMP 00002bba: JUMPDEST 00002bbb: PUSH1 0x00 00002bbd: PUSH1 0x20 00002bbf: DUP3 00002bc0: DUP5 00002bc1: SUB 00002bc2: SLT 00002bc3: ISZERO 00002bc4: PUSH2 0x2bcc 00002bc7: JUMPI 00002bc8: PUSH1 0x00 00002bca: DUP1 00002bcb: REVERT 00002bcc: JUMPDEST 00002bcd: POP 00002bce: CALLDATALOAD 00002bcf: SWAP2 00002bd0: SWAP1 00002bd1: POP 00002bd2: JUMP 00002bd3: JUMPDEST 00002bd4: PUSH1 0x00 00002bd6: DUP1 00002bd7: PUSH1 0x00 00002bd9: PUSH1 0x60 00002bdb: DUP5 00002bdc: DUP7 00002bdd: SUB 00002bde: SLT 00002bdf: ISZERO 00002be0: PUSH2 0x2be8 00002be3: JUMPI 00002be4: PUSH1 0x00 00002be6: DUP1 00002be7: REVERT 00002be8: JUMPDEST 00002be9: DUP4 00002bea: CALLDATALOAD 00002beb: PUSH2 0x2bf3 00002bee: DUP2 00002bef: PUSH2 0x2710 00002bf2: JUMP 00002bf3: JUMPDEST 00002bf4: SWAP6 00002bf5: PUSH1 0x20 00002bf7: DUP6 00002bf8: ADD 00002bf9: CALLDATALOAD 00002bfa: SWAP6 00002bfb: POP 00002bfc: PUSH1 0x40 00002bfe: SWAP1 00002bff: SWAP5 00002c00: ADD 00002c01: CALLDATALOAD 00002c02: SWAP4 00002c03: SWAP3 00002c04: POP 00002c05: POP 00002c06: POP 00002c07: JUMP 00002c08: JUMPDEST 00002c09: PUSH1 0x01 00002c0b: DUP2 00002c0c: DUP2 00002c0d: SHR 00002c0e: SWAP1 00002c0f: DUP3 00002c10: AND 00002c11: DUP1 00002c12: PUSH2 0x2c1c 00002c15: JUMPI 00002c16: PUSH1 0x7f 00002c18: DUP3 00002c19: AND 00002c1a: SWAP2 00002c1b: POP 00002c1c: JUMPDEST 00002c1d: PUSH1 0x20 00002c1f: DUP3 00002c20: LT 00002c21: DUP2 00002c22: SUB 00002c23: PUSH2 0x2c55 00002c26: JUMPI 00002c27: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00002c48: PUSH1 0x00 00002c4a: MSTORE 00002c4b: PUSH1 0x22 00002c4d: PUSH1 0x04 00002c4f: MSTORE 00002c50: PUSH1 0x24 00002c52: PUSH1 0x00 00002c54: REVERT 00002c55: JUMPDEST 00002c56: POP 00002c57: SWAP2 00002c58: SWAP1 00002c59: POP 00002c5a: JUMP 00002c5b: JUMPDEST 00002c5c: PUSH1 0x00 00002c5e: DUP3 00002c5f: PUSH1 0x1f 00002c61: DUP4 00002c62: ADD 00002c63: SLT 00002c64: PUSH2 0x2c6c 00002c67: JUMPI 00002c68: PUSH1 0x00 00002c6a: DUP1 00002c6b: REVERT 00002c6c: JUMPDEST 00002c6d: DUP2 00002c6e: MLOAD 00002c6f: PUSH2 0x2c7a 00002c72: PUSH2 0x2a59 00002c75: DUP3 00002c76: PUSH2 0x29b1 00002c79: JUMP 00002c7a: JUMPDEST 00002c7b: DUP2 00002c7c: DUP2 00002c7d: MSTORE 00002c7e: DUP5 00002c7f: PUSH1 0x20 00002c81: DUP4 00002c82: DUP7 00002c83: ADD 00002c84: ADD 00002c85: GT 00002c86: ISZERO 00002c87: PUSH2 0x2c8f 00002c8a: JUMPI 00002c8b: PUSH1 0x00 00002c8d: DUP1 00002c8e: REVERT 00002c8f: JUMPDEST 00002c90: PUSH2 0x0f7d 00002c93: DUP3 00002c94: PUSH1 0x20 00002c96: DUP4 00002c97: ADD 00002c98: PUSH1 0x20 00002c9a: DUP8 00002c9b: ADD 00002c9c: PUSH2 0x2869 00002c9f: JUMP 00002ca0: JUMPDEST 00002ca1: PUSH1 0x00 00002ca3: DUP1 00002ca4: PUSH1 0x00 00002ca6: DUP1 00002ca7: PUSH1 0x80 00002ca9: DUP6 00002caa: DUP8 00002cab: SUB 00002cac: SLT 00002cad: ISZERO 00002cae: PUSH2 0x2cb6 00002cb1: JUMPI 00002cb2: PUSH1 0x00 00002cb4: DUP1 00002cb5: REVERT 00002cb6: JUMPDEST 00002cb7: DUP5 00002cb8: MLOAD 00002cb9: PUSH2 0x2cc1 00002cbc: DUP2 00002cbd: PUSH2 0x2710 00002cc0: JUMP 00002cc1: JUMPDEST 00002cc2: DUP1 00002cc3: SWAP5 00002cc4: POP 00002cc5: POP 00002cc6: PUSH1 0x20 00002cc8: DUP6 00002cc9: ADD 00002cca: MLOAD 00002ccb: SWAP3 00002ccc: POP 00002ccd: PUSH1 0x40 00002ccf: DUP6 00002cd0: ADD 00002cd1: MLOAD 00002cd2: SWAP2 00002cd3: POP 00002cd4: PUSH1 0x60 00002cd6: DUP6 00002cd7: ADD 00002cd8: MLOAD 00002cd9: PUSH8 0xffffffffffffffff 00002ce2: DUP2 00002ce3: GT 00002ce4: ISZERO 00002ce5: PUSH2 0x2ced 00002ce8: JUMPI 00002ce9: PUSH1 0x00 00002ceb: DUP1 00002cec: REVERT 00002ced: JUMPDEST 00002cee: PUSH2 0x2cf9 00002cf1: DUP8 00002cf2: DUP3 00002cf3: DUP9 00002cf4: ADD 00002cf5: PUSH2 0x2c5b 00002cf8: JUMP 00002cf9: JUMPDEST 00002cfa: SWAP2 00002cfb: POP 00002cfc: POP 00002cfd: SWAP3 00002cfe: SWAP6 00002cff: SWAP2 00002d00: SWAP5 00002d01: POP 00002d02: SWAP3 00002d03: POP 00002d04: JUMP 00002d05: JUMPDEST 00002d06: PUSH1 0x00 00002d08: PUSH1 0x20 00002d0a: DUP3 00002d0b: DUP5 00002d0c: SUB 00002d0d: SLT 00002d0e: ISZERO 00002d0f: PUSH2 0x2d17 00002d12: JUMPI 00002d13: PUSH1 0x00 00002d15: DUP1 00002d16: REVERT 00002d17: JUMPDEST 00002d18: POP 00002d19: MLOAD 00002d1a: SWAP2 00002d1b: SWAP1 00002d1c: POP 00002d1d: JUMP 00002d1e: JUMPDEST 00002d1f: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00002d40: PUSH1 0x00 00002d42: MSTORE 00002d43: PUSH1 0x32 00002d45: PUSH1 0x04 00002d47: MSTORE 00002d48: PUSH1 0x24 00002d4a: PUSH1 0x00 00002d4c: REVERT 00002d4d: JUMPDEST 00002d4e: PUSH1 0x00 00002d50: PUSH1 0x20 00002d52: DUP3 00002d53: DUP5 00002d54: SUB 00002d55: SLT 00002d56: ISZERO 00002d57: PUSH2 0x2d5f 00002d5a: JUMPI 00002d5b: PUSH1 0x00 00002d5d: DUP1 00002d5e: REVERT 00002d5f: JUMPDEST 00002d60: PUSH2 0x0990 00002d63: DUP3 00002d64: PUSH2 0x2abf 00002d67: JUMP 00002d68: JUMPDEST 00002d69: PUSH32 0x4e487b7100000000000000000000000000000000000000000000000000000000 00002d8a: PUSH1 0x00 00002d8c: MSTORE 00002d8d: PUSH1 0x11 00002d8f: PUSH1 0x04 00002d91: MSTORE 00002d92: PUSH1 0x24 00002d94: PUSH1 0x00 00002d96: REVERT 00002d97: JUMPDEST 00002d98: PUSH1 0x00 00002d9a: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 00002dbb: DUP3 00002dbc: SUB 00002dbd: PUSH2 0x2dc8 00002dc0: JUMPI 00002dc1: PUSH2 0x2dc8 00002dc4: PUSH2 0x2d68 00002dc7: JUMP 00002dc8: JUMPDEST 00002dc9: POP 00002dca: PUSH1 0x01 00002dcc: ADD 00002dcd: SWAP1 00002dce: JUMP 00002dcf: JUMPDEST 00002dd0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002de5: DUP2 00002de6: MLOAD 00002de7: AND 00002de8: DUP3 00002de9: MSTORE 00002dea: PUSH1 0x20 00002dec: DUP2 00002ded: ADD 00002dee: MLOAD 00002def: PUSH1 0x20 00002df1: DUP4 00002df2: ADD 00002df3: MSTORE 00002df4: PUSH1 0x00 00002df6: PUSH1 0x40 00002df8: DUP3 00002df9: ADD 00002dfa: MLOAD 00002dfb: PUSH1 0x60 00002dfd: PUSH1 0x40 00002dff: DUP6 00002e00: ADD 00002e01: MSTORE 00002e02: PUSH2 0x0f7d 00002e05: PUSH1 0x60 00002e07: DUP6 00002e08: ADD 00002e09: DUP3 00002e0a: PUSH2 0x2895 00002e0d: JUMP 00002e0e: JUMPDEST 00002e0f: PUSH1 0x20 00002e11: DUP2 00002e12: MSTORE 00002e13: PUSH1 0x00 00002e15: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002e2a: DUP1 00002e2b: DUP5 00002e2c: MLOAD 00002e2d: AND 00002e2e: PUSH1 0x20 00002e30: DUP5 00002e31: ADD 00002e32: MSTORE 00002e33: DUP1 00002e34: PUSH1 0x20 00002e36: DUP6 00002e37: ADD 00002e38: MLOAD 00002e39: AND 00002e3a: PUSH1 0x40 00002e3c: DUP5 00002e3d: ADD 00002e3e: MSTORE 00002e3f: POP 00002e40: PUSH1 0x40 00002e42: DUP4 00002e43: ADD 00002e44: MLOAD 00002e45: PUSH1 0x60 00002e47: DUP1 00002e48: DUP5 00002e49: ADD 00002e4a: MSTORE 00002e4b: PUSH2 0x0f7d 00002e4e: PUSH1 0x80 00002e50: DUP5 00002e51: ADD 00002e52: DUP3 00002e53: PUSH2 0x2dcf 00002e56: JUMP 00002e57: JUMPDEST 00002e58: PUSH1 0x00 00002e5a: PUSH1 0x60 00002e5c: DUP3 00002e5d: DUP5 00002e5e: SUB 00002e5f: SLT 00002e60: ISZERO 00002e61: PUSH2 0x2e69 00002e64: JUMPI 00002e65: PUSH1 0x00 00002e67: DUP1 00002e68: REVERT 00002e69: JUMPDEST 00002e6a: PUSH1 0x40 00002e6c: MLOAD 00002e6d: PUSH1 0x60 00002e6f: DUP2 00002e70: ADD 00002e71: PUSH8 0xffffffffffffffff 00002e7a: DUP3 00002e7b: DUP3 00002e7c: LT 00002e7d: DUP2 00002e7e: DUP4 00002e7f: GT 00002e80: OR 00002e81: ISZERO 00002e82: PUSH2 0x2e8d 00002e85: JUMPI 00002e86: PUSH2 0x2e8d 00002e89: PUSH2 0x2933 00002e8c: JUMP 00002e8d: JUMPDEST 00002e8e: DUP2 00002e8f: PUSH1 0x40 00002e91: MSTORE 00002e92: DUP3 00002e93: SWAP4 00002e94: POP 00002e95: DUP5 00002e96: MLOAD 00002e97: SWAP2 00002e98: POP 00002e99: PUSH2 0x2ea1 00002e9c: DUP3 00002e9d: PUSH2 0x2710 00002ea0: JUMP 00002ea1: JUMPDEST 00002ea2: DUP2 00002ea3: DUP4 00002ea4: MSTORE 00002ea5: PUSH1 0x20 00002ea7: DUP6 00002ea8: ADD 00002ea9: MLOAD 00002eaa: PUSH1 0x20 00002eac: DUP5 00002ead: ADD 00002eae: MSTORE 00002eaf: PUSH1 0x40 00002eb1: DUP6 00002eb2: ADD 00002eb3: MLOAD 00002eb4: SWAP2 00002eb5: POP 00002eb6: DUP1 00002eb7: DUP3 00002eb8: GT 00002eb9: ISZERO 00002eba: PUSH2 0x2ec2 00002ebd: JUMPI 00002ebe: PUSH1 0x00 00002ec0: DUP1 00002ec1: REVERT 00002ec2: JUMPDEST 00002ec3: POP 00002ec4: PUSH2 0x2ecf 00002ec7: DUP6 00002ec8: DUP3 00002ec9: DUP7 00002eca: ADD 00002ecb: PUSH2 0x2c5b 00002ece: JUMP 00002ecf: JUMPDEST 00002ed0: PUSH1 0x40 00002ed2: DUP4 00002ed3: ADD 00002ed4: MSTORE 00002ed5: POP 00002ed6: POP 00002ed7: SWAP3 00002ed8: SWAP2 00002ed9: POP 00002eda: POP 00002edb: JUMP 00002edc: JUMPDEST 00002edd: PUSH1 0x00 00002edf: DUP1 00002ee0: PUSH1 0x40 00002ee2: DUP4 00002ee3: DUP6 00002ee4: SUB 00002ee5: SLT 00002ee6: ISZERO 00002ee7: PUSH2 0x2eef 00002eea: JUMPI 00002eeb: PUSH1 0x00 00002eed: DUP1 00002eee: REVERT 00002eef: JUMPDEST 00002ef0: DUP3 00002ef1: MLOAD 00002ef2: PUSH8 0xffffffffffffffff 00002efb: DUP1 00002efc: DUP3 00002efd: GT 00002efe: ISZERO 00002eff: PUSH2 0x2f07 00002f02: JUMPI 00002f03: PUSH1 0x00 00002f05: DUP1 00002f06: REVERT 00002f07: JUMPDEST 00002f08: PUSH2 0x2f13 00002f0b: DUP7 00002f0c: DUP4 00002f0d: DUP8 00002f0e: ADD 00002f0f: PUSH2 0x2e57 00002f12: JUMP 00002f13: JUMPDEST 00002f14: SWAP4 00002f15: POP 00002f16: PUSH1 0x20 00002f18: DUP6 00002f19: ADD 00002f1a: MLOAD 00002f1b: SWAP2 00002f1c: POP 00002f1d: DUP1 00002f1e: DUP3 00002f1f: GT 00002f20: ISZERO 00002f21: PUSH2 0x2f29 00002f24: JUMPI 00002f25: PUSH1 0x00 00002f27: DUP1 00002f28: REVERT 00002f29: JUMPDEST 00002f2a: POP 00002f2b: PUSH2 0x2f36 00002f2e: DUP6 00002f2f: DUP3 00002f30: DUP7 00002f31: ADD 00002f32: PUSH2 0x2c5b 00002f35: JUMP 00002f36: JUMPDEST 00002f37: SWAP2 00002f38: POP 00002f39: POP 00002f3a: SWAP3 00002f3b: POP 00002f3c: SWAP3 00002f3d: SWAP1 00002f3e: POP 00002f3f: JUMP 00002f40: JUMPDEST 00002f41: PUSH1 0x20 00002f43: DUP2 00002f44: MSTORE 00002f45: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002f5a: DUP3 00002f5b: MLOAD 00002f5c: AND 00002f5d: PUSH1 0x20 00002f5f: DUP3 00002f60: ADD 00002f61: MSTORE 00002f62: PUSH1 0x00 00002f64: PUSH1 0x20 00002f66: DUP4 00002f67: ADD 00002f68: MLOAD 00002f69: PUSH1 0x80 00002f6b: PUSH1 0x40 00002f6d: DUP5 00002f6e: ADD 00002f6f: MSTORE 00002f70: PUSH2 0x2f7c 00002f73: PUSH1 0xa0 00002f75: DUP5 00002f76: ADD 00002f77: DUP3 00002f78: PUSH2 0x2895 00002f7b: JUMP 00002f7c: JUMPDEST 00002f7d: SWAP1 00002f7e: POP 00002f7f: PUSH1 0x40 00002f81: DUP5 00002f82: ADD 00002f83: MLOAD 00002f84: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00002fa5: DUP1 00002fa6: DUP6 00002fa7: DUP5 00002fa8: SUB 00002fa9: ADD 00002faa: PUSH1 0x60 00002fac: DUP7 00002fad: ADD 00002fae: MSTORE 00002faf: PUSH2 0x2fb8 00002fb2: DUP4 00002fb3: DUP4 00002fb4: PUSH2 0x2895 00002fb7: JUMP 00002fb8: JUMPDEST 00002fb9: SWAP3 00002fba: POP 00002fbb: PUSH1 0x60 00002fbd: DUP7 00002fbe: ADD 00002fbf: MLOAD 00002fc0: SWAP2 00002fc1: POP 00002fc2: DUP1 00002fc3: DUP6 00002fc4: DUP5 00002fc5: SUB 00002fc6: ADD 00002fc7: PUSH1 0x80 00002fc9: DUP7 00002fca: ADD 00002fcb: MSTORE 00002fcc: POP 00002fcd: PUSH2 0x2fd6 00002fd0: DUP3 00002fd1: DUP3 00002fd2: PUSH2 0x2dcf 00002fd5: JUMP 00002fd6: JUMPDEST 00002fd7: SWAP6 00002fd8: SWAP5 00002fd9: POP 00002fda: POP 00002fdb: POP 00002fdc: POP 00002fdd: POP 00002fde: JUMP 00002fdf: JUMPDEST 00002fe0: PUSH1 0x00 00002fe2: PUSH1 0x20 00002fe4: DUP3 00002fe5: DUP5 00002fe6: SUB 00002fe7: SLT 00002fe8: ISZERO 00002fe9: PUSH2 0x2ff1 00002fec: JUMPI 00002fed: PUSH1 0x00 00002fef: DUP1 00002ff0: REVERT 00002ff1: JUMPDEST 00002ff2: DUP2 00002ff3: MLOAD 00002ff4: PUSH8 0xffffffffffffffff 00002ffd: DUP2 00002ffe: GT 00002fff: ISZERO 00003000: PUSH2 0x3008 00003003: JUMPI 00003004: PUSH1 0x00 00003006: DUP1 00003007: REVERT 00003008: JUMPDEST 00003009: PUSH2 0x0f7d 0000300c: DUP5 0000300d: DUP3 0000300e: DUP6 0000300f: ADD 00003010: PUSH2 0x2e57 00003013: JUMP 00003014: JUMPDEST 00003015: PUSH1 0x00 00003017: DUP3 00003018: DUP3 00003019: LT 0000301a: ISZERO 0000301b: PUSH2 0x3026 0000301e: JUMPI 0000301f: PUSH2 0x3026 00003022: PUSH2 0x2d68 00003025: JUMP 00003026: JUMPDEST 00003027: POP 00003028: SUB 00003029: SWAP1 0000302a: JUMP 0000302b: JUMPDEST 0000302c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003041: DUP6 00003042: AND 00003043: DUP2 00003044: MSTORE 00003045: DUP4 00003046: PUSH1 0x20 00003048: DUP3 00003049: ADD 0000304a: MSTORE 0000304b: DUP3 0000304c: PUSH1 0x40 0000304e: DUP3 0000304f: ADD 00003050: MSTORE 00003051: PUSH1 0x80 00003053: PUSH1 0x60 00003055: DUP3 00003056: ADD 00003057: MSTORE 00003058: PUSH1 0x00 0000305a: PUSH2 0x3066 0000305d: PUSH1 0x80 0000305f: DUP4 00003060: ADD 00003061: DUP5 00003062: PUSH2 0x2895 00003065: JUMP 00003066: JUMPDEST 00003067: SWAP7 00003068: SWAP6 00003069: POP 0000306a: POP 0000306b: POP 0000306c: POP 0000306d: POP 0000306e: POP 0000306f: JUMP 00003070: JUMPDEST 00003071: DUP4 00003072: DUP2 00003073: MSTORE 00003074: PUSH1 0x60 00003076: PUSH1 0x20 00003078: DUP3 00003079: ADD 0000307a: MSTORE 0000307b: PUSH1 0x00 0000307d: PUSH2 0x3089 00003080: PUSH1 0x60 00003082: DUP4 00003083: ADD 00003084: DUP6 00003085: PUSH2 0x2895 00003088: JUMP 00003089: JUMPDEST 0000308a: DUP3 0000308b: DUP2 0000308c: SUB 0000308d: PUSH1 0x40 0000308f: DUP5 00003090: ADD 00003091: MSTORE 00003092: PUSH2 0x3066 00003095: DUP2 00003096: DUP6 00003097: PUSH2 0x2895 0000309a: JUMP 0000309b: JUMPDEST 0000309c: PUSH1 0x20 0000309e: DUP2 0000309f: MSTORE 000030a0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000030b5: DUP3 000030b6: MLOAD 000030b7: AND 000030b8: PUSH1 0x20 000030ba: DUP3 000030bb: ADD 000030bc: MSTORE 000030bd: PUSH1 0x00 000030bf: PUSH1 0x20 000030c1: DUP4 000030c2: ADD 000030c3: MLOAD 000030c4: PUSH1 0x60 000030c6: PUSH1 0x40 000030c8: DUP5 000030c9: ADD 000030ca: MSTORE 000030cb: PUSH2 0x30d7 000030ce: PUSH1 0x80 000030d0: DUP5 000030d1: ADD 000030d2: DUP3 000030d3: PUSH2 0x2895 000030d6: JUMP 000030d7: JUMPDEST 000030d8: SWAP1 000030d9: POP 000030da: PUSH1 0x40 000030dc: DUP5 000030dd: ADD 000030de: MLOAD 000030df: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 00003100: DUP5 00003101: DUP4 00003102: SUB 00003103: ADD 00003104: PUSH1 0x60 00003106: DUP6 00003107: ADD 00003108: MSTORE 00003109: PUSH2 0x2fd6 0000310c: DUP3 0000310d: DUP3 0000310e: PUSH2 0x2dcf 00003111: JUMP 00003112: JUMPDEST 00003113: PUSH1 0x00 00003115: DUP1 00003116: PUSH1 0x40 00003118: DUP4 00003119: DUP6 0000311a: SUB 0000311b: SLT 0000311c: ISZERO 0000311d: PUSH2 0x3125 00003120: JUMPI 00003121: PUSH1 0x00 00003123: DUP1 00003124: REVERT 00003125: JUMPDEST 00003126: DUP3 00003127: MLOAD 00003128: PUSH8 0xffffffffffffffff 00003131: DUP1 00003132: DUP3 00003133: GT 00003134: ISZERO 00003135: PUSH2 0x313d 00003138: JUMPI 00003139: PUSH1 0x00 0000313b: DUP1 0000313c: REVERT 0000313d: JUMPDEST 0000313e: PUSH2 0x3149 00003141: DUP7 00003142: DUP4 00003143: DUP8 00003144: ADD 00003145: PUSH2 0x2c5b 00003148: JUMP 00003149: JUMPDEST 0000314a: SWAP4 0000314b: POP 0000314c: PUSH1 0x20 0000314e: DUP6 0000314f: ADD 00003150: MLOAD 00003151: SWAP2 00003152: POP 00003153: DUP1 00003154: DUP3 00003155: GT 00003156: ISZERO 00003157: PUSH2 0x315f 0000315a: JUMPI 0000315b: PUSH1 0x00 0000315d: DUP1 0000315e: REVERT 0000315f: JUMPDEST 00003160: POP 00003161: PUSH2 0x2f36 00003164: DUP6 00003165: DUP3 00003166: DUP7 00003167: ADD 00003168: PUSH2 0x2e57 0000316b: JUMP 0000316c: JUMPDEST 0000316d: PUSH1 0x20 0000316f: DUP2 00003170: MSTORE 00003171: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003186: DUP3 00003187: MLOAD 00003188: AND 00003189: PUSH1 0x20 0000318b: DUP3 0000318c: ADD 0000318d: MSTORE 0000318e: PUSH1 0x20 00003190: DUP3 00003191: ADD 00003192: MLOAD 00003193: PUSH1 0x40 00003195: DUP3 00003196: ADD 00003197: MSTORE 00003198: PUSH1 0x00 0000319a: PUSH1 0x40 0000319c: DUP4 0000319d: ADD 0000319e: MLOAD 0000319f: PUSH1 0xa0 000031a1: PUSH1 0x60 000031a3: DUP5 000031a4: ADD 000031a5: MSTORE 000031a6: PUSH2 0x31b2 000031a9: PUSH1 0xc0 000031ab: DUP5 000031ac: ADD 000031ad: DUP3 000031ae: PUSH2 0x2895 000031b1: JUMP 000031b2: JUMPDEST 000031b3: SWAP1 000031b4: POP 000031b5: PUSH1 0x60 000031b7: DUP5 000031b8: ADD 000031b9: MLOAD 000031ba: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 000031db: DUP1 000031dc: DUP6 000031dd: DUP5 000031de: SUB 000031df: ADD 000031e0: PUSH1 0x80 000031e2: DUP7 000031e3: ADD 000031e4: MSTORE 000031e5: PUSH2 0x31ee 000031e8: DUP4 000031e9: DUP4 000031ea: PUSH2 0x2895 000031ed: JUMP 000031ee: JUMPDEST 000031ef: SWAP3 000031f0: POP 000031f1: PUSH1 0x80 000031f3: DUP7 000031f4: ADD 000031f5: MLOAD 000031f6: SWAP2 000031f7: POP 000031f8: DUP1 000031f9: DUP6 000031fa: DUP5 000031fb: SUB 000031fc: ADD 000031fd: PUSH1 0xa0 000031ff: DUP7 00003200: ADD 00003201: MSTORE 00003202: POP 00003203: PUSH2 0x2fd6 00003206: DUP3 00003207: DUP3 00003208: PUSH2 0x2dcf 0000320b: JUMP 0000320c: JUMPDEST 0000320d: PUSH1 0x00 0000320f: PUSH1 0x20 00003211: DUP3 00003212: DUP5 00003213: SUB 00003214: SLT 00003215: ISZERO 00003216: PUSH2 0x321e 00003219: JUMPI 0000321a: PUSH1 0x00 0000321c: DUP1 0000321d: REVERT 0000321e: JUMPDEST 0000321f: DUP2 00003220: MLOAD 00003221: PUSH8 0xffffffffffffffff 0000322a: DUP1 0000322b: DUP3 0000322c: GT 0000322d: ISZERO 0000322e: PUSH2 0x3236 00003231: JUMPI 00003232: PUSH1 0x00 00003234: DUP1 00003235: REVERT 00003236: JUMPDEST 00003237: SWAP1 00003238: DUP4 00003239: ADD 0000323a: SWAP1 0000323b: PUSH1 0x40 0000323d: DUP3 0000323e: DUP7 0000323f: SUB 00003240: SLT 00003241: ISZERO 00003242: PUSH2 0x324a 00003245: JUMPI 00003246: PUSH1 0x00 00003248: DUP1 00003249: REVERT 0000324a: JUMPDEST 0000324b: PUSH1 0x40 0000324d: MLOAD 0000324e: PUSH1 0x40 00003250: DUP2 00003251: ADD 00003252: DUP2 00003253: DUP2 00003254: LT 00003255: DUP4 00003256: DUP3 00003257: GT 00003258: OR 00003259: ISZERO 0000325a: PUSH2 0x3265 0000325d: JUMPI 0000325e: PUSH2 0x3265 00003261: PUSH2 0x2933 00003264: JUMP 00003265: JUMPDEST 00003266: PUSH1 0x40 00003268: MSTORE 00003269: DUP3 0000326a: MLOAD 0000326b: DUP3 0000326c: DUP2 0000326d: GT 0000326e: ISZERO 0000326f: PUSH2 0x3277 00003272: JUMPI 00003273: PUSH1 0x00 00003275: DUP1 00003276: REVERT 00003277: JUMPDEST 00003278: PUSH2 0x3283 0000327b: DUP8 0000327c: DUP3 0000327d: DUP7 0000327e: ADD 0000327f: PUSH2 0x2c5b 00003282: JUMP 00003283: JUMPDEST 00003284: DUP3 00003285: MSTORE 00003286: POP 00003287: PUSH1 0x20 00003289: DUP4 0000328a: ADD 0000328b: MLOAD 0000328c: DUP3 0000328d: DUP2 0000328e: GT 0000328f: ISZERO 00003290: PUSH2 0x3298 00003293: JUMPI 00003294: PUSH1 0x00 00003296: DUP1 00003297: REVERT 00003298: JUMPDEST 00003299: PUSH2 0x32a4 0000329c: DUP8 0000329d: DUP3 0000329e: DUP7 0000329f: ADD 000032a0: PUSH2 0x2c5b 000032a3: JUMP 000032a4: JUMPDEST 000032a5: PUSH1 0x20 000032a7: DUP4 000032a8: ADD 000032a9: MSTORE 000032aa: POP 000032ab: SWAP6 000032ac: SWAP5 000032ad: POP 000032ae: POP 000032af: POP 000032b0: POP 000032b1: POP 000032b2: JUMP 000032b3: JUMPDEST 000032b4: PUSH1 0x00 000032b6: DUP2 000032b7: MLOAD 000032b8: PUSH1 0x40 000032ba: DUP5 000032bb: MSTORE 000032bc: PUSH2 0x32c8 000032bf: PUSH1 0x40 000032c1: DUP6 000032c2: ADD 000032c3: DUP3 000032c4: PUSH2 0x2895 000032c7: JUMP 000032c8: JUMPDEST 000032c9: SWAP1 000032ca: POP 000032cb: PUSH1 0x20 000032cd: DUP4 000032ce: ADD 000032cf: MLOAD 000032d0: DUP5 000032d1: DUP3 000032d2: SUB 000032d3: PUSH1 0x20 000032d5: DUP7 000032d6: ADD 000032d7: MSTORE 000032d8: PUSH2 0x2fd6 000032db: DUP3 000032dc: DUP3 000032dd: PUSH2 0x2895 000032e0: JUMP 000032e1: JUMPDEST 000032e2: PUSH1 0x20 000032e4: DUP2 000032e5: MSTORE 000032e6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000032fb: DUP3 000032fc: MLOAD 000032fd: AND 000032fe: PUSH1 0x20 00003300: DUP3 00003301: ADD 00003302: MSTORE 00003303: PUSH1 0x00 00003305: PUSH1 0x20 00003307: DUP4 00003308: ADD 00003309: MLOAD 0000330a: PUSH1 0x40 0000330c: DUP1 0000330d: DUP5 0000330e: ADD 0000330f: MSTORE 00003310: PUSH2 0x0f7d 00003313: PUSH1 0x60 00003315: DUP5 00003316: ADD 00003317: DUP3 00003318: PUSH2 0x32b3 0000331b: JUMP 0000331c: JUMPDEST 0000331d: PUSH1 0x20 0000331f: DUP2 00003320: MSTORE 00003321: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003336: DUP3 00003337: MLOAD 00003338: AND 00003339: PUSH1 0x20 0000333b: DUP3 0000333c: ADD 0000333d: MSTORE 0000333e: PUSH1 0x20 00003340: DUP3 00003341: ADD 00003342: MLOAD 00003343: PUSH1 0x40 00003345: DUP3 00003346: ADD 00003347: MSTORE 00003348: PUSH1 0x00 0000334a: PUSH1 0x40 0000334c: DUP4 0000334d: ADD 0000334e: MLOAD 0000334f: PUSH1 0x80 00003351: PUSH1 0x60 00003353: DUP5 00003354: ADD 00003355: MSTORE 00003356: PUSH2 0x3362 00003359: PUSH1 0xa0 0000335b: DUP5 0000335c: ADD 0000335d: DUP3 0000335e: PUSH2 0x2895 00003361: JUMP 00003362: JUMPDEST 00003363: SWAP1 00003364: POP 00003365: PUSH1 0x60 00003367: DUP5 00003368: ADD 00003369: MLOAD 0000336a: PUSH32 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0 0000338b: DUP5 0000338c: DUP4 0000338d: SUB 0000338e: ADD 0000338f: PUSH1 0x80 00003391: DUP6 00003392: ADD 00003393: MSTORE 00003394: PUSH2 0x2fd6 00003397: DUP3 00003398: DUP3 00003399: PUSH2 0x32b3 0000339c: JUMP 0000339d: INVALID 0000339e: LOG2 0000339f: PUSH5 0x6970667358 000033a5: UNKNOWN(0x22) 000033a6: SLT 000033a7: KECCAK256 000033a8: UNKNOWN(0xD4) 000033a9: PUSH23 0x5e8fbe9ff641c199371baccda9b9e7544706c993378e5d 000033c1: PUSH0 000033c2: UNKNOWN(0xBB) 000033c3: PUSH21
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | other | detector | Untrusted CALL target/value reachable | 60 | no | no |
viewtrace_id: 0x8b35d1d4dfdafa573680ead3fa837894d6f230e2818c938da4695778857c08ff
call_targets:
0xdff78a949e47c1e90f3dd6dd7fe2fa72b42a75f7
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x8b35d1d4dfdafa573680ead3fa837894d6f230e2818c938da4695778857c08ff",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xdff78a949e47c1e90f3dd6dd7fe2fa72b42a75f7"
],
"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": "0xf290aafa",
"selector": "0xf290aafa",
"calldata_variants": [
"0xf290aafa",
"0xf290aafa0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfc0c546a",
"selector": "0xfc0c546a",
"calldata_variants": [
"0xfc0c546a",
"0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfc3a7b98",
"selector": "0xfc3a7b98",
"calldata_variants": [
"0xfc3a7b98",
"0xfc3a7b980000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe272ad3f",
"selector": "0xe272ad3f",
"calldata_variants": [
"0xe272ad3f",
"0xe272ad3f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe9ee1eaf",
"selector": "0xe9ee1eaf",
"calldata_variants": [
"0xe9ee1eaf",
"0xe9ee1eaf0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9dc7b023",
"selector": "0x9dc7b023",
"calldata_variants": [
"0x9dc7b023",
"0x9dc7b0230000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xaad48d80",
"selector": "0xaad48d80",
"calldata_variants": [
"0xaad48d80",
"0xaad48d800000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd547741f",
"selector": "0xd547741f",
"calldata_variants": [
"0xd547741f",
"0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 4735,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5164,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5601,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 11,
"guards_detected": [],
"untrusted_call_count": 11
}
|
| high | other | detector | ETH value transfer possible | 55 | no | no |
viewtrace_id: 0x8b35d1d4dfdafa573680ead3fa837894d6f230e2818c938da4695778857c08ff
call_targets:
0xdff78a949e47c1e90f3dd6dd7fe2fa72b42a75f7
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x8b35d1d4dfdafa573680ead3fa837894d6f230e2818c938da4695778857c08ff",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xdff78a949e47c1e90f3dd6dd7fe2fa72b42a75f7"
],
"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": "0xf290aafa",
"selector": "0xf290aafa",
"calldata_variants": [
"0xf290aafa",
"0xf290aafa0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfc0c546a",
"selector": "0xfc0c546a",
"calldata_variants": [
"0xfc0c546a",
"0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfc3a7b98",
"selector": "0xfc3a7b98",
"calldata_variants": [
"0xfc3a7b98",
"0xfc3a7b980000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe272ad3f",
"selector": "0xe272ad3f",
"calldata_variants": [
"0xe272ad3f",
"0xe272ad3f0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xe9ee1eaf",
"selector": "0xe9ee1eaf",
"calldata_variants": [
"0xe9ee1eaf",
"0xe9ee1eaf0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0x9dc7b023",
"selector": "0x9dc7b023",
"calldata_variants": [
"0x9dc7b023",
"0x9dc7b0230000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xaad48d80",
"selector": "0xaad48d80",
"calldata_variants": [
"0xaad48d80",
"0xaad48d800000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xd547741f",
"selector": "0xd547741f",
"calldata_variants": [
"0xd547741f",
"0xd547741f0000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 4735,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5164,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5601,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 11,
"guards_detected": []
}
|
| medium | math | codex | Pending share accounting uses pendingUnderlying instead of consumedUnderlying, locking pending funds | 75 | no | — |
viewevidence_json{
"evidence": "In `dstPostHookCall`, the comment indicates consumedU, but the calculation uses `pendingUnderlying`, and the resulting `pendingShares` are cached and emitted as pending.",
"locations": [
"contracts/contracts/hooks/Controller_YieldLimitExecHook.sol:175"
],
"recommendation": "Compute shares based on `consumedUnderlying` (not `pendingUnderlying`) and derive `pendingShares` from the remaining shares. For example: `consumedShares = totalShares * consumedUnderlying / depositUnderlying; pendingShares = totalShares - consumedShares;` then cache/emit using those corrected values.",
"exploit_scenario": "When a transfer exceeds the receive limit, `pendingUnderlying > 0` and the hook mints shares to itself then transfers the consumed portion to the receiver. However, `dstPostHookCall` computes `consumedShares` using `pendingUnderlying`, so `pendingShares` ends up representing the consumed portion. The cache then tracks more pending shares than the hook actually holds. A subsequent `retry()` attempts to transfer these inflated pending shares, underflows the hook\u2019s share balance, and reverts, leaving the pending funds stuck unless an admin rescues them."
}
|
| low | other | codex | Unchecked ERC20 transfers when returning funds from strategy can desync accounting | 65 | no | — |
viewevidence_json{
"evidence": "Both `_withdrawFromStrategy` and `_withdrawAllFromStrategy` use raw `transfer` without checking the return value.",
"locations": [
"contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:223",
"contracts/contracts/hooks/Vault_YieldLimitExecHook.sol:235"
],
"recommendation": "Use `SafeTransferLib.safeTransfer` (or check the return value) for transfers back to the vault to ensure failures revert and accounting stays consistent.",
"exploit_scenario": "If the underlying token is non-standard and returns `false` instead of reverting, `_withdrawFromStrategy` and `_withdrawAllFromStrategy` will still update `totalIdle`/`totalDebt` and emit events even though the transfer to the vault failed. This can leave the vault underfunded and cause later withdrawals/bridges to revert or funds to become stuck in the hook contract."
}
|
| low | auth | codex | Permit signatures depend on mutable conversion rate, enabling front‑run invalidation | 65 | no | — |
viewevidence_json{
"evidence": "The signature hash and allowance both use `convertToShares(value)` which depends on mutable `totalUnderlyingAssets`.",
"locations": [
"contracts/contracts/token/yield-token/YieldTokenBase.sol:159"
],
"recommendation": "Make the signed value deterministic: accept a `valueShares` parameter for permit, or include a stable conversion rate snapshot in the signed data, or store allowances in asset units instead of shares.",
"exploit_scenario": "`permit()` hashes `convertToShares(value)` at execution time. Any change in `totalUnderlyingAssets` between signing and submission (e.g., another bridge or yield sync) changes the conversion rate and invalidates the signature. An attacker can front\u2011run a permit submission by causing a small rate change, forcing `InvalidSigner` and blocking gasless approvals."
}
|
| info | other | cast | Heavy CALL-family usage | 55 | no | — |
viewevidence_json{
"notes": "large number of CALL/CALLCODE/STATICCALL opcodes; review external call patterns",
"call_family_count": 14
}
|