b00078b8-5707-459e-bc53-8181625ba80b
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 |
|---|---|---|---|---|
| 31456 | report.consolidate | complete | 1 / 1 | 3 months ago |
| 77362 | artifact.fetch | complete | 1 / 3 | 1 week ago |
| 77363 | tool.cast_disasm | complete | 1 / 3 | 1 week ago |
| 77364 | analysis.bundle | complete | 1 / 3 | 1 week ago |
| 77365 | capability.graph | complete | 1 / 3 | 1 week ago |
| 77366 | detector.run | complete | 1 / 3 | 1 week ago |
| 77367 | validation.fork | complete | 1 / 3 | 1 week ago |
No slither job recorded yet.
[codex:491748] OpenAI Codex v0.77.0 (research preview)
[codex:491748] --------
[codex:491748] workdir: /tmp/codex-multi-abm_av9r
[codex:491748] model: gpt-5.2-codex
[codex:491748] provider: openai
[codex:491748] approval: never
[codex:491748] sandbox: read-only
[codex:491748] reasoning effort: xhigh
[codex:491748] reasoning summaries: auto
[codex:491748] session id: 019b85b2-0440-76d0-b0f1-b84a47a97ecc
[codex:491748] --------
[codex:491748] user
[codex:491748] You are a profit-focused exploit hunter. Your ONLY goal is finding ways to extract value (ETH, tokens, NFTs) from this contract.
[codex:491748]
[codex:491748] Read `AUDIT_BUNDLE.txt` completely before concluding. Treat `lib/` and `@openzeppelin/` as trusted unless misused.
[codex:491748]
[codex:491748] ONLY REPORT if you find a CONCRETE, EXPLOITABLE path to profit. We do NOT care about:
[codex:491748] - Gas inefficiency, code quality, naming, or best practices
[codex:491748] - Theoretical vulnerabilities without a clear extraction path
[codex:491748] - Centralization risks (admin can rug) - assume admin keys are secure
[codex:491748] - Front-running unless it enables theft beyond MEV
[codex:491748] - DoS, griefing, or issues that don't result in attacker profit
[codex:491748] - Missing events, view function issues, or informational findings
[codex:491748]
[codex:491748] HIGH-VALUE PATTERNS TO HUNT:
[codex:491748] - Reentrancy: external calls before state updates that allow double-withdrawal
[codex:491748] - Access control: missing/bypassable auth on withdraw, transfer, or mint functions
[codex:491748] - Flash loan attacks: borrow -> manipulate -> profit in single tx
[codex:491748] - Price oracle manipulation: TWAP with short window, spot price reads, stale prices
[codex:491748] - Signature replay: missing nonce, chainId, or deadline in permit/meta-tx
[codex:491748] - Proxy hijacking: unprotected initialize(), storage collision, UUPS without auth
[codex:491748] - Accounting errors: rounding that favors attacker, share inflation, first depositor attacks
[codex:491748] - Unchecked external calls: return value ignored on token transfers enabling fake tokens
[codex:491748] - Cross-function reentrancy: state read in function A, modified via reentrant call, used stale in A
[codex:491748]
[codex:491748] For each finding, you MUST provide:
[codex:491748] 1. Exact file and line numbers of vulnerable code
[codex:491748] 2. Step-by-step exploit transaction sequence
[codex:491748] 3. Estimated profit potential (order of magnitude: contract balance, LP reserves, etc.)
[codex:491748]
[codex:491748] If no concrete profit path exists: set no_findings=true. Do NOT pad with low-severity noise.
[codex:491748]
[codex:491748] Output MUST be valid JSON matching the provided schema.
[codex:491748] - severity: info, low, medium, high, critical (use high/critical ONLY for clear extraction paths)
[codex:491748] - category: access_control, reentrancy, math, oracle, upgradeability, auth, other
[codex:491748] mcp startup: no servers
[codex:491748]
[codex:491748] thinking
[codex:491748] **Preparing to read AUDIT_BUNDLE.txt**
[codex:491748] exec
[codex:491748] /bin/bash -lc ls in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] AUDIT_BUNDLE.txt
[codex:491748] codex-output-schema.json
[codex:491748] contracts
[codex:491748]
[codex:491748] thinking
[codex:491748] **Reading AUDIT_BUNDLE.txt**
[codex:491748] exec
[codex:491748] /bin/bash -lc 'cat AUDIT_BUNDLE.txt' in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748] This file concatenates first-party Solidity sources only (lib/@openzeppelin excluded).
[codex:491748]
[codex:491748] ================================================================================
[codex:491748] FILE: contracts/aragon/interfaces/IERC900History.sol
[codex:491748] ================================================================================
[codex:491748] // SPDX-License-Identifier: GPL-3.0-or-later
[codex:491748]
[codex:491748] pragma solidity ^0.7.0;
[codex:491748]
[codex:491748]
[codex:491748] // Minimum interface to interact with Aragon's Aggregator
[codex:491748] interface IERC900History {
[codex:491748] function totalStakedForAt(address addr, uint256 blockNumber) external view returns (uint256);
[codex:491748] function totalStakedAt(uint256 blockNumber) external view returns (uint256);
[codex:491748] function supportsHistory() external pure returns (bool);
[codex:491748] }
[codex:491748]
[codex:491748] ================================================================================
[codex:491748] FILE: contracts/contracts/Adjudicator.sol
[codex:491748] ================================================================================
[codex:491748]
[codex:491748] thinking
[codex:491748] **Searching for vulnerable contract functions**
[codex:491748] exec
[codex:491748] /bin/bash -lc 'rg -n "withdraw|claim|redeem|slash|mint|transfer" contracts/contracts' in /tmp/codex-multi-abm_av9r succeeded in 13ms:
[codex:491748] contracts/contracts/PolicyManager.sol:343: function withdraw() external returns (uint256) {
[codex:491748] contracts/contracts/PolicyManager.sol:344: return withdraw(msg.sender);
[codex:491748] contracts/contracts/PolicyManager.sol:351: function withdraw(address payable _recipient) public returns (uint256) {
[codex:491748] contracts/contracts/WorkLock.sol:27: event Claimed(address indexed sender, uint256 claimedTokens);
[codex:491748] contracts/contracts/WorkLock.sol:38: bool claimed;
[codex:491748] contracts/contracts/WorkLock.sol:53: * claimedTokens = minAllowableLockedTokens + bonusETHPart * bonusDepositRate
[codex:491748] contracts/contracts/WorkLock.sol:94: * @param _stakingPeriods Amount of periods during which tokens will be locked after claiming
[codex:491748] contracts/contracts/WorkLock.sol:136: * @param _value Amount of tokens to transfer
[codex:491748] contracts/contracts/WorkLock.sol:176: * @param _ethToReclaim Specified sum of ETH staker wishes to reclaim following completion of work
[codex:491748] contracts/contracts/WorkLock.sol:177: * @param _restOfDepositedETH Remaining ETH in staker's deposit once ethToReclaim sum has been subtracted
[codex:491748] contracts/contracts/WorkLock.sol:178: * @dev _ethToReclaim + _restOfDepositedETH = depositedETH
[codex:491748] contracts/contracts/WorkLock.sol:180: function ethToWork(uint256 _ethToReclaim, uint256 _restOfDepositedETH) internal view returns (uint256) {
[codex:491748] contracts/contracts/WorkLock.sol:185: return ethToWork(_ethToReclaim, tokenSupply, baseETHSupply);
[codex:491748] contracts/contracts/WorkLock.sol:191: // If the staker's total remaining deposit (including the specified sum of ETH to reclaim)
[codex:491748] contracts/contracts/WorkLock.sol:193: // then only the base part is used to calculate the work required to reclaim ETH
[codex:491748] contracts/contracts/WorkLock.sol:194: if (_ethToReclaim + _restOfDepositedETH <= minAllowedBid) {
[codex:491748] contracts/contracts/WorkLock.sol:195: baseETH = _ethToReclaim;
[codex:491748] contracts/contracts/WorkLock.sol:197: // If the staker's remaining deposit (not including the specified sum of ETH to reclaim)
[codex:491748] contracts/contracts/WorkLock.sol:199: // then only the bonus part is used to calculate the work required to reclaim ETH
[codex:491748] contracts/contracts/WorkLock.sol:201: bonusETH = _ethToReclaim;
[codex:491748]
[codex:491748] thinking
[codex:491748] **Inspecting key contract vulnerabilities**
[codex:491748] exec
[codex:491748] /bin/bash -lc 'rg -n "contract Upgradeable|initialize|upgrade" contracts/contracts/proxy -S' in /tmp/codex-multi-abm_av9r succeeded in 8ms:
[codex:491748] contracts/contracts/proxy/Dispatcher.sol:55: * @notice ERC897, whether it is a forwarding (1) or an upgradeable (2) proxy
[codex:491748] contracts/contracts/proxy/Dispatcher.sol:70: * @notice Verify new contract storage and upgrade target
[codex:491748] contracts/contracts/proxy/Dispatcher.sol:73: function upgrade(address _target) public onlyOwner upgrading {
[codex:491748] contracts/contracts/proxy/Dispatcher.sol:90: * @dev Test storage carefully before upgrade again after rollback
[codex:491748] contracts/contracts/proxy/Upgradeable.sol:10:* @notice Base contract for upgradeable contract
[codex:491748] contracts/contracts/proxy/Upgradeable.sol:15:abstract contract Upgradeable is Ownable {
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1,200p' contracts/contracts/proxy/Upgradeable.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] // SPDX-License-Identifier: AGPL-3.0-or-later
[codex:491748]
[codex:491748] pragma solidity ^0.7.0;
[codex:491748]
[codex:491748]
[codex:491748] import "../../zeppelin/ownership/Ownable.sol";
[codex:491748]
[codex:491748]
[codex:491748] /**
[codex:491748] * @notice Base contract for upgradeable contract
[codex:491748] * @dev Inherited contract should implement verifyState(address) method by checking storage variables
[codex:491748] * (see verifyState(address) in Dispatcher). Also contract should implement finishUpgrade(address)
[codex:491748] * if it is using constructor parameters by coping this parameters to the dispatcher storage
[codex:491748] */
[codex:491748] abstract contract Upgradeable is Ownable {
[codex:491748]
[codex:491748] event StateVerified(address indexed testTarget, address sender);
[codex:491748] event UpgradeFinished(address indexed target, address sender);
[codex:491748]
[codex:491748] /**
[codex:491748]
[codex:491748] thinking
[codex:491748] **Analyzing contract structure and attack surface**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '280,420p' contracts/contracts/PolicyManager.sol" in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748] policy.endTimestamp,
[codex:491748] _nodes.length
[codex:491748] );
[codex:491748] }
[codex:491748]
[codex:491748] /**
[codex:491748] * @notice Get policy owner
[codex:491748] */
[codex:491748] function getPolicyOwner(bytes16 _policyId) public view returns (address) {
[codex:491748] Policy storage policy = policies[_policyId];
[codex:491748] return policy.owner == address(0) ? policy.sponsor : policy.owner;
[codex:491748] }
[codex:491748]
[codex:491748] /**
[codex:491748] * @notice Set default `feeDelta` value for specified period
[codex:491748] * @dev This method increases gas cost for node in trade of decreasing cost for policy sponsor
[codex:491748] * @param _node Node address
[codex:491748] * @param _period Period to set
[codex:491748] */
[codex:491748] function setDefaultFeeDelta(address _node, uint16 _period) external onlyEscrowContract {
[codex:491748]
[codex:491748] thinking
[codex:491748] **Analyzing potential reentrancy and access control issues**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1,220p' contracts/contracts/WorkLock.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] // SPDX-License-Identifier: AGPL-3.0-or-later
[codex:491748]
[codex:491748] pragma solidity ^0.7.0;
[codex:491748]
[codex:491748]
[codex:491748] import "../zeppelin/math/SafeMath.sol";
[codex:491748] import "../zeppelin/token/ERC20/SafeERC20.sol";
[codex:491748] import "../zeppelin/utils/Address.sol";
[codex:491748] import "../zeppelin/ownership/Ownable.sol";
[codex:491748] import "./NuCypherToken.sol";
[codex:491748] import "./StakingEscrow.sol";
[codex:491748] import "./lib/AdditionalMath.sol";
[codex:491748]
[codex:491748]
[codex:491748] /**
[codex:491748] * @notice The WorkLock distribution contract
[codex:491748] */
[codex:491748] contract WorkLock is Ownable {
[codex:491748] using SafeERC20 for NuCypherToken;
[codex:491748] using SafeMath for uint256;
[codex:491748]
[codex:491748] thinking
[codex:491748] **Continuing review of claim and refund**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '220,520p' contracts/contracts/WorkLock.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] }
[codex:491748]
[codex:491748] return work;
[codex:491748] }
[codex:491748]
[codex:491748] /**
[codex:491748] * @notice Calculate amount of work that need to be done to refund specified amount of ETH
[codex:491748] * @dev This value will be fixed only after end of bidding
[codex:491748] */
[codex:491748] function ethToWork(uint256 _ethAmount) public view returns (uint256) {
[codex:491748] return ethToWork(_ethAmount, 0);
[codex:491748] }
[codex:491748]
[codex:491748] /**
[codex:491748] * @notice Calculate amount of ETH that will be refund for completing specified amount of work
[codex:491748] */
[codex:491748] function workToETH(uint256 _completedWork, uint256 _ethSupply, uint256 _tokenSupply)
[codex:491748] internal view returns (uint256)
[codex:491748] {
[codex:491748] return _completedWork.mul(_ethSupply).mul(boostingRefund).div(_tokenSupply.mul(SLOWING_REFUND));
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '520,900p' contracts/contracts/WorkLock.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748]
[codex:491748] uint256 currentWork = escrow.getCompletedWork(_bidder);
[codex:491748] uint256 completedWork = currentWork.sub(info.completedWork);
[codex:491748] // no work that has been completed since last refund
[codex:491748] if (completedWork == 0) {
[codex:491748] return 0;
[codex:491748] }
[codex:491748]
[codex:491748] uint256 refundETH = workToETH(completedWork, info.depositedETH);
[codex:491748] if (refundETH > info.depositedETH) {
[codex:491748] refundETH = info.depositedETH;
[codex:491748] }
[codex:491748] return refundETH;
[codex:491748] }
[codex:491748]
[codex:491748] /**
[codex:491748] * @notice Refund ETH for the completed work
[codex:491748] */
[codex:491748] function refund() external returns (uint256 refundETH) {
[codex:491748] WorkInfo storage info = workInfo[msg.sender];
[codex:491748]
[codex:491748] thinking
[codex:491748] **Analyzing reentrancy and access control risks**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '640,760p' contracts/contracts/StakingEscrow.sol" in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748] address[] calldata _stakers,
[codex:491748] uint256[] calldata _numberOfSubStakes,
[codex:491748] uint256[] calldata _values,
[codex:491748] uint16[] calldata _periods
[codex:491748] )
[codex:491748] external
[codex:491748] {
[codex:491748] uint256 subStakesLength = _values.length;
[codex:491748] require(_stakers.length != 0 &&
[codex:491748] _stakers.length == _numberOfSubStakes.length &&
[codex:491748] subStakesLength >= _stakers.length &&
[codex:491748] _periods.length == subStakesLength);
[codex:491748] uint16 previousPeriod = getCurrentPeriod() - 1;
[codex:491748] uint16 nextPeriod = previousPeriod + 2;
[codex:491748] uint256 sumValue = 0;
[codex:491748]
[codex:491748] uint256 j = 0;
[codex:491748] for (uint256 i = 0; i < _stakers.length; i++) {
[codex:491748] address staker = _stakers[i];
[codex:491748] uint256 numberOfSubStakes = _numberOfSubStakes[i];
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '760,980p' contracts/contracts/StakingEscrow.sol" in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748] require(_value != 0);
[codex:491748] StakerInfo storage info = stakerInfo[_staker];
[codex:491748] // A staker can't be a worker for another staker
[codex:491748] require(stakerFromWorker[_staker] == address(0) || stakerFromWorker[_staker] == info.worker);
[codex:491748] // initial stake of the staker
[codex:491748] if (info.subStakes.length == 0) {
[codex:491748] stakers.push(_staker);
[codex:491748] policyManager.register(_staker, getCurrentPeriod() - 1);
[codex:491748] }
[codex:491748] token.safeTransferFrom(_payer, address(this), _value);
[codex:491748] info.value += _value;
[codex:491748] lock(_staker, _index, _value, _periods);
[codex:491748]
[codex:491748] addSnapshot(info, int256(_value));
[codex:491748] if (_index >= MAX_SUB_STAKES) {
[codex:491748] emit Deposited(_staker, _value, _periods);
[codex:491748] } else {
[codex:491748] uint16 lastPeriod = getLastPeriodOfSubStake(_staker, _index);
[codex:491748] emit Deposited(_staker, _value, lastPeriod - getCurrentPeriod());
[codex:491748] }
[codex:491748]
[codex:491748] thinking
[codex:491748] **Searching for withdraw and slash methods**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1000,1105p' contracts/contracts/StakingEscrow.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] subStake.periods = subStake.periods.add16(_periods);
[codex:491748] // if the sub stake ends in the next committed period then reset the `lastPeriod` field
[codex:491748] if (lastPeriod == startPeriod) {
[codex:491748] subStake.lastPeriod = 0;
[codex:491748] }
[codex:491748] // The extended sub stake must not be less than the minimum value
[codex:491748] require(uint32(lastPeriod - currentPeriod) + _periods >= minLockedPeriods);
[codex:491748] emit Locked(msg.sender, subStake.lockedValue, lastPeriod + 1, _periods);
[codex:491748] emit Prolonged(msg.sender, subStake.lockedValue, lastPeriod, _periods);
[codex:491748] }
[codex:491748]
[codex:491748] /**
[codex:491748] * @notice Merge two sub-stakes into one if their last periods are equal
[codex:491748] * @dev It's possible that both sub-stakes will be active after this transaction.
[codex:491748] * But only one of them will be active until next call `commitToNextPeriod` (in the next period)
[codex:491748] * @param _index1 Index of the first sub-stake
[codex:491748] * @param _index2 Index of the second sub-stake
[codex:491748] */
[codex:491748] function mergeStake(uint256 _index1, uint256 _index2) external onlyStaker {
[codex:491748] require(_index1 != _index2); // must be different sub-stakes
[codex:491748]
[codex:491748] thinking
[codex:491748] **Checking for reentrancy risks**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1215,1305p' contracts/contracts/StakingEscrow.sol" in /tmp/codex-multi-abm_av9r succeeded in 7ms:
[codex:491748] lockedPerPeriod[_mintingPeriod],
[codex:491748] lastPeriod.sub16(_mintingPeriod));
[codex:491748] reward += subStakeReward;
[codex:491748] if (_reStake) {
[codex:491748] subStake.lockedValue += uint128(subStakeReward);
[codex:491748] }
[codex:491748] }
[codex:491748] }
[codex:491748] policyManager.updateFee(_staker, _mintingPeriod);
[codex:491748] return reward;
[codex:491748] }
[codex:491748]
[codex:491748] //-------------------------Slashing-------------------------
[codex:491748] /**
[codex:491748] * @notice Slash the staker's stake and reward the investigator
[codex:491748] * @param _staker Staker's address
[codex:491748] * @param _penalty Penalty
[codex:491748] * @param _investigator Investigator
[codex:491748] * @param _reward Reward for the investigator
[codex:491748] */
[codex:491748]
[codex:491748] thinking
[codex:491748] **Analyzing external transfers and initializer risks**
[codex:491748] exec
[codex:491748] /bin/bash -lc "rg -n \"initialize\\(|init\\(\" contracts/contracts -S" in /tmp/codex-multi-abm_av9r succeeded in 10ms:
[codex:491748] contracts/contracts/Issuer.sol:147: function initialize(uint256 _reservedReward, address _sourceOfFunds) external onlyOwner {
[codex:491748] contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:73: function initialize(
[codex:491748] contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:79: InitializableStakingContract.initialize(_router);
[codex:491748] contracts/contracts/staking_contracts/AbstractStakingContract.sol:133: function initialize(StakingInterfaceRouter _router) public initializer {
[codex:491748]
[codex:491748] thinking
[codex:491748] **Inspecting contract initialization patterns**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1,220p' contracts/contracts/staking_contracts/AbstractStakingContract.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] // SPDX-License-Identifier: AGPL-3.0-or-later
[codex:491748]
[codex:491748] pragma solidity ^0.7.0;
[codex:491748]
[codex:491748] import "../../zeppelin/ownership/Ownable.sol";
[codex:491748] import "../../zeppelin/utils/Address.sol";
[codex:491748] import "../../zeppelin/token/ERC20/SafeERC20.sol";
[codex:491748] import "./StakingInterface.sol";
[codex:491748] import "../../zeppelin/proxy/Initializable.sol";
[codex:491748]
[codex:491748]
[codex:491748] /**
[codex:491748] * @notice Router for accessing interface contract
[codex:491748] */
[codex:491748] contract StakingInterfaceRouter is Ownable {
[codex:491748] BaseStakingInterface public target;
[codex:491748]
[codex:491748] /**
[codex:491748] * @param _target Address of the interface contract
[codex:491748] */
[codex:491748]
[codex:491748] thinking
[codex:491748] **Inspecting contract inheritance and initializer access**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1,200p' contracts/contracts/staking_contracts/WorkLockPoolingContract.sol" in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748] // SPDX-License-Identifier: AGPL-3.0-or-later
[codex:491748]
[codex:491748] pragma solidity ^0.7.0;
[codex:491748]
[codex:491748] import "../../zeppelin/ownership/Ownable.sol";
[codex:491748] import "../../zeppelin/math/SafeMath.sol";
[codex:491748] import "./AbstractStakingContract.sol";
[codex:491748]
[codex:491748] /**
[codex:491748] * @notice Contract acts as delegate for sub-stakers and owner
[codex:491748] * @author @vzotova and @roma_k
[codex:491748] **/
[codex:491748] contract WorkLockPoolingContract is InitializableStakingContract, Ownable {
[codex:491748] using SafeMath for uint256;
[codex:491748] using Address for address payable;
[codex:491748] using SafeERC20 for NuCypherToken;
[codex:491748]
[codex:491748] event TokensDeposited(
[codex:491748] address indexed sender,
[codex:491748] uint256 value,
[codex:491748]
[codex:491748] thinking
[codex:491748] **Continuing to examine withdrawal functions**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '200,520p' contracts/contracts/staking_contracts/WorkLockPoolingContract.sol" in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748] * @notice Get available reward for all delegators and owner
[codex:491748] */
[codex:491748] function getAvailableReward() public view returns (uint256) {
[codex:491748] uint256 stakedTokens = escrow.getAllTokens(address(this));
[codex:491748] uint256 freeTokens = token.balanceOf(address(this));
[codex:491748] uint256 reward = stakedTokens.add(freeTokens).sub(totalDepositedTokens);
[codex:491748] if (reward > freeTokens) {
[codex:491748] return freeTokens;
[codex:491748] }
[codex:491748] return reward;
[codex:491748] }
[codex:491748]
[codex:491748] /**
[codex:491748] * @notice Get cumulative reward
[codex:491748] */
[codex:491748] function getCumulativeReward() public view returns (uint256) {
[codex:491748] return getAvailableReward().add(totalWithdrawnReward);
[codex:491748] }
[codex:491748]
[codex:491748] /**
[codex:491748]
[codex:491748] thinking
[codex:491748] **Analyzing proxy initializer risks**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1,260p' contracts/contracts/staking_contracts/StakingInterface.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] // SPDX-License-Identifier: AGPL-3.0-or-later
[codex:491748]
[codex:491748] pragma solidity ^0.7.0;
[codex:491748]
[codex:491748]
[codex:491748] import "./AbstractStakingContract.sol";
[codex:491748] import "../NuCypherToken.sol";
[codex:491748] import "../StakingEscrow.sol";
[codex:491748] import "../PolicyManager.sol";
[codex:491748] import "../WorkLock.sol";
[codex:491748]
[codex:491748]
[codex:491748] /**
[codex:491748] * @notice Base StakingInterface
[codex:491748] */
[codex:491748] contract BaseStakingInterface {
[codex:491748]
[codex:491748] address public immutable stakingInterfaceAddress;
[codex:491748] NuCypherToken public immutable token;
[codex:491748] StakingEscrow public immutable escrow;
[codex:491748]
[codex:491748] thinking
[codex:491748] **Continuing implementation of WorkLock methods**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '260,380p' contracts/contracts/staking_contracts/StakingInterface.sol" in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748] /**
[codex:491748] * @notice Bid for tokens by transferring ETH
[codex:491748] */
[codex:491748] function bid(uint256 _value) public payable onlyDelegateCall workLockSet {
[codex:491748] workLock.bid{value: _value}();
[codex:491748] emit Bid(msg.sender, _value);
[codex:491748] }
[codex:491748]
[codex:491748] /**
[codex:491748] * @notice Cancel bid and refund deposited ETH
[codex:491748] */
[codex:491748] function cancelBid() public onlyDelegateCall workLockSet {
[codex:491748] workLock.cancelBid();
[codex:491748] emit BidCanceled(msg.sender);
[codex:491748] }
[codex:491748]
[codex:491748] /**
[codex:491748] * @notice Withdraw compensation after force refund
[codex:491748] */
[codex:491748] function withdrawCompensation() public onlyDelegateCall workLockSet {
[codex:491748]
[codex:491748] thinking
[codex:491748] **Analyzing initialization and fallback vulnerabilities**
[codex:491748]
[codex:491748] I'm unpacking how the staking and pooling contracts use delegatecall and fallback, focusing on how an attacker could exploit uninitialized contracts by taking ownership, setting malicious routers, and draining tokens through fallback calls restricted only to the owner. I'm also planning to check relevant files and lines to confirm concrete exploit paths.
[codex:491748] exec
[codex:491748] /bin/bash -lc 'rg -n "InitializableStakingContract" -S contracts/contracts' in /tmp/codex-multi-abm_av9r succeeded in 9ms:
[codex:491748] contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:13:contract WorkLockPoolingContract is InitializableStakingContract, Ownable {
[codex:491748] contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:79: InitializableStakingContract.initialize(_router);
[codex:491748] contracts/contracts/staking_contracts/AbstractStakingContract.sol:39:* @notice Internal base class for AbstractStakingContract and InitializableStakingContract
[codex:491748] contracts/contracts/staking_contracts/AbstractStakingContract.sol:125:abstract contract InitializableStakingContract is Initializable, RawStakingContract {
[codex:491748]
[codex:491748] thinking
[codex:491748] **Checking access control on upgrade functions**
[codex:491748] exec
[codex:491748] /bin/bash -lc 'rg -n "depositFromWorkLock|setWorkMeasurement|bondWorker|setReStake|setWindDown" contracts/contracts/StakingEscrow.sol' in /tmp/codex-multi-abm_av9r succeeded in 7ms:
[codex:491748] 464: function setWorkMeasurement(address _staker, bool _measureWork) external returns (uint256) {
[codex:491748] 479: function bondWorker(address _worker) external onlyStaker {
[codex:491748] 511: function setReStake(bool _reStake) external {
[codex:491748] 538: function depositFromWorkLock(
[codex:491748] 559: function setWindDown(bool _windDown) external onlyStaker {
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '430,580p' contracts/contracts/StakingEscrow.sol" in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748] */
[codex:491748] function getWorkerFromStaker(address _staker) external view returns (address) {
[codex:491748] return stakerInfo[_staker].worker;
[codex:491748] }
[codex:491748]
[codex:491748] /**
[codex:491748] * @notice Get work that completed by the staker
[codex:491748] */
[codex:491748] function getCompletedWork(address _staker) external view returns (uint256) {
[codex:491748] return stakerInfo[_staker].completedWork;
[codex:491748] }
[codex:491748]
[codex:491748] /**
[codex:491748] * @notice Find index of downtime structure that includes specified period
[codex:491748] * @dev If specified period is outside all downtime periods, the length of the array will be returned
[codex:491748] * @param _staker Staker
[codex:491748] * @param _period Specified period number
[codex:491748] */
[codex:491748] function findIndexOfPastDowntime(address _staker, uint16 _period) external view returns (uint256 index) {
[codex:491748] StakerInfo storage info = stakerInfo[_staker];
[codex:491748]
[codex:491748] thinking
[codex:491748] **Examining staking function vulnerabilities**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1,260p' contracts/contracts/staking_contracts/PoolingStakingContract.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] // SPDX-License-Identifier: AGPL-3.0-or-later
[codex:491748]
[codex:491748] pragma solidity ^0.7.0;
[codex:491748]
[codex:491748]
[codex:491748] import "../../zeppelin/ownership/Ownable.sol";
[codex:491748] import "../../zeppelin/math/SafeMath.sol";
[codex:491748] import "./AbstractStakingContract.sol";
[codex:491748]
[codex:491748]
[codex:491748] /**
[codex:491748] * @notice Contract acts as delegate for sub-stakers and owner
[codex:491748] **/
[codex:491748] contract PoolingStakingContract is AbstractStakingContract, Ownable {
[codex:491748] using SafeMath for uint256;
[codex:491748] using Address for address payable;
[codex:491748] using SafeERC20 for NuCypherToken;
[codex:491748]
[codex:491748] event TokensDeposited(address indexed sender, uint256 value, uint256 depositedTokens);
[codex:491748] event TokensWithdrawn(address indexed sender, uint256 value, uint256 depositedTokens);
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '260,360p' contracts/contracts/staking_contracts/PoolingStakingContract.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] function isFallbackAllowed() public view override returns (bool) {
[codex:491748] return msg.sender == owner();
[codex:491748] }
[codex:491748]
[codex:491748] }
[codex:491748]
[codex:491748] thinking
[codex:491748] **Analyzing contract initialization and reentrancy risks**
[codex:491748]
[codex:491748] I'm reviewing constructors and init functions to spot unprotected setups, focusing on PoolingStakingContract and WorkLockPoolingContract. Then, I check for possible reentrancy in withdrawing functions—paying close attention to state updates before external calls in WorkLock and WorkLockPoolingContract. I’m also scrutinizing refund mechanics for rounding errors that might let repeated claims exceed allowed ETH, and inspecting SafeERC20 usage for consistent safety. Finally, I’m evaluating PolicyManager’s reward and withdrawal logic for potential loopholes in fee handling and fund withdrawal. There is a lot here, so I’m careful to weigh each contract's protections.
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1,200p' contracts/contracts/PolicyManager.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] // SPDX-License-Identifier: AGPL-3.0-or-later
[codex:491748]
[codex:491748] pragma solidity ^0.7.0;
[codex:491748]
[codex:491748]
[codex:491748] import "../zeppelin/token/ERC20/SafeERC20.sol";
[codex:491748] import "../zeppelin/math/SafeMath.sol";
[codex:491748] import "../zeppelin/math/Math.sol";
[codex:491748] import "../zeppelin/utils/Address.sol";
[codex:491748] import "./lib/AdditionalMath.sol";
[codex:491748] import "./lib/SignatureVerifier.sol";
[codex:491748] import "./StakingEscrow.sol";
[codex:491748] import "./NuCypherToken.sol";
[codex:491748] import "./proxy/Upgradeable.sol";
[codex:491748]
[codex:491748]
[codex:491748] /**
[codex:491748] * @notice Contract holds policy data and locks accrued policy fees
[codex:491748] * @dev |v6.1.2|
[codex:491748] */
[codex:491748]
[codex:491748] thinking
[codex:491748] **Searching for createPolicy method**
[codex:491748] exec
[codex:491748] /bin/bash -lc 'rg -n "createPolicy|create|policy" contracts/contracts/PolicyManager.sol' in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748] 18:* @notice Contract holds policy data and locks accrued policy fees
[codex:491748] 30: bytes16 indexed policyId,
[codex:491748] 39: bytes16 indexed policyId,
[codex:491748] 45: bytes16 indexed policyId,
[codex:491748] 50: event PolicyRevoked(bytes16 indexed policyId, address indexed sender, uint256 value);
[codex:491748] 51: event RefundForPolicy(bytes16 indexed policyId, address indexed sender, uint256 value);
[codex:491748] 208: * @notice Create policy
[codex:491748] 209: * @dev Generate policy id before creation
[codex:491748] 210: * @param _policyId Policy id
[codex:491748] 211: * @param _policyOwner Policy owner. Zero address means sender is owner
[codex:491748] 212: * @param _endTimestamp End timestamp of the policy in seconds
[codex:491748] 213: * @param _nodes Nodes that will handle policy
[codex:491748] 215: function createPolicy(
[codex:491748] 216: bytes16 _policyId,
[codex:491748] 217: address _policyOwner,
[codex:491748] 223: Policy storage policy = policies[_policyId];
[codex:491748] 225: _policyId != RESERVED_POLICY_ID &&
[codex:491748] 226: policy.feeRate == 0 &&
[codex:491748] 227: !policy.disabled &&
[codex:491748] 236: policy.sponsor = msg.sender;
[codex:491748]
[codex:491748] thinking
[codex:491748] **Analyzing potential vulnerabilities and signature replay risks**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1,120p' contracts/contracts/NuCypherToken.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] // SPDX-License-Identifier: AGPL-3.0-or-later
[codex:491748]
[codex:491748] pragma solidity ^0.7.0;
[codex:491748]
[codex:491748]
[codex:491748] import "../zeppelin/token/ERC20/ERC20.sol";
[codex:491748] import "../zeppelin/token/ERC20/ERC20Detailed.sol";
[codex:491748]
[codex:491748]
[codex:491748] /**
[codex:491748] * @title NuCypher token
[codex:491748] * @notice ERC20 token
[codex:491748] * @dev Optional approveAndCall() functionality to notify a contract if an approve() has occurred.
[codex:491748] */
[codex:491748] contract NuCypherToken is ERC20, ERC20Detailed('NuCypher', 'NU', 18) {
[codex:491748]
[codex:491748] /**
[codex:491748] * @notice Set amount of tokens
[codex:491748] * @param _totalSupplyOfTokens Total number of tokens
[codex:491748] */
[codex:491748]
[codex:491748] thinking
[codex:491748] **Analyzing potential staking escrow risks**
[codex:491748] exec
[codex:491748] /bin/bash -lc 'rg -n "modifier onlyStaker" -n contracts/contracts/StakingEscrow.sol' in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748] 214: modifier onlyStaker()
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '200,240p' contracts/contracts/StakingEscrow.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] )
[codex:491748] {
[codex:491748] // constant `1` in the expression `_minLockedPeriods > 1` uses to simplify the `lock` method
[codex:491748] require(_minLockedPeriods > 1 && _maxAllowableLockedTokens != 0);
[codex:491748] minLockedPeriods = _minLockedPeriods;
[codex:491748] minAllowableLockedTokens = _minAllowableLockedTokens;
[codex:491748] maxAllowableLockedTokens = _maxAllowableLockedTokens;
[codex:491748] minWorkerPeriods = _minWorkerPeriods;
[codex:491748] isTestContract = _isTestContract;
[codex:491748] }
[codex:491748]
[codex:491748] /**
[codex:491748] * @dev Checks the existence of a staker in the contract
[codex:491748] */
[codex:491748] modifier onlyStaker()
[codex:491748] {
[codex:491748] StakerInfo storage info = stakerInfo[msg.sender];
[codex:491748] require(info.value > 0 || info.nextCommittedPeriod != 0);
[codex:491748] _;
[codex:491748] }
[codex:491748]
[codex:491748] thinking
[codex:491748] **Reviewing access control and initialization risks**
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1,200p' contracts/contracts/staking_contracts/PreallocationEscrow.sol" in /tmp/codex-multi-abm_av9r succeeded in 5ms:
[codex:491748] // SPDX-License-Identifier: AGPL-3.0-or-later
[codex:491748]
[codex:491748] pragma solidity ^0.7.0;
[codex:491748]
[codex:491748]
[codex:491748] import "../../zeppelin/ownership/Ownable.sol";
[codex:491748] import "../../zeppelin/math/SafeMath.sol";
[codex:491748] import "./AbstractStakingContract.sol";
[codex:491748]
[codex:491748]
[codex:491748] /**
[codex:491748] * @notice Contract holds tokens for vesting.
[codex:491748] * Also tokens can be used as a stake in the staking escrow contract
[codex:491748] */
[codex:491748] contract PreallocationEscrow is AbstractStakingContract, Ownable {
[codex:491748] using SafeMath for uint256;
[codex:491748] using SafeERC20 for NuCypherToken;
[codex:491748] using Address for address payable;
[codex:491748]
[codex:491748] event TokensDeposited(address indexed sender, uint256 value, uint256 duration);
[codex:491748]
[codex:491748] thinking
[codex:491748] **Analyzing refund calculation risks**
[codex:491748] exec
[codex:491748] /bin/bash -lc 'rg -n "library AdditionalMath" -n contracts/contracts/lib/AdditionalMath.sol' in /tmp/codex-multi-abm_av9r succeeded in 7ms:
[codex:491748] 12:library AdditionalMath {
[codex:491748] exec
[codex:491748] /bin/bash -lc "sed -n '1,200p' contracts/contracts/lib/AdditionalMath.sol" in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748] // SPDX-License-Identifier: AGPL-3.0-or-later
[codex:491748]
[codex:491748] pragma solidity ^0.7.0;
[codex:491748]
[codex:491748]
[codex:491748] import "../../zeppelin/math/SafeMath.sol";
[codex:491748]
[codex:491748]
[codex:491748] /**
[codex:491748] * @notice Additional math operations
[codex:491748] */
[codex:491748] library AdditionalMath {
[codex:491748] using SafeMath for uint256;
[codex:491748]
[codex:491748] function max16(uint16 a, uint16 b) internal pure returns (uint16) {
[codex:491748] return a >= b ? a : b;
[codex:491748] }
[codex:491748]
[codex:491748] function min16(uint16 a, uint16 b) internal pure returns (uint16) {
[codex:491748] return a < b ? a : b;
[codex:491748]
[codex:491748] thinking
[codex:491748] **Analyzing potential vulnerabilities and initialization risks**
[codex:491748]
[codex:491748] I'm going through possible overflow, underflow, division by zero, and rounding issues in multiple staking and pooling contract functions to see if they enable profit extraction. Most lead to reverts or minor rounding rather than direct exploits. However, I notice that the WorkLockPoolingContract has a public initializer without access control, posing a real risk if left uninitialized on deployment. This could let an attacker seize ownership and drain funds, so I'll locate exact files and line numbers to report this concretely.
[codex:491748] exec
[codex:491748] /bin/bash -lc "nl -ba contracts/contracts/staking_contracts/WorkLockPoolingContract.sol | sed -n '60,120p'" in /tmp/codex-multi-abm_av9r succeeded in 7ms:
[codex:491748] 60 uint256 workerFraction;
[codex:491748] 61 uint256 public workerWithdrawnReward;
[codex:491748] 62
[codex:491748] 63 mapping(address => Delegator) public delegators;
[codex:491748] 64 bool depositIsEnabled = true;
[codex:491748] 65
[codex:491748] 66 /**
[codex:491748] 67 * @notice Initialize function for using with OpenZeppelin proxy
[codex:491748] 68 * @param _workerFraction Share of token reward that worker node owner will get.
[codex:491748] 69 * Use value up to BASIS_FRACTION, if _workerFraction = BASIS_FRACTION -> means 100% reward as commission
[codex:491748] 70 * @param _router StakingInterfaceRouter address
[codex:491748] 71 * @param _workerOwner Owner of worker node, only this address can withdraw worker commission
[codex:491748] 72 */
[codex:491748] 73 function initialize(
[codex:491748] 74 uint256 _workerFraction,
[codex:491748] 75 StakingInterfaceRouter _router,
[codex:491748] 76 address _workerOwner
[codex:491748] 77 ) public initializer {
[codex:491748] 78 require(_workerOwner != address(0) && _workerFraction <= BASIS_FRACTION);
[codex:491748] 79 InitializableStakingContract.initialize(_router);
[codex:491748]
[codex:491748] thinking
[codex:491748] **Verifying line numbers and access control**
[codex:491748] exec
[codex:491748] /bin/bash -lc "nl -ba contracts/contracts/staking_contracts/AbstractStakingContract.sol | sed -n '110,180p'" in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748] 110 /**
[codex:491748] 111 * @dev Returns address of StakingInterfaceRouter
[codex:491748] 112 */
[codex:491748] 113 function router() public view override returns (StakingInterfaceRouter) {
[codex:491748] 114 return router_;
[codex:491748] 115 }
[codex:491748] 116
[codex:491748] 117 }
[codex:491748] 118
[codex:491748] 119
[codex:491748] 120 /**
[codex:491748] 121 * @notice Base class for any staking contract usable with openzeppelin proxy
[codex:491748] 122 * @dev Implement `isFallbackAllowed()` or override fallback function
[codex:491748] 123 * Implement `withdrawTokens(uint256)` and `withdrawETH()` functions
[codex:491748] 124 */
[codex:491748] 125 abstract contract InitializableStakingContract is Initializable, RawStakingContract {
[codex:491748] 126
[codex:491748] 127 StakingInterfaceRouter router_;
[codex:491748] 128 NuCypherToken public token;
[codex:491748] 129
[codex:491748]
[codex:491748] thinking
[codex:491748] **Verifying fallback ownership in initializer**
[codex:491748] exec
[codex:491748] /bin/bash -lc "nl -ba contracts/contracts/staking_contracts/WorkLockPoolingContract.sol | sed -n '410,470p'" in /tmp/codex-multi-abm_av9r succeeded in 6ms:
[codex:491748] 410 uint256 balance = totalWorkLockETHRefunded.sub(totalWorkLockETHWithdrawn);
[codex:491748] 411
[codex:491748] 412 if (availableETH > balance) {
[codex:491748] 413 availableETH = balance;
[codex:491748] 414 }
[codex:491748] 415 return availableETH;
[codex:491748] 416 }
[codex:491748] 417
[codex:491748] 418 /**
[codex:491748] 419 * @notice Withdraw available amount of ETH to delegator
[codex:491748] 420 */
[codex:491748] 421 function withdrawRefund() external {
[codex:491748] 422 uint256 availableETH = getAvailableRefund(msg.sender);
[codex:491748] 423 require(availableETH > 0, "There is no available ETH to withdraw");
[codex:491748] 424
[codex:491748] 425 Delegator storage delegator = delegators[msg.sender];
[codex:491748] 426 delegator.refundedETHWorkLock = delegator.refundedETHWorkLock.add(availableETH);
[codex:491748] 427
[codex:491748] 428 totalWorkLockETHWithdrawn = totalWorkLockETHWithdrawn.add(availableETH);
[codex:491748] 429 msg.sender.sendValue(availableETH);
[codex:491748]
[codex:491748]
[codex:491748] thinking
[codex:491748] **Analyzing unprotected initialization exploit**
[codex:491748] thinking
[codex:491748] **Detailing exploit steps and recommendations**
[codex:491748]
[codex:491748] I'll outline the step-by-step exploit process where an attacker initializes the contract with a malicious router, then uses fallback delegatecall to drain tokens and ETH, and I'll include recommendations and precise file references per instructions.
[codex:491748] codex
[codex:491748] {"no_findings":false,"summary":"Found 1 high-severity access control issue: an unprotected initializer in WorkLockPoolingContract allows takeover of an uninitialized proxy/instance and draining of pooled funds.","findings":[{"severity":"high","category":"access_control","title":"Unprotected initializer lets attacker seize ownership and drain an uninitialized WorkLockPoolingContract","exploit_scenario":"1) Monitor for a freshly deployed WorkLockPoolingContract proxy/instance where `initializer` has not been called yet. 2) Call `initialize(...)` with attacker-controlled `_router` (pointing to a malicious target contract) and `_workerOwner` set to the attacker; `_transferOwnership(msg.sender)` makes the attacker the owner. 3) As owner, call the contract’s fallback to delegatecall into the malicious target and execute a drain (e.g., transfer all ERC20 tokens and ETH held by the pool to the attacker). Profit potential: the entire pooled token and ETH balances held by the contract (order of magnitude: total pool TVL plus any unclaimed rewards/refunds).","recommendation":"Restrict initialization to a trusted deployer (e.g., factory-only) and/or add access control to `initialize`. If using proxies, call `initialize` atomically at deployment and consider disabling initializers in the implementation (e.g., `_disableInitializers()`), so no external account can claim ownership.","evidence":"`initialize` is public and sets owner to the caller without any auth checks (contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:73, contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:80). The base initializer is also public (contracts/contracts/staking_contracts/AbstractStakingContract.sol:133). Owner-gated fallback then allows arbitrary delegatecall execution once ownership is taken (contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:433).","locations":["contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:73","contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:80","contracts/contracts/staking_contracts/AbstractStakingContract.sol:133","contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:433"]}]}
[codex:491748] tokens used
[codex:491748] 76,553
[codex:491748] {"no_findings":false,"summary":"Found 1 high-severity access control issue: an unprotected initializer in WorkLockPoolingContract allows takeover of an uninitialized proxy/instance and draining of pooled funds.","findings":[{"severity":"high","category":"access_control","title":"Unprotected initializer lets attacker seize ownership and drain an uninitialized WorkLockPoolingContract","exploit_scenario":"1) Monitor for a freshly deployed WorkLockPoolingContract proxy/instance where `initializer` has not been called yet. 2) Call `initialize(...)` with attacker-controlled `_router` (pointing to a malicious target contract) and `_workerOwner` set to the attacker; `_transferOwnership(msg.sender)` makes the attacker the owner. 3) As owner, call the contract’s fallback to delegatecall into the malicious target and execute a drain (e.g., transfer all ERC20 tokens and ETH held by the pool to the attacker). Profit potential: the entire pooled token and ETH balances held by the contract (order of magnitude: total pool TVL plus any unclaimed rewards/refunds).","recommendation":"Restrict initialization to a trusted deployer (e.g., factory-only) and/or add access control to `initialize`. If using proxies, call `initialize` atomically at deployment and consider disabling initializers in the implementation (e.g., `_disableInitializers()`), so no external account can claim ownership.","evidence":"`initialize` is public and sets owner to the caller without any auth checks (contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:73, contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:80). The base initializer is also public (contracts/contracts/staking_contracts/AbstractStakingContract.sol:133). Owner-gated fallback then allows arbitrary delegatecall execution once ownership is taken (contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:433).","locations":["contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:73","contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:80","contracts/contracts/staking_contracts/AbstractStakingContract.sol:133","contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:433"]}]}
{
"codex": {
"ran_at": "2026-01-03T21:15:28.566701+00:00",
"returncode": 0
},
"summary": "Found 1 high-severity access control issue: an unprotected initializer in WorkLockPoolingContract allows takeover of an uninitialized proxy/instance and draining of pooled funds.",
"raw_final": {
"summary": "Found 1 high-severity access control issue: an unprotected initializer in WorkLockPoolingContract allows takeover of an uninitialized proxy/instance and draining of pooled funds.",
"findings": [
{
"title": "Unprotected initializer lets attacker seize ownership and drain an uninitialized WorkLockPoolingContract",
"category": "access_control",
"evidence": "`initialize` is public and sets owner to the caller without any auth checks (contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:73, contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:80). The base initializer is also public (contracts/contracts/staking_contracts/AbstractStakingContract.sol:133). Owner-gated fallback then allows arbitrary delegatecall execution once ownership is taken (contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:433).",
"severity": "high",
"locations": [
"contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:73",
"contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:80",
"contracts/contracts/staking_contracts/AbstractStakingContract.sol:133",
"contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:433"
],
"recommendation": "Restrict initialization to a trusted deployer (e.g., factory-only) and/or add access control to `initialize`. If using proxies, call `initialize` atomically at deployment and consider disabling initializers in the implementation (e.g., `_disableInitializers()`), so no external account can claim ownership.",
"exploit_scenario": "1) Monitor for a freshly deployed WorkLockPoolingContract proxy/instance where `initializer` has not been called yet. 2) Call `initialize(...)` with attacker-controlled `_router` (pointing to a malicious target contract) and `_workerOwner` set to the attacker; `_transferOwnership(msg.sender)` makes the attacker the owner. 3) As owner, call the contract\u2019s fallback to delegatecall into the malicious target and execute a drain (e.g., transfer all ERC20 tokens and ETH held by the pool to the attacker). Profit potential: the entire pooled token and ETH balances held by the contract (order of magnitude: total pool TVL plus any unclaimed rewards/refunds)."
}
],
"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 0x0276 0000000c: JUMPI 0000000d: PUSH1 0x00 0000000f: CALLDATALOAD 00000010: PUSH1 0xe0 00000012: SHR 00000013: DUP1 00000014: PUSH4 0x8da5cb5b 00000019: GT 0000001a: PUSH2 0x014f 0000001d: JUMPI 0000001e: DUP1 0000001f: PUSH4 0xdd49756e 00000024: GT 00000025: PUSH2 0x00c1 00000028: JUMPI 00000029: DUP1 0000002a: PUSH4 0xeb85ed73 0000002f: GT 00000030: PUSH2 0x007a 00000033: JUMPI 00000034: DUP1 00000035: PUSH4 0xeb85ed73 0000003a: EQ 0000003b: PUSH2 0x0b5e 0000003e: JUMPI 0000003f: DUP1 00000040: PUSH4 0xf2fde38b 00000045: EQ 00000046: PUSH2 0x0b75 00000049: JUMPI 0000004a: DUP1 0000004b: PUSH4 0xf435d2e5 00000050: EQ 00000051: PUSH2 0x0bc6 00000054: JUMPI 00000055: DUP1 00000056: PUSH4 0xf887ea40 0000005b: EQ 0000005c: PUSH2 0x0bdd 0000005f: JUMPI 00000060: DUP1 00000061: PUSH4 0xfc0c546a 00000066: EQ 00000067: PUSH2 0x0c1e 0000006a: JUMPI 0000006b: DUP1 0000006c: PUSH4 0xfd012664 00000071: EQ 00000072: PUSH2 0x0c5f 00000075: JUMPI 00000076: PUSH2 0x027d 00000079: JUMP 0000007a: JUMPDEST 0000007b: DUP1 0000007c: PUSH4 0xdd49756e 00000081: EQ 00000082: PUSH2 0x0a4a 00000085: JUMPI 00000086: DUP1 00000087: PUSH4 0xdd934e89 0000008c: EQ 0000008d: PUSH2 0x0a85 00000090: JUMPI 00000091: DUP1 00000092: PUSH4 0xe086e5ec 00000097: EQ 00000098: PUSH2 0x0ab0 0000009b: JUMPI 0000009c: DUP1 0000009d: PUSH4 0xe0974ea5 000000a2: EQ 000000a3: PUSH2 0x0ac7 000000a6: JUMPI 000000a7: DUP1 000000a8: PUSH4 0xe2fdcc17 000000ad: EQ 000000ae: PUSH2 0x0af2 000000b1: JUMPI 000000b2: DUP1 000000b3: PUSH4 0xe78b8842 000000b8: EQ 000000b9: PUSH2 0x0b33 000000bc: JUMPI 000000bd: PUSH2 0x027d 000000c0: JUMP 000000c1: JUMPDEST 000000c2: DUP1 000000c3: PUSH4 0x9b53f48e 000000c8: GT 000000c9: PUSH2 0x0113 000000cc: JUMPI 000000cd: DUP1 000000ce: PUSH4 0x9b53f48e 000000d3: EQ 000000d4: PUSH2 0x08aa 000000d7: JUMPI 000000d8: DUP1 000000d9: PUSH4 0xa474cd5c 000000de: EQ 000000df: PUSH2 0x08c1 000000e2: JUMPI 000000e3: DUP1 000000e4: PUSH4 0xb4988fd0 000000e9: EQ 000000ea: PUSH2 0x0926 000000ed: JUMPI 000000ee: DUP1 000000ef: PUSH4 0xbd4bd9ce 000000f4: EQ 000000f5: PUSH2 0x09a1 000000f8: JUMPI 000000f9: DUP1 000000fa: PUSH4 0xc4d66de8 000000ff: EQ 00000100: PUSH2 0x09ce 00000103: JUMPI 00000104: DUP1 00000105: PUSH4 0xd42aa8a7 0000010a: EQ 0000010b: PUSH2 0x0a1f 0000010e: JUMPI 0000010f: PUSH2 0x027d 00000112: JUMP 00000113: JUMPDEST 00000114: DUP1 00000115: PUSH4 0x8da5cb5b 0000011a: EQ 0000011b: PUSH2 0x07f0 0000011e: JUMPI 0000011f: DUP1 00000120: PUSH4 0x8f32d59b 00000125: EQ 00000126: PUSH2 0x0831 00000129: JUMPI 0000012a: DUP1 0000012b: PUSH4 0x9212e643 00000130: EQ 00000131: PUSH2 0x085e 00000134: JUMPI 00000135: DUP1 00000136: PUSH4 0x92795a8f 0000013b: EQ 0000013c: PUSH2 0x0889 0000013f: JUMPI 00000140: DUP1 00000141: PUSH4 0x9435c887 00000146: EQ 00000147: PUSH2 0x0893 0000014a: JUMPI 0000014b: PUSH2 0x027d 0000014e: JUMP 0000014f: JUMPDEST 00000150: DUP1 00000151: PUSH4 0x595b1872 00000156: GT 00000157: PUSH2 0x01e8 0000015a: JUMPI 0000015b: DUP1 0000015c: PUSH4 0x72f96040 00000161: GT 00000162: PUSH2 0x01ac 00000165: JUMPI 00000166: DUP1 00000167: PUSH4 0x72f96040 0000016c: EQ 0000016d: PUSH2 0x067d 00000170: JUMPI 00000171: DUP1 00000172: PUSH4 0x768972cb 00000177: EQ 00000178: PUSH2 0x06e2 0000017b: JUMPI 0000017c: DUP1 0000017d: PUSH4 0x853828b6 00000182: EQ 00000183: PUSH2 0x070d 00000186: JUMPI 00000187: DUP1 00000188: PUSH4 0x87a15dc9 0000018d: EQ 0000018e: PUSH2 0x0724 00000191: JUMPI 00000192: DUP1 00000193: PUSH4 0x8b713b2e 00000198: EQ 00000199: PUSH2 0x073b 0000019c: JUMPI 0000019d: DUP1 0000019e: PUSH4 0x8d23fc61 000001a3: EQ 000001a4: PUSH2 0x0766 000001a7: JUMPI 000001a8: PUSH2 0x027d 000001ab: JUMP 000001ac: JUMPDEST 000001ad: DUP1 000001ae: PUSH4 0x595b1872 000001b3: EQ 000001b4: PUSH2 0x05b8 000001b7: JUMPI 000001b8: DUP1 000001b9: PUSH4 0x5cdeb0d6 000001be: EQ 000001bf: PUSH2 0x05f9 000001c2: JUMPI 000001c3: DUP1 000001c4: PUSH4 0x6164dbf9 000001c9: EQ 000001ca: PUSH2 0x0610 000001cd: JUMPI 000001ce: DUP1 000001cf: PUSH4 0x62b43d88 000001d4: EQ 000001d5: PUSH2 0x063b 000001d8: JUMPI 000001d9: DUP1 000001da: PUSH4 0x715018a6 000001df: EQ 000001e0: PUSH2 0x0666 000001e3: JUMPI 000001e4: PUSH2 0x027d 000001e7: JUMP 000001e8: JUMPDEST 000001e9: DUP1 000001ea: PUSH4 0x31843e25 000001ef: GT 000001f0: PUSH2 0x023a 000001f3: JUMPI 000001f4: DUP1 000001f5: PUSH4 0x31843e25 000001fa: EQ 000001fb: PUSH2 0x04a1 000001fe: JUMPI 000001ff: DUP1 00000200: PUSH4 0x44cbee0d 00000205: EQ 00000206: PUSH2 0x04cc 00000209: JUMPI 0000020a: DUP1 0000020b: PUSH4 0x454a2ab3 00000210: EQ 00000211: PUSH2 0x04f7 00000214: JUMPI 00000215: DUP1 00000216: PUSH4 0x46a1cd08 0000021b: EQ 0000021c: PUSH2 0x0525 0000021f: JUMPI 00000220: DUP1 00000221: PUSH4 0x4e71d92d 00000226: EQ 00000227: PUSH2 0x058a 0000022a: JUMPI 0000022b: DUP1 0000022c: PUSH4 0x590e1ae3 00000231: EQ 00000232: PUSH2 0x05a1 00000235: JUMPI 00000236: PUSH2 0x027d 00000239: JUMP 0000023a: JUMPDEST 0000023b: DUP1 0000023c: PUSH4 0x0cc57511 00000241: EQ 00000242: PUSH2 0x03cc 00000245: JUMPI 00000246: DUP1 00000247: PUSH4 0x110f8874 0000024c: EQ 0000024d: PUSH2 0x03e3 00000250: JUMPI 00000251: DUP1 00000252: PUSH4 0x1c7fd532 00000257: EQ 00000258: PUSH2 0x03fa 0000025b: JUMPI 0000025c: DUP1 0000025d: PUSH4 0x2dced887 00000262: EQ 00000263: PUSH2 0x043b 00000266: JUMPI 00000267: DUP1 00000268: PUSH4 0x315a095d 0000026d: EQ 0000026e: PUSH2 0x0466 00000271: JUMPI 00000272: PUSH2 0x027d 00000275: JUMP 00000276: JUMPDEST 00000277: CALLDATASIZE 00000278: PUSH2 0x027d 0000027b: JUMPI 0000027c: STOP 0000027d: JUMPDEST 0000027e: PUSH2 0x0285 00000281: PUSH2 0x0c8a 00000284: JUMP 00000285: JUMPDEST 00000286: PUSH2 0x028e 00000289: JUMPI 0000028a: PUSH1 0x00 0000028c: DUP1 0000028d: REVERT 0000028e: JUMPDEST 0000028f: PUSH1 0x00 00000291: PUSH2 0x0298 00000294: PUSH2 0x0cc7 00000297: JUMP 00000298: JUMPDEST 00000299: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000002ae: AND 000002af: PUSH4 0xd4b83992 000002b4: PUSH1 0x40 000002b6: MLOAD 000002b7: DUP2 000002b8: PUSH4 0xffffffff 000002bd: AND 000002be: PUSH1 0xe0 000002c0: SHL 000002c1: DUP2 000002c2: MSTORE 000002c3: PUSH1 0x04 000002c5: ADD 000002c6: PUSH1 0x20 000002c8: PUSH1 0x40 000002ca: MLOAD 000002cb: DUP1 000002cc: DUP4 000002cd: SUB 000002ce: DUP2 000002cf: DUP7 000002d0: DUP1 000002d1: EXTCODESIZE 000002d2: ISZERO 000002d3: DUP1 000002d4: ISZERO 000002d5: PUSH2 0x02dd 000002d8: JUMPI 000002d9: PUSH1 0x00 000002db: DUP1 000002dc: REVERT 000002dd: JUMPDEST 000002de: POP 000002df: GAS 000002e0: STATICCALL 000002e1: ISZERO 000002e2: DUP1 000002e3: ISZERO 000002e4: PUSH2 0x02f1 000002e7: JUMPI 000002e8: RETURNDATASIZE 000002e9: PUSH1 0x00 000002eb: DUP1 000002ec: RETURNDATACOPY 000002ed: RETURNDATASIZE 000002ee: PUSH1 0x00 000002f0: REVERT 000002f1: JUMPDEST 000002f2: POP 000002f3: POP 000002f4: POP 000002f5: POP 000002f6: PUSH1 0x40 000002f8: MLOAD 000002f9: RETURNDATASIZE 000002fa: PUSH1 0x20 000002fc: DUP2 000002fd: LT 000002fe: ISZERO 000002ff: PUSH2 0x0307 00000302: JUMPI 00000303: PUSH1 0x00 00000305: DUP1 00000306: REVERT 00000307: JUMPDEST 00000308: DUP2 00000309: ADD 0000030a: SWAP1 0000030b: DUP1 0000030c: DUP1 0000030d: MLOAD 0000030e: SWAP1 0000030f: PUSH1 0x20 00000311: ADD 00000312: SWAP1 00000313: SWAP3 00000314: SWAP2 00000315: SWAP1 00000316: POP 00000317: POP 00000318: POP 00000319: SWAP1 0000031a: POP 0000031b: PUSH2 0x0339 0000031e: DUP2 0000031f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000334: AND 00000335: PUSH2 0x0cf1 00000338: JUMP 00000339: JUMPDEST 0000033a: PUSH2 0x0342 0000033d: JUMPI 0000033e: PUSH1 0x00 00000340: DUP1 00000341: REVERT 00000342: JUMPDEST 00000343: PUSH1 0x00 00000345: DUP2 00000346: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000035b: AND 0000035c: PUSH1 0x00 0000035e: CALLDATASIZE 0000035f: PUSH1 0x40 00000361: MLOAD 00000362: DUP1 00000363: DUP4 00000364: DUP4 00000365: DUP1 00000366: DUP3 00000367: DUP5 00000368: CALLDATACOPY 00000369: DUP1 0000036a: DUP4 0000036b: ADD 0000036c: SWAP3 0000036d: POP 0000036e: POP 0000036f: POP 00000370: SWAP3 00000371: POP 00000372: POP 00000373: POP 00000374: PUSH1 0x00 00000376: PUSH1 0x40 00000378: MLOAD 00000379: DUP1 0000037a: DUP4 0000037b: SUB 0000037c: DUP2 0000037d: DUP6 0000037e: GAS 0000037f: DELEGATECALL 00000380: SWAP2 00000381: POP 00000382: POP 00000383: RETURNDATASIZE 00000384: DUP1 00000385: PUSH1 0x00 00000387: DUP2 00000388: EQ 00000389: PUSH2 0x03ae 0000038c: JUMPI 0000038d: PUSH1 0x40 0000038f: MLOAD 00000390: SWAP2 00000391: POP 00000392: PUSH1 0x1f 00000394: NOT 00000395: PUSH1 0x3f 00000397: RETURNDATASIZE 00000398: ADD 00000399: AND 0000039a: DUP3 0000039b: ADD 0000039c: PUSH1 0x40 0000039e: MSTORE 0000039f: RETURNDATASIZE 000003a0: DUP3 000003a1: MSTORE 000003a2: RETURNDATASIZE 000003a3: PUSH1 0x00 000003a5: PUSH1 0x20 000003a7: DUP5 000003a8: ADD 000003a9: RETURNDATACOPY 000003aa: PUSH2 0x03b3 000003ad: JUMP 000003ae: JUMPDEST 000003af: PUSH1 0x60 000003b1: SWAP2 000003b2: POP 000003b3: JUMPDEST 000003b4: POP 000003b5: POP 000003b6: SWAP1 000003b7: POP 000003b8: DUP1 000003b9: ISZERO 000003ba: PUSH2 0x03c7 000003bd: JUMPI 000003be: RETURNDATASIZE 000003bf: PUSH1 0x00 000003c1: DUP1 000003c2: RETURNDATACOPY 000003c3: RETURNDATASIZE 000003c4: PUSH1 0x00 000003c6: RETURN 000003c7: JUMPDEST 000003c8: PUSH1 0x00 000003ca: DUP1 000003cb: REVERT 000003cc: JUMPDEST 000003cd: CALLVALUE 000003ce: DUP1 000003cf: ISZERO 000003d0: PUSH2 0x03d8 000003d3: JUMPI 000003d4: PUSH1 0x00 000003d6: DUP1 000003d7: REVERT 000003d8: JUMPDEST 000003d9: POP 000003da: PUSH2 0x03e1 000003dd: PUSH2 0x0d3c 000003e0: JUMP 000003e1: JUMPDEST 000003e2: STOP 000003e3: JUMPDEST 000003e4: CALLVALUE 000003e5: DUP1 000003e6: ISZERO 000003e7: PUSH2 0x03ef 000003ea: JUMPI 000003eb: PUSH1 0x00 000003ed: DUP1 000003ee: REVERT 000003ef: JUMPDEST 000003f0: POP 000003f1: PUSH2 0x03f8 000003f4: PUSH2 0x0dc9 000003f7: JUMP 000003f8: JUMPDEST 000003f9: STOP 000003fa: JUMPDEST 000003fb: CALLVALUE 000003fc: DUP1 000003fd: ISZERO 000003fe: PUSH2 0x0406 00000401: JUMPI 00000402: PUSH1 0x00 00000404: DUP1 00000405: REVERT 00000406: JUMPDEST 00000407: POP 00000408: PUSH2 0x040f 0000040b: PUSH2 0x0f27 0000040e: JUMP 0000040f: JUMPDEST 00000410: PUSH1 0x40 00000412: MLOAD 00000413: DUP1 00000414: DUP3 00000415: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000042a: AND 0000042b: DUP2 0000042c: MSTORE 0000042d: PUSH1 0x20 0000042f: ADD 00000430: SWAP2 00000431: POP 00000432: POP 00000433: PUSH1 0x40 00000435: MLOAD 00000436: DUP1 00000437: SWAP2 00000438: SUB 00000439: SWAP1 0000043a: RETURN 0000043b: JUMPDEST 0000043c: CALLVALUE 0000043d: DUP1 0000043e: ISZERO 0000043f: PUSH2 0x0447 00000442: JUMPI 00000443: PUSH1 0x00 00000445: DUP1 00000446: REVERT 00000447: JUMPDEST 00000448: POP 00000449: PUSH2 0x0450 0000044c: PUSH2 0x0f4d 0000044f: JUMP 00000450: JUMPDEST 00000451: PUSH1 0x40 00000453: MLOAD 00000454: DUP1 00000455: DUP3 00000456: DUP2 00000457: MSTORE 00000458: PUSH1 0x20 0000045a: ADD 0000045b: SWAP2 0000045c: POP 0000045d: POP 0000045e: PUSH1 0x40 00000460: MLOAD 00000461: DUP1 00000462: SWAP2 00000463: SUB 00000464: SWAP1 00000465: RETURN 00000466: JUMPDEST 00000467: CALLVALUE 00000468: DUP1 00000469: ISZERO 0000046a: PUSH2 0x0472 0000046d: JUMPI 0000046e: PUSH1 0x00 00000470: DUP1 00000471: REVERT 00000472: JUMPDEST 00000473: POP 00000474: PUSH2 0x049f 00000477: PUSH1 0x04 00000479: DUP1 0000047a: CALLDATASIZE 0000047b: SUB 0000047c: PUSH1 0x20 0000047e: DUP2 0000047f: LT 00000480: ISZERO 00000481: PUSH2 0x0489 00000484: JUMPI 00000485: PUSH1 0x00 00000487: DUP1 00000488: REVERT 00000489: JUMPDEST 0000048a: DUP2 0000048b: ADD 0000048c: SWAP1 0000048d: DUP1 0000048e: DUP1 0000048f: CALLDATALOAD 00000490: SWAP1 00000491: PUSH1 0x20 00000493: ADD 00000494: SWAP1 00000495: SWAP3 00000496: SWAP2 00000497: SWAP1 00000498: POP 00000499: POP 0000049a: POP 0000049b: PUSH2 0x0f53 0000049e: JUMP 0000049f: JUMPDEST 000004a0: STOP 000004a1: JUMPDEST 000004a2: CALLVALUE 000004a3: DUP1 000004a4: ISZERO 000004a5: PUSH2 0x04ad 000004a8: JUMPI 000004a9: PUSH1 0x00 000004ab: DUP1 000004ac: REVERT 000004ad: JUMPDEST 000004ae: POP 000004af: PUSH2 0x04b6 000004b2: PUSH2 0x120d 000004b5: JUMP 000004b6: JUMPDEST 000004b7: PUSH1 0x40 000004b9: MLOAD 000004ba: DUP1 000004bb: DUP3 000004bc: DUP2 000004bd: MSTORE 000004be: PUSH1 0x20 000004c0: ADD 000004c1: SWAP2 000004c2: POP 000004c3: POP 000004c4: PUSH1 0x40 000004c6: MLOAD 000004c7: DUP1 000004c8: SWAP2 000004c9: SUB 000004ca: SWAP1 000004cb: RETURN 000004cc: JUMPDEST 000004cd: CALLVALUE 000004ce: DUP1 000004cf: ISZERO 000004d0: PUSH2 0x04d8 000004d3: JUMPI 000004d4: PUSH1 0x00 000004d6: DUP1 000004d7: REVERT 000004d8: JUMPDEST 000004d9: POP 000004da: PUSH2 0x04e1 000004dd: PUSH2 0x1217 000004e0: JUMP 000004e1: JUMPDEST 000004e2: PUSH1 0x40 000004e4: MLOAD 000004e5: DUP1 000004e6: DUP3 000004e7: DUP2 000004e8: MSTORE 000004e9: PUSH1 0x20 000004eb: ADD 000004ec: SWAP2 000004ed: POP 000004ee: POP 000004ef: PUSH1 0x40 000004f1: MLOAD 000004f2: DUP1 000004f3: SWAP2 000004f4: SUB 000004f5: SWAP1 000004f6: RETURN 000004f7: JUMPDEST 000004f8: PUSH2 0x0523 000004fb: PUSH1 0x04 000004fd: DUP1 000004fe: CALLDATASIZE 000004ff: SUB 00000500: PUSH1 0x20 00000502: DUP2 00000503: LT 00000504: ISZERO 00000505: PUSH2 0x050d 00000508: JUMPI 00000509: PUSH1 0x00 0000050b: DUP1 0000050c: REVERT 0000050d: JUMPDEST 0000050e: DUP2 0000050f: ADD 00000510: SWAP1 00000511: DUP1 00000512: DUP1 00000513: CALLDATALOAD 00000514: SWAP1 00000515: PUSH1 0x20 00000517: ADD 00000518: SWAP1 00000519: SWAP3 0000051a: SWAP2 0000051b: SWAP1 0000051c: POP 0000051d: POP 0000051e: POP 0000051f: PUSH2 0x121c 00000522: JUMP 00000523: JUMPDEST 00000524: STOP 00000525: JUMPDEST 00000526: CALLVALUE 00000527: DUP1 00000528: ISZERO 00000529: PUSH2 0x0531 0000052c: JUMPI 0000052d: PUSH1 0x00 0000052f: DUP1 00000530: REVERT 00000531: JUMPDEST 00000532: POP 00000533: PUSH2 0x0574 00000536: PUSH1 0x04 00000538: DUP1 00000539: CALLDATASIZE 0000053a: SUB 0000053b: PUSH1 0x20 0000053d: DUP2 0000053e: LT 0000053f: ISZERO 00000540: PUSH2 0x0548 00000543: JUMPI 00000544: PUSH1 0x00 00000546: DUP1 00000547: REVERT 00000548: JUMPDEST 00000549: DUP2 0000054a: ADD 0000054b: SWAP1 0000054c: DUP1 0000054d: DUP1 0000054e: CALLDATALOAD 0000054f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000564: AND 00000565: SWAP1 00000566: PUSH1 0x20 00000568: ADD 00000569: SWAP1 0000056a: SWAP3 0000056b: SWAP2 0000056c: SWAP1 0000056d: POP 0000056e: POP 0000056f: POP 00000570: PUSH2 0x1221 00000573: JUMP 00000574: JUMPDEST 00000575: PUSH1 0x40 00000577: MLOAD 00000578: DUP1 00000579: DUP3 0000057a: DUP2 0000057b: MSTORE 0000057c: PUSH1 0x20 0000057e: ADD 0000057f: SWAP2 00000580: POP 00000581: POP 00000582: PUSH1 0x40 00000584: MLOAD 00000585: DUP1 00000586: SWAP2 00000587: SUB 00000588: SWAP1 00000589: RETURN 0000058a: JUMPDEST 0000058b: CALLVALUE 0000058c: DUP1 0000058d: ISZERO 0000058e: PUSH2 0x0596 00000591: JUMPI 00000592: PUSH1 0x00 00000594: DUP1 00000595: REVERT 00000596: JUMPDEST 00000597: POP 00000598: PUSH2 0x059f 0000059b: PUSH2 0x130e 0000059e: JUMP 0000059f: JUMPDEST 000005a0: STOP 000005a1: JUMPDEST 000005a2: CALLVALUE 000005a3: DUP1 000005a4: ISZERO 000005a5: PUSH2 0x05ad 000005a8: JUMPI 000005a9: PUSH1 0x00 000005ab: DUP1 000005ac: REVERT 000005ad: JUMPDEST 000005ae: POP 000005af: PUSH2 0x05b6 000005b2: PUSH2 0x1313 000005b5: JUMP 000005b6: JUMPDEST 000005b7: STOP 000005b8: JUMPDEST 000005b9: CALLVALUE 000005ba: DUP1 000005bb: ISZERO 000005bc: PUSH2 0x05c4 000005bf: JUMPI 000005c0: PUSH1 0x00 000005c2: DUP1 000005c3: REVERT 000005c4: JUMPDEST 000005c5: POP 000005c6: PUSH2 0x05cd 000005c9: PUSH2 0x15af 000005cc: JUMP 000005cd: JUMPDEST 000005ce: PUSH1 0x40 000005d0: MLOAD 000005d1: DUP1 000005d2: DUP3 000005d3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000005e8: AND 000005e9: DUP2 000005ea: MSTORE 000005eb: PUSH1 0x20 000005ed: ADD 000005ee: SWAP2 000005ef: POP 000005f0: POP 000005f1: PUSH1 0x40 000005f3: MLOAD 000005f4: DUP1 000005f5: SWAP2 000005f6: SUB 000005f7: SWAP1 000005f8: RETURN 000005f9: JUMPDEST 000005fa: CALLVALUE 000005fb: DUP1 000005fc: ISZERO 000005fd: PUSH2 0x0605 00000600: JUMPI 00000601: PUSH1 0x00 00000603: DUP1 00000604: REVERT 00000605: JUMPDEST 00000606: POP 00000607: PUSH2 0x060e 0000060a: PUSH2 0x15d5 0000060d: JUMP 0000060e: JUMPDEST 0000060f: STOP 00000610: JUMPDEST 00000611: CALLVALUE 00000612: DUP1 00000613: ISZERO 00000614: PUSH2 0x061c 00000617: JUMPI 00000618: PUSH1 0x00 0000061a: DUP1 0000061b: REVERT 0000061c: JUMPDEST 0000061d: POP 0000061e: PUSH2 0x0625 00000621: PUSH2 0x1662 00000624: JUMP 00000625: JUMPDEST 00000626: PUSH1 0x40 00000628: MLOAD 00000629: DUP1 0000062a: DUP3 0000062b: DUP2 0000062c: MSTORE 0000062d: PUSH1 0x20 0000062f: ADD 00000630: SWAP2 00000631: POP 00000632: POP 00000633: PUSH1 0x40 00000635: MLOAD 00000636: DUP1 00000637: SWAP2 00000638: SUB 00000639: SWAP1 0000063a: RETURN 0000063b: JUMPDEST 0000063c: CALLVALUE 0000063d: DUP1 0000063e: ISZERO 0000063f: PUSH2 0x0647 00000642: JUMPI 00000643: PUSH1 0x00 00000645: DUP1 00000646: REVERT 00000647: JUMPDEST 00000648: POP 00000649: PUSH2 0x0650 0000064c: PUSH2 0x1668 0000064f: JUMP 00000650: JUMPDEST 00000651: PUSH1 0x40 00000653: MLOAD 00000654: DUP1 00000655: DUP3 00000656: DUP2 00000657: MSTORE 00000658: PUSH1 0x20 0000065a: ADD 0000065b: SWAP2 0000065c: POP 0000065d: POP 0000065e: PUSH1 0x40 00000660: MLOAD 00000661: DUP1 00000662: SWAP2 00000663: SUB 00000664: SWAP1 00000665: RETURN 00000666: JUMPDEST 00000667: CALLVALUE 00000668: DUP1 00000669: ISZERO 0000066a: PUSH2 0x0672 0000066d: JUMPI 0000066e: PUSH1 0x00 00000670: DUP1 00000671: REVERT 00000672: JUMPDEST 00000673: POP 00000674: PUSH2 0x067b 00000677: PUSH2 0x166e 0000067a: JUMP 0000067b: JUMPDEST 0000067c: STOP 0000067d: JUMPDEST 0000067e: CALLVALUE 0000067f: DUP1 00000680: ISZERO 00000681: PUSH2 0x0689 00000684: JUMPI 00000685: PUSH1 0x00 00000687: DUP1 00000688: REVERT 00000689: JUMPDEST 0000068a: POP 0000068b: PUSH2 0x06cc 0000068e: PUSH1 0x04 00000690: DUP1 00000691: CALLDATASIZE 00000692: SUB 00000693: PUSH1 0x20 00000695: DUP2 00000696: LT 00000697: ISZERO 00000698: PUSH2 0x06a0 0000069b: JUMPI 0000069c: PUSH1 0x00 0000069e: DUP1 0000069f: REVERT 000006a0: JUMPDEST 000006a1: DUP2 000006a2: ADD 000006a3: SWAP1 000006a4: DUP1 000006a5: DUP1 000006a6: CALLDATALOAD 000006a7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000006bc: AND 000006bd: SWAP1 000006be: PUSH1 0x20 000006c0: ADD 000006c1: SWAP1 000006c2: SWAP3 000006c3: SWAP2 000006c4: SWAP1 000006c5: POP 000006c6: POP 000006c7: POP 000006c8: PUSH2 0x1740 000006cb: JUMP 000006cc: JUMPDEST 000006cd: PUSH1 0x40 000006cf: MLOAD 000006d0: DUP1 000006d1: DUP3 000006d2: DUP2 000006d3: MSTORE 000006d4: PUSH1 0x20 000006d6: ADD 000006d7: SWAP2 000006d8: POP 000006d9: POP 000006da: PUSH1 0x40 000006dc: MLOAD 000006dd: DUP1 000006de: SWAP2 000006df: SUB 000006e0: SWAP1 000006e1: RETURN 000006e2: JUMPDEST 000006e3: CALLVALUE 000006e4: DUP1 000006e5: ISZERO 000006e6: PUSH2 0x06ee 000006e9: JUMPI 000006ea: PUSH1 0x00 000006ec: DUP1 000006ed: REVERT 000006ee: JUMPDEST 000006ef: POP 000006f0: PUSH2 0x06f7 000006f3: PUSH2 0x1803 000006f6: JUMP 000006f7: JUMPDEST 000006f8: PUSH1 0x40 000006fa: MLOAD 000006fb: DUP1 000006fc: DUP3 000006fd: DUP2 000006fe: MSTORE 000006ff: PUSH1 0x20 00000701: ADD 00000702: SWAP2 00000703: POP 00000704: POP 00000705: PUSH1 0x40 00000707: MLOAD 00000708: DUP1 00000709: SWAP2 0000070a: SUB 0000070b: SWAP1 0000070c: RETURN 0000070d: JUMPDEST 0000070e: CALLVALUE 0000070f: DUP1 00000710: ISZERO 00000711: PUSH2 0x0719 00000714: JUMPI 00000715: PUSH1 0x00 00000717: DUP1 00000718: REVERT 00000719: JUMPDEST 0000071a: POP 0000071b: PUSH2 0x0722 0000071e: PUSH2 0x1809 00000721: JUMP 00000722: JUMPDEST 00000723: STOP 00000724: JUMPDEST 00000725: CALLVALUE 00000726: DUP1 00000727: ISZERO 00000728: PUSH2 0x0730 0000072b: JUMPI 0000072c: PUSH1 0x00 0000072e: DUP1 0000072f: REVERT 00000730: JUMPDEST 00000731: POP 00000732: PUSH2 0x0739 00000735: PUSH2 0x1d4b 00000738: JUMP 00000739: JUMPDEST 0000073a: STOP 0000073b: JUMPDEST 0000073c: CALLVALUE 0000073d: DUP1 0000073e: ISZERO 0000073f: PUSH2 0x0747 00000742: JUMPI 00000743: PUSH1 0x00 00000745: DUP1 00000746: REVERT 00000747: JUMPDEST 00000748: POP 00000749: PUSH2 0x0750 0000074c: PUSH2 0x1d50 0000074f: JUMP 00000750: JUMPDEST 00000751: PUSH1 0x40 00000753: MLOAD 00000754: DUP1 00000755: DUP3 00000756: DUP2 00000757: MSTORE 00000758: PUSH1 0x20 0000075a: ADD 0000075b: SWAP2 0000075c: POP 0000075d: POP 0000075e: PUSH1 0x40 00000760: MLOAD 00000761: DUP1 00000762: SWAP2 00000763: SUB 00000764: SWAP1 00000765: RETURN 00000766: JUMPDEST 00000767: CALLVALUE 00000768: DUP1 00000769: ISZERO 0000076a: PUSH2 0x0772 0000076d: JUMPI 0000076e: PUSH1 0x00 00000770: DUP1 00000771: REVERT 00000772: JUMPDEST 00000773: POP 00000774: PUSH2 0x07b5 00000777: PUSH1 0x04 00000779: DUP1 0000077a: CALLDATASIZE 0000077b: SUB 0000077c: PUSH1 0x20 0000077e: DUP2 0000077f: LT 00000780: ISZERO 00000781: PUSH2 0x0789 00000784: JUMPI 00000785: PUSH1 0x00 00000787: DUP1 00000788: REVERT 00000789: JUMPDEST 0000078a: DUP2 0000078b: ADD 0000078c: SWAP1 0000078d: DUP1 0000078e: DUP1 0000078f: CALLDATALOAD 00000790: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000007a5: AND 000007a6: SWAP1 000007a7: PUSH1 0x20 000007a9: ADD 000007aa: SWAP1 000007ab: SWAP3 000007ac: SWAP2 000007ad: SWAP1 000007ae: POP 000007af: POP 000007b0: POP 000007b1: PUSH2 0x1d56 000007b4: JUMP 000007b5: JUMPDEST 000007b6: PUSH1 0x40 000007b8: MLOAD 000007b9: DUP1 000007ba: DUP8 000007bb: DUP2 000007bc: MSTORE 000007bd: PUSH1 0x20 000007bf: ADD 000007c0: DUP7 000007c1: DUP2 000007c2: MSTORE 000007c3: PUSH1 0x20 000007c5: ADD 000007c6: DUP6 000007c7: DUP2 000007c8: MSTORE 000007c9: PUSH1 0x20 000007cb: ADD 000007cc: DUP5 000007cd: DUP2 000007ce: MSTORE 000007cf: PUSH1 0x20 000007d1: ADD 000007d2: DUP4 000007d3: DUP2 000007d4: MSTORE 000007d5: PUSH1 0x20 000007d7: ADD 000007d8: DUP3 000007d9: ISZERO 000007da: ISZERO 000007db: DUP2 000007dc: MSTORE 000007dd: PUSH1 0x20 000007df: ADD 000007e0: SWAP7 000007e1: POP 000007e2: POP 000007e3: POP 000007e4: POP 000007e5: POP 000007e6: POP 000007e7: POP 000007e8: PUSH1 0x40 000007ea: MLOAD 000007eb: DUP1 000007ec: SWAP2 000007ed: SUB 000007ee: SWAP1 000007ef: RETURN 000007f0: JUMPDEST 000007f1: CALLVALUE 000007f2: DUP1 000007f3: ISZERO 000007f4: PUSH2 0x07fc 000007f7: JUMPI 000007f8: PUSH1 0x00 000007fa: DUP1 000007fb: REVERT 000007fc: JUMPDEST 000007fd: POP 000007fe: PUSH2 0x0805 00000801: PUSH2 0x1d9f 00000804: JUMP 00000805: JUMPDEST 00000806: PUSH1 0x40 00000808: MLOAD 00000809: DUP1 0000080a: DUP3 0000080b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000820: AND 00000821: DUP2 00000822: MSTORE 00000823: PUSH1 0x20 00000825: ADD 00000826: SWAP2 00000827: POP 00000828: POP 00000829: PUSH1 0x40 0000082b: MLOAD 0000082c: DUP1 0000082d: SWAP2 0000082e: SUB 0000082f: SWAP1 00000830: RETURN 00000831: JUMPDEST 00000832: CALLVALUE 00000833: DUP1 00000834: ISZERO 00000835: PUSH2 0x083d 00000838: JUMPI 00000839: PUSH1 0x00 0000083b: DUP1 0000083c: REVERT 0000083d: JUMPDEST 0000083e: POP 0000083f: PUSH2 0x0846 00000842: PUSH2 0x1dc9 00000845: JUMP 00000846: JUMPDEST 00000847: PUSH1 0x40 00000849: MLOAD 0000084a: DUP1 0000084b: DUP3 0000084c: ISZERO 0000084d: ISZERO 0000084e: DUP2 0000084f: MSTORE 00000850: PUSH1 0x20 00000852: ADD 00000853: SWAP2 00000854: POP 00000855: POP 00000856: PUSH1 0x40 00000858: MLOAD 00000859: DUP1 0000085a: SWAP2 0000085b: SUB 0000085c: SWAP1 0000085d: RETURN 0000085e: JUMPDEST 0000085f: CALLVALUE 00000860: DUP1 00000861: ISZERO 00000862: PUSH2 0x086a 00000865: JUMPI 00000866: PUSH1 0x00 00000868: DUP1 00000869: REVERT 0000086a: JUMPDEST 0000086b: POP 0000086c: PUSH2 0x0873 0000086f: PUSH2 0x1e21 00000872: JUMP 00000873: JUMPDEST 00000874: PUSH1 0x40 00000876: MLOAD 00000877: DUP1 00000878: DUP3 00000879: DUP2 0000087a: MSTORE 0000087b: PUSH1 0x20 0000087d: ADD 0000087e: SWAP2 0000087f: POP 00000880: POP 00000881: PUSH1 0x40 00000883: MLOAD 00000884: DUP1 00000885: SWAP2 00000886: SUB 00000887: SWAP1 00000888: RETURN 00000889: JUMPDEST 0000088a: PUSH2 0x0891 0000088d: PUSH2 0x1e99 00000890: JUMP 00000891: JUMPDEST 00000892: STOP 00000893: JUMPDEST 00000894: CALLVALUE 00000895: DUP1 00000896: ISZERO 00000897: PUSH2 0x089f 0000089a: JUMPI 0000089b: PUSH1 0x00 0000089d: DUP1 0000089e: REVERT 0000089f: JUMPDEST 000008a0: POP 000008a1: PUSH2 0x08a8 000008a4: PUSH2 0x1fea 000008a7: JUMP 000008a8: JUMPDEST 000008a9: STOP 000008aa: JUMPDEST 000008ab: CALLVALUE 000008ac: DUP1 000008ad: ISZERO 000008ae: PUSH2 0x08b6 000008b1: JUMPI 000008b2: PUSH1 0x00 000008b4: DUP1 000008b5: REVERT 000008b6: JUMPDEST 000008b7: POP 000008b8: PUSH2 0x08bf 000008bb: PUSH2 0x1fef 000008be: JUMP 000008bf: JUMPDEST 000008c0: STOP 000008c1: JUMPDEST 000008c2: CALLVALUE 000008c3: DUP1 000008c4: ISZERO 000008c5: PUSH2 0x08cd 000008c8: JUMPI 000008c9: PUSH1 0x00 000008cb: DUP1 000008cc: REVERT 000008cd: JUMPDEST 000008ce: POP 000008cf: PUSH2 0x0910 000008d2: PUSH1 0x04 000008d4: DUP1 000008d5: CALLDATASIZE 000008d6: SUB 000008d7: PUSH1 0x20 000008d9: DUP2 000008da: LT 000008db: ISZERO 000008dc: PUSH2 0x08e4 000008df: JUMPI 000008e0: PUSH1 0x00 000008e2: DUP1 000008e3: REVERT 000008e4: JUMPDEST 000008e5: DUP2 000008e6: ADD 000008e7: SWAP1 000008e8: DUP1 000008e9: DUP1 000008ea: CALLDATALOAD 000008eb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000900: AND 00000901: SWAP1 00000902: PUSH1 0x20 00000904: ADD 00000905: SWAP1 00000906: SWAP3 00000907: SWAP2 00000908: SWAP1 00000909: POP 0000090a: POP 0000090b: POP 0000090c: PUSH2 0x203e 0000090f: JUMP 00000910: JUMPDEST 00000911: PUSH1 0x40 00000913: MLOAD 00000914: DUP1 00000915: DUP3 00000916: DUP2 00000917: MSTORE 00000918: PUSH1 0x20 0000091a: ADD 0000091b: SWAP2 0000091c: POP 0000091d: POP 0000091e: PUSH1 0x40 00000920: MLOAD 00000921: DUP1 00000922: SWAP2 00000923: SUB 00000924: SWAP1 00000925: RETURN 00000926: JUMPDEST 00000927: CALLVALUE 00000928: DUP1 00000929: ISZERO 0000092a: PUSH2 0x0932 0000092d: JUMPI 0000092e: PUSH1 0x00 00000930: DUP1 00000931: REVERT 00000932: JUMPDEST 00000933: POP 00000934: PUSH2 0x099f 00000937: PUSH1 0x04 00000939: DUP1 0000093a: CALLDATASIZE 0000093b: SUB 0000093c: PUSH1 0x60 0000093e: DUP2 0000093f: LT 00000940: ISZERO 00000941: PUSH2 0x0949 00000944: JUMPI 00000945: PUSH1 0x00 00000947: DUP1 00000948: REVERT 00000949: JUMPDEST 0000094a: DUP2 0000094b: ADD 0000094c: SWAP1 0000094d: DUP1 0000094e: DUP1 0000094f: CALLDATALOAD 00000950: SWAP1 00000951: PUSH1 0x20 00000953: ADD 00000954: SWAP1 00000955: SWAP3 00000956: SWAP2 00000957: SWAP1 00000958: DUP1 00000959: CALLDATALOAD 0000095a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000096f: AND 00000970: SWAP1 00000971: PUSH1 0x20 00000973: ADD 00000974: SWAP1 00000975: SWAP3 00000976: SWAP2 00000977: SWAP1 00000978: DUP1 00000979: CALLDATALOAD 0000097a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000098f: AND 00000990: SWAP1 00000991: PUSH1 0x20 00000993: ADD 00000994: SWAP1 00000995: SWAP3 00000996: SWAP2 00000997: SWAP1 00000998: POP 00000999: POP 0000099a: POP 0000099b: PUSH2 0x213f 0000099e: JUMP 0000099f: JUMPDEST 000009a0: STOP 000009a1: JUMPDEST 000009a2: CALLVALUE 000009a3: DUP1 000009a4: ISZERO 000009a5: PUSH2 0x09ad 000009a8: JUMPI 000009a9: PUSH1 0x00 000009ab: DUP1 000009ac: REVERT 000009ad: JUMPDEST 000009ae: POP 000009af: PUSH2 0x09b6 000009b2: PUSH2 0x0c8a 000009b5: JUMP 000009b6: JUMPDEST 000009b7: PUSH1 0x40 000009b9: MLOAD 000009ba: DUP1 000009bb: DUP3 000009bc: ISZERO 000009bd: ISZERO 000009be: DUP2 000009bf: MSTORE 000009c0: PUSH1 0x20 000009c2: ADD 000009c3: SWAP2 000009c4: POP 000009c5: POP 000009c6: PUSH1 0x40 000009c8: MLOAD 000009c9: DUP1 000009ca: SWAP2 000009cb: SUB 000009cc: SWAP1 000009cd: RETURN 000009ce: JUMPDEST 000009cf: CALLVALUE 000009d0: DUP1 000009d1: ISZERO 000009d2: PUSH2 0x09da 000009d5: JUMPI 000009d6: PUSH1 0x00 000009d8: DUP1 000009d9: REVERT 000009da: JUMPDEST 000009db: POP 000009dc: PUSH2 0x0a1d 000009df: PUSH1 0x04 000009e1: DUP1 000009e2: CALLDATASIZE 000009e3: SUB 000009e4: PUSH1 0x20 000009e6: DUP2 000009e7: LT 000009e8: ISZERO 000009e9: PUSH2 0x09f1 000009ec: JUMPI 000009ed: PUSH1 0x00 000009ef: DUP1 000009f0: REVERT 000009f1: JUMPDEST 000009f2: DUP2 000009f3: ADD 000009f4: SWAP1 000009f5: DUP1 000009f6: DUP1 000009f7: CALLDATALOAD 000009f8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000a0d: AND 00000a0e: SWAP1 00000a0f: PUSH1 0x20 00000a11: ADD 00000a12: SWAP1 00000a13: SWAP3 00000a14: SWAP2 00000a15: SWAP1 00000a16: POP 00000a17: POP 00000a18: POP 00000a19: PUSH2 0x2563 00000a1c: JUMP 00000a1d: JUMPDEST 00000a1e: STOP 00000a1f: JUMPDEST 00000a20: CALLVALUE 00000a21: DUP1 00000a22: ISZERO 00000a23: PUSH2 0x0a2b 00000a26: JUMPI 00000a27: PUSH1 0x00 00000a29: DUP1 00000a2a: REVERT 00000a2b: JUMPDEST 00000a2c: POP 00000a2d: PUSH2 0x0a34 00000a30: PUSH2 0x2824 00000a33: JUMP 00000a34: JUMPDEST 00000a35: PUSH1 0x40 00000a37: MLOAD 00000a38: DUP1 00000a39: DUP3 00000a3a: DUP2 00000a3b: MSTORE 00000a3c: PUSH1 0x20 00000a3e: ADD 00000a3f: SWAP2 00000a40: POP 00000a41: POP 00000a42: PUSH1 0x40 00000a44: MLOAD 00000a45: DUP1 00000a46: SWAP2 00000a47: SUB 00000a48: SWAP1 00000a49: RETURN 00000a4a: JUMPDEST 00000a4b: CALLVALUE 00000a4c: DUP1 00000a4d: ISZERO 00000a4e: PUSH2 0x0a56 00000a51: JUMPI 00000a52: PUSH1 0x00 00000a54: DUP1 00000a55: REVERT 00000a56: JUMPDEST 00000a57: POP 00000a58: PUSH2 0x0a83 00000a5b: PUSH1 0x04 00000a5d: DUP1 00000a5e: CALLDATASIZE 00000a5f: SUB 00000a60: PUSH1 0x20 00000a62: DUP2 00000a63: LT 00000a64: ISZERO 00000a65: PUSH2 0x0a6d 00000a68: JUMPI 00000a69: PUSH1 0x00 00000a6b: DUP1 00000a6c: REVERT 00000a6d: JUMPDEST 00000a6e: DUP2 00000a6f: ADD 00000a70: SWAP1 00000a71: DUP1 00000a72: DUP1 00000a73: CALLDATALOAD 00000a74: SWAP1 00000a75: PUSH1 0x20 00000a77: ADD 00000a78: SWAP1 00000a79: SWAP3 00000a7a: SWAP2 00000a7b: SWAP1 00000a7c: POP 00000a7d: POP 00000a7e: POP 00000a7f: PUSH2 0x282a 00000a82: JUMP 00000a83: JUMPDEST 00000a84: STOP 00000a85: JUMPDEST 00000a86: CALLVALUE 00000a87: DUP1 00000a88: ISZERO 00000a89: PUSH2 0x0a91 00000a8c: JUMPI 00000a8d: PUSH1 0x00 00000a8f: DUP1 00000a90: REVERT 00000a91: JUMPDEST 00000a92: POP 00000a93: PUSH2 0x0a9a 00000a96: PUSH2 0x2a4c 00000a99: JUMP 00000a9a: JUMPDEST 00000a9b: PUSH1 0x40 00000a9d: MLOAD 00000a9e: DUP1 00000a9f: DUP3 00000aa0: DUP2 00000aa1: MSTORE 00000aa2: PUSH1 0x20 00000aa4: ADD 00000aa5: SWAP2 00000aa6: POP 00000aa7: POP 00000aa8: PUSH1 0x40 00000aaa: MLOAD 00000aab: DUP1 00000aac: SWAP2 00000aad: SUB 00000aae: SWAP1 00000aaf: RETURN 00000ab0: JUMPDEST 00000ab1: CALLVALUE 00000ab2: DUP1 00000ab3: ISZERO 00000ab4: PUSH2 0x0abc 00000ab7: JUMPI 00000ab8: PUSH1 0x00 00000aba: DUP1 00000abb: REVERT 00000abc: JUMPDEST 00000abd: POP 00000abe: PUSH2 0x0ac5 00000ac1: PUSH2 0x2a6f 00000ac4: JUMP 00000ac5: JUMPDEST 00000ac6: STOP 00000ac7: JUMPDEST 00000ac8: CALLVALUE 00000ac9: DUP1 00000aca: ISZERO 00000acb: PUSH2 0x0ad3 00000ace: JUMPI 00000acf: PUSH1 0x00 00000ad1: DUP1 00000ad2: REVERT 00000ad3: JUMPDEST 00000ad4: POP 00000ad5: PUSH2 0x0adc 00000ad8: PUSH2 0x2bd6 00000adb: JUMP 00000adc: JUMPDEST 00000add: PUSH1 0x40 00000adf: MLOAD 00000ae0: DUP1 00000ae1: DUP3 00000ae2: DUP2 00000ae3: MSTORE 00000ae4: PUSH1 0x20 00000ae6: ADD 00000ae7: SWAP2 00000ae8: POP 00000ae9: POP 00000aea: PUSH1 0x40 00000aec: MLOAD 00000aed: DUP1 00000aee: SWAP2 00000aef: SUB 00000af0: SWAP1 00000af1: RETURN 00000af2: JUMPDEST 00000af3: CALLVALUE 00000af4: DUP1 00000af5: ISZERO 00000af6: PUSH2 0x0afe 00000af9: JUMPI 00000afa: PUSH1 0x00 00000afc: DUP1 00000afd: REVERT 00000afe: JUMPDEST 00000aff: POP 00000b00: PUSH2 0x0b07 00000b03: PUSH2 0x2daf 00000b06: JUMP 00000b07: JUMPDEST 00000b08: PUSH1 0x40 00000b0a: MLOAD 00000b0b: DUP1 00000b0c: DUP3 00000b0d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000b22: AND 00000b23: DUP2 00000b24: MSTORE 00000b25: PUSH1 0x20 00000b27: ADD 00000b28: SWAP2 00000b29: POP 00000b2a: POP 00000b2b: PUSH1 0x40 00000b2d: MLOAD 00000b2e: DUP1 00000b2f: SWAP2 00000b30: SUB 00000b31: SWAP1 00000b32: RETURN 00000b33: JUMPDEST 00000b34: CALLVALUE 00000b35: DUP1 00000b36: ISZERO 00000b37: PUSH2 0x0b3f 00000b3a: JUMPI 00000b3b: PUSH1 0x00 00000b3d: DUP1 00000b3e: REVERT 00000b3f: JUMPDEST 00000b40: POP 00000b41: PUSH2 0x0b48 00000b44: PUSH2 0x2dd5 00000b47: JUMP 00000b48: JUMPDEST 00000b49: PUSH1 0x40 00000b4b: MLOAD 00000b4c: DUP1 00000b4d: DUP3 00000b4e: DUP2 00000b4f: MSTORE 00000b50: PUSH1 0x20 00000b52: ADD 00000b53: SWAP2 00000b54: POP 00000b55: POP 00000b56: PUSH1 0x40 00000b58: MLOAD 00000b59: DUP1 00000b5a: SWAP2 00000b5b: SUB 00000b5c: SWAP1 00000b5d: RETURN 00000b5e: JUMPDEST 00000b5f: CALLVALUE 00000b60: DUP1 00000b61: ISZERO 00000b62: PUSH2 0x0b6a 00000b65: JUMPI 00000b66: PUSH1 0x00 00000b68: DUP1 00000b69: REVERT 00000b6a: JUMPDEST 00000b6b: POP 00000b6c: PUSH2 0x0b73 00000b6f: PUSH2 0x2ddb 00000b72: JUMP 00000b73: JUMPDEST 00000b74: STOP 00000b75: JUMPDEST 00000b76: CALLVALUE 00000b77: DUP1 00000b78: ISZERO 00000b79: PUSH2 0x0b81 00000b7c: JUMPI 00000b7d: PUSH1 0x00 00000b7f: DUP1 00000b80: REVERT 00000b81: JUMPDEST 00000b82: POP 00000b83: PUSH2 0x0bc4 00000b86: PUSH1 0x04 00000b88: DUP1 00000b89: CALLDATASIZE 00000b8a: SUB 00000b8b: PUSH1 0x20 00000b8d: DUP2 00000b8e: LT 00000b8f: ISZERO 00000b90: PUSH2 0x0b98 00000b93: JUMPI 00000b94: PUSH1 0x00 00000b96: DUP1 00000b97: REVERT 00000b98: JUMPDEST 00000b99: DUP2 00000b9a: ADD 00000b9b: SWAP1 00000b9c: DUP1 00000b9d: DUP1 00000b9e: CALLDATALOAD 00000b9f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000bb4: AND 00000bb5: SWAP1 00000bb6: PUSH1 0x20 00000bb8: ADD 00000bb9: SWAP1 00000bba: SWAP3 00000bbb: SWAP2 00000bbc: SWAP1 00000bbd: POP 00000bbe: POP 00000bbf: POP 00000bc0: PUSH2 0x2ef5 00000bc3: JUMP 00000bc4: JUMPDEST 00000bc5: STOP 00000bc6: JUMPDEST 00000bc7: CALLVALUE 00000bc8: DUP1 00000bc9: ISZERO 00000bca: PUSH2 0x0bd2 00000bcd: JUMPI 00000bce: PUSH1 0x00 00000bd0: DUP1 00000bd1: REVERT 00000bd2: JUMPDEST 00000bd3: POP 00000bd4: PUSH2 0x0bdb 00000bd7: PUSH2 0x2f12 00000bda: JUMP 00000bdb: JUMPDEST 00000bdc: STOP 00000bdd: JUMPDEST 00000bde: CALLVALUE 00000bdf: DUP1 00000be0: ISZERO 00000be1: PUSH2 0x0be9 00000be4: JUMPI 00000be5: PUSH1 0x00 00000be7: DUP1 00000be8: REVERT 00000be9: JUMPDEST 00000bea: POP 00000beb: PUSH2 0x0bf2 00000bee: PUSH2 0x0cc7 00000bf1: JUMP 00000bf2: JUMPDEST 00000bf3: PUSH1 0x40 00000bf5: MLOAD 00000bf6: DUP1 00000bf7: DUP3 00000bf8: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c0d: AND 00000c0e: DUP2 00000c0f: MSTORE 00000c10: PUSH1 0x20 00000c12: ADD 00000c13: SWAP2 00000c14: POP 00000c15: POP 00000c16: PUSH1 0x40 00000c18: MLOAD 00000c19: DUP1 00000c1a: SWAP2 00000c1b: SUB 00000c1c: SWAP1 00000c1d: RETURN 00000c1e: JUMPDEST 00000c1f: CALLVALUE 00000c20: DUP1 00000c21: ISZERO 00000c22: PUSH2 0x0c2a 00000c25: JUMPI 00000c26: PUSH1 0x00 00000c28: DUP1 00000c29: REVERT 00000c2a: JUMPDEST 00000c2b: POP 00000c2c: PUSH2 0x0c33 00000c2f: PUSH2 0x3183 00000c32: JUMP 00000c33: JUMPDEST 00000c34: PUSH1 0x40 00000c36: MLOAD 00000c37: DUP1 00000c38: DUP3 00000c39: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000c4e: AND 00000c4f: DUP2 00000c50: MSTORE 00000c51: PUSH1 0x20 00000c53: ADD 00000c54: SWAP2 00000c55: POP 00000c56: POP 00000c57: PUSH1 0x40 00000c59: MLOAD 00000c5a: DUP1 00000c5b: SWAP2 00000c5c: SUB 00000c5d: SWAP1 00000c5e: RETURN 00000c5f: JUMPDEST 00000c60: CALLVALUE 00000c61: DUP1 00000c62: ISZERO 00000c63: PUSH2 0x0c6b 00000c66: JUMPI 00000c67: PUSH1 0x00 00000c69: DUP1 00000c6a: REVERT 00000c6b: JUMPDEST 00000c6c: POP 00000c6d: PUSH2 0x0c74 00000c70: PUSH2 0x31a9 00000c73: JUMP 00000c74: JUMPDEST 00000c75: PUSH1 0x40 00000c77: MLOAD 00000c78: DUP1 00000c79: DUP3 00000c7a: DUP2 00000c7b: MSTORE 00000c7c: PUSH1 0x20 00000c7e: ADD 00000c7f: SWAP2 00000c80: POP 00000c81: POP 00000c82: PUSH1 0x40 00000c84: MLOAD 00000c85: DUP1 00000c86: SWAP2 00000c87: SUB 00000c88: SWAP1 00000c89: RETURN 00000c8a: JUMPDEST 00000c8b: PUSH1 0x00 00000c8d: PUSH2 0x0c94 00000c90: PUSH2 0x1d9f 00000c93: JUMP 00000c94: JUMPDEST 00000c95: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000caa: AND 00000cab: CALLER 00000cac: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000cc1: AND 00000cc2: EQ 00000cc3: SWAP1 00000cc4: POP 00000cc5: SWAP1 00000cc6: JUMP 00000cc7: JUMPDEST 00000cc8: PUSH1 0x00 00000cca: PUSH1 0x33 00000ccc: PUSH1 0x00 00000cce: SWAP1 00000ccf: SLOAD 00000cd0: SWAP1 00000cd1: PUSH2 0x0100 00000cd4: EXP 00000cd5: SWAP1 00000cd6: DIV 00000cd7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000cec: AND 00000ced: SWAP1 00000cee: POP 00000cef: SWAP1 00000cf0: JUMP 00000cf1: JUMPDEST 00000cf2: PUSH1 0x00 00000cf4: DUP1 00000cf5: PUSH1 0x00 00000cf7: PUSH32 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 00000d18: PUSH1 0x00 00000d1a: SHL 00000d1b: SWAP1 00000d1c: POP 00000d1d: DUP4 00000d1e: EXTCODEHASH 00000d1f: SWAP2 00000d20: POP 00000d21: DUP1 00000d22: DUP3 00000d23: EQ 00000d24: ISZERO 00000d25: DUP1 00000d26: ISZERO 00000d27: PUSH2 0x0d33 00000d2a: JUMPI 00000d2b: POP 00000d2c: PUSH1 0x00 00000d2e: DUP1 00000d2f: SHL 00000d30: DUP3 00000d31: EQ 00000d32: ISZERO 00000d33: JUMPDEST 00000d34: SWAP3 00000d35: POP 00000d36: POP 00000d37: POP 00000d38: SWAP2 00000d39: SWAP1 00000d3a: POP 00000d3b: JUMP 00000d3c: JUMPDEST 00000d3d: PUSH2 0x0d44 00000d40: PUSH2 0x1dc9 00000d43: JUMP 00000d44: JUMPDEST 00000d45: PUSH2 0x0d4d 00000d48: JUMPI 00000d49: PUSH1 0x00 00000d4b: DUP1 00000d4c: REVERT 00000d4d: JUMPDEST 00000d4e: PUSH1 0x01 00000d50: PUSH1 0x43 00000d52: PUSH1 0x00 00000d54: PUSH2 0x0100 00000d57: EXP 00000d58: DUP2 00000d59: SLOAD 00000d5a: DUP2 00000d5b: PUSH1 0xff 00000d5d: MUL 00000d5e: NOT 00000d5f: AND 00000d60: SWAP1 00000d61: DUP4 00000d62: ISZERO 00000d63: ISZERO 00000d64: MUL 00000d65: OR 00000d66: SWAP1 00000d67: SSTORE 00000d68: POP 00000d69: CALLER 00000d6a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000d7f: AND 00000d80: PUSH32 0x253d168400dbaa135c6dbe7f3fd2374b51e13720d19e0211995a106cdb4b7094 00000da1: PUSH1 0x43 00000da3: PUSH1 0x00 00000da5: SWAP1 00000da6: SLOAD 00000da7: SWAP1 00000da8: PUSH2 0x0100 00000dab: EXP 00000dac: SWAP1 00000dad: DIV 00000dae: PUSH1 0xff 00000db0: AND 00000db1: PUSH1 0x40 00000db3: MLOAD 00000db4: DUP1 00000db5: DUP3 00000db6: ISZERO 00000db7: ISZERO 00000db8: DUP2 00000db9: MSTORE 00000dba: PUSH1 0x20 00000dbc: ADD 00000dbd: SWAP2 00000dbe: POP 00000dbf: POP 00000dc0: PUSH1 0x40 00000dc2: MLOAD 00000dc3: DUP1 00000dc4: SWAP2 00000dc5: SUB 00000dc6: SWAP1 00000dc7: LOG2 00000dc8: JUMP 00000dc9: JUMPDEST 00000dca: PUSH1 0x00 00000dcc: PUSH2 0x0dd4 00000dcf: CALLER 00000dd0: PUSH2 0x1740 00000dd3: JUMP 00000dd4: JUMPDEST 00000dd5: SWAP1 00000dd6: POP 00000dd7: PUSH1 0x00 00000dd9: DUP2 00000dda: GT 00000ddb: PUSH2 0x0e2f 00000dde: JUMPI 00000ddf: PUSH1 0x40 00000de1: MLOAD 00000de2: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00000e03: DUP2 00000e04: MSTORE 00000e05: PUSH1 0x04 00000e07: ADD 00000e08: DUP1 00000e09: DUP1 00000e0a: PUSH1 0x20 00000e0c: ADD 00000e0d: DUP3 00000e0e: DUP2 00000e0f: SUB 00000e10: DUP3 00000e11: MSTORE 00000e12: PUSH1 0x25 00000e14: DUP2 00000e15: MSTORE 00000e16: PUSH1 0x20 00000e18: ADD 00000e19: DUP1 00000e1a: PUSH2 0x3820 00000e1d: PUSH1 0x25 00000e1f: SWAP2 00000e20: CODECOPY 00000e21: PUSH1 0x40 00000e23: ADD 00000e24: SWAP2 00000e25: POP 00000e26: POP 00000e27: PUSH1 0x40 00000e29: MLOAD 00000e2a: DUP1 00000e2b: SWAP2 00000e2c: SUB 00000e2d: SWAP1 00000e2e: REVERT 00000e2f: JUMPDEST 00000e30: PUSH1 0x00 00000e32: PUSH1 0x42 00000e34: PUSH1 0x00 00000e36: CALLER 00000e37: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e4c: AND 00000e4d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000e62: AND 00000e63: DUP2 00000e64: MSTORE 00000e65: PUSH1 0x20 00000e67: ADD 00000e68: SWAP1 00000e69: DUP2 00000e6a: MSTORE 00000e6b: PUSH1 0x20 00000e6d: ADD 00000e6e: PUSH1 0x00 00000e70: KECCAK256 00000e71: SWAP1 00000e72: POP 00000e73: PUSH2 0x0e89 00000e76: DUP3 00000e77: DUP3 00000e78: PUSH1 0x04 00000e7a: ADD 00000e7b: SLOAD 00000e7c: PUSH2 0x31af 00000e7f: SWAP1 00000e80: SWAP2 00000e81: SWAP1 00000e82: PUSH4 0xffffffff 00000e87: AND 00000e88: JUMP 00000e89: JUMPDEST 00000e8a: DUP2 00000e8b: PUSH1 0x04 00000e8d: ADD 00000e8e: DUP2 00000e8f: SWAP1 00000e90: SSTORE 00000e91: POP 00000e92: PUSH2 0x0ea6 00000e95: DUP3 00000e96: PUSH1 0x3f 00000e98: SLOAD 00000e99: PUSH2 0x31af 00000e9c: SWAP1 00000e9d: SWAP2 00000e9e: SWAP1 00000e9f: PUSH4 0xffffffff 00000ea4: AND 00000ea5: JUMP 00000ea6: JUMPDEST 00000ea7: PUSH1 0x3f 00000ea9: DUP2 00000eaa: SWAP1 00000eab: SSTORE 00000eac: POP 00000ead: PUSH2 0x0ed5 00000eb0: DUP3 00000eb1: CALLER 00000eb2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000ec7: AND 00000ec8: PUSH2 0x31ce 00000ecb: SWAP1 00000ecc: SWAP2 00000ecd: SWAP1 00000ece: PUSH4 0xffffffff 00000ed3: AND 00000ed4: JUMP 00000ed5: JUMPDEST 00000ed6: CALLER 00000ed7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000eec: AND 00000eed: PUSH32 0xbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d 00000f0e: DUP4 00000f0f: PUSH1 0x40 00000f11: MLOAD 00000f12: DUP1 00000f13: DUP3 00000f14: DUP2 00000f15: MSTORE 00000f16: PUSH1 0x20 00000f18: ADD 00000f19: SWAP2 00000f1a: POP 00000f1b: POP 00000f1c: PUSH1 0x40 00000f1e: MLOAD 00000f1f: DUP1 00000f20: SWAP2 00000f21: SUB 00000f22: SWAP1 00000f23: LOG2 00000f24: POP 00000f25: POP 00000f26: JUMP 00000f27: JUMPDEST 00000f28: PUSH1 0x37 00000f2a: PUSH1 0x00 00000f2c: SWAP1 00000f2d: SLOAD 00000f2e: SWAP1 00000f2f: PUSH2 0x0100 00000f32: EXP 00000f33: SWAP1 00000f34: DIV 00000f35: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f4a: AND 00000f4b: DUP2 00000f4c: JUMP 00000f4d: JUMPDEST 00000f4e: PUSH1 0x41 00000f50: SLOAD 00000f51: DUP2 00000f52: JUMP 00000f53: JUMPDEST 00000f54: PUSH1 0x00 00000f56: PUSH1 0x34 00000f58: PUSH1 0x00 00000f5a: SWAP1 00000f5b: SLOAD 00000f5c: SWAP1 00000f5d: PUSH2 0x0100 00000f60: EXP 00000f61: SWAP1 00000f62: DIV 00000f63: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f78: AND 00000f79: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000f8e: AND 00000f8f: PUSH4 0x70a08231 00000f94: ADDRESS 00000f95: PUSH1 0x40 00000f97: MLOAD 00000f98: DUP3 00000f99: PUSH4 0xffffffff 00000f9e: AND 00000f9f: PUSH1 0xe0 00000fa1: SHL 00000fa2: DUP2 00000fa3: MSTORE 00000fa4: PUSH1 0x04 00000fa6: ADD 00000fa7: DUP1 00000fa8: DUP3 00000fa9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00000fbe: AND 00000fbf: DUP2 00000fc0: MSTORE 00000fc1: PUSH1 0x20 00000fc3: ADD 00000fc4: SWAP2 00000fc5: POP 00000fc6: POP 00000fc7: PUSH1 0x20 00000fc9: PUSH1 0x40 00000fcb: MLOAD 00000fcc: DUP1 00000fcd: DUP4 00000fce: SUB 00000fcf: DUP2 00000fd0: DUP7 00000fd1: DUP1 00000fd2: EXTCODESIZE 00000fd3: ISZERO 00000fd4: DUP1 00000fd5: ISZERO 00000fd6: PUSH2 0x0fde 00000fd9: JUMPI 00000fda: PUSH1 0x00 00000fdc: DUP1 00000fdd: REVERT 00000fde: JUMPDEST 00000fdf: POP 00000fe0: GAS 00000fe1: STATICCALL 00000fe2: ISZERO 00000fe3: DUP1 00000fe4: ISZERO 00000fe5: PUSH2 0x0ff2 00000fe8: JUMPI 00000fe9: RETURNDATASIZE 00000fea: PUSH1 0x00 00000fec: DUP1 00000fed: RETURNDATACOPY 00000fee: RETURNDATASIZE 00000fef: PUSH1 0x00 00000ff1: REVERT 00000ff2: JUMPDEST 00000ff3: POP 00000ff4: POP 00000ff5: POP 00000ff6: POP 00000ff7: PUSH1 0x40 00000ff9: MLOAD 00000ffa: RETURNDATASIZE 00000ffb: PUSH1 0x20 00000ffd: DUP2 00000ffe: LT 00000fff: ISZERO 00001000: PUSH2 0x1008 00001003: JUMPI 00001004: PUSH1 0x00 00001006: DUP1 00001007: REVERT 00001008: JUMPDEST 00001009: DUP2 0000100a: ADD 0000100b: SWAP1 0000100c: DUP1 0000100d: DUP1 0000100e: MLOAD 0000100f: SWAP1 00001010: PUSH1 0x20 00001012: ADD 00001013: SWAP1 00001014: SWAP3 00001015: SWAP2 00001016: SWAP1 00001017: POP 00001018: POP 00001019: POP 0000101a: SWAP1 0000101b: POP 0000101c: DUP1 0000101d: DUP3 0000101e: GT 0000101f: ISZERO 00001020: PUSH2 0x1074 00001023: JUMPI 00001024: PUSH1 0x40 00001026: MLOAD 00001027: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001048: DUP2 00001049: MSTORE 0000104a: PUSH1 0x04 0000104c: ADD 0000104d: DUP1 0000104e: DUP1 0000104f: PUSH1 0x20 00001051: ADD 00001052: DUP3 00001053: DUP2 00001054: SUB 00001055: DUP3 00001056: MSTORE 00001057: PUSH1 0x21 00001059: DUP2 0000105a: MSTORE 0000105b: PUSH1 0x20 0000105d: ADD 0000105e: DUP1 0000105f: PUSH2 0x37a9 00001062: PUSH1 0x21 00001064: SWAP2 00001065: CODECOPY 00001066: PUSH1 0x40 00001068: ADD 00001069: SWAP2 0000106a: POP 0000106b: POP 0000106c: PUSH1 0x40 0000106e: MLOAD 0000106f: DUP1 00001070: SWAP2 00001071: SUB 00001072: SWAP1 00001073: REVERT 00001074: JUMPDEST 00001075: PUSH1 0x00 00001077: PUSH1 0x42 00001079: PUSH1 0x00 0000107b: CALLER 0000107c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001091: AND 00001092: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000010a7: AND 000010a8: DUP2 000010a9: MSTORE 000010aa: PUSH1 0x20 000010ac: ADD 000010ad: SWAP1 000010ae: DUP2 000010af: MSTORE 000010b0: PUSH1 0x20 000010b2: ADD 000010b3: PUSH1 0x00 000010b5: KECCAK256 000010b6: SWAP1 000010b7: POP 000010b8: PUSH2 0x10c0 000010bb: DUP2 000010bc: PUSH2 0x331f 000010bf: JUMP 000010c0: JUMPDEST 000010c1: PUSH1 0x00 000010c3: PUSH2 0x10cb 000010c6: CALLER 000010c7: PUSH2 0x1221 000010ca: JUMP 000010cb: JUMPDEST 000010cc: SWAP1 000010cd: POP 000010ce: DUP1 000010cf: DUP5 000010d0: GT 000010d1: ISZERO 000010d2: PUSH2 0x1126 000010d5: JUMPI 000010d6: PUSH1 0x40 000010d8: MLOAD 000010d9: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000010fa: DUP2 000010fb: MSTORE 000010fc: PUSH1 0x04 000010fe: ADD 000010ff: DUP1 00001100: DUP1 00001101: PUSH1 0x20 00001103: ADD 00001104: DUP3 00001105: DUP2 00001106: SUB 00001107: DUP3 00001108: MSTORE 00001109: PUSH1 0x33 0000110b: DUP2 0000110c: MSTORE 0000110d: PUSH1 0x20 0000110f: ADD 00001110: DUP1 00001111: PUSH2 0x3776 00001114: PUSH1 0x33 00001116: SWAP2 00001117: CODECOPY 00001118: PUSH1 0x40 0000111a: ADD 0000111b: SWAP2 0000111c: POP 0000111d: POP 0000111e: PUSH1 0x40 00001120: MLOAD 00001121: DUP1 00001122: SWAP2 00001123: SUB 00001124: SWAP1 00001125: REVERT 00001126: JUMPDEST 00001127: PUSH2 0x113d 0000112a: DUP5 0000112b: DUP4 0000112c: PUSH1 0x01 0000112e: ADD 0000112f: SLOAD 00001130: PUSH2 0x31af 00001133: SWAP1 00001134: SWAP2 00001135: SWAP1 00001136: PUSH4 0xffffffff 0000113b: AND 0000113c: JUMP 0000113d: JUMPDEST 0000113e: DUP3 0000113f: PUSH1 0x01 00001141: ADD 00001142: DUP2 00001143: SWAP1 00001144: SSTORE 00001145: POP 00001146: PUSH2 0x115a 00001149: DUP5 0000114a: PUSH1 0x3b 0000114c: SLOAD 0000114d: PUSH2 0x31af 00001150: SWAP1 00001151: SWAP2 00001152: SWAP1 00001153: PUSH4 0xffffffff 00001158: AND 00001159: JUMP 0000115a: JUMPDEST 0000115b: PUSH1 0x3b 0000115d: DUP2 0000115e: SWAP1 0000115f: SSTORE 00001160: POP 00001161: PUSH2 0x11ad 00001164: CALLER 00001165: DUP6 00001166: PUSH1 0x34 00001168: PUSH1 0x00 0000116a: SWAP1 0000116b: SLOAD 0000116c: SWAP1 0000116d: PUSH2 0x0100 00001170: EXP 00001171: SWAP1 00001172: DIV 00001173: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001188: AND 00001189: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000119e: AND 0000119f: PUSH2 0x3417 000011a2: SWAP1 000011a3: SWAP3 000011a4: SWAP2 000011a5: SWAP1 000011a6: PUSH4 0xffffffff 000011ab: AND 000011ac: JUMP 000011ad: JUMPDEST 000011ae: CALLER 000011af: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000011c4: AND 000011c5: PUSH32 0xffe903c0abe6b2dbb2f3474ef43d7a3c1fca49e5a774453423ca8e1952aabffa 000011e6: DUP6 000011e7: DUP5 000011e8: PUSH1 0x00 000011ea: ADD 000011eb: SLOAD 000011ec: PUSH1 0x40 000011ee: MLOAD 000011ef: DUP1 000011f0: DUP4 000011f1: DUP2 000011f2: MSTORE 000011f3: PUSH1 0x20 000011f5: ADD 000011f6: DUP3 000011f7: DUP2 000011f8: MSTORE 000011f9: PUSH1 0x20 000011fb: ADD 000011fc: SWAP3 000011fd: POP 000011fe: POP 000011ff: POP 00001200: PUSH1 0x40 00001202: MLOAD 00001203: DUP1 00001204: SWAP2 00001205: SUB 00001206: SWAP1 00001207: LOG2 00001208: POP 00001209: POP 0000120a: POP 0000120b: POP 0000120c: JUMP 0000120d: JUMPDEST 0000120e: PUSH1 0x00 00001210: PUSH1 0x40 00001212: SLOAD 00001213: SWAP1 00001214: POP 00001215: SWAP1 00001216: JUMP 00001217: JUMPDEST 00001218: PUSH1 0x64 0000121a: DUP2 0000121b: JUMP 0000121c: JUMPDEST 0000121d: PUSH1 0x00 0000121f: DUP1 00001220: REVERT 00001221: JUMPDEST 00001222: PUSH1 0x00 00001224: DUP1 00001225: PUSH1 0x39 00001227: SLOAD 00001228: EQ 00001229: ISZERO 0000122a: PUSH2 0x1236 0000122d: JUMPI 0000122e: PUSH1 0x00 00001230: SWAP1 00001231: POP 00001232: PUSH2 0x1309 00001235: JUMP 00001236: JUMPDEST 00001237: PUSH1 0x00 00001239: PUSH2 0x1240 0000123c: PUSH2 0x2a4c 0000123f: JUMP 00001240: JUMPDEST 00001241: SWAP1 00001242: POP 00001243: PUSH1 0x00 00001245: PUSH1 0x42 00001247: PUSH1 0x00 00001249: DUP6 0000124a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000125f: AND 00001260: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001275: AND 00001276: DUP2 00001277: MSTORE 00001278: PUSH1 0x20 0000127a: ADD 0000127b: SWAP1 0000127c: DUP2 0000127d: MSTORE 0000127e: PUSH1 0x20 00001280: ADD 00001281: PUSH1 0x00 00001283: KECCAK256 00001284: SWAP1 00001285: POP 00001286: PUSH1 0x00 00001288: PUSH2 0x128f 0000128b: PUSH2 0x120d 0000128e: JUMP 0000128f: JUMPDEST 00001290: SWAP1 00001291: POP 00001292: PUSH1 0x00 00001294: PUSH2 0x12e6 00001297: PUSH2 0x12ac 0000129a: PUSH1 0x64 0000129c: PUSH1 0x39 0000129e: SLOAD 0000129f: PUSH2 0x34d1 000012a2: SWAP1 000012a3: SWAP2 000012a4: SWAP1 000012a5: PUSH4 0xffffffff 000012aa: AND 000012ab: JUMP 000012ac: JUMPDEST 000012ad: PUSH2 0x12d8 000012b0: DUP5 000012b1: PUSH1 0x64 000012b3: SUB 000012b4: PUSH2 0x12ca 000012b7: DUP8 000012b8: PUSH1 0x00 000012ba: ADD 000012bb: SLOAD 000012bc: DUP10 000012bd: PUSH2 0x34d1 000012c0: SWAP1 000012c1: SWAP2 000012c2: SWAP1 000012c3: PUSH4 0xffffffff 000012c8: AND 000012c9: JUMP 000012ca: JUMPDEST 000012cb: PUSH2 0x34d1 000012ce: SWAP1 000012cf: SWAP2 000012d0: SWAP1 000012d1: PUSH4 0xffffffff 000012d6: AND 000012d7: JUMP 000012d8: JUMPDEST 000012d9: PUSH2 0x350b 000012dc: SWAP1 000012dd: SWAP2 000012de: SWAP1 000012df: PUSH4 0xffffffff 000012e4: AND 000012e5: JUMP 000012e6: JUMPDEST 000012e7: SWAP1 000012e8: POP 000012e9: DUP3 000012ea: PUSH1 0x01 000012ec: ADD 000012ed: SLOAD 000012ee: DUP2 000012ef: GT 000012f0: PUSH2 0x12fa 000012f3: JUMPI 000012f4: PUSH1 0x00 000012f6: PUSH2 0x1302 000012f9: JUMP 000012fa: JUMPDEST 000012fb: DUP3 000012fc: PUSH1 0x01 000012fe: ADD 000012ff: SLOAD 00001300: DUP2 00001301: SUB 00001302: JUMPDEST 00001303: SWAP5 00001304: POP 00001305: POP 00001306: POP 00001307: POP 00001308: POP 00001309: JUMPDEST 0000130a: SWAP2 0000130b: SWAP1 0000130c: POP 0000130d: JUMP 0000130e: JUMPDEST 0000130f: PUSH1 0x00 00001311: DUP1 00001312: REVERT 00001313: JUMPDEST 00001314: PUSH1 0x00 00001316: ADDRESS 00001317: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000132c: AND 0000132d: BALANCE 0000132e: SWAP1 0000132f: POP 00001330: PUSH1 0x00 00001332: PUSH1 0x37 00001334: PUSH1 0x00 00001336: SWAP1 00001337: SLOAD 00001338: SWAP1 00001339: PUSH2 0x0100 0000133c: EXP 0000133d: SWAP1 0000133e: DIV 0000133f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001354: AND 00001355: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000136a: AND 0000136b: PUSH4 0x5707bee5 00001370: ADDRESS 00001371: PUSH1 0x40 00001373: MLOAD 00001374: DUP3 00001375: PUSH4 0xffffffff 0000137a: AND 0000137b: PUSH1 0xe0 0000137d: SHL 0000137e: DUP2 0000137f: MSTORE 00001380: PUSH1 0x04 00001382: ADD 00001383: DUP1 00001384: DUP3 00001385: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000139a: AND 0000139b: DUP2 0000139c: MSTORE 0000139d: PUSH1 0x20 0000139f: ADD 000013a0: SWAP2 000013a1: POP 000013a2: POP 000013a3: PUSH1 0x20 000013a5: PUSH1 0x40 000013a7: MLOAD 000013a8: DUP1 000013a9: DUP4 000013aa: SUB 000013ab: DUP2 000013ac: DUP7 000013ad: DUP1 000013ae: EXTCODESIZE 000013af: ISZERO 000013b0: DUP1 000013b1: ISZERO 000013b2: PUSH2 0x13ba 000013b5: JUMPI 000013b6: PUSH1 0x00 000013b8: DUP1 000013b9: REVERT 000013ba: JUMPDEST 000013bb: POP 000013bc: GAS 000013bd: STATICCALL 000013be: ISZERO 000013bf: DUP1 000013c0: ISZERO 000013c1: PUSH2 0x13ce 000013c4: JUMPI 000013c5: RETURNDATASIZE 000013c6: PUSH1 0x00 000013c8: DUP1 000013c9: RETURNDATACOPY 000013ca: RETURNDATASIZE 000013cb: PUSH1 0x00 000013cd: REVERT 000013ce: JUMPDEST 000013cf: POP 000013d0: POP 000013d1: POP 000013d2: POP 000013d3: PUSH1 0x40 000013d5: MLOAD 000013d6: RETURNDATASIZE 000013d7: PUSH1 0x20 000013d9: DUP2 000013da: LT 000013db: ISZERO 000013dc: PUSH2 0x13e4 000013df: JUMPI 000013e0: PUSH1 0x00 000013e2: DUP1 000013e3: REVERT 000013e4: JUMPDEST 000013e5: DUP2 000013e6: ADD 000013e7: SWAP1 000013e8: DUP1 000013e9: DUP1 000013ea: MLOAD 000013eb: SWAP1 000013ec: PUSH1 0x20 000013ee: ADD 000013ef: SWAP1 000013f0: SWAP3 000013f1: SWAP2 000013f2: SWAP1 000013f3: POP 000013f4: POP 000013f5: POP 000013f6: GT 000013f7: ISZERO 000013f8: PUSH2 0x147e 000013fb: JUMPI 000013fc: PUSH1 0x37 000013fe: PUSH1 0x00 00001400: SWAP1 00001401: SLOAD 00001402: SWAP1 00001403: PUSH2 0x0100 00001406: EXP 00001407: SWAP1 00001408: DIV 00001409: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000141e: AND 0000141f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001434: AND 00001435: PUSH4 0x87a15dc9 0000143a: PUSH1 0x40 0000143c: MLOAD 0000143d: DUP2 0000143e: PUSH4 0xffffffff 00001443: AND 00001444: PUSH1 0xe0 00001446: SHL 00001447: DUP2 00001448: MSTORE 00001449: PUSH1 0x04 0000144b: ADD 0000144c: PUSH1 0x00 0000144e: PUSH1 0x40 00001450: MLOAD 00001451: DUP1 00001452: DUP4 00001453: SUB 00001454: DUP2 00001455: PUSH1 0x00 00001457: DUP8 00001458: DUP1 00001459: EXTCODESIZE 0000145a: ISZERO 0000145b: DUP1 0000145c: ISZERO 0000145d: PUSH2 0x1465 00001460: JUMPI 00001461: PUSH1 0x00 00001463: DUP1 00001464: REVERT 00001465: JUMPDEST 00001466: POP 00001467: GAS 00001468: CALL 00001469: ISZERO 0000146a: DUP1 0000146b: ISZERO 0000146c: PUSH2 0x1479 0000146f: JUMPI 00001470: RETURNDATASIZE 00001471: PUSH1 0x00 00001473: DUP1 00001474: RETURNDATACOPY 00001475: RETURNDATASIZE 00001476: PUSH1 0x00 00001478: REVERT 00001479: JUMPDEST 0000147a: POP 0000147b: POP 0000147c: POP 0000147d: POP 0000147e: JUMPDEST 0000147f: PUSH1 0x37 00001481: PUSH1 0x00 00001483: SWAP1 00001484: SLOAD 00001485: SWAP1 00001486: PUSH2 0x0100 00001489: EXP 0000148a: SWAP1 0000148b: DIV 0000148c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000014a1: AND 000014a2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000014b7: AND 000014b8: PUSH4 0x590e1ae3 000014bd: PUSH1 0x40 000014bf: MLOAD 000014c0: DUP2 000014c1: PUSH4 0xffffffff 000014c6: AND 000014c7: PUSH1 0xe0 000014c9: SHL 000014ca: DUP2 000014cb: MSTORE 000014cc: PUSH1 0x04 000014ce: ADD 000014cf: PUSH1 0x20 000014d1: PUSH1 0x40 000014d3: MLOAD 000014d4: DUP1 000014d5: DUP4 000014d6: SUB 000014d7: DUP2 000014d8: PUSH1 0x00 000014da: DUP8 000014db: DUP1 000014dc: EXTCODESIZE 000014dd: ISZERO 000014de: DUP1 000014df: ISZERO 000014e0: PUSH2 0x14e8 000014e3: JUMPI 000014e4: PUSH1 0x00 000014e6: DUP1 000014e7: REVERT 000014e8: JUMPDEST 000014e9: POP 000014ea: GAS 000014eb: CALL 000014ec: ISZERO 000014ed: DUP1 000014ee: ISZERO 000014ef: PUSH2 0x14fc 000014f2: JUMPI 000014f3: RETURNDATASIZE 000014f4: PUSH1 0x00 000014f6: DUP1 000014f7: RETURNDATACOPY 000014f8: RETURNDATASIZE 000014f9: PUSH1 0x00 000014fb: REVERT 000014fc: JUMPDEST 000014fd: POP 000014fe: POP 000014ff: POP 00001500: POP 00001501: PUSH1 0x40 00001503: MLOAD 00001504: RETURNDATASIZE 00001505: PUSH1 0x20 00001507: DUP2 00001508: LT 00001509: ISZERO 0000150a: PUSH2 0x1512 0000150d: JUMPI 0000150e: PUSH1 0x00 00001510: DUP1 00001511: REVERT 00001512: JUMPDEST 00001513: DUP2 00001514: ADD 00001515: SWAP1 00001516: DUP1 00001517: DUP1 00001518: MLOAD 00001519: SWAP1 0000151a: PUSH1 0x20 0000151c: ADD 0000151d: SWAP1 0000151e: SWAP3 0000151f: SWAP2 00001520: SWAP1 00001521: POP 00001522: POP 00001523: POP 00001524: POP 00001525: PUSH1 0x00 00001527: DUP2 00001528: ADDRESS 00001529: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000153e: AND 0000153f: BALANCE 00001540: SUB 00001541: SWAP1 00001542: POP 00001543: PUSH2 0x1557 00001546: DUP2 00001547: PUSH1 0x3e 00001549: SLOAD 0000154a: PUSH2 0x31af 0000154d: SWAP1 0000154e: SWAP2 0000154f: SWAP1 00001550: PUSH4 0xffffffff 00001555: AND 00001556: JUMP 00001557: JUMPDEST 00001558: PUSH1 0x3e 0000155a: DUP2 0000155b: SWAP1 0000155c: SSTORE 0000155d: POP 0000155e: ADDRESS 0000155f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001574: AND 00001575: PUSH32 0xbb28353e4598c3b9199101a66e0989549b659a59a54d2c27fbb183f1932c8e6d 00001596: DUP3 00001597: PUSH1 0x40 00001599: MLOAD 0000159a: DUP1 0000159b: DUP3 0000159c: DUP2 0000159d: MSTORE 0000159e: PUSH1 0x20 000015a0: ADD 000015a1: SWAP2 000015a2: POP 000015a3: POP 000015a4: PUSH1 0x40 000015a6: MLOAD 000015a7: DUP1 000015a8: SWAP2 000015a9: SUB 000015aa: SWAP1 000015ab: LOG2 000015ac: POP 000015ad: POP 000015ae: JUMP 000015af: JUMPDEST 000015b0: PUSH1 0x38 000015b2: PUSH1 0x00 000015b4: SWAP1 000015b5: SLOAD 000015b6: SWAP1 000015b7: PUSH2 0x0100 000015ba: EXP 000015bb: SWAP1 000015bc: DIV 000015bd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000015d2: AND 000015d3: DUP2 000015d4: JUMP 000015d5: JUMPDEST 000015d6: PUSH2 0x15dd 000015d9: PUSH2 0x1dc9 000015dc: JUMP 000015dd: JUMPDEST 000015de: PUSH2 0x15e6 000015e1: JUMPI 000015e2: PUSH1 0x00 000015e4: DUP1 000015e5: REVERT 000015e6: JUMPDEST 000015e7: PUSH1 0x00 000015e9: PUSH1 0x43 000015eb: PUSH1 0x00 000015ed: PUSH2 0x0100 000015f0: EXP 000015f1: DUP2 000015f2: SLOAD 000015f3: DUP2 000015f4: PUSH1 0xff 000015f6: MUL 000015f7: NOT 000015f8: AND 000015f9: SWAP1 000015fa: DUP4 000015fb: ISZERO 000015fc: ISZERO 000015fd: MUL 000015fe: OR 000015ff: SWAP1 00001600: SSTORE 00001601: POP 00001602: CALLER 00001603: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001618: AND 00001619: PUSH32 0x253d168400dbaa135c6dbe7f3fd2374b51e13720d19e0211995a106cdb4b7094 0000163a: PUSH1 0x43 0000163c: PUSH1 0x00 0000163e: SWAP1 0000163f: SLOAD 00001640: SWAP1 00001641: PUSH2 0x0100 00001644: EXP 00001645: SWAP1 00001646: DIV 00001647: PUSH1 0xff 00001649: AND 0000164a: PUSH1 0x40 0000164c: MLOAD 0000164d: DUP1 0000164e: DUP3 0000164f: ISZERO 00001650: ISZERO 00001651: DUP2 00001652: MSTORE 00001653: PUSH1 0x20 00001655: ADD 00001656: SWAP2 00001657: POP 00001658: POP 00001659: PUSH1 0x40 0000165b: MLOAD 0000165c: DUP1 0000165d: SWAP2 0000165e: SUB 0000165f: SWAP1 00001660: LOG2 00001661: JUMP 00001662: JUMPDEST 00001663: PUSH1 0x3d 00001665: SLOAD 00001666: DUP2 00001667: JUMP 00001668: JUMPDEST 00001669: PUSH1 0x3e 0000166b: SLOAD 0000166c: DUP2 0000166d: JUMP 0000166e: JUMPDEST 0000166f: PUSH2 0x1676 00001672: PUSH2 0x1dc9 00001675: JUMP 00001676: JUMPDEST 00001677: PUSH2 0x167f 0000167a: JUMPI 0000167b: PUSH1 0x00 0000167d: DUP1 0000167e: REVERT 0000167f: JUMPDEST 00001680: PUSH1 0x00 00001682: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001697: AND 00001698: PUSH1 0x35 0000169a: PUSH1 0x00 0000169c: SWAP1 0000169d: SLOAD 0000169e: SWAP1 0000169f: PUSH2 0x0100 000016a2: EXP 000016a3: SWAP1 000016a4: DIV 000016a5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000016ba: AND 000016bb: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000016d0: AND 000016d1: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 000016f2: PUSH1 0x40 000016f4: MLOAD 000016f5: PUSH1 0x40 000016f7: MLOAD 000016f8: DUP1 000016f9: SWAP2 000016fa: SUB 000016fb: SWAP1 000016fc: LOG3 000016fd: PUSH1 0x00 000016ff: PUSH1 0x35 00001701: PUSH1 0x00 00001703: PUSH2 0x0100 00001706: EXP 00001707: DUP2 00001708: SLOAD 00001709: DUP2 0000170a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000171f: MUL 00001720: NOT 00001721: AND 00001722: SWAP1 00001723: DUP4 00001724: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001739: AND 0000173a: MUL 0000173b: OR 0000173c: SWAP1 0000173d: SSTORE 0000173e: POP 0000173f: JUMP 00001740: JUMPDEST 00001741: PUSH1 0x00 00001743: DUP1 00001744: PUSH1 0x42 00001746: PUSH1 0x00 00001748: DUP5 00001749: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000175e: AND 0000175f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001774: AND 00001775: DUP2 00001776: MSTORE 00001777: PUSH1 0x20 00001779: ADD 0000177a: SWAP1 0000177b: DUP2 0000177c: MSTORE 0000177d: PUSH1 0x20 0000177f: ADD 00001780: PUSH1 0x00 00001782: KECCAK256 00001783: SWAP1 00001784: POP 00001785: PUSH1 0x00 00001787: PUSH2 0x17b3 0000178a: PUSH1 0x3d 0000178c: SLOAD 0000178d: PUSH2 0x17a5 00001790: DUP5 00001791: PUSH1 0x03 00001793: ADD 00001794: SLOAD 00001795: PUSH1 0x3e 00001797: SLOAD 00001798: PUSH2 0x34d1 0000179b: SWAP1 0000179c: SWAP2 0000179d: SWAP1 0000179e: PUSH4 0xffffffff 000017a3: AND 000017a4: JUMP 000017a5: JUMPDEST 000017a6: PUSH2 0x350b 000017a9: SWAP1 000017aa: SWAP2 000017ab: SWAP1 000017ac: PUSH4 0xffffffff 000017b1: AND 000017b2: JUMP 000017b3: JUMPDEST 000017b4: SWAP1 000017b5: POP 000017b6: PUSH1 0x00 000017b8: PUSH2 0x17ce 000017bb: DUP4 000017bc: PUSH1 0x04 000017be: ADD 000017bf: SLOAD 000017c0: DUP4 000017c1: PUSH2 0x3531 000017c4: SWAP1 000017c5: SWAP2 000017c6: SWAP1 000017c7: PUSH4 0xffffffff 000017cc: AND 000017cd: JUMP 000017ce: JUMPDEST 000017cf: SWAP1 000017d0: POP 000017d1: PUSH1 0x00 000017d3: PUSH2 0x17e9 000017d6: PUSH1 0x3f 000017d8: SLOAD 000017d9: PUSH1 0x3e 000017db: SLOAD 000017dc: PUSH2 0x3531 000017df: SWAP1 000017e0: SWAP2 000017e1: SWAP1 000017e2: PUSH4 0xffffffff 000017e7: AND 000017e8: JUMP 000017e9: JUMPDEST 000017ea: SWAP1 000017eb: POP 000017ec: DUP1 000017ed: DUP3 000017ee: GT 000017ef: ISZERO 000017f0: PUSH2 0x17f7 000017f3: JUMPI 000017f4: DUP1 000017f5: SWAP2 000017f6: POP 000017f7: JUMPDEST 000017f8: DUP2 000017f9: SWAP5 000017fa: POP 000017fb: POP 000017fc: POP 000017fd: POP 000017fe: POP 000017ff: SWAP2 00001800: SWAP1 00001801: POP 00001802: JUMP 00001803: JUMPDEST 00001804: PUSH1 0x3a 00001806: SLOAD 00001807: DUP2 00001808: JUMP 00001809: JUMPDEST 0000180a: PUSH1 0x00 0000180c: PUSH1 0x34 0000180e: PUSH1 0x00 00001810: SWAP1 00001811: SLOAD 00001812: SWAP1 00001813: PUSH2 0x0100 00001816: EXP 00001817: SWAP1 00001818: DIV 00001819: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000182e: AND 0000182f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001844: AND 00001845: PUSH4 0x70a08231 0000184a: ADDRESS 0000184b: PUSH1 0x40 0000184d: MLOAD 0000184e: DUP3 0000184f: PUSH4 0xffffffff 00001854: AND 00001855: PUSH1 0xe0 00001857: SHL 00001858: DUP2 00001859: MSTORE 0000185a: PUSH1 0x04 0000185c: ADD 0000185d: DUP1 0000185e: DUP3 0000185f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001874: AND 00001875: DUP2 00001876: MSTORE 00001877: PUSH1 0x20 00001879: ADD 0000187a: SWAP2 0000187b: POP 0000187c: POP 0000187d: PUSH1 0x20 0000187f: PUSH1 0x40 00001881: MLOAD 00001882: DUP1 00001883: DUP4 00001884: SUB 00001885: DUP2 00001886: DUP7 00001887: DUP1 00001888: EXTCODESIZE 00001889: ISZERO 0000188a: DUP1 0000188b: ISZERO 0000188c: PUSH2 0x1894 0000188f: JUMPI 00001890: PUSH1 0x00 00001892: DUP1 00001893: REVERT 00001894: JUMPDEST 00001895: POP 00001896: GAS 00001897: STATICCALL 00001898: ISZERO 00001899: DUP1 0000189a: ISZERO 0000189b: PUSH2 0x18a8 0000189e: JUMPI 0000189f: RETURNDATASIZE 000018a0: PUSH1 0x00 000018a2: DUP1 000018a3: RETURNDATACOPY 000018a4: RETURNDATASIZE 000018a5: PUSH1 0x00 000018a7: REVERT 000018a8: JUMPDEST 000018a9: POP 000018aa: POP 000018ab: POP 000018ac: POP 000018ad: PUSH1 0x40 000018af: MLOAD 000018b0: RETURNDATASIZE 000018b1: PUSH1 0x20 000018b3: DUP2 000018b4: LT 000018b5: ISZERO 000018b6: PUSH2 0x18be 000018b9: JUMPI 000018ba: PUSH1 0x00 000018bc: DUP1 000018bd: REVERT 000018be: JUMPDEST 000018bf: DUP2 000018c0: ADD 000018c1: SWAP1 000018c2: DUP1 000018c3: DUP1 000018c4: MLOAD 000018c5: SWAP1 000018c6: PUSH1 0x20 000018c8: ADD 000018c9: SWAP1 000018ca: SWAP3 000018cb: SWAP2 000018cc: SWAP1 000018cd: POP 000018ce: POP 000018cf: POP 000018d0: SWAP1 000018d1: POP 000018d2: PUSH1 0x00 000018d4: PUSH1 0x42 000018d6: PUSH1 0x00 000018d8: CALLER 000018d9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000018ee: AND 000018ef: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001904: AND 00001905: DUP2 00001906: MSTORE 00001907: PUSH1 0x20 00001909: ADD 0000190a: SWAP1 0000190b: DUP2 0000190c: MSTORE 0000190d: PUSH1 0x20 0000190f: ADD 00001910: PUSH1 0x00 00001912: KECCAK256 00001913: SWAP1 00001914: POP 00001915: PUSH2 0x191d 00001918: DUP2 00001919: PUSH2 0x331f 0000191c: JUMP 0000191d: JUMPDEST 0000191e: PUSH1 0x00 00001920: PUSH2 0x1928 00001923: CALLER 00001924: PUSH2 0x1221 00001927: JUMP 00001928: JUMPDEST 00001929: SWAP1 0000192a: POP 0000192b: PUSH1 0x00 0000192d: PUSH2 0x1943 00001930: DUP4 00001931: PUSH1 0x00 00001933: ADD 00001934: SLOAD 00001935: DUP4 00001936: PUSH2 0x31af 00001939: SWAP1 0000193a: SWAP2 0000193b: SWAP1 0000193c: PUSH4 0xffffffff 00001941: AND 00001942: JUMP 00001943: JUMPDEST 00001944: SWAP1 00001945: POP 00001946: DUP4 00001947: DUP2 00001948: GT 00001949: ISZERO 0000194a: PUSH2 0x199e 0000194d: JUMPI 0000194e: PUSH1 0x40 00001950: MLOAD 00001951: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001972: DUP2 00001973: MSTORE 00001974: PUSH1 0x04 00001976: ADD 00001977: DUP1 00001978: DUP1 00001979: PUSH1 0x20 0000197b: ADD 0000197c: DUP3 0000197d: DUP2 0000197e: SUB 0000197f: DUP3 00001980: MSTORE 00001981: PUSH1 0x21 00001983: DUP2 00001984: MSTORE 00001985: PUSH1 0x20 00001987: ADD 00001988: DUP1 00001989: PUSH2 0x37a9 0000198c: PUSH1 0x21 0000198e: SWAP2 0000198f: CODECOPY 00001990: PUSH1 0x40 00001992: ADD 00001993: SWAP2 00001994: POP 00001995: POP 00001996: PUSH1 0x40 00001998: MLOAD 00001999: DUP1 0000199a: SWAP2 0000199b: SUB 0000199c: SWAP1 0000199d: REVERT 0000199e: JUMPDEST 0000199f: PUSH1 0x00 000019a1: PUSH2 0x19a8 000019a4: PUSH2 0x1e21 000019a7: JUMP 000019a8: JUMPDEST 000019a9: SWAP1 000019aa: POP 000019ab: PUSH1 0x00 000019ad: PUSH2 0x19b5 000019b0: CALLER 000019b1: PUSH2 0x203e 000019b4: JUMP 000019b5: JUMPDEST 000019b6: SWAP1 000019b7: POP 000019b8: PUSH1 0x00 000019ba: PUSH2 0x19e4 000019bd: PUSH1 0x39 000019bf: SLOAD 000019c0: PUSH2 0x19d6 000019c3: DUP9 000019c4: PUSH1 0x00 000019c6: ADD 000019c7: SLOAD 000019c8: DUP7 000019c9: PUSH2 0x34d1 000019cc: SWAP1 000019cd: SWAP2 000019ce: SWAP1 000019cf: PUSH4 0xffffffff 000019d4: AND 000019d5: JUMP 000019d6: JUMPDEST 000019d7: PUSH2 0x350b 000019da: SWAP1 000019db: SWAP2 000019dc: SWAP1 000019dd: PUSH4 0xffffffff 000019e2: AND 000019e3: JUMP 000019e4: JUMPDEST 000019e5: SWAP1 000019e6: POP 000019e7: PUSH1 0x00 000019e9: DUP2 000019ea: GT 000019eb: ISZERO 000019ec: PUSH2 0x1b43 000019ef: JUMPI 000019f0: DUP7 000019f1: PUSH2 0x1a03 000019f4: DUP3 000019f5: DUP7 000019f6: PUSH2 0x31af 000019f9: SWAP1 000019fa: SWAP2 000019fb: SWAP1 000019fc: PUSH4 0xffffffff 00001a01: AND 00001a02: JUMP 00001a03: JUMPDEST 00001a04: GT 00001a05: ISZERO 00001a06: PUSH2 0x1a5a 00001a09: JUMPI 00001a0a: PUSH1 0x40 00001a0c: MLOAD 00001a0d: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00001a2e: DUP2 00001a2f: MSTORE 00001a30: PUSH1 0x04 00001a32: ADD 00001a33: DUP1 00001a34: DUP1 00001a35: PUSH1 0x20 00001a37: ADD 00001a38: DUP3 00001a39: DUP2 00001a3a: SUB 00001a3b: DUP3 00001a3c: MSTORE 00001a3d: PUSH1 0x21 00001a3f: DUP2 00001a40: MSTORE 00001a41: PUSH1 0x20 00001a43: ADD 00001a44: DUP1 00001a45: PUSH2 0x37a9 00001a48: PUSH1 0x21 00001a4a: SWAP2 00001a4b: CODECOPY 00001a4c: PUSH1 0x40 00001a4e: ADD 00001a4f: SWAP2 00001a50: POP 00001a51: POP 00001a52: PUSH1 0x40 00001a54: MLOAD 00001a55: DUP1 00001a56: SWAP2 00001a57: SUB 00001a58: SWAP1 00001a59: REVERT 00001a5a: JUMPDEST 00001a5b: PUSH2 0x1ac9 00001a5e: PUSH1 0x38 00001a60: PUSH1 0x00 00001a62: SWAP1 00001a63: SLOAD 00001a64: SWAP1 00001a65: PUSH2 0x0100 00001a68: EXP 00001a69: SWAP1 00001a6a: DIV 00001a6b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001a80: AND 00001a81: DUP3 00001a82: PUSH1 0x34 00001a84: PUSH1 0x00 00001a86: SWAP1 00001a87: SLOAD 00001a88: SWAP1 00001a89: PUSH2 0x0100 00001a8c: EXP 00001a8d: SWAP1 00001a8e: DIV 00001a8f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001aa4: AND 00001aa5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001aba: AND 00001abb: PUSH2 0x3417 00001abe: SWAP1 00001abf: SWAP3 00001ac0: SWAP2 00001ac1: SWAP1 00001ac2: PUSH4 0xffffffff 00001ac7: AND 00001ac8: JUMP 00001ac9: JUMPDEST 00001aca: PUSH1 0x38 00001acc: PUSH1 0x00 00001ace: SWAP1 00001acf: SLOAD 00001ad0: SWAP1 00001ad1: PUSH2 0x0100 00001ad4: EXP 00001ad5: SWAP1 00001ad6: DIV 00001ad7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001aec: AND 00001aed: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001b02: AND 00001b03: PUSH32 0xffe903c0abe6b2dbb2f3474ef43d7a3c1fca49e5a774453423ca8e1952aabffa 00001b24: DUP3 00001b25: PUSH1 0x00 00001b27: PUSH1 0x40 00001b29: MLOAD 00001b2a: DUP1 00001b2b: DUP4 00001b2c: DUP2 00001b2d: MSTORE 00001b2e: PUSH1 0x20 00001b30: ADD 00001b31: DUP3 00001b32: DUP2 00001b33: MSTORE 00001b34: PUSH1 0x20 00001b36: ADD 00001b37: SWAP3 00001b38: POP 00001b39: POP 00001b3a: POP 00001b3b: PUSH1 0x40 00001b3d: MLOAD 00001b3e: DUP1 00001b3f: SWAP2 00001b40: SUB 00001b41: SWAP1 00001b42: LOG2 00001b43: JUMPDEST 00001b44: PUSH1 0x00 00001b46: PUSH2 0x1b72 00001b49: PUSH1 0x39 00001b4b: SLOAD 00001b4c: PUSH2 0x1b64 00001b4f: DUP10 00001b50: PUSH1 0x00 00001b52: ADD 00001b53: SLOAD 00001b54: PUSH1 0x41 00001b56: SLOAD 00001b57: PUSH2 0x34d1 00001b5a: SWAP1 00001b5b: SWAP2 00001b5c: SWAP1 00001b5d: PUSH4 0xffffffff 00001b62: AND 00001b63: JUMP 00001b64: JUMPDEST 00001b65: PUSH2 0x350b 00001b68: SWAP1 00001b69: SWAP2 00001b6a: SWAP1 00001b6b: PUSH4 0xffffffff 00001b70: AND 00001b71: JUMP 00001b72: JUMPDEST 00001b73: SWAP1 00001b74: POP 00001b75: PUSH2 0x1b89 00001b78: DUP2 00001b79: PUSH1 0x41 00001b7b: SLOAD 00001b7c: PUSH2 0x3531 00001b7f: SWAP1 00001b80: SWAP2 00001b81: SWAP1 00001b82: PUSH4 0xffffffff 00001b87: AND 00001b88: JUMP 00001b89: JUMPDEST 00001b8a: PUSH1 0x41 00001b8c: DUP2 00001b8d: SWAP1 00001b8e: SSTORE 00001b8f: POP 00001b90: PUSH2 0x1bba 00001b93: DUP8 00001b94: PUSH1 0x01 00001b96: ADD 00001b97: SLOAD 00001b98: PUSH2 0x1bac 00001b9b: DUP4 00001b9c: PUSH1 0x3b 00001b9e: SLOAD 00001b9f: PUSH2 0x3531 00001ba2: SWAP1 00001ba3: SWAP2 00001ba4: SWAP1 00001ba5: PUSH4 0xffffffff 00001baa: AND 00001bab: JUMP 00001bac: JUMPDEST 00001bad: PUSH2 0x3531 00001bb0: SWAP1 00001bb1: SWAP2 00001bb2: SWAP1 00001bb3: PUSH4 0xffffffff 00001bb8: AND 00001bb9: JUMP 00001bba: JUMPDEST 00001bbb: PUSH1 0x3b 00001bbd: DUP2 00001bbe: SWAP1 00001bbf: SSTORE 00001bc0: POP 00001bc1: PUSH2 0x1bd9 00001bc4: DUP8 00001bc5: PUSH1 0x00 00001bc7: ADD 00001bc8: SLOAD 00001bc9: PUSH1 0x39 00001bcb: SLOAD 00001bcc: PUSH2 0x3531 00001bcf: SWAP1 00001bd0: SWAP2 00001bd1: SWAP1 00001bd2: PUSH4 0xffffffff 00001bd7: AND 00001bd8: JUMP 00001bd9: JUMPDEST 00001bda: PUSH1 0x39 00001bdc: DUP2 00001bdd: SWAP1 00001bde: SSTORE 00001bdf: POP 00001be0: PUSH1 0x00 00001be2: DUP8 00001be3: PUSH1 0x01 00001be5: ADD 00001be6: DUP2 00001be7: SWAP1 00001be8: SSTORE 00001be9: POP 00001bea: PUSH1 0x00 00001bec: DUP8 00001bed: PUSH1 0x00 00001bef: ADD 00001bf0: DUP2 00001bf1: SWAP1 00001bf2: SSTORE 00001bf3: POP 00001bf4: PUSH2 0x1c40 00001bf7: CALLER 00001bf8: DUP7 00001bf9: PUSH1 0x34 00001bfb: PUSH1 0x00 00001bfd: SWAP1 00001bfe: SLOAD 00001bff: SWAP1 00001c00: PUSH2 0x0100 00001c03: EXP 00001c04: SWAP1 00001c05: DIV 00001c06: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001c1b: AND 00001c1c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001c31: AND 00001c32: PUSH2 0x3417 00001c35: SWAP1 00001c36: SWAP3 00001c37: SWAP2 00001c38: SWAP1 00001c39: PUSH4 0xffffffff 00001c3e: AND 00001c3f: JUMP 00001c40: JUMPDEST 00001c41: CALLER 00001c42: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001c57: AND 00001c58: PUSH32 0xffe903c0abe6b2dbb2f3474ef43d7a3c1fca49e5a774453423ca8e1952aabffa 00001c79: DUP7 00001c7a: PUSH1 0x00 00001c7c: PUSH1 0x40 00001c7e: MLOAD 00001c7f: DUP1 00001c80: DUP4 00001c81: DUP2 00001c82: MSTORE 00001c83: PUSH1 0x20 00001c85: ADD 00001c86: DUP3 00001c87: DUP2 00001c88: MSTORE 00001c89: PUSH1 0x20 00001c8b: ADD 00001c8c: SWAP3 00001c8d: POP 00001c8e: POP 00001c8f: POP 00001c90: PUSH1 0x40 00001c92: MLOAD 00001c93: DUP1 00001c94: SWAP2 00001c95: SUB 00001c96: SWAP1 00001c97: LOG2 00001c98: PUSH2 0x1cb0 00001c9b: DUP8 00001c9c: PUSH1 0x02 00001c9e: ADD 00001c9f: SLOAD 00001ca0: PUSH1 0x3c 00001ca2: SLOAD 00001ca3: PUSH2 0x3531 00001ca6: SWAP1 00001ca7: SWAP2 00001ca8: SWAP1 00001ca9: PUSH4 0xffffffff 00001cae: AND 00001caf: JUMP 00001cb0: JUMPDEST 00001cb1: PUSH1 0x3c 00001cb3: DUP2 00001cb4: SWAP1 00001cb5: SSTORE 00001cb6: POP 00001cb7: PUSH1 0x00 00001cb9: DUP8 00001cba: PUSH1 0x02 00001cbc: ADD 00001cbd: DUP2 00001cbe: SWAP1 00001cbf: SSTORE 00001cc0: POP 00001cc1: PUSH1 0x00 00001cc3: DUP4 00001cc4: GT 00001cc5: ISZERO 00001cc6: PUSH2 0x1d41 00001cc9: JUMPI 00001cca: PUSH2 0x1cf2 00001ccd: DUP4 00001cce: CALLER 00001ccf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001ce4: AND 00001ce5: PUSH2 0x31ce 00001ce8: SWAP1 00001ce9: SWAP2 00001cea: SWAP1 00001ceb: PUSH4 0xffffffff 00001cf0: AND 00001cf1: JUMP 00001cf2: JUMPDEST 00001cf3: CALLER 00001cf4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001d09: AND 00001d0a: PUSH32 0x94b2de810873337ed265c5f8cf98c9cffefa06b8607f9a2f1fbaebdfbcfbef1c 00001d2b: DUP5 00001d2c: PUSH1 0x40 00001d2e: MLOAD 00001d2f: DUP1 00001d30: DUP3 00001d31: DUP2 00001d32: MSTORE 00001d33: PUSH1 0x20 00001d35: ADD 00001d36: SWAP2 00001d37: POP 00001d38: POP 00001d39: PUSH1 0x40 00001d3b: MLOAD 00001d3c: DUP1 00001d3d: SWAP2 00001d3e: SUB 00001d3f: SWAP1 00001d40: LOG2 00001d41: JUMPDEST 00001d42: POP 00001d43: POP 00001d44: POP 00001d45: POP 00001d46: POP 00001d47: POP 00001d48: POP 00001d49: POP 00001d4a: JUMP 00001d4b: JUMPDEST 00001d4c: PUSH1 0x00 00001d4e: DUP1 00001d4f: REVERT 00001d50: JUMPDEST 00001d51: PUSH1 0x3c 00001d53: SLOAD 00001d54: DUP2 00001d55: JUMP 00001d56: JUMPDEST 00001d57: PUSH1 0x42 00001d59: PUSH1 0x20 00001d5b: MSTORE 00001d5c: DUP1 00001d5d: PUSH1 0x00 00001d5f: MSTORE 00001d60: PUSH1 0x40 00001d62: PUSH1 0x00 00001d64: KECCAK256 00001d65: PUSH1 0x00 00001d67: SWAP2 00001d68: POP 00001d69: SWAP1 00001d6a: POP 00001d6b: DUP1 00001d6c: PUSH1 0x00 00001d6e: ADD 00001d6f: SLOAD 00001d70: SWAP1 00001d71: DUP1 00001d72: PUSH1 0x01 00001d74: ADD 00001d75: SLOAD 00001d76: SWAP1 00001d77: DUP1 00001d78: PUSH1 0x02 00001d7a: ADD 00001d7b: SLOAD 00001d7c: SWAP1 00001d7d: DUP1 00001d7e: PUSH1 0x03 00001d80: ADD 00001d81: SLOAD 00001d82: SWAP1 00001d83: DUP1 00001d84: PUSH1 0x04 00001d86: ADD 00001d87: SLOAD 00001d88: SWAP1 00001d89: DUP1 00001d8a: PUSH1 0x05 00001d8c: ADD 00001d8d: PUSH1 0x00 00001d8f: SWAP1 00001d90: SLOAD 00001d91: SWAP1 00001d92: PUSH2 0x0100 00001d95: EXP 00001d96: SWAP1 00001d97: DIV 00001d98: PUSH1 0xff 00001d9a: AND 00001d9b: SWAP1 00001d9c: POP 00001d9d: DUP7 00001d9e: JUMP 00001d9f: JUMPDEST 00001da0: PUSH1 0x00 00001da2: PUSH1 0x35 00001da4: PUSH1 0x00 00001da6: SWAP1 00001da7: SLOAD 00001da8: SWAP1 00001da9: PUSH2 0x0100 00001dac: EXP 00001dad: SWAP1 00001dae: DIV 00001daf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001dc4: AND 00001dc5: SWAP1 00001dc6: POP 00001dc7: SWAP1 00001dc8: JUMP 00001dc9: JUMPDEST 00001dca: PUSH1 0x00 00001dcc: PUSH1 0x35 00001dce: PUSH1 0x00 00001dd0: SWAP1 00001dd1: SLOAD 00001dd2: SWAP1 00001dd3: PUSH2 0x0100 00001dd6: EXP 00001dd7: SWAP1 00001dd8: DIV 00001dd9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001dee: AND 00001def: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001e04: AND 00001e05: CALLER 00001e06: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001e1b: AND 00001e1c: EQ 00001e1d: SWAP1 00001e1e: POP 00001e1f: SWAP1 00001e20: JUMP 00001e21: JUMPDEST 00001e22: PUSH1 0x00 00001e24: DUP1 00001e25: PUSH2 0x1e2c 00001e28: PUSH2 0x2a4c 00001e2b: JUMP 00001e2c: JUMPDEST 00001e2d: SWAP1 00001e2e: POP 00001e2f: PUSH1 0x00 00001e31: DUP1 00001e32: PUSH1 0x39 00001e34: SLOAD 00001e35: EQ 00001e36: PUSH2 0x1e73 00001e39: JUMPI 00001e3a: PUSH1 0x00 00001e3c: PUSH2 0x1e43 00001e3f: PUSH2 0x120d 00001e42: JUMP 00001e43: JUMPDEST 00001e44: SWAP1 00001e45: POP 00001e46: PUSH2 0x1e6b 00001e49: PUSH1 0x64 00001e4b: PUSH2 0x1e5d 00001e4e: DUP4 00001e4f: DUP7 00001e50: PUSH2 0x34d1 00001e53: SWAP1 00001e54: SWAP2 00001e55: SWAP1 00001e56: PUSH4 0xffffffff 00001e5b: AND 00001e5c: JUMP 00001e5d: JUMPDEST 00001e5e: PUSH2 0x350b 00001e61: SWAP1 00001e62: SWAP2 00001e63: SWAP1 00001e64: PUSH4 0xffffffff 00001e69: AND 00001e6a: JUMP 00001e6b: JUMPDEST 00001e6c: SWAP2 00001e6d: POP 00001e6e: POP 00001e6f: PUSH2 0x1e77 00001e72: JUMP 00001e73: JUMPDEST 00001e74: DUP2 00001e75: SWAP1 00001e76: POP 00001e77: JUMPDEST 00001e78: PUSH1 0x41 00001e7a: SLOAD 00001e7b: DUP2 00001e7c: GT 00001e7d: ISZERO 00001e7e: PUSH2 0x1e8f 00001e81: JUMPI 00001e82: PUSH1 0x41 00001e84: SLOAD 00001e85: DUP2 00001e86: SUB 00001e87: SWAP3 00001e88: POP 00001e89: POP 00001e8a: POP 00001e8b: PUSH2 0x1e96 00001e8e: JUMP 00001e8f: JUMPDEST 00001e90: PUSH1 0x00 00001e92: SWAP3 00001e93: POP 00001e94: POP 00001e95: POP 00001e96: JUMPDEST 00001e97: SWAP1 00001e98: JUMP 00001e99: JUMPDEST 00001e9a: PUSH1 0x00 00001e9c: PUSH1 0x42 00001e9e: PUSH1 0x00 00001ea0: CALLER 00001ea1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001eb6: AND 00001eb7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001ecc: AND 00001ecd: DUP2 00001ece: MSTORE 00001ecf: PUSH1 0x20 00001ed1: ADD 00001ed2: SWAP1 00001ed3: DUP2 00001ed4: MSTORE 00001ed5: PUSH1 0x20 00001ed7: ADD 00001ed8: PUSH1 0x00 00001eda: KECCAK256 00001edb: SWAP1 00001edc: POP 00001edd: PUSH2 0x1ef3 00001ee0: CALLVALUE 00001ee1: DUP3 00001ee2: PUSH1 0x03 00001ee4: ADD 00001ee5: SLOAD 00001ee6: PUSH2 0x31af 00001ee9: SWAP1 00001eea: SWAP2 00001eeb: SWAP1 00001eec: PUSH4 0xffffffff 00001ef1: AND 00001ef2: JUMP 00001ef3: JUMPDEST 00001ef4: DUP2 00001ef5: PUSH1 0x03 00001ef7: ADD 00001ef8: DUP2 00001ef9: SWAP1 00001efa: SSTORE 00001efb: POP 00001efc: PUSH2 0x1f10 00001eff: CALLVALUE 00001f00: PUSH1 0x3d 00001f02: SLOAD 00001f03: PUSH2 0x31af 00001f06: SWAP1 00001f07: SWAP2 00001f08: SWAP1 00001f09: PUSH4 0xffffffff 00001f0e: AND 00001f0f: JUMP 00001f10: JUMPDEST 00001f11: PUSH1 0x3d 00001f13: DUP2 00001f14: SWAP1 00001f15: SSTORE 00001f16: POP 00001f17: PUSH1 0x37 00001f19: PUSH1 0x00 00001f1b: SWAP1 00001f1c: SLOAD 00001f1d: SWAP1 00001f1e: PUSH2 0x0100 00001f21: EXP 00001f22: SWAP1 00001f23: DIV 00001f24: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f39: AND 00001f3a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001f4f: AND 00001f50: PUSH4 0x1998aeef 00001f55: CALLVALUE 00001f56: PUSH1 0x40 00001f58: MLOAD 00001f59: DUP3 00001f5a: PUSH4 0xffffffff 00001f5f: AND 00001f60: PUSH1 0xe0 00001f62: SHL 00001f63: DUP2 00001f64: MSTORE 00001f65: PUSH1 0x04 00001f67: ADD 00001f68: PUSH1 0x00 00001f6a: PUSH1 0x40 00001f6c: MLOAD 00001f6d: DUP1 00001f6e: DUP4 00001f6f: SUB 00001f70: DUP2 00001f71: DUP6 00001f72: DUP9 00001f73: DUP1 00001f74: EXTCODESIZE 00001f75: ISZERO 00001f76: DUP1 00001f77: ISZERO 00001f78: PUSH2 0x1f80 00001f7b: JUMPI 00001f7c: PUSH1 0x00 00001f7e: DUP1 00001f7f: REVERT 00001f80: JUMPDEST 00001f81: POP 00001f82: GAS 00001f83: CALL 00001f84: ISZERO 00001f85: DUP1 00001f86: ISZERO 00001f87: PUSH2 0x1f94 00001f8a: JUMPI 00001f8b: RETURNDATASIZE 00001f8c: PUSH1 0x00 00001f8e: DUP1 00001f8f: RETURNDATACOPY 00001f90: RETURNDATASIZE 00001f91: PUSH1 0x00 00001f93: REVERT 00001f94: JUMPDEST 00001f95: POP 00001f96: POP 00001f97: POP 00001f98: POP 00001f99: POP 00001f9a: CALLER 00001f9b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00001fb0: AND 00001fb1: PUSH32 0xe684a55f31b79eca403df938249029212a5925ec6be8012e099b45bc1019e5d2 00001fd2: CALLVALUE 00001fd3: PUSH1 0x40 00001fd5: MLOAD 00001fd6: DUP1 00001fd7: DUP3 00001fd8: DUP2 00001fd9: MSTORE 00001fda: PUSH1 0x20 00001fdc: ADD 00001fdd: SWAP2 00001fde: POP 00001fdf: POP 00001fe0: PUSH1 0x40 00001fe2: MLOAD 00001fe3: DUP1 00001fe4: SWAP2 00001fe5: SUB 00001fe6: SWAP1 00001fe7: LOG2 00001fe8: POP 00001fe9: JUMP 00001fea: JUMPDEST 00001feb: PUSH1 0x00 00001fed: DUP1 00001fee: REVERT 00001fef: JUMPDEST 00001ff0: PUSH1 0x00 00001ff2: PUSH1 0x42 00001ff4: PUSH1 0x00 00001ff6: CALLER 00001ff7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000200c: AND 0000200d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002022: AND 00002023: DUP2 00002024: MSTORE 00002025: PUSH1 0x20 00002027: ADD 00002028: SWAP1 00002029: DUP2 0000202a: MSTORE 0000202b: PUSH1 0x20 0000202d: ADD 0000202e: PUSH1 0x00 00002030: KECCAK256 00002031: SWAP1 00002032: POP 00002033: PUSH2 0x203b 00002036: DUP2 00002037: PUSH2 0x331f 0000203a: JUMP 0000203b: JUMPDEST 0000203c: POP 0000203d: JUMP 0000203e: JUMPDEST 0000203f: PUSH1 0x00 00002041: DUP1 00002042: PUSH1 0x42 00002044: PUSH1 0x00 00002046: DUP5 00002047: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000205c: AND 0000205d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002072: AND 00002073: DUP2 00002074: MSTORE 00002075: PUSH1 0x20 00002077: ADD 00002078: SWAP1 00002079: DUP2 0000207a: MSTORE 0000207b: PUSH1 0x20 0000207d: ADD 0000207e: PUSH1 0x00 00002080: KECCAK256 00002081: SWAP1 00002082: POP 00002083: PUSH1 0x00 00002085: ADDRESS 00002086: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000209b: AND 0000209c: BALANCE 0000209d: SWAP1 0000209e: POP 0000209f: PUSH2 0x20db 000020a2: PUSH1 0x3e 000020a4: SLOAD 000020a5: PUSH2 0x20cd 000020a8: PUSH1 0x3f 000020aa: SLOAD 000020ab: PUSH2 0x20bf 000020ae: PUSH1 0x3c 000020b0: SLOAD 000020b1: DUP7 000020b2: PUSH2 0x31af 000020b5: SWAP1 000020b6: SWAP2 000020b7: SWAP1 000020b8: PUSH4 0xffffffff 000020bd: AND 000020be: JUMP 000020bf: JUMPDEST 000020c0: PUSH2 0x31af 000020c3: SWAP1 000020c4: SWAP2 000020c5: SWAP1 000020c6: PUSH4 0xffffffff 000020cb: AND 000020cc: JUMP 000020cd: JUMPDEST 000020ce: PUSH2 0x3531 000020d1: SWAP1 000020d2: SWAP2 000020d3: SWAP1 000020d4: PUSH4 0xffffffff 000020d9: AND 000020da: JUMP 000020db: JUMPDEST 000020dc: SWAP1 000020dd: POP 000020de: PUSH1 0x00 000020e0: PUSH2 0x210a 000020e3: PUSH1 0x39 000020e5: SLOAD 000020e6: PUSH2 0x20fc 000020e9: DUP6 000020ea: PUSH1 0x00 000020ec: ADD 000020ed: SLOAD 000020ee: DUP6 000020ef: PUSH2 0x34d1 000020f2: SWAP1 000020f3: SWAP2 000020f4: SWAP1 000020f5: PUSH4 0xffffffff 000020fa: AND 000020fb: JUMP 000020fc: JUMPDEST 000020fd: PUSH2 0x350b 00002100: SWAP1 00002101: SWAP2 00002102: SWAP1 00002103: PUSH4 0xffffffff 00002108: AND 00002109: JUMP 0000210a: JUMPDEST 0000210b: SWAP1 0000210c: POP 0000210d: PUSH1 0x00 0000210f: PUSH2 0x2125 00002112: DUP5 00002113: PUSH1 0x02 00002115: ADD 00002116: SLOAD 00002117: DUP4 00002118: PUSH2 0x3531 0000211b: SWAP1 0000211c: SWAP2 0000211d: SWAP1 0000211e: PUSH4 0xffffffff 00002123: AND 00002124: JUMP 00002125: JUMPDEST 00002126: SWAP1 00002127: POP 00002128: DUP3 00002129: DUP2 0000212a: GT 0000212b: ISZERO 0000212c: PUSH2 0x2133 0000212f: JUMPI 00002130: DUP3 00002131: SWAP1 00002132: POP 00002133: JUMPDEST 00002134: DUP1 00002135: SWAP5 00002136: POP 00002137: POP 00002138: POP 00002139: POP 0000213a: POP 0000213b: SWAP2 0000213c: SWAP1 0000213d: POP 0000213e: JUMP 0000213f: JUMPDEST 00002140: PUSH1 0x00 00002142: PUSH1 0x01 00002144: SWAP1 00002145: SLOAD 00002146: SWAP1 00002147: PUSH2 0x0100 0000214a: EXP 0000214b: SWAP1 0000214c: DIV 0000214d: PUSH1 0xff 0000214f: AND 00002150: DUP1 00002151: PUSH2 0x215e 00002154: JUMPI 00002155: POP 00002156: PUSH2 0x215d 00002159: PUSH2 0x3551 0000215c: JUMP 0000215d: JUMPDEST 0000215e: JUMPDEST 0000215f: DUP1 00002160: PUSH2 0x2174 00002163: JUMPI 00002164: POP 00002165: PUSH1 0x00 00002167: DUP1 00002168: SLOAD 00002169: SWAP1 0000216a: PUSH2 0x0100 0000216d: EXP 0000216e: SWAP1 0000216f: DIV 00002170: PUSH1 0xff 00002172: AND 00002173: ISZERO 00002174: JUMPDEST 00002175: PUSH2 0x21c9 00002178: JUMPI 00002179: PUSH1 0x40 0000217b: MLOAD 0000217c: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 0000219d: DUP2 0000219e: MSTORE 0000219f: PUSH1 0x04 000021a1: ADD 000021a2: DUP1 000021a3: DUP1 000021a4: PUSH1 0x20 000021a6: ADD 000021a7: DUP3 000021a8: DUP2 000021a9: SUB 000021aa: DUP3 000021ab: MSTORE 000021ac: PUSH1 0x2e 000021ae: DUP2 000021af: MSTORE 000021b0: PUSH1 0x20 000021b2: ADD 000021b3: DUP1 000021b4: PUSH2 0x37ca 000021b7: PUSH1 0x2e 000021b9: SWAP2 000021ba: CODECOPY 000021bb: PUSH1 0x40 000021bd: ADD 000021be: SWAP2 000021bf: POP 000021c0: POP 000021c1: PUSH1 0x40 000021c3: MLOAD 000021c4: DUP1 000021c5: SWAP2 000021c6: SUB 000021c7: SWAP1 000021c8: REVERT 000021c9: JUMPDEST 000021ca: PUSH1 0x00 000021cc: DUP1 000021cd: PUSH1 0x01 000021cf: SWAP1 000021d0: SLOAD 000021d1: SWAP1 000021d2: PUSH2 0x0100 000021d5: EXP 000021d6: SWAP1 000021d7: DIV 000021d8: PUSH1 0xff 000021da: AND 000021db: ISZERO 000021dc: SWAP1 000021dd: POP 000021de: DUP1 000021df: ISZERO 000021e0: PUSH2 0x2219 000021e3: JUMPI 000021e4: PUSH1 0x01 000021e6: PUSH1 0x00 000021e8: PUSH1 0x01 000021ea: PUSH2 0x0100 000021ed: EXP 000021ee: DUP2 000021ef: SLOAD 000021f0: DUP2 000021f1: PUSH1 0xff 000021f3: MUL 000021f4: NOT 000021f5: AND 000021f6: SWAP1 000021f7: DUP4 000021f8: ISZERO 000021f9: ISZERO 000021fa: MUL 000021fb: OR 000021fc: SWAP1 000021fd: SSTORE 000021fe: POP 000021ff: PUSH1 0x01 00002201: PUSH1 0x00 00002203: DUP1 00002204: PUSH2 0x0100 00002207: EXP 00002208: DUP2 00002209: SLOAD 0000220a: DUP2 0000220b: PUSH1 0xff 0000220d: MUL 0000220e: NOT 0000220f: AND 00002210: SWAP1 00002211: DUP4 00002212: ISZERO 00002213: ISZERO 00002214: MUL 00002215: OR 00002216: SWAP1 00002217: SSTORE 00002218: POP 00002219: JUMPDEST 0000221a: PUSH1 0x00 0000221c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002231: AND 00002232: DUP3 00002233: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002248: AND 00002249: EQ 0000224a: ISZERO 0000224b: DUP1 0000224c: ISZERO 0000224d: PUSH2 0x2257 00002250: JUMPI 00002251: POP 00002252: PUSH1 0x64 00002254: DUP5 00002255: GT 00002256: ISZERO 00002257: JUMPDEST 00002258: PUSH2 0x2260 0000225b: JUMPI 0000225c: PUSH1 0x00 0000225e: DUP1 0000225f: REVERT 00002260: JUMPDEST 00002261: PUSH2 0x2269 00002264: DUP4 00002265: PUSH2 0x2563 00002268: JUMP 00002269: JUMPDEST 0000226a: PUSH2 0x2272 0000226d: CALLER 0000226e: PUSH2 0x3568 00002271: JUMP 00002272: JUMPDEST 00002273: DUP3 00002274: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002289: AND 0000228a: PUSH4 0xd4b83992 0000228f: PUSH1 0x40 00002291: MLOAD 00002292: DUP2 00002293: PUSH4 0xffffffff 00002298: AND 00002299: PUSH1 0xe0 0000229b: SHL 0000229c: DUP2 0000229d: MSTORE 0000229e: PUSH1 0x04 000022a0: ADD 000022a1: PUSH1 0x20 000022a3: PUSH1 0x40 000022a5: MLOAD 000022a6: DUP1 000022a7: DUP4 000022a8: SUB 000022a9: DUP2 000022aa: DUP7 000022ab: DUP1 000022ac: EXTCODESIZE 000022ad: ISZERO 000022ae: DUP1 000022af: ISZERO 000022b0: PUSH2 0x22b8 000022b3: JUMPI 000022b4: PUSH1 0x00 000022b6: DUP1 000022b7: REVERT 000022b8: JUMPDEST 000022b9: POP 000022ba: GAS 000022bb: STATICCALL 000022bc: ISZERO 000022bd: DUP1 000022be: ISZERO 000022bf: PUSH2 0x22cc 000022c2: JUMPI 000022c3: RETURNDATASIZE 000022c4: PUSH1 0x00 000022c6: DUP1 000022c7: RETURNDATACOPY 000022c8: RETURNDATASIZE 000022c9: PUSH1 0x00 000022cb: REVERT 000022cc: JUMPDEST 000022cd: POP 000022ce: POP 000022cf: POP 000022d0: POP 000022d1: PUSH1 0x40 000022d3: MLOAD 000022d4: RETURNDATASIZE 000022d5: PUSH1 0x20 000022d7: DUP2 000022d8: LT 000022d9: ISZERO 000022da: PUSH2 0x22e2 000022dd: JUMPI 000022de: PUSH1 0x00 000022e0: DUP1 000022e1: REVERT 000022e2: JUMPDEST 000022e3: DUP2 000022e4: ADD 000022e5: SWAP1 000022e6: DUP1 000022e7: DUP1 000022e8: MLOAD 000022e9: SWAP1 000022ea: PUSH1 0x20 000022ec: ADD 000022ed: SWAP1 000022ee: SWAP3 000022ef: SWAP2 000022f0: SWAP1 000022f1: POP 000022f2: POP 000022f3: POP 000022f4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002309: AND 0000230a: PUSH4 0xe2fdcc17 0000230f: PUSH1 0x40 00002311: MLOAD 00002312: DUP2 00002313: PUSH4 0xffffffff 00002318: AND 00002319: PUSH1 0xe0 0000231b: SHL 0000231c: DUP2 0000231d: MSTORE 0000231e: PUSH1 0x04 00002320: ADD 00002321: PUSH1 0x20 00002323: PUSH1 0x40 00002325: MLOAD 00002326: DUP1 00002327: DUP4 00002328: SUB 00002329: DUP2 0000232a: DUP7 0000232b: DUP1 0000232c: EXTCODESIZE 0000232d: ISZERO 0000232e: DUP1 0000232f: ISZERO 00002330: PUSH2 0x2338 00002333: JUMPI 00002334: PUSH1 0x00 00002336: DUP1 00002337: REVERT 00002338: JUMPDEST 00002339: POP 0000233a: GAS 0000233b: STATICCALL 0000233c: ISZERO 0000233d: DUP1 0000233e: ISZERO 0000233f: PUSH2 0x234c 00002342: JUMPI 00002343: RETURNDATASIZE 00002344: PUSH1 0x00 00002346: DUP1 00002347: RETURNDATACOPY 00002348: RETURNDATASIZE 00002349: PUSH1 0x00 0000234b: REVERT 0000234c: JUMPDEST 0000234d: POP 0000234e: POP 0000234f: POP 00002350: POP 00002351: PUSH1 0x40 00002353: MLOAD 00002354: RETURNDATASIZE 00002355: PUSH1 0x20 00002357: DUP2 00002358: LT 00002359: ISZERO 0000235a: PUSH2 0x2362 0000235d: JUMPI 0000235e: PUSH1 0x00 00002360: DUP1 00002361: REVERT 00002362: JUMPDEST 00002363: DUP2 00002364: ADD 00002365: SWAP1 00002366: DUP1 00002367: DUP1 00002368: MLOAD 00002369: SWAP1 0000236a: PUSH1 0x20 0000236c: ADD 0000236d: SWAP1 0000236e: SWAP3 0000236f: SWAP2 00002370: SWAP1 00002371: POP 00002372: POP 00002373: POP 00002374: PUSH1 0x36 00002376: PUSH1 0x00 00002378: PUSH2 0x0100 0000237b: EXP 0000237c: DUP2 0000237d: SLOAD 0000237e: DUP2 0000237f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002394: MUL 00002395: NOT 00002396: AND 00002397: SWAP1 00002398: DUP4 00002399: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000023ae: AND 000023af: MUL 000023b0: OR 000023b1: SWAP1 000023b2: SSTORE 000023b3: POP 000023b4: DUP3 000023b5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000023ca: AND 000023cb: PUSH4 0xd4b83992 000023d0: PUSH1 0x40 000023d2: MLOAD 000023d3: DUP2 000023d4: PUSH4 0xffffffff 000023d9: AND 000023da: PUSH1 0xe0 000023dc: SHL 000023dd: DUP2 000023de: MSTORE 000023df: PUSH1 0x04 000023e1: ADD 000023e2: PUSH1 0x20 000023e4: PUSH1 0x40 000023e6: MLOAD 000023e7: DUP1 000023e8: DUP4 000023e9: SUB 000023ea: DUP2 000023eb: DUP7 000023ec: DUP1 000023ed: EXTCODESIZE 000023ee: ISZERO 000023ef: DUP1 000023f0: ISZERO 000023f1: PUSH2 0x23f9 000023f4: JUMPI 000023f5: PUSH1 0x00 000023f7: DUP1 000023f8: REVERT 000023f9: JUMPDEST 000023fa: POP 000023fb: GAS 000023fc: STATICCALL 000023fd: ISZERO 000023fe: DUP1 000023ff: ISZERO 00002400: PUSH2 0x240d 00002403: JUMPI 00002404: RETURNDATASIZE 00002405: PUSH1 0x00 00002407: DUP1 00002408: RETURNDATACOPY 00002409: RETURNDATASIZE 0000240a: PUSH1 0x00 0000240c: REVERT 0000240d: JUMPDEST 0000240e: POP 0000240f: POP 00002410: POP 00002411: POP 00002412: PUSH1 0x40 00002414: MLOAD 00002415: RETURNDATASIZE 00002416: PUSH1 0x20 00002418: DUP2 00002419: LT 0000241a: ISZERO 0000241b: PUSH2 0x2423 0000241e: JUMPI 0000241f: PUSH1 0x00 00002421: DUP1 00002422: REVERT 00002423: JUMPDEST 00002424: DUP2 00002425: ADD 00002426: SWAP1 00002427: DUP1 00002428: DUP1 00002429: MLOAD 0000242a: SWAP1 0000242b: PUSH1 0x20 0000242d: ADD 0000242e: SWAP1 0000242f: SWAP3 00002430: SWAP2 00002431: SWAP1 00002432: POP 00002433: POP 00002434: POP 00002435: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000244a: AND 0000244b: PUSH4 0x1c7fd532 00002450: PUSH1 0x40 00002452: MLOAD 00002453: DUP2 00002454: PUSH4 0xffffffff 00002459: AND 0000245a: PUSH1 0xe0 0000245c: SHL 0000245d: DUP2 0000245e: MSTORE 0000245f: PUSH1 0x04 00002461: ADD 00002462: PUSH1 0x20 00002464: PUSH1 0x40 00002466: MLOAD 00002467: DUP1 00002468: DUP4 00002469: SUB 0000246a: DUP2 0000246b: DUP7 0000246c: DUP1 0000246d: EXTCODESIZE 0000246e: ISZERO 0000246f: DUP1 00002470: ISZERO 00002471: PUSH2 0x2479 00002474: JUMPI 00002475: PUSH1 0x00 00002477: DUP1 00002478: REVERT 00002479: JUMPDEST 0000247a: POP 0000247b: GAS 0000247c: STATICCALL 0000247d: ISZERO 0000247e: DUP1 0000247f: ISZERO 00002480: PUSH2 0x248d 00002483: JUMPI 00002484: RETURNDATASIZE 00002485: PUSH1 0x00 00002487: DUP1 00002488: RETURNDATACOPY 00002489: RETURNDATASIZE 0000248a: PUSH1 0x00 0000248c: REVERT 0000248d: JUMPDEST 0000248e: POP 0000248f: POP 00002490: POP 00002491: POP 00002492: PUSH1 0x40 00002494: MLOAD 00002495: RETURNDATASIZE 00002496: PUSH1 0x20 00002498: DUP2 00002499: LT 0000249a: ISZERO 0000249b: PUSH2 0x24a3 0000249e: JUMPI 0000249f: PUSH1 0x00 000024a1: DUP1 000024a2: REVERT 000024a3: JUMPDEST 000024a4: DUP2 000024a5: ADD 000024a6: SWAP1 000024a7: DUP1 000024a8: DUP1 000024a9: MLOAD 000024aa: SWAP1 000024ab: PUSH1 0x20 000024ad: ADD 000024ae: SWAP1 000024af: SWAP3 000024b0: SWAP2 000024b1: SWAP1 000024b2: POP 000024b3: POP 000024b4: POP 000024b5: PUSH1 0x37 000024b7: PUSH1 0x00 000024b9: PUSH2 0x0100 000024bc: EXP 000024bd: DUP2 000024be: SLOAD 000024bf: DUP2 000024c0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000024d5: MUL 000024d6: NOT 000024d7: AND 000024d8: SWAP1 000024d9: DUP4 000024da: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000024ef: AND 000024f0: MUL 000024f1: OR 000024f2: SWAP1 000024f3: SSTORE 000024f4: POP 000024f5: DUP4 000024f6: PUSH1 0x40 000024f8: DUP2 000024f9: SWAP1 000024fa: SSTORE 000024fb: POP 000024fc: DUP2 000024fd: PUSH1 0x38 000024ff: PUSH1 0x00 00002501: PUSH2 0x0100 00002504: EXP 00002505: DUP2 00002506: SLOAD 00002507: DUP2 00002508: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000251d: MUL 0000251e: NOT 0000251f: AND 00002520: SWAP1 00002521: DUP4 00002522: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002537: AND 00002538: MUL 00002539: OR 0000253a: SWAP1 0000253b: SSTORE 0000253c: POP 0000253d: DUP1 0000253e: ISZERO 0000253f: PUSH2 0x255d 00002542: JUMPI 00002543: PUSH1 0x00 00002545: DUP1 00002546: PUSH1 0x01 00002548: PUSH2 0x0100 0000254b: EXP 0000254c: DUP2 0000254d: SLOAD 0000254e: DUP2 0000254f: PUSH1 0xff 00002551: MUL 00002552: NOT 00002553: AND 00002554: SWAP1 00002555: DUP4 00002556: ISZERO 00002557: ISZERO 00002558: MUL 00002559: OR 0000255a: SWAP1 0000255b: SSTORE 0000255c: POP 0000255d: JUMPDEST 0000255e: POP 0000255f: POP 00002560: POP 00002561: POP 00002562: JUMP 00002563: JUMPDEST 00002564: PUSH1 0x00 00002566: PUSH1 0x01 00002568: SWAP1 00002569: SLOAD 0000256a: SWAP1 0000256b: PUSH2 0x0100 0000256e: EXP 0000256f: SWAP1 00002570: DIV 00002571: PUSH1 0xff 00002573: AND 00002574: DUP1 00002575: PUSH2 0x2582 00002578: JUMPI 00002579: POP 0000257a: PUSH2 0x2581 0000257d: PUSH2 0x3551 00002580: JUMP 00002581: JUMPDEST 00002582: JUMPDEST 00002583: DUP1 00002584: PUSH2 0x2598 00002587: JUMPI 00002588: POP 00002589: PUSH1 0x00 0000258b: DUP1 0000258c: SLOAD 0000258d: SWAP1 0000258e: PUSH2 0x0100 00002591: EXP 00002592: SWAP1 00002593: DIV 00002594: PUSH1 0xff 00002596: AND 00002597: ISZERO 00002598: JUMPDEST 00002599: PUSH2 0x25ed 0000259c: JUMPI 0000259d: PUSH1 0x40 0000259f: MLOAD 000025a0: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000025c1: DUP2 000025c2: MSTORE 000025c3: PUSH1 0x04 000025c5: ADD 000025c6: DUP1 000025c7: DUP1 000025c8: PUSH1 0x20 000025ca: ADD 000025cb: DUP3 000025cc: DUP2 000025cd: SUB 000025ce: DUP3 000025cf: MSTORE 000025d0: PUSH1 0x2e 000025d2: DUP2 000025d3: MSTORE 000025d4: PUSH1 0x20 000025d6: ADD 000025d7: DUP1 000025d8: PUSH2 0x37ca 000025db: PUSH1 0x2e 000025dd: SWAP2 000025de: CODECOPY 000025df: PUSH1 0x40 000025e1: ADD 000025e2: SWAP2 000025e3: POP 000025e4: POP 000025e5: PUSH1 0x40 000025e7: MLOAD 000025e8: DUP1 000025e9: SWAP2 000025ea: SUB 000025eb: SWAP1 000025ec: REVERT 000025ed: JUMPDEST 000025ee: PUSH1 0x00 000025f0: DUP1 000025f1: PUSH1 0x01 000025f3: SWAP1 000025f4: SLOAD 000025f5: SWAP1 000025f6: PUSH2 0x0100 000025f9: EXP 000025fa: SWAP1 000025fb: DIV 000025fc: PUSH1 0xff 000025fe: AND 000025ff: ISZERO 00002600: SWAP1 00002601: POP 00002602: DUP1 00002603: ISZERO 00002604: PUSH2 0x263d 00002607: JUMPI 00002608: PUSH1 0x01 0000260a: PUSH1 0x00 0000260c: PUSH1 0x01 0000260e: PUSH2 0x0100 00002611: EXP 00002612: DUP2 00002613: SLOAD 00002614: DUP2 00002615: PUSH1 0xff 00002617: MUL 00002618: NOT 00002619: AND 0000261a: SWAP1 0000261b: DUP4 0000261c: ISZERO 0000261d: ISZERO 0000261e: MUL 0000261f: OR 00002620: SWAP1 00002621: SSTORE 00002622: POP 00002623: PUSH1 0x01 00002625: PUSH1 0x00 00002627: DUP1 00002628: PUSH2 0x0100 0000262b: EXP 0000262c: DUP2 0000262d: SLOAD 0000262e: DUP2 0000262f: PUSH1 0xff 00002631: MUL 00002632: NOT 00002633: AND 00002634: SWAP1 00002635: DUP4 00002636: ISZERO 00002637: ISZERO 00002638: MUL 00002639: OR 0000263a: SWAP1 0000263b: SSTORE 0000263c: POP 0000263d: JUMPDEST 0000263e: DUP2 0000263f: PUSH1 0x33 00002641: PUSH1 0x00 00002643: PUSH2 0x0100 00002646: EXP 00002647: DUP2 00002648: SLOAD 00002649: DUP2 0000264a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000265f: MUL 00002660: NOT 00002661: AND 00002662: SWAP1 00002663: DUP4 00002664: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002679: AND 0000267a: MUL 0000267b: OR 0000267c: SWAP1 0000267d: SSTORE 0000267e: POP 0000267f: PUSH1 0x00 00002681: DUP3 00002682: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002697: AND 00002698: PUSH4 0xd4b83992 0000269d: PUSH1 0x40 0000269f: MLOAD 000026a0: DUP2 000026a1: PUSH4 0xffffffff 000026a6: AND 000026a7: PUSH1 0xe0 000026a9: SHL 000026aa: DUP2 000026ab: MSTORE 000026ac: PUSH1 0x04 000026ae: ADD 000026af: PUSH1 0x20 000026b1: PUSH1 0x40 000026b3: MLOAD 000026b4: DUP1 000026b5: DUP4 000026b6: SUB 000026b7: DUP2 000026b8: DUP7 000026b9: DUP1 000026ba: EXTCODESIZE 000026bb: ISZERO 000026bc: DUP1 000026bd: ISZERO 000026be: PUSH2 0x26c6 000026c1: JUMPI 000026c2: PUSH1 0x00 000026c4: DUP1 000026c5: REVERT 000026c6: JUMPDEST 000026c7: POP 000026c8: GAS 000026c9: STATICCALL 000026ca: ISZERO 000026cb: DUP1 000026cc: ISZERO 000026cd: PUSH2 0x26da 000026d0: JUMPI 000026d1: RETURNDATASIZE 000026d2: PUSH1 0x00 000026d4: DUP1 000026d5: RETURNDATACOPY 000026d6: RETURNDATASIZE 000026d7: PUSH1 0x00 000026d9: REVERT 000026da: JUMPDEST 000026db: POP 000026dc: POP 000026dd: POP 000026de: POP 000026df: PUSH1 0x40 000026e1: MLOAD 000026e2: RETURNDATASIZE 000026e3: PUSH1 0x20 000026e5: DUP2 000026e6: LT 000026e7: ISZERO 000026e8: PUSH2 0x26f0 000026eb: JUMPI 000026ec: PUSH1 0x00 000026ee: DUP1 000026ef: REVERT 000026f0: JUMPDEST 000026f1: DUP2 000026f2: ADD 000026f3: SWAP1 000026f4: DUP1 000026f5: DUP1 000026f6: MLOAD 000026f7: SWAP1 000026f8: PUSH1 0x20 000026fa: ADD 000026fb: SWAP1 000026fc: SWAP3 000026fd: SWAP2 000026fe: SWAP1 000026ff: POP 00002700: POP 00002701: POP 00002702: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002717: AND 00002718: PUSH4 0xfc0c546a 0000271d: PUSH1 0x40 0000271f: MLOAD 00002720: DUP2 00002721: PUSH4 0xffffffff 00002726: AND 00002727: PUSH1 0xe0 00002729: SHL 0000272a: DUP2 0000272b: MSTORE 0000272c: PUSH1 0x04 0000272e: ADD 0000272f: PUSH1 0x20 00002731: PUSH1 0x40 00002733: MLOAD 00002734: DUP1 00002735: DUP4 00002736: SUB 00002737: DUP2 00002738: DUP7 00002739: DUP1 0000273a: EXTCODESIZE 0000273b: ISZERO 0000273c: DUP1 0000273d: ISZERO 0000273e: PUSH2 0x2746 00002741: JUMPI 00002742: PUSH1 0x00 00002744: DUP1 00002745: REVERT 00002746: JUMPDEST 00002747: POP 00002748: GAS 00002749: STATICCALL 0000274a: ISZERO 0000274b: DUP1 0000274c: ISZERO 0000274d: PUSH2 0x275a 00002750: JUMPI 00002751: RETURNDATASIZE 00002752: PUSH1 0x00 00002754: DUP1 00002755: RETURNDATACOPY 00002756: RETURNDATASIZE 00002757: PUSH1 0x00 00002759: REVERT 0000275a: JUMPDEST 0000275b: POP 0000275c: POP 0000275d: POP 0000275e: POP 0000275f: PUSH1 0x40 00002761: MLOAD 00002762: RETURNDATASIZE 00002763: PUSH1 0x20 00002765: DUP2 00002766: LT 00002767: ISZERO 00002768: PUSH2 0x2770 0000276b: JUMPI 0000276c: PUSH1 0x00 0000276e: DUP1 0000276f: REVERT 00002770: JUMPDEST 00002771: DUP2 00002772: ADD 00002773: SWAP1 00002774: DUP1 00002775: DUP1 00002776: MLOAD 00002777: SWAP1 00002778: PUSH1 0x20 0000277a: ADD 0000277b: SWAP1 0000277c: SWAP3 0000277d: SWAP2 0000277e: SWAP1 0000277f: POP 00002780: POP 00002781: POP 00002782: SWAP1 00002783: POP 00002784: PUSH1 0x00 00002786: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000279b: AND 0000279c: DUP2 0000279d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000027b2: AND 000027b3: EQ 000027b4: ISZERO 000027b5: PUSH2 0x27bd 000027b8: JUMPI 000027b9: PUSH1 0x00 000027bb: DUP1 000027bc: REVERT 000027bd: JUMPDEST 000027be: DUP1 000027bf: PUSH1 0x34 000027c1: PUSH1 0x00 000027c3: PUSH2 0x0100 000027c6: EXP 000027c7: DUP2 000027c8: SLOAD 000027c9: DUP2 000027ca: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000027df: MUL 000027e0: NOT 000027e1: AND 000027e2: SWAP1 000027e3: DUP4 000027e4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000027f9: AND 000027fa: MUL 000027fb: OR 000027fc: SWAP1 000027fd: SSTORE 000027fe: POP 000027ff: POP 00002800: DUP1 00002801: ISZERO 00002802: PUSH2 0x2820 00002805: JUMPI 00002806: PUSH1 0x00 00002808: DUP1 00002809: PUSH1 0x01 0000280b: PUSH2 0x0100 0000280e: EXP 0000280f: DUP2 00002810: SLOAD 00002811: DUP2 00002812: PUSH1 0xff 00002814: MUL 00002815: NOT 00002816: AND 00002817: SWAP1 00002818: DUP4 00002819: ISZERO 0000281a: ISZERO 0000281b: MUL 0000281c: OR 0000281d: SWAP1 0000281e: SSTORE 0000281f: POP 00002820: JUMPDEST 00002821: POP 00002822: POP 00002823: JUMP 00002824: JUMPDEST 00002825: PUSH1 0x3b 00002827: SLOAD 00002828: DUP2 00002829: JUMP 0000282a: JUMPDEST 0000282b: PUSH1 0x43 0000282d: PUSH1 0x00 0000282f: SWAP1 00002830: SLOAD 00002831: SWAP1 00002832: PUSH2 0x0100 00002835: EXP 00002836: SWAP1 00002837: DIV 00002838: PUSH1 0xff 0000283a: AND 0000283b: PUSH2 0x28ac 0000283e: JUMPI 0000283f: PUSH1 0x40 00002841: MLOAD 00002842: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00002863: DUP2 00002864: MSTORE 00002865: PUSH1 0x04 00002867: ADD 00002868: DUP1 00002869: DUP1 0000286a: PUSH1 0x20 0000286c: ADD 0000286d: DUP3 0000286e: DUP2 0000286f: SUB 00002870: DUP3 00002871: MSTORE 00002872: PUSH1 0x17 00002874: DUP2 00002875: MSTORE 00002876: PUSH1 0x20 00002878: ADD 00002879: DUP1 0000287a: PUSH32 0x4465706f736974206d75737420626520656e61626c6564000000000000000000 0000289b: DUP2 0000289c: MSTORE 0000289d: POP 0000289e: PUSH1 0x20 000028a0: ADD 000028a1: SWAP2 000028a2: POP 000028a3: POP 000028a4: PUSH1 0x40 000028a6: MLOAD 000028a7: DUP1 000028a8: SWAP2 000028a9: SUB 000028aa: SWAP1 000028ab: REVERT 000028ac: JUMPDEST 000028ad: PUSH1 0x00 000028af: DUP2 000028b0: GT 000028b1: PUSH2 0x2922 000028b4: JUMPI 000028b5: PUSH1 0x40 000028b7: MLOAD 000028b8: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000028d9: DUP2 000028da: MSTORE 000028db: PUSH1 0x04 000028dd: ADD 000028de: DUP1 000028df: DUP1 000028e0: PUSH1 0x20 000028e2: ADD 000028e3: DUP3 000028e4: DUP2 000028e5: SUB 000028e6: DUP3 000028e7: MSTORE 000028e8: PUSH1 0x17 000028ea: DUP2 000028eb: MSTORE 000028ec: PUSH1 0x20 000028ee: ADD 000028ef: DUP1 000028f0: PUSH32 0x56616c7565206d757374206265206e6f7420656d707479000000000000000000 00002911: DUP2 00002912: MSTORE 00002913: POP 00002914: PUSH1 0x20 00002916: ADD 00002917: SWAP2 00002918: POP 00002919: POP 0000291a: PUSH1 0x40 0000291c: MLOAD 0000291d: DUP1 0000291e: SWAP2 0000291f: SUB 00002920: SWAP1 00002921: REVERT 00002922: JUMPDEST 00002923: PUSH2 0x2937 00002926: DUP2 00002927: PUSH1 0x39 00002929: SLOAD 0000292a: PUSH2 0x31af 0000292d: SWAP1 0000292e: SWAP2 0000292f: SWAP1 00002930: PUSH4 0xffffffff 00002935: AND 00002936: JUMP 00002937: JUMPDEST 00002938: PUSH1 0x39 0000293a: DUP2 0000293b: SWAP1 0000293c: SSTORE 0000293d: POP 0000293e: PUSH1 0x00 00002940: PUSH1 0x42 00002942: PUSH1 0x00 00002944: CALLER 00002945: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000295a: AND 0000295b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002970: AND 00002971: DUP2 00002972: MSTORE 00002973: PUSH1 0x20 00002975: ADD 00002976: SWAP1 00002977: DUP2 00002978: MSTORE 00002979: PUSH1 0x20 0000297b: ADD 0000297c: PUSH1 0x00 0000297e: KECCAK256 0000297f: SWAP1 00002980: POP 00002981: PUSH2 0x2997 00002984: DUP3 00002985: DUP3 00002986: PUSH1 0x00 00002988: ADD 00002989: SLOAD 0000298a: PUSH2 0x31af 0000298d: SWAP1 0000298e: SWAP2 0000298f: SWAP1 00002990: PUSH4 0xffffffff 00002995: AND 00002996: JUMP 00002997: JUMPDEST 00002998: DUP2 00002999: PUSH1 0x00 0000299b: ADD 0000299c: DUP2 0000299d: SWAP1 0000299e: SSTORE 0000299f: POP 000029a0: PUSH2 0x29ee 000029a3: CALLER 000029a4: ADDRESS 000029a5: DUP5 000029a6: PUSH1 0x34 000029a8: PUSH1 0x00 000029aa: SWAP1 000029ab: SLOAD 000029ac: SWAP1 000029ad: PUSH2 0x0100 000029b0: EXP 000029b1: SWAP1 000029b2: DIV 000029b3: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000029c8: AND 000029c9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000029de: AND 000029df: PUSH2 0x3662 000029e2: SWAP1 000029e3: SWAP4 000029e4: SWAP3 000029e5: SWAP2 000029e6: SWAP1 000029e7: PUSH4 0xffffffff 000029ec: AND 000029ed: JUMP 000029ee: JUMPDEST 000029ef: CALLER 000029f0: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002a05: AND 00002a06: PUSH32 0xfdfdcf596161b0e81e3161597d46888dcc88bd83b22dcfb341c76377ca3bbc9e 00002a27: DUP4 00002a28: DUP4 00002a29: PUSH1 0x00 00002a2b: ADD 00002a2c: SLOAD 00002a2d: PUSH1 0x40 00002a2f: MLOAD 00002a30: DUP1 00002a31: DUP4 00002a32: DUP2 00002a33: MSTORE 00002a34: PUSH1 0x20 00002a36: ADD 00002a37: DUP3 00002a38: DUP2 00002a39: MSTORE 00002a3a: PUSH1 0x20 00002a3c: ADD 00002a3d: SWAP3 00002a3e: POP 00002a3f: POP 00002a40: POP 00002a41: PUSH1 0x40 00002a43: MLOAD 00002a44: DUP1 00002a45: SWAP2 00002a46: SUB 00002a47: SWAP1 00002a48: LOG2 00002a49: POP 00002a4a: POP 00002a4b: JUMP 00002a4c: JUMPDEST 00002a4d: PUSH1 0x00 00002a4f: PUSH2 0x2a6a 00002a52: PUSH1 0x3b 00002a54: SLOAD 00002a55: PUSH2 0x2a5c 00002a58: PUSH2 0x2bd6 00002a5b: JUMP 00002a5c: JUMPDEST 00002a5d: PUSH2 0x31af 00002a60: SWAP1 00002a61: SWAP2 00002a62: SWAP1 00002a63: PUSH4 0xffffffff 00002a68: AND 00002a69: JUMP 00002a6a: JUMPDEST 00002a6b: SWAP1 00002a6c: POP 00002a6d: SWAP1 00002a6e: JUMP 00002a6f: JUMPDEST 00002a70: PUSH1 0x00 00002a72: PUSH1 0x42 00002a74: PUSH1 0x00 00002a76: CALLER 00002a77: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002a8c: AND 00002a8d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002aa2: AND 00002aa3: DUP2 00002aa4: MSTORE 00002aa5: PUSH1 0x20 00002aa7: ADD 00002aa8: SWAP1 00002aa9: DUP2 00002aaa: MSTORE 00002aab: PUSH1 0x20 00002aad: ADD 00002aae: PUSH1 0x00 00002ab0: KECCAK256 00002ab1: SWAP1 00002ab2: POP 00002ab3: PUSH2 0x2abb 00002ab6: DUP2 00002ab7: PUSH2 0x331f 00002aba: JUMP 00002abb: JUMPDEST 00002abc: PUSH1 0x00 00002abe: PUSH2 0x2ac6 00002ac1: CALLER 00002ac2: PUSH2 0x203e 00002ac5: JUMP 00002ac6: JUMPDEST 00002ac7: SWAP1 00002ac8: POP 00002ac9: PUSH1 0x00 00002acb: DUP2 00002acc: GT 00002acd: PUSH2 0x2b21 00002ad0: JUMPI 00002ad1: PUSH1 0x40 00002ad3: MLOAD 00002ad4: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00002af5: DUP2 00002af6: MSTORE 00002af7: PUSH1 0x04 00002af9: ADD 00002afa: DUP1 00002afb: DUP1 00002afc: PUSH1 0x20 00002afe: ADD 00002aff: DUP3 00002b00: DUP2 00002b01: SUB 00002b02: DUP3 00002b03: MSTORE 00002b04: PUSH1 0x25 00002b06: DUP2 00002b07: MSTORE 00002b08: PUSH1 0x20 00002b0a: ADD 00002b0b: DUP1 00002b0c: PUSH2 0x3820 00002b0f: PUSH1 0x25 00002b11: SWAP2 00002b12: CODECOPY 00002b13: PUSH1 0x40 00002b15: ADD 00002b16: SWAP2 00002b17: POP 00002b18: POP 00002b19: PUSH1 0x40 00002b1b: MLOAD 00002b1c: DUP1 00002b1d: SWAP2 00002b1e: SUB 00002b1f: SWAP1 00002b20: REVERT 00002b21: JUMPDEST 00002b22: PUSH2 0x2b38 00002b25: DUP2 00002b26: DUP4 00002b27: PUSH1 0x02 00002b29: ADD 00002b2a: SLOAD 00002b2b: PUSH2 0x31af 00002b2e: SWAP1 00002b2f: SWAP2 00002b30: SWAP1 00002b31: PUSH4 0xffffffff 00002b36: AND 00002b37: JUMP 00002b38: JUMPDEST 00002b39: DUP3 00002b3a: PUSH1 0x02 00002b3c: ADD 00002b3d: DUP2 00002b3e: SWAP1 00002b3f: SSTORE 00002b40: POP 00002b41: PUSH2 0x2b55 00002b44: DUP2 00002b45: PUSH1 0x3c 00002b47: SLOAD 00002b48: PUSH2 0x31af 00002b4b: SWAP1 00002b4c: SWAP2 00002b4d: SWAP1 00002b4e: PUSH4 0xffffffff 00002b53: AND 00002b54: JUMP 00002b55: JUMPDEST 00002b56: PUSH1 0x3c 00002b58: DUP2 00002b59: SWAP1 00002b5a: SSTORE 00002b5b: POP 00002b5c: PUSH2 0x2b84 00002b5f: DUP2 00002b60: CALLER 00002b61: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002b76: AND 00002b77: PUSH2 0x31ce 00002b7a: SWAP1 00002b7b: SWAP2 00002b7c: SWAP1 00002b7d: PUSH4 0xffffffff 00002b82: AND 00002b83: JUMP 00002b84: JUMPDEST 00002b85: CALLER 00002b86: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002b9b: AND 00002b9c: PUSH32 0x94b2de810873337ed265c5f8cf98c9cffefa06b8607f9a2f1fbaebdfbcfbef1c 00002bbd: DUP3 00002bbe: PUSH1 0x40 00002bc0: MLOAD 00002bc1: DUP1 00002bc2: DUP3 00002bc3: DUP2 00002bc4: MSTORE 00002bc5: PUSH1 0x20 00002bc7: ADD 00002bc8: SWAP2 00002bc9: POP 00002bca: POP 00002bcb: PUSH1 0x40 00002bcd: MLOAD 00002bce: DUP1 00002bcf: SWAP2 00002bd0: SUB 00002bd1: SWAP1 00002bd2: LOG2 00002bd3: POP 00002bd4: POP 00002bd5: JUMP 00002bd6: JUMPDEST 00002bd7: PUSH1 0x00 00002bd9: DUP1 00002bda: PUSH1 0x36 00002bdc: PUSH1 0x00 00002bde: SWAP1 00002bdf: SLOAD 00002be0: SWAP1 00002be1: PUSH2 0x0100 00002be4: EXP 00002be5: SWAP1 00002be6: DIV 00002be7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002bfc: AND 00002bfd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002c12: AND 00002c13: PUSH4 0x178b6de6 00002c18: ADDRESS 00002c19: PUSH1 0x40 00002c1b: MLOAD 00002c1c: DUP3 00002c1d: PUSH4 0xffffffff 00002c22: AND 00002c23: PUSH1 0xe0 00002c25: SHL 00002c26: DUP2 00002c27: MSTORE 00002c28: PUSH1 0x04 00002c2a: ADD 00002c2b: DUP1 00002c2c: DUP3 00002c2d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002c42: AND 00002c43: DUP2 00002c44: MSTORE 00002c45: PUSH1 0x20 00002c47: ADD 00002c48: SWAP2 00002c49: POP 00002c4a: POP 00002c4b: PUSH1 0x20 00002c4d: PUSH1 0x40 00002c4f: MLOAD 00002c50: DUP1 00002c51: DUP4 00002c52: SUB 00002c53: DUP2 00002c54: DUP7 00002c55: DUP1 00002c56: EXTCODESIZE 00002c57: ISZERO 00002c58: DUP1 00002c59: ISZERO 00002c5a: PUSH2 0x2c62 00002c5d: JUMPI 00002c5e: PUSH1 0x00 00002c60: DUP1 00002c61: REVERT 00002c62: JUMPDEST 00002c63: POP 00002c64: GAS 00002c65: STATICCALL 00002c66: ISZERO 00002c67: DUP1 00002c68: ISZERO 00002c69: PUSH2 0x2c76 00002c6c: JUMPI 00002c6d: RETURNDATASIZE 00002c6e: PUSH1 0x00 00002c70: DUP1 00002c71: RETURNDATACOPY 00002c72: RETURNDATASIZE 00002c73: PUSH1 0x00 00002c75: REVERT 00002c76: JUMPDEST 00002c77: POP 00002c78: POP 00002c79: POP 00002c7a: POP 00002c7b: PUSH1 0x40 00002c7d: MLOAD 00002c7e: RETURNDATASIZE 00002c7f: PUSH1 0x20 00002c81: DUP2 00002c82: LT 00002c83: ISZERO 00002c84: PUSH2 0x2c8c 00002c87: JUMPI 00002c88: PUSH1 0x00 00002c8a: DUP1 00002c8b: REVERT 00002c8c: JUMPDEST 00002c8d: DUP2 00002c8e: ADD 00002c8f: SWAP1 00002c90: DUP1 00002c91: DUP1 00002c92: MLOAD 00002c93: SWAP1 00002c94: PUSH1 0x20 00002c96: ADD 00002c97: SWAP1 00002c98: SWAP3 00002c99: SWAP2 00002c9a: SWAP1 00002c9b: POP 00002c9c: POP 00002c9d: POP 00002c9e: SWAP1 00002c9f: POP 00002ca0: PUSH1 0x00 00002ca2: PUSH1 0x34 00002ca4: PUSH1 0x00 00002ca6: SWAP1 00002ca7: SLOAD 00002ca8: SWAP1 00002ca9: PUSH2 0x0100 00002cac: EXP 00002cad: SWAP1 00002cae: DIV 00002caf: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002cc4: AND 00002cc5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002cda: AND 00002cdb: PUSH4 0x70a08231 00002ce0: ADDRESS 00002ce1: PUSH1 0x40 00002ce3: MLOAD 00002ce4: DUP3 00002ce5: PUSH4 0xffffffff 00002cea: AND 00002ceb: PUSH1 0xe0 00002ced: SHL 00002cee: DUP2 00002cef: MSTORE 00002cf0: PUSH1 0x04 00002cf2: ADD 00002cf3: DUP1 00002cf4: DUP3 00002cf5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002d0a: AND 00002d0b: DUP2 00002d0c: MSTORE 00002d0d: PUSH1 0x20 00002d0f: ADD 00002d10: SWAP2 00002d11: POP 00002d12: POP 00002d13: PUSH1 0x20 00002d15: PUSH1 0x40 00002d17: MLOAD 00002d18: DUP1 00002d19: DUP4 00002d1a: SUB 00002d1b: DUP2 00002d1c: DUP7 00002d1d: DUP1 00002d1e: EXTCODESIZE 00002d1f: ISZERO 00002d20: DUP1 00002d21: ISZERO 00002d22: PUSH2 0x2d2a 00002d25: JUMPI 00002d26: PUSH1 0x00 00002d28: DUP1 00002d29: REVERT 00002d2a: JUMPDEST 00002d2b: POP 00002d2c: GAS 00002d2d: STATICCALL 00002d2e: ISZERO 00002d2f: DUP1 00002d30: ISZERO 00002d31: PUSH2 0x2d3e 00002d34: JUMPI 00002d35: RETURNDATASIZE 00002d36: PUSH1 0x00 00002d38: DUP1 00002d39: RETURNDATACOPY 00002d3a: RETURNDATASIZE 00002d3b: PUSH1 0x00 00002d3d: REVERT 00002d3e: JUMPDEST 00002d3f: POP 00002d40: POP 00002d41: POP 00002d42: POP 00002d43: PUSH1 0x40 00002d45: MLOAD 00002d46: RETURNDATASIZE 00002d47: PUSH1 0x20 00002d49: DUP2 00002d4a: LT 00002d4b: ISZERO 00002d4c: PUSH2 0x2d54 00002d4f: JUMPI 00002d50: PUSH1 0x00 00002d52: DUP1 00002d53: REVERT 00002d54: JUMPDEST 00002d55: DUP2 00002d56: ADD 00002d57: SWAP1 00002d58: DUP1 00002d59: DUP1 00002d5a: MLOAD 00002d5b: SWAP1 00002d5c: PUSH1 0x20 00002d5e: ADD 00002d5f: SWAP1 00002d60: SWAP3 00002d61: SWAP2 00002d62: SWAP1 00002d63: POP 00002d64: POP 00002d65: POP 00002d66: SWAP1 00002d67: POP 00002d68: PUSH1 0x00 00002d6a: PUSH2 0x2d90 00002d6d: PUSH1 0x39 00002d6f: SLOAD 00002d70: PUSH2 0x2d82 00002d73: DUP5 00002d74: DUP7 00002d75: PUSH2 0x31af 00002d78: SWAP1 00002d79: SWAP2 00002d7a: SWAP1 00002d7b: PUSH4 0xffffffff 00002d80: AND 00002d81: JUMP 00002d82: JUMPDEST 00002d83: PUSH2 0x3531 00002d86: SWAP1 00002d87: SWAP2 00002d88: SWAP1 00002d89: PUSH4 0xffffffff 00002d8e: AND 00002d8f: JUMP 00002d90: JUMPDEST 00002d91: SWAP1 00002d92: POP 00002d93: DUP2 00002d94: DUP2 00002d95: GT 00002d96: ISZERO 00002d97: PUSH2 0x2da5 00002d9a: JUMPI 00002d9b: DUP2 00002d9c: SWAP4 00002d9d: POP 00002d9e: POP 00002d9f: POP 00002da0: POP 00002da1: PUSH2 0x2dac 00002da4: JUMP 00002da5: JUMPDEST 00002da6: DUP1 00002da7: SWAP4 00002da8: POP 00002da9: POP 00002daa: POP 00002dab: POP 00002dac: JUMPDEST 00002dad: SWAP1 00002dae: JUMP 00002daf: JUMPDEST 00002db0: PUSH1 0x36 00002db2: PUSH1 0x00 00002db4: SWAP1 00002db5: SLOAD 00002db6: SWAP1 00002db7: PUSH2 0x0100 00002dba: EXP 00002dbb: SWAP1 00002dbc: DIV 00002dbd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002dd2: AND 00002dd3: DUP2 00002dd4: JUMP 00002dd5: JUMPDEST 00002dd6: PUSH1 0x3f 00002dd8: SLOAD 00002dd9: DUP2 00002dda: JUMP 00002ddb: JUMPDEST 00002ddc: PUSH1 0x37 00002dde: PUSH1 0x00 00002de0: SWAP1 00002de1: SLOAD 00002de2: SWAP1 00002de3: PUSH2 0x0100 00002de6: EXP 00002de7: SWAP1 00002de8: DIV 00002de9: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002dfe: AND 00002dff: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002e14: AND 00002e15: PUSH4 0x4e71d92d 00002e1a: PUSH1 0x40 00002e1c: MLOAD 00002e1d: DUP2 00002e1e: PUSH4 0xffffffff 00002e23: AND 00002e24: PUSH1 0xe0 00002e26: SHL 00002e27: DUP2 00002e28: MSTORE 00002e29: PUSH1 0x04 00002e2b: ADD 00002e2c: PUSH1 0x20 00002e2e: PUSH1 0x40 00002e30: MLOAD 00002e31: DUP1 00002e32: DUP4 00002e33: SUB 00002e34: DUP2 00002e35: PUSH1 0x00 00002e37: DUP8 00002e38: DUP1 00002e39: EXTCODESIZE 00002e3a: ISZERO 00002e3b: DUP1 00002e3c: ISZERO 00002e3d: PUSH2 0x2e45 00002e40: JUMPI 00002e41: PUSH1 0x00 00002e43: DUP1 00002e44: REVERT 00002e45: JUMPDEST 00002e46: POP 00002e47: GAS 00002e48: CALL 00002e49: ISZERO 00002e4a: DUP1 00002e4b: ISZERO 00002e4c: PUSH2 0x2e59 00002e4f: JUMPI 00002e50: RETURNDATASIZE 00002e51: PUSH1 0x00 00002e53: DUP1 00002e54: RETURNDATACOPY 00002e55: RETURNDATASIZE 00002e56: PUSH1 0x00 00002e58: REVERT 00002e59: JUMPDEST 00002e5a: POP 00002e5b: POP 00002e5c: POP 00002e5d: POP 00002e5e: PUSH1 0x40 00002e60: MLOAD 00002e61: RETURNDATASIZE 00002e62: PUSH1 0x20 00002e64: DUP2 00002e65: LT 00002e66: ISZERO 00002e67: PUSH2 0x2e6f 00002e6a: JUMPI 00002e6b: PUSH1 0x00 00002e6d: DUP1 00002e6e: REVERT 00002e6f: JUMPDEST 00002e70: DUP2 00002e71: ADD 00002e72: SWAP1 00002e73: DUP1 00002e74: DUP1 00002e75: MLOAD 00002e76: SWAP1 00002e77: PUSH1 0x20 00002e79: ADD 00002e7a: SWAP1 00002e7b: SWAP3 00002e7c: SWAP2 00002e7d: SWAP1 00002e7e: POP 00002e7f: POP 00002e80: POP 00002e81: PUSH1 0x3a 00002e83: DUP2 00002e84: SWAP1 00002e85: SSTORE 00002e86: POP 00002e87: PUSH2 0x2e9d 00002e8a: PUSH1 0x3a 00002e8c: SLOAD 00002e8d: PUSH1 0x39 00002e8f: SLOAD 00002e90: PUSH2 0x31af 00002e93: SWAP1 00002e94: SWAP2 00002e95: SWAP1 00002e96: PUSH4 0xffffffff 00002e9b: AND 00002e9c: JUMP 00002e9d: JUMPDEST 00002e9e: PUSH1 0x39 00002ea0: DUP2 00002ea1: SWAP1 00002ea2: SSTORE 00002ea3: POP 00002ea4: ADDRESS 00002ea5: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002eba: AND 00002ebb: PUSH32 0xd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a 00002edc: PUSH1 0x3a 00002ede: SLOAD 00002edf: PUSH1 0x40 00002ee1: MLOAD 00002ee2: DUP1 00002ee3: DUP3 00002ee4: DUP2 00002ee5: MSTORE 00002ee6: PUSH1 0x20 00002ee8: ADD 00002ee9: SWAP2 00002eea: POP 00002eeb: POP 00002eec: PUSH1 0x40 00002eee: MLOAD 00002eef: DUP1 00002ef0: SWAP2 00002ef1: SUB 00002ef2: SWAP1 00002ef3: LOG2 00002ef4: JUMP 00002ef5: JUMPDEST 00002ef6: PUSH2 0x2efd 00002ef9: PUSH2 0x1dc9 00002efc: JUMP 00002efd: JUMPDEST 00002efe: PUSH2 0x2f06 00002f01: JUMPI 00002f02: PUSH1 0x00 00002f04: DUP1 00002f05: REVERT 00002f06: JUMPDEST 00002f07: PUSH2 0x2f0f 00002f0a: DUP2 00002f0b: PUSH2 0x3568 00002f0e: JUMP 00002f0f: JUMPDEST 00002f10: POP 00002f11: JUMP 00002f12: JUMPDEST 00002f13: PUSH1 0x38 00002f15: PUSH1 0x00 00002f17: SWAP1 00002f18: SLOAD 00002f19: SWAP1 00002f1a: PUSH2 0x0100 00002f1d: EXP 00002f1e: SWAP1 00002f1f: DIV 00002f20: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002f35: AND 00002f36: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002f4b: AND 00002f4c: CALLER 00002f4d: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002f62: AND 00002f63: EQ 00002f64: PUSH2 0x2f6c 00002f67: JUMPI 00002f68: PUSH1 0x00 00002f6a: DUP1 00002f6b: REVERT 00002f6c: JUMPDEST 00002f6d: PUSH1 0x00 00002f6f: PUSH1 0x34 00002f71: PUSH1 0x00 00002f73: SWAP1 00002f74: SLOAD 00002f75: SWAP1 00002f76: PUSH2 0x0100 00002f79: EXP 00002f7a: SWAP1 00002f7b: DIV 00002f7c: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002f91: AND 00002f92: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002fa7: AND 00002fa8: PUSH4 0x70a08231 00002fad: ADDRESS 00002fae: PUSH1 0x40 00002fb0: MLOAD 00002fb1: DUP3 00002fb2: PUSH4 0xffffffff 00002fb7: AND 00002fb8: PUSH1 0xe0 00002fba: SHL 00002fbb: DUP2 00002fbc: MSTORE 00002fbd: PUSH1 0x04 00002fbf: ADD 00002fc0: DUP1 00002fc1: DUP3 00002fc2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00002fd7: AND 00002fd8: DUP2 00002fd9: MSTORE 00002fda: PUSH1 0x20 00002fdc: ADD 00002fdd: SWAP2 00002fde: POP 00002fdf: POP 00002fe0: PUSH1 0x20 00002fe2: PUSH1 0x40 00002fe4: MLOAD 00002fe5: DUP1 00002fe6: DUP4 00002fe7: SUB 00002fe8: DUP2 00002fe9: DUP7 00002fea: DUP1 00002feb: EXTCODESIZE 00002fec: ISZERO 00002fed: DUP1 00002fee: ISZERO 00002fef: PUSH2 0x2ff7 00002ff2: JUMPI 00002ff3: PUSH1 0x00 00002ff5: DUP1 00002ff6: REVERT 00002ff7: JUMPDEST 00002ff8: POP 00002ff9: GAS 00002ffa: STATICCALL 00002ffb: ISZERO 00002ffc: DUP1 00002ffd: ISZERO 00002ffe: PUSH2 0x300b 00003001: JUMPI 00003002: RETURNDATASIZE 00003003: PUSH1 0x00 00003005: DUP1 00003006: RETURNDATACOPY 00003007: RETURNDATASIZE 00003008: PUSH1 0x00 0000300a: REVERT 0000300b: JUMPDEST 0000300c: POP 0000300d: POP 0000300e: POP 0000300f: POP 00003010: PUSH1 0x40 00003012: MLOAD 00003013: RETURNDATASIZE 00003014: PUSH1 0x20 00003016: DUP2 00003017: LT 00003018: ISZERO 00003019: PUSH2 0x3021 0000301c: JUMPI 0000301d: PUSH1 0x00 0000301f: DUP1 00003020: REVERT 00003021: JUMPDEST 00003022: DUP2 00003023: ADD 00003024: SWAP1 00003025: DUP1 00003026: DUP1 00003027: MLOAD 00003028: SWAP1 00003029: PUSH1 0x20 0000302b: ADD 0000302c: SWAP1 0000302d: SWAP3 0000302e: SWAP2 0000302f: SWAP1 00003030: POP 00003031: POP 00003032: POP 00003033: SWAP1 00003034: POP 00003035: PUSH1 0x00 00003037: PUSH2 0x303e 0000303a: PUSH2 0x1e21 0000303d: JUMP 0000303e: JUMPDEST 0000303f: SWAP1 00003040: POP 00003041: DUP2 00003042: DUP2 00003043: GT 00003044: ISZERO 00003045: PUSH2 0x304c 00003048: JUMPI 00003049: DUP2 0000304a: SWAP1 0000304b: POP 0000304c: JUMPDEST 0000304d: PUSH1 0x00 0000304f: DUP2 00003050: GT 00003051: PUSH2 0x30a5 00003054: JUMPI 00003055: PUSH1 0x40 00003057: MLOAD 00003058: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00003079: DUP2 0000307a: MSTORE 0000307b: PUSH1 0x04 0000307d: ADD 0000307e: DUP1 0000307f: DUP1 00003080: PUSH1 0x20 00003082: ADD 00003083: DUP3 00003084: DUP2 00003085: SUB 00003086: DUP3 00003087: MSTORE 00003088: PUSH1 0x28 0000308a: DUP2 0000308b: MSTORE 0000308c: PUSH1 0x20 0000308e: ADD 0000308f: DUP1 00003090: PUSH2 0x37f8 00003093: PUSH1 0x28 00003095: SWAP2 00003096: CODECOPY 00003097: PUSH1 0x40 00003099: ADD 0000309a: SWAP2 0000309b: POP 0000309c: POP 0000309d: PUSH1 0x40 0000309f: MLOAD 000030a0: DUP1 000030a1: SWAP2 000030a2: SUB 000030a3: SWAP1 000030a4: REVERT 000030a5: JUMPDEST 000030a6: PUSH2 0x30ba 000030a9: DUP2 000030aa: PUSH1 0x41 000030ac: SLOAD 000030ad: PUSH2 0x31af 000030b0: SWAP1 000030b1: SWAP2 000030b2: SWAP1 000030b3: PUSH4 0xffffffff 000030b8: AND 000030b9: JUMP 000030ba: JUMPDEST 000030bb: PUSH1 0x41 000030bd: DUP2 000030be: SWAP1 000030bf: SSTORE 000030c0: POP 000030c1: PUSH2 0x30d5 000030c4: DUP2 000030c5: PUSH1 0x3b 000030c7: SLOAD 000030c8: PUSH2 0x31af 000030cb: SWAP1 000030cc: SWAP2 000030cd: SWAP1 000030ce: PUSH4 0xffffffff 000030d3: AND 000030d4: JUMP 000030d5: JUMPDEST 000030d6: PUSH1 0x3b 000030d8: DUP2 000030d9: SWAP1 000030da: SSTORE 000030db: POP 000030dc: PUSH2 0x3128 000030df: CALLER 000030e0: DUP3 000030e1: PUSH1 0x34 000030e3: PUSH1 0x00 000030e5: SWAP1 000030e6: SLOAD 000030e7: SWAP1 000030e8: PUSH2 0x0100 000030eb: EXP 000030ec: SWAP1 000030ed: DIV 000030ee: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003103: AND 00003104: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003119: AND 0000311a: PUSH2 0x3417 0000311d: SWAP1 0000311e: SWAP3 0000311f: SWAP2 00003120: SWAP1 00003121: PUSH4 0xffffffff 00003126: AND 00003127: JUMP 00003128: JUMPDEST 00003129: CALLER 0000312a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000313f: AND 00003140: PUSH32 0xffe903c0abe6b2dbb2f3474ef43d7a3c1fca49e5a774453423ca8e1952aabffa 00003161: DUP3 00003162: PUSH1 0x00 00003164: PUSH1 0x40 00003166: MLOAD 00003167: DUP1 00003168: DUP4 00003169: DUP2 0000316a: MSTORE 0000316b: PUSH1 0x20 0000316d: ADD 0000316e: DUP3 0000316f: DUP2 00003170: MSTORE 00003171: PUSH1 0x20 00003173: ADD 00003174: SWAP3 00003175: POP 00003176: POP 00003177: POP 00003178: PUSH1 0x40 0000317a: MLOAD 0000317b: DUP1 0000317c: SWAP2 0000317d: SUB 0000317e: SWAP1 0000317f: LOG2 00003180: POP 00003181: POP 00003182: JUMP 00003183: JUMPDEST 00003184: PUSH1 0x34 00003186: PUSH1 0x00 00003188: SWAP1 00003189: SLOAD 0000318a: SWAP1 0000318b: PUSH2 0x0100 0000318e: EXP 0000318f: SWAP1 00003190: DIV 00003191: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000031a6: AND 000031a7: DUP2 000031a8: JUMP 000031a9: JUMPDEST 000031aa: PUSH1 0x39 000031ac: SLOAD 000031ad: DUP2 000031ae: JUMP 000031af: JUMPDEST 000031b0: PUSH1 0x00 000031b2: DUP1 000031b3: DUP3 000031b4: DUP5 000031b5: ADD 000031b6: SWAP1 000031b7: POP 000031b8: DUP4 000031b9: DUP2 000031ba: LT 000031bb: ISZERO 000031bc: PUSH2 0x31c4 000031bf: JUMPI 000031c0: PUSH1 0x00 000031c2: DUP1 000031c3: REVERT 000031c4: JUMPDEST 000031c5: DUP1 000031c6: SWAP2 000031c7: POP 000031c8: POP 000031c9: SWAP3 000031ca: SWAP2 000031cb: POP 000031cc: POP 000031cd: JUMP 000031ce: JUMPDEST 000031cf: DUP1 000031d0: ADDRESS 000031d1: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000031e6: AND 000031e7: BALANCE 000031e8: LT 000031e9: ISZERO 000031ea: PUSH2 0x325b 000031ed: JUMPI 000031ee: PUSH1 0x40 000031f0: MLOAD 000031f1: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 00003212: DUP2 00003213: MSTORE 00003214: PUSH1 0x04 00003216: ADD 00003217: DUP1 00003218: DUP1 00003219: PUSH1 0x20 0000321b: ADD 0000321c: DUP3 0000321d: DUP2 0000321e: SUB 0000321f: DUP3 00003220: MSTORE 00003221: PUSH1 0x1d 00003223: DUP2 00003224: MSTORE 00003225: PUSH1 0x20 00003227: ADD 00003228: DUP1 00003229: PUSH32 0x416464726573733a20696e73756666696369656e742062616c616e6365000000 0000324a: DUP2 0000324b: MSTORE 0000324c: POP 0000324d: PUSH1 0x20 0000324f: ADD 00003250: SWAP2 00003251: POP 00003252: POP 00003253: PUSH1 0x40 00003255: MLOAD 00003256: DUP1 00003257: SWAP2 00003258: SUB 00003259: SWAP1 0000325a: REVERT 0000325b: JUMPDEST 0000325c: PUSH1 0x00 0000325e: DUP3 0000325f: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003274: AND 00003275: DUP3 00003276: PUSH1 0x40 00003278: MLOAD 00003279: DUP1 0000327a: PUSH1 0x00 0000327c: ADD 0000327d: SWAP1 0000327e: POP 0000327f: PUSH1 0x00 00003281: PUSH1 0x40 00003283: MLOAD 00003284: DUP1 00003285: DUP4 00003286: SUB 00003287: DUP2 00003288: DUP6 00003289: DUP8 0000328a: GAS 0000328b: CALL 0000328c: SWAP3 0000328d: POP 0000328e: POP 0000328f: POP 00003290: RETURNDATASIZE 00003291: DUP1 00003292: PUSH1 0x00 00003294: DUP2 00003295: EQ 00003296: PUSH2 0x32bb 00003299: JUMPI 0000329a: PUSH1 0x40 0000329c: MLOAD 0000329d: SWAP2 0000329e: POP 0000329f: PUSH1 0x1f 000032a1: NOT 000032a2: PUSH1 0x3f 000032a4: RETURNDATASIZE 000032a5: ADD 000032a6: AND 000032a7: DUP3 000032a8: ADD 000032a9: PUSH1 0x40 000032ab: MSTORE 000032ac: RETURNDATASIZE 000032ad: DUP3 000032ae: MSTORE 000032af: RETURNDATASIZE 000032b0: PUSH1 0x00 000032b2: PUSH1 0x20 000032b4: DUP5 000032b5: ADD 000032b6: RETURNDATACOPY 000032b7: PUSH2 0x32c0 000032ba: JUMP 000032bb: JUMPDEST 000032bc: PUSH1 0x60 000032be: SWAP2 000032bf: POP 000032c0: JUMPDEST 000032c1: POP 000032c2: POP 000032c3: SWAP1 000032c4: POP 000032c5: DUP1 000032c6: PUSH2 0x331a 000032c9: JUMPI 000032ca: PUSH1 0x40 000032cc: MLOAD 000032cd: PUSH32 0x08c379a000000000000000000000000000000000000000000000000000000000 000032ee: DUP2 000032ef: MSTORE 000032f0: PUSH1 0x04 000032f2: ADD 000032f3: DUP1 000032f4: DUP1 000032f5: PUSH1 0x20 000032f7: ADD 000032f8: DUP3 000032f9: DUP2 000032fa: SUB 000032fb: DUP3 000032fc: MSTORE 000032fd: PUSH1 0x3a 000032ff: DUP2 00003300: MSTORE 00003301: PUSH1 0x20 00003303: ADD 00003304: DUP1 00003305: PUSH2 0x373c 00003308: PUSH1 0x3a 0000330a: SWAP2 0000330b: CODECOPY 0000330c: PUSH1 0x40 0000330e: ADD 0000330f: SWAP2 00003310: POP 00003311: POP 00003312: PUSH1 0x40 00003314: MLOAD 00003315: DUP1 00003316: SWAP2 00003317: SUB 00003318: SWAP1 00003319: REVERT 0000331a: JUMPDEST 0000331b: POP 0000331c: POP 0000331d: POP 0000331e: JUMP 0000331f: JUMPDEST 00003320: PUSH1 0x00 00003322: PUSH1 0x3a 00003324: SLOAD 00003325: EQ 00003326: DUP1 00003327: PUSH2 0x3334 0000332a: JUMPI 0000332b: POP 0000332c: PUSH1 0x00 0000332e: DUP2 0000332f: PUSH1 0x03 00003331: ADD 00003332: SLOAD 00003333: EQ 00003334: JUMPDEST 00003335: DUP1 00003336: PUSH2 0x334d 00003339: JUMPI 0000333a: POP 0000333b: DUP1 0000333c: PUSH1 0x05 0000333e: ADD 0000333f: PUSH1 0x00 00003341: SWAP1 00003342: SLOAD 00003343: SWAP1 00003344: PUSH2 0x0100 00003347: EXP 00003348: SWAP1 00003349: DIV 0000334a: PUSH1 0xff 0000334c: AND 0000334d: JUMPDEST 0000334e: ISZERO 0000334f: PUSH2 0x3357 00003352: JUMPI 00003353: PUSH2 0x3414 00003356: JUMP 00003357: JUMPDEST 00003358: PUSH1 0x00 0000335a: PUSH2 0x3386 0000335d: PUSH1 0x3d 0000335f: SLOAD 00003360: PUSH2 0x3378 00003363: PUSH1 0x3a 00003365: SLOAD 00003366: DUP6 00003367: PUSH1 0x03 00003369: ADD 0000336a: SLOAD 0000336b: PUSH2 0x34d1 0000336e: SWAP1 0000336f: SWAP2 00003370: SWAP1 00003371: PUSH4 0xffffffff 00003376: AND 00003377: JUMP 00003378: JUMPDEST 00003379: PUSH2 0x350b 0000337c: SWAP1 0000337d: SWAP2 0000337e: SWAP1 0000337f: PUSH4 0xffffffff 00003384: AND 00003385: JUMP 00003386: JUMPDEST 00003387: SWAP1 00003388: POP 00003389: PUSH2 0x339f 0000338c: DUP2 0000338d: DUP4 0000338e: PUSH1 0x00 00003390: ADD 00003391: SLOAD 00003392: PUSH2 0x31af 00003395: SWAP1 00003396: SWAP2 00003397: SWAP1 00003398: PUSH4 0xffffffff 0000339d: AND 0000339e: JUMP 0000339f: JUMPDEST 000033a0: DUP3 000033a1: PUSH1 0x00 000033a3: ADD 000033a4: DUP2 000033a5: SWAP1 000033a6: SSTORE 000033a7: POP 000033a8: PUSH1 0x01 000033aa: DUP3 000033ab: PUSH1 0x05 000033ad: ADD 000033ae: PUSH1 0x00 000033b0: PUSH2 0x0100 000033b3: EXP 000033b4: DUP2 000033b5: SLOAD 000033b6: DUP2 000033b7: PUSH1 0xff 000033b9: MUL 000033ba: NOT 000033bb: AND 000033bc: SWAP1 000033bd: DUP4 000033be: ISZERO 000033bf: ISZERO 000033c0: MUL 000033c1: OR 000033c2: SWAP1 000033c3: SSTORE 000033c4: POP 000033c5: CALLER 000033c6: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000033db: AND 000033dc: PUSH32 0xd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a 000033fd: DUP3 000033fe: PUSH1 0x40 00003400: MLOAD 00003401: DUP1 00003402: DUP3 00003403: DUP2 00003404: MSTORE 00003405: PUSH1 0x20 00003407: ADD 00003408: SWAP2 00003409: POP 0000340a: POP 0000340b: PUSH1 0x40 0000340d: MLOAD 0000340e: DUP1 0000340f: SWAP2 00003410: SUB 00003411: SWAP1 00003412: LOG2 00003413: POP 00003414: JUMPDEST 00003415: POP 00003416: JUMP 00003417: JUMPDEST 00003418: DUP3 00003419: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000342e: AND 0000342f: PUSH4 0xa9059cbb 00003434: DUP4 00003435: DUP4 00003436: PUSH1 0x40 00003438: MLOAD 00003439: DUP4 0000343a: PUSH4 0xffffffff 0000343f: AND 00003440: PUSH1 0xe0 00003442: SHL 00003443: DUP2 00003444: MSTORE 00003445: PUSH1 0x04 00003447: ADD 00003448: DUP1 00003449: DUP4 0000344a: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000345f: AND 00003460: DUP2 00003461: MSTORE 00003462: PUSH1 0x20 00003464: ADD 00003465: DUP3 00003466: DUP2 00003467: MSTORE 00003468: PUSH1 0x20 0000346a: ADD 0000346b: SWAP3 0000346c: POP 0000346d: POP 0000346e: POP 0000346f: PUSH1 0x20 00003471: PUSH1 0x40 00003473: MLOAD 00003474: DUP1 00003475: DUP4 00003476: SUB 00003477: DUP2 00003478: PUSH1 0x00 0000347a: DUP8 0000347b: DUP1 0000347c: EXTCODESIZE 0000347d: ISZERO 0000347e: DUP1 0000347f: ISZERO 00003480: PUSH2 0x3488 00003483: JUMPI 00003484: PUSH1 0x00 00003486: DUP1 00003487: REVERT 00003488: JUMPDEST 00003489: POP 0000348a: GAS 0000348b: CALL 0000348c: ISZERO 0000348d: DUP1 0000348e: ISZERO 0000348f: PUSH2 0x349c 00003492: JUMPI 00003493: RETURNDATASIZE 00003494: PUSH1 0x00 00003496: DUP1 00003497: RETURNDATACOPY 00003498: RETURNDATASIZE 00003499: PUSH1 0x00 0000349b: REVERT 0000349c: JUMPDEST 0000349d: POP 0000349e: POP 0000349f: POP 000034a0: POP 000034a1: PUSH1 0x40 000034a3: MLOAD 000034a4: RETURNDATASIZE 000034a5: PUSH1 0x20 000034a7: DUP2 000034a8: LT 000034a9: ISZERO 000034aa: PUSH2 0x34b2 000034ad: JUMPI 000034ae: PUSH1 0x00 000034b0: DUP1 000034b1: REVERT 000034b2: JUMPDEST 000034b3: DUP2 000034b4: ADD 000034b5: SWAP1 000034b6: DUP1 000034b7: DUP1 000034b8: MLOAD 000034b9: SWAP1 000034ba: PUSH1 0x20 000034bc: ADD 000034bd: SWAP1 000034be: SWAP3 000034bf: SWAP2 000034c0: SWAP1 000034c1: POP 000034c2: POP 000034c3: POP 000034c4: PUSH2 0x34cc 000034c7: JUMPI 000034c8: PUSH1 0x00 000034ca: DUP1 000034cb: REVERT 000034cc: JUMPDEST 000034cd: POP 000034ce: POP 000034cf: POP 000034d0: JUMP 000034d1: JUMPDEST 000034d2: PUSH1 0x00 000034d4: DUP1 000034d5: DUP4 000034d6: EQ 000034d7: ISZERO 000034d8: PUSH2 0x34e4 000034db: JUMPI 000034dc: PUSH1 0x00 000034de: SWAP1 000034df: POP 000034e0: PUSH2 0x3505 000034e3: JUMP 000034e4: JUMPDEST 000034e5: PUSH1 0x00 000034e7: DUP3 000034e8: DUP5 000034e9: MUL 000034ea: SWAP1 000034eb: POP 000034ec: DUP3 000034ed: DUP5 000034ee: DUP3 000034ef: DUP2 000034f0: PUSH2 0x34f5 000034f3: JUMPI 000034f4: INVALID 000034f5: JUMPDEST 000034f6: DIV 000034f7: EQ 000034f8: PUSH2 0x3500 000034fb: JUMPI 000034fc: PUSH1 0x00 000034fe: DUP1 000034ff: REVERT 00003500: JUMPDEST 00003501: DUP1 00003502: SWAP2 00003503: POP 00003504: POP 00003505: JUMPDEST 00003506: SWAP3 00003507: SWAP2 00003508: POP 00003509: POP 0000350a: JUMP 0000350b: JUMPDEST 0000350c: PUSH1 0x00 0000350e: DUP1 0000350f: DUP3 00003510: GT 00003511: PUSH2 0x3519 00003514: JUMPI 00003515: PUSH1 0x00 00003517: DUP1 00003518: REVERT 00003519: JUMPDEST 0000351a: PUSH1 0x00 0000351c: DUP3 0000351d: DUP5 0000351e: DUP2 0000351f: PUSH2 0x3524 00003522: JUMPI 00003523: INVALID 00003524: JUMPDEST 00003525: DIV 00003526: SWAP1 00003527: POP 00003528: DUP1 00003529: SWAP2 0000352a: POP 0000352b: POP 0000352c: SWAP3 0000352d: SWAP2 0000352e: POP 0000352f: POP 00003530: JUMP 00003531: JUMPDEST 00003532: PUSH1 0x00 00003534: DUP3 00003535: DUP3 00003536: GT 00003537: ISZERO 00003538: PUSH2 0x3540 0000353b: JUMPI 0000353c: PUSH1 0x00 0000353e: DUP1 0000353f: REVERT 00003540: JUMPDEST 00003541: PUSH1 0x00 00003543: DUP3 00003544: DUP5 00003545: SUB 00003546: SWAP1 00003547: POP 00003548: DUP1 00003549: SWAP2 0000354a: POP 0000354b: POP 0000354c: SWAP3 0000354d: SWAP2 0000354e: POP 0000354f: POP 00003550: JUMP 00003551: JUMPDEST 00003552: PUSH1 0x00 00003554: DUP1 00003555: ADDRESS 00003556: SWAP1 00003557: POP 00003558: PUSH1 0x00 0000355a: DUP2 0000355b: EXTCODESIZE 0000355c: SWAP1 0000355d: POP 0000355e: PUSH1 0x00 00003560: DUP2 00003561: EQ 00003562: SWAP3 00003563: POP 00003564: POP 00003565: POP 00003566: SWAP1 00003567: JUMP 00003568: JUMPDEST 00003569: PUSH1 0x00 0000356b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003580: AND 00003581: DUP2 00003582: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003597: AND 00003598: EQ 00003599: ISZERO 0000359a: PUSH2 0x35a2 0000359d: JUMPI 0000359e: PUSH1 0x00 000035a0: DUP1 000035a1: REVERT 000035a2: JUMPDEST 000035a3: DUP1 000035a4: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000035b9: AND 000035ba: PUSH1 0x35 000035bc: PUSH1 0x00 000035be: SWAP1 000035bf: SLOAD 000035c0: SWAP1 000035c1: PUSH2 0x0100 000035c4: EXP 000035c5: SWAP1 000035c6: DIV 000035c7: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000035dc: AND 000035dd: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000035f2: AND 000035f3: PUSH32 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 00003614: PUSH1 0x40 00003616: MLOAD 00003617: PUSH1 0x40 00003619: MLOAD 0000361a: DUP1 0000361b: SWAP2 0000361c: SUB 0000361d: SWAP1 0000361e: LOG3 0000361f: DUP1 00003620: PUSH1 0x35 00003622: PUSH1 0x00 00003624: PUSH2 0x0100 00003627: EXP 00003628: DUP2 00003629: SLOAD 0000362a: DUP2 0000362b: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003640: MUL 00003641: NOT 00003642: AND 00003643: SWAP1 00003644: DUP4 00003645: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 0000365a: AND 0000365b: MUL 0000365c: OR 0000365d: SWAP1 0000365e: SSTORE 0000365f: POP 00003660: POP 00003661: JUMP 00003662: JUMPDEST 00003663: DUP4 00003664: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 00003679: AND 0000367a: PUSH4 0x23b872dd 0000367f: DUP5 00003680: DUP5 00003681: DUP5 00003682: PUSH1 0x40 00003684: MLOAD 00003685: DUP5 00003686: PUSH4 0xffffffff 0000368b: AND 0000368c: PUSH1 0xe0 0000368e: SHL 0000368f: DUP2 00003690: MSTORE 00003691: PUSH1 0x04 00003693: ADD 00003694: DUP1 00003695: DUP5 00003696: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000036ab: AND 000036ac: DUP2 000036ad: MSTORE 000036ae: PUSH1 0x20 000036b0: ADD 000036b1: DUP4 000036b2: PUSH20 0xffffffffffffffffffffffffffffffffffffffff 000036c7: AND 000036c8: DUP2 000036c9: MSTORE 000036ca: PUSH1 0x20 000036cc: ADD 000036cd: DUP3 000036ce: DUP2 000036cf: MSTORE 000036d0: PUSH1 0x20 000036d2: ADD 000036d3: SWAP4 000036d4: POP 000036d5: POP 000036d6: POP 000036d7: POP 000036d8: PUSH1 0x20 000036da: PUSH1 0x40 000036dc: MLOAD 000036dd: DUP1 000036de: DUP4 000036df: SUB 000036e0: DUP2 000036e1: PUSH1 0x00 000036e3: DUP8 000036e4: DUP1 000036e5: EXTCODESIZE 000036e6: ISZERO 000036e7: DUP1 000036e8: ISZERO 000036e9: PUSH2 0x36f1 000036ec: JUMPI 000036ed: PUSH1 0x00 000036ef: DUP1 000036f0: REVERT 000036f1: JUMPDEST 000036f2: POP 000036f3: GAS 000036f4: CALL 000036f5: ISZERO 000036f6: DUP1 000036f7: ISZERO 000036f8: PUSH2 0x3705 000036fb: JUMPI 000036fc: RETURNDATASIZE 000036fd: PUSH1 0x00 000036ff: DUP1 00003700: RETURNDATACOPY 00003701: RETURNDATASIZE 00003702: PUSH1 0x00 00003704: REVERT 00003705: JUMPDEST 00003706: POP 00003707: POP 00003708: POP 00003709: POP 0000370a: PUSH1 0x40 0000370c: MLOAD 0000370d: RETURNDATASIZE 0000370e: PUSH1 0x20 00003710: DUP2 00003711: LT 00003712: ISZERO 00003713: PUSH2 0x371b 00003716: JUMPI 00003717: PUSH1 0x00 00003719: DUP1 0000371a: REVERT 0000371b: JUMPDEST 0000371c: DUP2 0000371d: ADD 0000371e: SWAP1 0000371f: DUP1 00003720: DUP1 00003721: MLOAD 00003722: SWAP1 00003723: PUSH1 0x20 00003725: ADD 00003726: SWAP1 00003727: SWAP3 00003728: SWAP2 00003729: SWAP1 0000372a: POP 0000372b: POP 0000372c: POP 0000372d: PUSH2 0x3735 00003730: JUMPI 00003731: PUSH1 0x00 00003733: DUP1 00003734: REVERT 00003735: JUMPDEST 00003736: POP 00003737: POP 00003738: POP 00003739: POP 0000373a: JUMP 0000373b: INVALID 0000373c: COINBASE 0000373d: PUSH5 0x6472657373 00003743: GASPRICE 00003744: KECCAK256 00003745: PUSH22 0x6e61626c6520746f2073656e642076616c75652c2072 0000375c: PUSH6 0x63697069656e 00003763: PUSH21 0x206d61792068617665207265766572746564526571 00003779: PUSH22 0x657374656420616d6f756e74206f6620746f6b656e73 00003790: KECCAK256 00003791: PUSH6 0x786365656465 00003798: PUSH5 0x20616c6c6f 0000379e: PUSH24 0x656420706f7274696f6e4e6f7420656e6f75676820746f6b 000037b7: PUSH6 0x6e7320696e20 000037be: PUSH21 0x686520636f6e7472616374436f6e74726163742069 000037d4: PUSH15 0x7374616e63652068617320616c7265 000037e4: PUSH2 0x6479 000037e7: KECCAK256 000037e8: PUSH3 0x65656e 000037ec: KECCAK256 000037ed: PUSH10 0x6e697469616c697a6564 000037f8: SLOAD 000037f9: PUSH9 0x657265206973206e6f 00003803: KECCAK256 00003804: PUSH2 0x7661 00003807: PUSH10 0x6c61626c652072657761 00003812: PUSH19 0x6420746f207769746864726177546865726520 00003826: PUSH10 0x73206e6f20617661696c 00003831: PUSH2 0x626c 00003834: PUSH6 0x204554482074 0000383b: PUSH16 0x207769746864726177a2646970667358 0000384c: UNKNOWN(0x22) 0000384d: SLT 0000384e: KECCAK256 0000384f: PUSH5 0x802609b5b6 00003855: UNKNOWN(0x4C) 00003856: ISZERO 00003857: SWAP12 00003858: SDIV 00003859: GASLIMIT 0000385a: UNKNOWN(0xDD) 0000385b: CALLER 0000385c: EQ 0000385d: XOR 0000385e: UNKNOWN(0xC0) 0000385f: BYTE 00003860: SWAP2 00003861: BYTE 00003862: CALLCODE 00003863: PUSH30
| Severity | Category | Tool | Title | Confidence | Validated | Confirmed | Details |
|---|---|---|---|---|---|---|---|
| high | upgradeability | detector | Untrusted DELEGATECALL target reachable | 55 | no | no |
viewtrace_id: 0x0159c8086574cda71a1a3102d0f9ed4c7bec8836d283c99f3611f048409bbcbc
validation_json{
"sink": "DELEGATECALL",
"errors": 0,
"status": "unknown",
"attempts": 192,
"trace_id": "0x0159c8086574cda71a1a3102d0f9ed4c7bec8836d283c99f3611f048409bbcbc",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": null,
"matched_probe": null,
"target_varies": null,
"classification": "no_sink"
}
witness_json{
"notes": "heuristic witness; entrypoints are best-effort selectors with zeroed calldata",
"constraints": [],
"entrypoints": [
{
"calldata": "0xeb85ed73",
"selector": "0xeb85ed73",
"calldata_variants": [
"0xeb85ed73",
"0xeb85ed730000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf435d2e5",
"selector": "0xf435d2e5",
"calldata_variants": [
"0xf435d2e5",
"0xf435d2e50000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf887ea40",
"selector": "0xf887ea40",
"calldata_variants": [
"0xf887ea40",
"0xf887ea400000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfc0c546a",
"selector": "0xfc0c546a",
"calldata_variants": [
"0xfc0c546a",
"0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfd012664",
"selector": "0xfd012664",
"calldata_variants": [
"0xfd012664",
"0xfd0126640000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdd49756e",
"selector": "0xdd49756e",
"calldata_variants": [
"0xdd49756e",
"0xdd49756e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdd934e89",
"selector": "0xdd934e89",
"calldata_variants": [
"0xdd934e89",
"0xdd934e890000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 895,
"opcode": "DELEGATECALL",
"returndata_checked": null,
"value_expression_category": "n/a",
"target_expression_category": "computed"
}
],
"guards_detected": [
{
"pc": 3243,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 7685,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 12108,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"delegatecall_count": 1,
"untrusted_delegatecall_count": 1
}
|
| high | access_control | codex | Unprotected initializer lets attacker seize ownership and drain an uninitialized WorkLockPoolingContract | 85 | no | — |
viewevidence_json{
"evidence": "`initialize` is public and sets owner to the caller without any auth checks (contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:73, contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:80). The base initializer is also public (contracts/contracts/staking_contracts/AbstractStakingContract.sol:133). Owner-gated fallback then allows arbitrary delegatecall execution once ownership is taken (contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:433).",
"locations": [
"contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:73",
"contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:80",
"contracts/contracts/staking_contracts/AbstractStakingContract.sol:133",
"contracts/contracts/staking_contracts/WorkLockPoolingContract.sol:433"
],
"recommendation": "Restrict initialization to a trusted deployer (e.g., factory-only) and/or add access control to `initialize`. If using proxies, call `initialize` atomically at deployment and consider disabling initializers in the implementation (e.g., `_disableInitializers()`), so no external account can claim ownership.",
"exploit_scenario": "1) Monitor for a freshly deployed WorkLockPoolingContract proxy/instance where `initializer` has not been called yet. 2) Call `initialize(...)` with attacker-controlled `_router` (pointing to a malicious target contract) and `_workerOwner` set to the attacker; `_transferOwnership(msg.sender)` makes the attacker the owner. 3) As owner, call the contract\u2019s fallback to delegatecall into the malicious target and execute a drain (e.g., transfer all ERC20 tokens and ETH held by the pool to the attacker). Profit potential: the entire pooled token and ETH balances held by the contract (order of magnitude: total pool TVL plus any unclaimed rewards/refunds)."
}
|
| medium | other | detector | Untrusted CALL target/value reachable | 45 | no | no |
viewtrace_id: 0x3a333cb78158113cc4b854dfc3704f618da430e82e8d964ff9f6f1311669a9bb
call_targets:
0xb9a42d02300f71ca23a100864fef2d5f82f7f833
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x3a333cb78158113cc4b854dfc3704f618da430e82e8d964ff9f6f1311669a9bb",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xb9a42d02300f71ca23a100864fef2d5f82f7f833"
],
"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": "0xeb85ed73",
"selector": "0xeb85ed73",
"calldata_variants": [
"0xeb85ed73",
"0xeb85ed730000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf435d2e5",
"selector": "0xf435d2e5",
"calldata_variants": [
"0xf435d2e5",
"0xf435d2e50000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf887ea40",
"selector": "0xf887ea40",
"calldata_variants": [
"0xf887ea40",
"0xf887ea400000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfc0c546a",
"selector": "0xfc0c546a",
"calldata_variants": [
"0xfc0c546a",
"0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfd012664",
"selector": "0xfd012664",
"calldata_variants": [
"0xfd012664",
"0xfd0126640000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdd49756e",
"selector": "0xdd49756e",
"calldata_variants": [
"0xdd49756e",
"0xdd49756e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdd934e89",
"selector": "0xdd934e89",
"calldata_variants": [
"0xdd934e89",
"0xdd934e890000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 5224,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5355,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 8067,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"call_count": 8,
"guards_detected": [
{
"pc": 3243,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 7685,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 12108,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
],
"untrusted_call_count": 7
}
|
| medium | other | detector | ETH value transfer possible | 40 | no | no |
viewtrace_id: 0x3a333cb78158113cc4b854dfc3704f618da430e82e8d964ff9f6f1311669a9bb
call_targets:
0xb9a42d02300f71ca23a100864fef2d5f82f7f833
target_varies:
no
classification:
constant_target
validation_json{
"sink": "CALL",
"errors": 0,
"status": "sink_reached",
"attempts": 1,
"trace_id": "0x3a333cb78158113cc4b854dfc3704f618da430e82e8d964ff9f6f1311669a9bb",
"confirmed": false,
"trace_mode": "callTracer",
"call_targets": [
"0xb9a42d02300f71ca23a100864fef2d5f82f7f833"
],
"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": "0xeb85ed73",
"selector": "0xeb85ed73",
"calldata_variants": [
"0xeb85ed73",
"0xeb85ed730000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf2fde38b",
"selector": "0xf2fde38b",
"calldata_variants": [
"0xf2fde38b",
"0xf2fde38b0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf435d2e5",
"selector": "0xf435d2e5",
"calldata_variants": [
"0xf435d2e5",
"0xf435d2e50000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xf887ea40",
"selector": "0xf887ea40",
"calldata_variants": [
"0xf887ea40",
"0xf887ea400000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfc0c546a",
"selector": "0xfc0c546a",
"calldata_variants": [
"0xfc0c546a",
"0xfc0c546a0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xfd012664",
"selector": "0xfd012664",
"calldata_variants": [
"0xfd012664",
"0xfd0126640000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdd49756e",
"selector": "0xdd49756e",
"calldata_variants": [
"0xdd49756e",
"0xdd49756e0000000000000000000000000000000000000000000000000000000000000000"
]
},
{
"calldata": "0xdd934e89",
"selector": "0xdd934e89",
"calldata_variants": [
"0xdd934e89",
"0xdd934e890000000000000000000000000000000000000000000000000000000000000000"
]
}
]
}
evidence_json{
"examples": [
{
"pc": 5224,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 5355,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
},
{
"pc": 8067,
"opcode": "CALL",
"returndata_checked": null,
"value_expression_category": "computed",
"target_expression_category": "computed"
}
],
"eth_value_calls": 8,
"guards_detected": [
{
"pc": 3243,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 7685,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
},
{
"pc": 12108,
"type": "msg_sender_eq_const",
"value": "0xffffffffffffffffffffffffffffffffffffffff"
}
]
}
|
| medium | upgradeability | cast | DELEGATECALL present | 80 | no | — |
viewevidence_json{
"notes": "delegatecall enables execution in caller context; common in proxies/upgradeable patterns",
"delegatecall_count": 1
}
|
| 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": 21
}
|
| info | other | cast | Heavy EXTCODE*/BALANCE usage | 55 | no | — |
viewevidence_json{
"notes": "frequent external code or balance checks; may indicate introspection or validation logic",
"ext_balance_count": 25
}
|