ETH Price: $2,144.73 (-2.03%)

Contract

0x7575c19c3B6dd96AFb48b049f66bfC5d7fEAE04d
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw Token224485822025-05-09 21:33:47314 days ago1746826427IN
0x7575c19c...d7fEAE04d
0 ETH0.00008081.2173531
Withdraw Token224475702025-05-09 18:07:47314 days ago1746814067IN
0x7575c19c...d7fEAE04d
0 ETH0.00017592.65036337
Execute Arbitrag...224347942025-05-07 22:50:59316 days ago1746658259IN
0x7575c19c...d7fEAE04d
0 ETH0.000111910.45025584
Execute Arbitrag...224347922025-05-07 22:50:35316 days ago1746658235IN
0x7575c19c...d7fEAE04d
0 ETH0.000111910.45025584
Execute Arbitrag...224347912025-05-07 22:50:23316 days ago1746658223IN
0x7575c19c...d7fEAE04d
0 ETH0.000114930.46240584
Execute Arbitrag...224347912025-05-07 22:50:23316 days ago1746658223IN
0x7575c19c...d7fEAE04d
0 ETH0.000114930.46240584
Execute Arbitrag...224347902025-05-07 22:50:11316 days ago1746658211IN
0x7575c19c...d7fEAE04d
0 ETH0.000114930.46240584
Execute Arbitrag...224347902025-05-07 22:50:11316 days ago1746658211IN
0x7575c19c...d7fEAE04d
0 ETH0.000114930.46240584
Execute Arbitrag...224347892025-05-07 22:49:59316 days ago1746658199IN
0x7575c19c...d7fEAE04d
0 ETH0.000114930.46240584
Execute Arbitrag...224347892025-05-07 22:49:59316 days ago1746658199IN
0x7575c19c...d7fEAE04d
0 ETH0.000114930.46240584
Execute Arbitrag...224347122025-05-07 22:34:11316 days ago1746657251IN
0x7575c19c...d7fEAE04d
0 ETH0.000115820.4659918
Execute Arbitrag...224347122025-05-07 22:34:11316 days ago1746657251IN
0x7575c19c...d7fEAE04d
0 ETH0.000115820.4659918
Execute Arbitrag...224346122025-05-07 22:13:59316 days ago1746656039IN
0x7575c19c...d7fEAE04d
0 ETH0.000026380.46891664
Execute Arbitrag...224346112025-05-07 22:13:47316 days ago1746656027IN
0x7575c19c...d7fEAE04d
0 ETH0.000026380.46891664
Execute Arbitrag...224346112025-05-07 22:13:47316 days ago1746656027IN
0x7575c19c...d7fEAE04d
0 ETH0.000026380.46891664
Execute Arbitrag...224346112025-05-07 22:13:47316 days ago1746656027IN
0x7575c19c...d7fEAE04d
0 ETH0.000026380.46891664
Execute Arbitrag...224346102025-05-07 22:13:35316 days ago1746656015IN
0x7575c19c...d7fEAE04d
0 ETH0.000026380.46891664
Execute Arbitrag...224346102025-05-07 22:13:35316 days ago1746656015IN
0x7575c19c...d7fEAE04d
0 ETH0.000026380.46891664
Execute Arbitrag...224343612025-05-07 21:22:11316 days ago1746652931IN
0x7575c19c...d7fEAE04d
0 ETH0.000108851.93478031
Execute Arbitrag...224342752025-05-07 21:04:23316 days ago1746651863IN
0x7575c19c...d7fEAE04d
0 ETH0.000109211.94126032
Execute Arbitrag...224342212025-05-07 20:53:23316 days ago1746651203IN
0x7575c19c...d7fEAE04d
0 ETH0.000115282.04916123
Execute Arbitrag...224341402025-05-07 20:36:11316 days ago1746650171IN
0x7575c19c...d7fEAE04d
0 ETH0.000118992.11510282
Execute Arbitrag...224340902025-05-07 20:26:11316 days ago1746649571IN
0x7575c19c...d7fEAE04d
0 ETH0.000128612.28903339
Execute Arbitrag...224340552025-05-07 20:18:47316 days ago1746649127IN
0x7575c19c...d7fEAE04d
0 ETH0.000129252.30034022
Execute Arbitrag...224338072025-05-07 19:27:47316 days ago1746646067IN
0x7575c19c...d7fEAE04d
0 ETH0.000131432.33909201
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer224485822025-05-09 21:33:47314 days ago1746826427
0x7575c19c...d7fEAE04d
0 ETH
Balance Of224485822025-05-09 21:33:47314 days ago1746826427
0x7575c19c...d7fEAE04d
0 ETH
Transfer224475702025-05-09 18:07:47314 days ago1746814067
0x7575c19c...d7fEAE04d
0 ETH
Balance Of224475702025-05-09 18:07:47314 days ago1746814067
0x7575c19c...d7fEAE04d
0 ETH
Transfer*224347942025-05-07 22:50:59316 days ago1746658259
0x7575c19c...d7fEAE04d
0 ETH
Balance Of224347942025-05-07 22:50:59316 days ago1746658259
0x7575c19c...d7fEAE04d
0 ETH
Transfer*224347922025-05-07 22:50:35316 days ago1746658235
0x7575c19c...d7fEAE04d
0 ETH
Balance Of224347922025-05-07 22:50:35316 days ago1746658235
0x7575c19c...d7fEAE04d
0 ETH
Transfer*224347912025-05-07 22:50:23316 days ago1746658223
0x7575c19c...d7fEAE04d
0 ETH
Balance Of224347912025-05-07 22:50:23316 days ago1746658223
0x7575c19c...d7fEAE04d
0 ETH
Transfer*224347912025-05-07 22:50:23316 days ago1746658223
0x7575c19c...d7fEAE04d
0 ETH
Balance Of224347912025-05-07 22:50:23316 days ago1746658223
0x7575c19c...d7fEAE04d
0 ETH
Transfer*224347902025-05-07 22:50:11316 days ago1746658211
0x7575c19c...d7fEAE04d
0 ETH
Balance Of224347902025-05-07 22:50:11316 days ago1746658211
0x7575c19c...d7fEAE04d
0 ETH
Transfer*224347902025-05-07 22:50:11316 days ago1746658211
0x7575c19c...d7fEAE04d
0 ETH
Balance Of224347902025-05-07 22:50:11316 days ago1746658211
0x7575c19c...d7fEAE04d
0 ETH
Transfer*224347892025-05-07 22:49:59316 days ago1746658199
0x7575c19c...d7fEAE04d
0 ETH
Balance Of224347892025-05-07 22:49:59316 days ago1746658199
0x7575c19c...d7fEAE04d
0 ETH
Transfer*224347892025-05-07 22:49:59316 days ago1746658199
0x7575c19c...d7fEAE04d
0 ETH
Balance Of224347892025-05-07 22:49:59316 days ago1746658199
0x7575c19c...d7fEAE04d
0 ETH
Transfer*224347122025-05-07 22:34:11316 days ago1746657251
0x7575c19c...d7fEAE04d
0 ETH
Balance Of224347122025-05-07 22:34:11316 days ago1746657251
0x7575c19c...d7fEAE04d
0 ETH
Transfer*224347122025-05-07 22:34:11316 days ago1746657251
0x7575c19c...d7fEAE04d
0 ETH
Balance Of224347122025-05-07 22:34:11316 days ago1746657251
0x7575c19c...d7fEAE04d
0 ETH
Balance Of224346122025-05-07 22:13:59316 days ago1746656039
0x7575c19c...d7fEAE04d
0 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OptimizedS1

Compiler Version
v0.8.29+commit.ab55807c

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2025-05-07
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.29;

// Interfaces
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IWETH is IERC20 {
    function deposit() external payable;
    function withdraw(uint256) external;
}

interface IUniswapV2Pair {
    function getReserves() external view returns (uint112, uint112, uint32);
    function swap(uint, uint, address, bytes calldata) external;
    function token0() external view returns (address);
    function token1() external view returns (address);
}

interface IUniswapV2Factory {
    function getPair(address, address) external view returns (address);
}

interface IUniswapV2Router {
    function swapExactTokensForTokens(
        uint,
        uint,
        address[] calldata,
        address,
        uint
    ) external returns (uint[] memory);
}

interface ILendingPool {
    function flashLoan(
        address,
        address[] calldata,
        uint256[] calldata,
        uint256[] calldata,
        address,
        bytes calldata,
        uint16
    ) external;
}

contract OptimizedS1 {
    // Constants
    address public immutable WETH_ADDRESS;
    uint256 private constant BASIS_POINTS = 10000; // 100%
    uint256 private constant APPROVAL_DEADLINE = 5 minutes; // 5 minutes for temporary approvals
    uint256 private constant MAX_APPROVAL_AMOUNT = type(uint256).max; // Infinite approval amount

    // Owner of the contract
    address public owner;

    // Emergency stop (pause) functionality
    bool public paused;

    // Reentrancy guard
    uint256 private _status;

    // Flash loan tracking
    address private _lastLendingPool;
    uint256 private _flashLoanProfit;

    // Temporary storage for swap parameters (to avoid stack too deep)
    address[] private _tempPath;
    address[] private _tempFactories;
    uint256 private _tempInputAmount;

    // Token approval tracking
    struct TokenApprovalInfo {
        bool requiresReset;      // Whether token requires approval reset
        uint256 lastApproval;    // Timestamp of last approval
        mapping(address => uint256) approvals; // Spender => approval amount
    }

    // Mapping of token approval info
    mapping(address => TokenApprovalInfo) private tokenApprovals;

    // List of tokens that require approval reset
    address[] public resetRequiredTokens;

    // No commitment scheme needed for multi-hop strategies

    // Events
    event ArbitrageExecuted(uint256 profit, uint256 minerTip);
    event FlashLoanArbitrageExecuted(uint256 profit, uint256 minerTip);
    event ETHWithdrawn(address indexed to, uint256 amount);
    event TokenWithdrawn(address indexed token, address indexed to, uint256 amount);
    event ETHDeposited(address from, uint256 amount);
    event Paused(address account);
    event Unpaused(address account);
    // No commitment events needed
    event TokenApproved(address token, address spender, uint256 amount);
    event ApprovalRevoked(address token, address spender);
    event TokenMarkedForReset(address indexed token, bool requiresReset);
    event TokenApprovalExpired(address indexed token, address indexed spender);
    event InfiniteApprovalSet(address indexed token, address indexed spender);
    event TemporaryApprovalSet(address indexed token, address indexed spender, uint256 amount, uint256 expiry);

    // Modifiers
    modifier onlyOwner() {
        require(msg.sender == owner, "Only owner");
        _;
    }

    // Modifier to check if contract is not paused
    modifier whenNotPaused() {
        require(!paused, "Contract is paused");
        _;
    }

    // Modifier to check if contract is paused
    modifier whenPaused() {
        require(paused, "Contract is not paused");
        _;
    }

    // Modifier to protect against reentrancy attacks
    modifier nonReentrant() {
        require(_status == 0, "ReentrancyGuard: reentrant call");
        _status = 1;
        _;
        _status = 0;
    }

    // Constructor
    constructor(address _wethAddress) {
        require(_wethAddress != address(0), "WETH address cannot be zero");
        WETH_ADDRESS = _wethAddress;
        owner = msg.sender;
    }

    // Function to receive ETH
    receive() external payable {
        emit ETHDeposited(msg.sender, msg.value);
    }

    // Function to deposit ETH and convert to WETH
    function depositETH() external payable {
        // Check for minimum deposit amount (0.001 ETH)
        require(msg.value >= 1e15, "Deposit amount too small");

        // Convert ETH to WETH
        IWETH(WETH_ADDRESS).deposit{value: msg.value}();

        // Emit deposit event
        emit ETHDeposited(msg.sender, msg.value);
    }

    // Function to withdraw ETH
    function withdrawETH(uint256 amount, address to) external onlyOwner whenNotPaused nonReentrant {
        require(to != address(0), "Cannot withdraw to zero address");
        require(amount > 0, "Amount must be greater than zero");

        // Check if we have enough WETH
        address weth = WETH_ADDRESS;
        uint256 wethBalance = IERC20(weth).balanceOf(address(this));
        require(wethBalance >= amount, "Insufficient WETH balance");

        // Check for minimum reserve
        uint256 reserveETH = 1e15; // 0.001 ETH reserve
        require(address(this).balance >= reserveETH, "Insufficient ETH reserve");

        // Convert WETH to ETH
        IWETH(weth).withdraw(amount);

        // Make sure we have enough ETH after conversion
        require(address(this).balance >= amount + reserveETH, "Insufficient ETH after conversion");

        // Transfer ETH to recipient
        (bool success, ) = to.call{value: amount}("");
        require(success, "ETH transfer failed");

        emit ETHWithdrawn(to, amount);
    }

    // Function to withdraw tokens
    function withdrawToken(address token, uint256 amount, address to) external onlyOwner whenNotPaused nonReentrant {
        require(token != address(0), "Token address cannot be zero");
        require(to != address(0), "Cannot withdraw to zero address");
        require(amount > 0, "Amount must be greater than zero");

        // Check if we have enough tokens
        uint256 tokenBalance = IERC20(token).balanceOf(address(this));
        require(tokenBalance >= amount, "Insufficient token balance");

        // If token is WETH, ensure we maintain minimum reserve
        if (token == WETH_ADDRESS) {
            uint256 reserveWETH = 1e15; // 0.001 WETH reserve
            require(tokenBalance >= amount + reserveWETH, "Must maintain WETH reserve");
        }

        // Transfer tokens to recipient
        bool success = IERC20(token).transfer(to, amount);
        require(success, "Token transfer failed");

        emit TokenWithdrawn(token, to, amount);
    }

    // Function to pause the contract
    function pause() external onlyOwner whenNotPaused {
        paused = true;
        emit Paused(msg.sender);
    }

    // Function to unpause the contract
    function unpause() external onlyOwner whenPaused {
        paused = false;
        emit Unpaused(msg.sender);
    }

    // Function to transfer ownership
    function transferOwnership(address newOwner) external onlyOwner {
        require(newOwner != address(0), "New owner cannot be zero address");
        owner = newOwner;
    }

    // Function to check if approval is expired
    function isApprovalExpired(address token, address spender) public view returns (bool) {
        TokenApprovalInfo storage info = tokenApprovals[token];
        return block.timestamp > info.lastApproval + APPROVAL_DEADLINE && info.approvals[spender] > 0;
    }

    // Function to approve token for spending
    function _approveToken(address token, address spender, uint256 amount) internal {
        TokenApprovalInfo storage info = tokenApprovals[token];

        // If token requires reset and approval hasn't expired, we need to reset first
        if (info.requiresReset && !isApprovalExpired(token, spender) && info.approvals[spender] > 0) {
            // Reset approval to 0 first
            IERC20(token).approve(spender, 0);
            emit ApprovalRevoked(token, spender);
        }

        // Set approval
        IERC20(token).approve(spender, amount);

        // Update approval info
        info.lastApproval = block.timestamp;
        info.approvals[spender] = amount;

        // Emit appropriate event
        if (amount == type(uint256).max) {
            emit InfiniteApprovalSet(token, spender);
        } else {
            emit TemporaryApprovalSet(token, spender, amount, block.timestamp + APPROVAL_DEADLINE);
        }

        emit TokenApproved(token, spender, amount);
    }

    // Function to mark token as requiring approval reset
    function markTokenForReset(address token, bool requiresReset) external onlyOwner whenNotPaused {
        require(token != address(0), "Token address cannot be zero");

        TokenApprovalInfo storage info = tokenApprovals[token];

        // If we're marking a token as requiring reset and it wasn't before
        if (requiresReset && !info.requiresReset) {
            resetRequiredTokens.push(token);
        }

        info.requiresReset = requiresReset;
        emit TokenMarkedForReset(token, requiresReset);
    }

    // Function to get list of tokens requiring reset
    function getResetRequiredTokens() external view returns (address[] memory) {
        return resetRequiredTokens;
    }

    // Function to get contract balances
    function getContractBalances() external view returns (uint256 ethBalance, uint256 wethBalance) {
        ethBalance = address(this).balance;
        wethBalance = IERC20(WETH_ADDRESS).balanceOf(address(this));
    }

    // Function to get token balance
    function getTokenBalance(address token) external view returns (uint256) {
        require(token != address(0), "Token address cannot be zero");
        return IERC20(token).balanceOf(address(this));
    }

    // Function to execute arbitrage with factories
    function executeArbitrageWithFactories(
        address[] calldata path,
        address[] calldata factories,
        uint256 inputAmount,
        uint256 minOutputAmount,
        uint256 deadline,
        uint256 gasPrice
    ) external onlyOwner whenNotPaused nonReentrant returns (uint256) {
        // Validate deadline parameter
        require(deadline > block.timestamp, "Deadline must be in the future");

        // Validate gasPrice parameter
        require(gasPrice > 0, "Gas price must be greater than zero");

        // Check minimum inputAmount size (0.001 WETH)
        require(inputAmount >= 1e15, "Input amount too small");

        // Calculate gas cost
        uint256 baseGasUsed = 100000;  // Base gas usage
        uint256 gasPerSwap = 50000;    // Additional gas for each swap
        uint256 estimatedGasUsed = baseGasUsed + (path.length - 1) * gasPerSwap;
        uint256 gasCost = estimatedGasUsed * gasPrice;

        // Check that minimum profit is sufficient
        require(minOutputAmount > gasCost * 12 / 10, "Min profit must be at least 120% of gas cost");

        // Cache WETH address to save gas
        address weth = WETH_ADDRESS;

        // Get initial WETH balance
        uint256 initialBalance = IERC20(weth).balanceOf(address(this));

        // Check for maximum input amount
        require(initialBalance >= inputAmount, "Insufficient WETH balance");

        // Check that input amount doesn't exceed 90% of contract balance
        require(inputAmount <= initialBalance * 90 / 100, "Input amount too large, must be <= 90% of balance");

        // Store parameters in temporary storage
        _tempPath = path;
        _tempFactories = factories;
        _tempInputAmount = inputAmount;

        // Execute swaps along arbitrage path using factories
        _executeSwapsWithFactories();

        // Get final WETH balance
        uint256 finalBalance = IERC20(weth).balanceOf(address(this));

        // Check that we received WETH at the end
        require(finalBalance > initialBalance, "No WETH received");

        // Calculate profit (using unchecked for gas optimization)
        uint256 profit;
        unchecked {
            profit = finalBalance - initialBalance;
        }

        // Check that profit is not less than minimum
        require(profit >= minOutputAmount, "Profit too low");

        // Check that actual profit covers gas cost with a margin
        require(profit > gasCost * 12 / 10, "Actual profit must be at least 120% of gas cost");

        emit ArbitrageExecuted(profit, 0);

        return profit;
    }

    // Internal function to execute swaps along the arbitrage path using factories
    function _executeSwapsWithFactories() internal {
        require(_tempPath.length >= 2, "Invalid path length");
        require(_tempFactories.length == _tempPath.length - 1, "Invalid factories length");

        // Cache WETH address to save gas
        address weth = WETH_ADDRESS;

        // Verify that path starts and ends with WETH
        require(_tempPath[0] == weth, "Path must start with WETH");
        require(_tempPath[_tempPath.length - 1] == weth, "Path must end with WETH");

        // Current token and amount
        address currentToken = weth;
        uint256 currentAmount = _tempInputAmount;

        // Execute swaps through the path
        for (uint256 i = 0; i < _tempPath.length - 1; i++) {
            address tokenIn = currentToken;
            address tokenOut = _tempPath[i + 1];

            // Get pair from factory
            address pairAddress = IUniswapV2Factory(_tempFactories[i]).getPair(tokenIn, tokenOut);
            require(pairAddress != address(0), "Pair not found");

            IUniswapV2Pair pair = IUniswapV2Pair(pairAddress);

            // Determine token order
            address token0 = pair.token0();

            bool isToken0 = tokenIn == token0;

            // Approve pair to spend our tokens
            _approveToken(tokenIn, pairAddress, currentAmount);

            // Calculate swap parameters
            uint256 amount0Out;
            uint256 amount1Out;

            if (isToken0) {
                amount0Out = 0;
                amount1Out = currentAmount;
            } else {
                amount0Out = currentAmount;
                amount1Out = 0;
            }

            // Execute the swap
            pair.swap(amount0Out, amount1Out, address(this), new bytes(0));

            // Update current token and amount for next iteration
            currentToken = tokenOut;
            currentAmount = IERC20(currentToken).balanceOf(address(this));
        }
    }

    // Internal function to execute flash loan - split to reduce stack depth
    function _executeFlashLoan(
        address lendingPool,
        address weth,
        uint256 loanAmount,
        uint256 minOutputAmount,
        uint256 gasPrice,
        uint256 flashLoanFee
    ) internal {
        // Prepare flash loan parameters
        address[] memory assets = new address[](1);
        assets[0] = weth;

        uint256[] memory amounts = new uint256[](1);
        amounts[0] = loanAmount;

        uint256[] memory modes = new uint256[](1);
        modes[0] = 0; // No debt (flash loan)

        // Encode parameters
        bytes memory params = abi.encode(minOutputAmount, gasPrice, flashLoanFee);

        // Execute flash loan
        ILendingPool(lendingPool).flashLoan(
            address(this),
            assets,
            amounts,
            modes,
            address(this),
            params,
            0 // referral code
        );
    }

    // Function to execute flash loan arbitrage with Aave - optimized to reduce stack depth
    function executeFlashLoanArbitrage(
        address lendingPool,
        address[] calldata path,
        address[] calldata factories,
        uint256 loanAmount,
        uint256 minOutputAmount,
        uint256 deadline,
        uint256 gasPrice
    ) external onlyOwner whenNotPaused nonReentrant returns (uint256) {
        // Combined validations to reduce stack usage
        require(
            lendingPool != address(0) &&
            deadline > block.timestamp &&
            gasPrice > 0 &&
            loanAmount >= 1e15 &&
            path.length >= 2 &&
            factories.length == path.length - 1,
            "Invalid parameters"
        );

        // Cache WETH address to save gas
        address weth = WETH_ADDRESS;

        // Verify that path starts and ends with WETH
        require(path[0] == weth && path[path.length - 1] == weth, "Path must start and end with WETH");

        // Calculate gas cost and flash loan fee in one step
        uint256 gasCost = (150000 + (path.length - 1) * 50000) * gasPrice;
        uint256 flashLoanFee = loanAmount * 9 / 10000; // 0.09%

        // Check that minimum profit is sufficient
        require(minOutputAmount > gasCost * 12 / 10 + flashLoanFee, "Min profit must cover costs");

        // Store parameters in temporary storage
        _tempPath = path;
        _tempFactories = factories;
        _tempInputAmount = loanAmount;

        // Reset flash loan profit
        _flashLoanProfit = 0;

        // Save lending pool address for verification in executeOperation
        _lastLendingPool = lendingPool;

        // Ensure token approval for flash loan repayment - simplified to reduce stack depth
        _approveToken(weth, lendingPool, loanAmount + flashLoanFee);

        // Execute flash loan in a separate function to reduce stack depth
        _executeFlashLoan(lendingPool, weth, loanAmount, minOutputAmount, gasPrice, flashLoanFee);

        // Get profit and verify it meets requirements
        uint256 profit = _flashLoanProfit;
        require(profit >= minOutputAmount, "Profit too low");
        require(profit > gasCost * 12 / 10 + flashLoanFee, "Profit doesn't cover costs");

        emit FlashLoanArbitrageExecuted(profit, 0);
        return profit;
    }

    // Callback function for Aave flash loan - optimized to reduce stack depth
    function executeOperation(
        address[] calldata assets,
        uint256[] calldata amounts,
        uint256[] calldata premiums,
        address initiator,
        bytes calldata params
    ) external returns (bool) {
        // Combined validations to reduce stack usage
        require(
            msg.sender == _lastLendingPool &&
            initiator == address(this) &&
            assets[0] == WETH_ADDRESS,
            "Invalid flash loan parameters"
        );

        // Decode parameters - directly use in calculations to reduce local variables
        (uint256 minOutputAmount, uint256 gasPrice, ) = abi.decode(params, (uint256, uint256, uint256));

        // Execute swaps along arbitrage path using factories
        _executeSwapsWithFactories();

        // Get WETH address and calculate repayment amount
        address weth = WETH_ADDRESS;
        uint256 repaymentAmount = amounts[0] + premiums[0];

        // Get final balance and ensure it's sufficient
        uint256 finalBalance = IERC20(weth).balanceOf(address(this));
        require(finalBalance >= repaymentAmount, "Insufficient funds to repay flash loan");

        // Approve lending pool to spend WETH if needed
        if (IERC20(weth).allowance(address(this), msg.sender) < repaymentAmount) {
            TokenApprovalInfo storage info = tokenApprovals[weth];
            if (!(info.approvals[msg.sender] == MAX_APPROVAL_AMOUNT && !info.requiresReset)) {
                _approveToken(weth, msg.sender, info.requiresReset ? repaymentAmount : MAX_APPROVAL_AMOUNT);
            }
        }

        // Calculate profit
        uint256 profit = finalBalance - repaymentAmount;

        // Verify profit meets requirements
        require(profit >= minOutputAmount, "Profit too low in callback");

        // Calculate gas cost and verify profit covers it
        // Combined calculation to reduce local variables
        uint256 gasCost = (150000 + (_tempPath.length - 1) * 50000) * gasPrice;
        require(profit > gasCost * 12 / 10 + premiums[0], "Profit doesn't cover costs in callback");

        // Store profit for parent function
        _flashLoanProfit = profit;

        return true;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_wethAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"}],"name":"ApprovalRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"profit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minerTip","type":"uint256"}],"name":"ArbitrageExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ETHDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ETHWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"profit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minerTip","type":"uint256"}],"name":"FlashLoanArbitrageExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"}],"name":"InfiniteApprovalSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"expiry","type":"uint256"}],"name":"TemporaryApprovalSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"}],"name":"TokenApprovalExpired","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenApproved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"bool","name":"requiresReset","type":"bool"}],"name":"TokenMarkedForReset","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"WETH_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address[]","name":"factories","type":"address[]"},{"internalType":"uint256","name":"inputAmount","type":"uint256"},{"internalType":"uint256","name":"minOutputAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"gasPrice","type":"uint256"}],"name":"executeArbitrageWithFactories","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lendingPool","type":"address"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address[]","name":"factories","type":"address[]"},{"internalType":"uint256","name":"loanAmount","type":"uint256"},{"internalType":"uint256","name":"minOutputAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"gasPrice","type":"uint256"}],"name":"executeFlashLoanArbitrage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"premiums","type":"uint256[]"},{"internalType":"address","name":"initiator","type":"address"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"executeOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getContractBalances","outputs":[{"internalType":"uint256","name":"ethBalance","type":"uint256"},{"internalType":"uint256","name":"wethBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getResetRequiredTokens","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"isApprovalExpired","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"requiresReset","type":"bool"}],"name":"markTokenForReset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"resetRequiredTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405234801561000f575f5ffd5b5060405161306e38038061306e83398101604081905261002e916100aa565b6001600160a01b0381166100885760405162461bcd60e51b815260206004820152601b60248201527f5745544820616464726573732063616e6e6f74206265207a65726f0000000000604482015260640160405180910390fd5b6001600160a01b03166080525f80546001600160a01b031916331790556100d7565b5f602082840312156100ba575f5ffd5b81516001600160a01b03811681146100d0575f5ffd5b9392505050565b608051612f4061012e5f395f818161015c015281816105e801528181610a9e01528181610fe1015281816114490152818161150c015281816119bc01528181611dc901528181611eaf0152611fd10152612f405ff3fe608060405260043610610108575f3560e01c80638456cb5911610092578063dcbf019111610062578063dcbf01911461031a578063f2fde38b14610339578063f6326fb314610358578063fc977ad414610360578063ffd2a7d31461037f575f5ffd5b80638456cb59146102a85780638da5cb5b146102bc578063920f5c84146102da578063d0e71ca8146102f9575f5ffd5b80633aecd0e3116100d85780633aecd0e3146102185780633ccdbb28146102375780633f4ba83a146102565780633fa828261461026a5780635c975abb14610289575f5ffd5b8063040141e51461014b5780630508fb421461019b57806332e72613146101c857806336118b52146101f7575f5ffd5b3661014757604080513381523460208201527f6c703791f399558807424f489ccd811c72b4ff0b74af547264fad7c646776df0910160405180910390a1005b5f5ffd5b348015610156575f5ffd5b5061017e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101a6575f5ffd5b506101ba6101b5366004612875565b6103a8565b604051908152602001610192565b3480156101d3575f5ffd5b506101e76101e2366004612919565b610915565b6040519015158152602001610192565b348015610202575f5ffd5b50610216610211366004612950565b61096e565b005b348015610223575f5ffd5b506101ba610232366004612973565b610d57565b348015610242575f5ffd5b50610216610251366004612995565b610de4565b348015610261575f5ffd5b5061021661118d565b348015610275575f5ffd5b506102166102843660046129e1565b611249565b348015610294575f5ffd5b505f546101e790600160a01b900460ff1681565b3480156102b3575f5ffd5b50610216611388565b3480156102c7575f5ffd5b505f5461017e906001600160a01b031681565b3480156102e5575f5ffd5b506101e76102f4366004612a4b565b61141c565b348015610304575f5ffd5b5061030d61184b565b6040516101929190612b70565b348015610325575f5ffd5b506101ba610334366004612b82565b6118ab565b348015610344575f5ffd5b50610216610353366004612973565b611cd0565b610216611d70565b34801561036b575f5ffd5b5061017e61037a366004612c22565b611e6e565b34801561038a575f5ffd5b50610393611e96565b60408051928352602083019190915201610192565b5f80546001600160a01b031633146103db5760405162461bcd60e51b81526004016103d290612c39565b60405180910390fd5b5f54600160a01b900460ff16156104045760405162461bcd60e51b81526004016103d290612c5d565b600154156104245760405162461bcd60e51b81526004016103d290612c89565b600180554283116104775760405162461bcd60e51b815260206004820152601e60248201527f446561646c696e65206d75737420626520696e2074686520667574757265000060448201526064016103d2565b5f82116104d25760405162461bcd60e51b815260206004820152602360248201527f476173207072696365206d7573742062652067726561746572207468616e207a60448201526265726f60e81b60648201526084016103d2565b66038d7ea4c680008510156105225760405162461bcd60e51b8152602060048201526016602482015275125b9c1d5d08185b5bdd5b9d081d1bdbc81cdb585b1b60521b60448201526064016103d2565b620186a061c3505f8161053660018d612cd4565b6105409190612ce7565b61054a9084612cfe565b90505f6105578683612ce7565b9050600a61056682600c612ce7565b6105709190612d11565b88116105d35760405162461bcd60e51b815260206004820152602c60248201527f4d696e2070726f666974206d757374206265206174206c65617374203132302560448201526b081bd98819d85cc818dbdcdd60a21b60648201526084016103d2565b6040516370a0823160e01b81523060048201527f0000000000000000000000000000000000000000000000000000000000000000905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610639573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065d9190612d30565b90508a8110156106ab5760405162461bcd60e51b8152602060048201526019602482015278496e73756666696369656e7420574554482062616c616e636560381b60448201526064016103d2565b60646106b882605a612ce7565b6106c29190612d11565b8b111561072b5760405162461bcd60e51b815260206004820152603160248201527f496e70757420616d6f756e7420746f6f206c617267652c206d757374206265206044820152703c3d20393025206f662062616c616e636560781b60648201526084016103d2565b8e8e6004919061073c9291906127b8565b5061074960058e8e6127b8565b5060068b9055610757611f26565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa15801561079b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107bf9190612d30565b90508181116108035760405162461bcd60e51b815260206004820152601060248201526f139bc815d15512081c9958d95a5d995960821b60448201526064016103d2565b8181038b8110156108475760405162461bcd60e51b815260206004820152600e60248201526d50726f66697420746f6f206c6f7760901b60448201526064016103d2565b600a61085486600c612ce7565b61085e9190612d11565b81116108c45760405162461bcd60e51b815260206004820152602f60248201527f41637475616c2070726f666974206d757374206265206174206c65617374203160448201526e0c8c09481bd98819d85cc818dbdcdd608a1b60648201526084016103d2565b604080518281525f60208201527ffe4159880baf7d87ae542dd02a3a01f65900500376ba133eb8ac6b832771083d910160405180910390a19750505050505050505f60015598975050505050505050565b6001600160a01b0382165f908152600760205260408120600181015461093e9061012c90612cfe565b4211801561096457506001600160a01b0383165f90815260028201602052604090205415155b9150505b92915050565b5f546001600160a01b031633146109975760405162461bcd60e51b81526004016103d290612c39565b5f54600160a01b900460ff16156109c05760405162461bcd60e51b81526004016103d290612c5d565b600154156109e05760405162461bcd60e51b81526004016103d290612c89565b600180556001600160a01b038116610a3a5760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f7420776974686472617720746f207a65726f20616464726573730060448201526064016103d2565b5f8211610a895760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f60448201526064016103d2565b6040516370a0823160e01b81523060048201527f0000000000000000000000000000000000000000000000000000000000000000905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610aef573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b139190612d30565b905083811015610b615760405162461bcd60e51b8152602060048201526019602482015278496e73756666696369656e7420574554482062616c616e636560381b60448201526064016103d2565b66038d7ea4c6800047811115610bb95760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74204554482072657365727665000000000000000060448201526064016103d2565b604051632e1a7d4d60e01b8152600481018690526001600160a01b03841690632e1a7d4d906024015f604051808303815f87803b158015610bf8575f5ffd5b505af1158015610c0a573d5f5f3e3d5ffd5b505050508085610c1a9190612cfe565b471015610c735760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e742045544820616674657220636f6e76657273696f6044820152603760f91b60648201526084016103d2565b5f846001600160a01b0316866040515f6040518083038185875af1925050503d805f8114610cbc576040519150601f19603f3d011682016040523d82523d5f602084013e610cc1565b606091505b5050905080610d085760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016103d2565b846001600160a01b03167f94b2de810873337ed265c5f8cf98c9cffefa06b8607f9a2f1fbaebdfbcfbef1c87604051610d4391815260200190565b60405180910390a250505f60015550505050565b5f6001600160a01b038216610d7e5760405162461bcd60e51b81526004016103d290612d47565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015610dc0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109689190612d30565b5f546001600160a01b03163314610e0d5760405162461bcd60e51b81526004016103d290612c39565b5f54600160a01b900460ff1615610e365760405162461bcd60e51b81526004016103d290612c5d565b60015415610e565760405162461bcd60e51b81526004016103d290612c89565b600180556001600160a01b038316610e805760405162461bcd60e51b81526004016103d290612d47565b6001600160a01b038116610ed65760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f7420776974686472617720746f207a65726f20616464726573730060448201526064016103d2565b5f8211610f255760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f60448201526064016103d2565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015610f69573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8d9190612d30565b905082811015610fdf5760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420746f6b656e2062616c616e636500000000000060448201526064016103d2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03160361107b5766038d7ea4c6800061102a8185612cfe565b8210156110795760405162461bcd60e51b815260206004820152601a60248201527f4d757374206d61696e7461696e2057455448207265736572766500000000000060448201526064016103d2565b505b60405163a9059cbb60e01b81526001600160a01b038381166004830152602482018590525f919086169063a9059cbb906044016020604051808303815f875af11580156110ca573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110ee9190612d7e565b9050806111355760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b60448201526064016103d2565b826001600160a01b0316856001600160a01b03167f8210728e7c071f615b840ee026032693858fbcd5e5359e67e438c890f59e56208660405161117a91815260200190565b60405180910390a350505f600155505050565b5f546001600160a01b031633146111b65760405162461bcd60e51b81526004016103d290612c39565b5f54600160a01b900460ff166112075760405162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9858dd081a5cc81b9bdd081c185d5cd95960521b60448201526064016103d2565b5f805460ff60a01b191690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b5f546001600160a01b031633146112725760405162461bcd60e51b81526004016103d290612c39565b5f54600160a01b900460ff161561129b5760405162461bcd60e51b81526004016103d290612c5d565b6001600160a01b0382166112c15760405162461bcd60e51b81526004016103d290612d47565b6001600160a01b0382165f9081526007602052604090208180156112e75750805460ff16155b1561133757600880546001810182555f919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0385161790555b805460ff191682151590811782556040519081526001600160a01b038416907fb28a079064159c4e1e2850ca5d73cec973a12214431e1a26df9760cefdb1c7949060200160405180910390a2505050565b5f546001600160a01b031633146113b15760405162461bcd60e51b81526004016103d290612c39565b5f54600160a01b900460ff16156113da5760405162461bcd60e51b81526004016103d290612c5d565b5f805460ff60a01b1916600160a01b1790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589060200161123f565b6002545f906001600160a01b03163314801561144057506001600160a01b03841630145b80156114a357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168a8a5f81811061148357611483612d99565b90506020020160208101906114989190612973565b6001600160a01b0316145b6114ef5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420666c617368206c6f616e20706172616d657465727300000060448201526064016103d2565b5f806114fd84860186612dad565b509150915061150a611f26565b7f00000000000000000000000000000000000000000000000000000000000000005f8989828161153c5761153c612d99565b905060200201358c8c5f81811061155557611555612d99565b905060200201356115669190612cfe565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038416906370a0823190602401602060405180830381865afa1580156115ad573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115d19190612d30565b9050818110156116325760405162461bcd60e51b815260206004820152602660248201527f496e73756666696369656e742066756e647320746f20726570617920666c617360448201526534103637b0b760d11b60648201526084016103d2565b604051636eb1769f60e11b815230600482015233602482015282906001600160a01b0385169063dd62ed3e90604401602060405180830381865afa15801561167c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116a09190612d30565b1015611704576001600160a01b0383165f90815260076020908152604080832033845260028101909252909120545f191480156116df5750805460ff16155b611702578054611702908590339060ff166116fb575f196123b5565b855b6123b5565b505b5f61170f8383612cd4565b9050858110156117615760405162461bcd60e51b815260206004820152601a60248201527f50726f66697420746f6f206c6f7720696e2063616c6c6261636b00000000000060448201526064016103d2565b6004545f90869061177490600190612cd4565b6117809061c350612ce7565b61178d90620249f0612cfe565b6117979190612ce7565b90508c8c5f8181106117ab576117ab612d99565b90506020020135600a82600c6117c19190612ce7565b6117cb9190612d11565b6117d59190612cfe565b82116118325760405162461bcd60e51b815260206004820152602660248201527f50726f66697420646f65736e277420636f76657220636f73747320696e2063616044820152656c6c6261636b60d01b60648201526084016103d2565b506003555060019e9d5050505050505050505050505050565b606060088054806020026020016040519081016040528092919081815260200182805480156118a157602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611883575b5050505050905090565b5f80546001600160a01b031633146118d55760405162461bcd60e51b81526004016103d290612c39565b5f54600160a01b900460ff16156118fe5760405162461bcd60e51b81526004016103d290612c5d565b6001541561191e5760405162461bcd60e51b81526004016103d290612c89565b600180556001600160a01b038a161580159061193957504283115b801561194457505f82115b8015611957575066038d7ea4c680008510155b8015611964575060028810155b80156119795750611976600189612cd4565b86145b6119ba5760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420706172616d657465727360701b60448201526064016103d2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381168a8a5f816119f5576119f5612d99565b9050602002016020810190611a0a9190612973565b6001600160a01b0316148015611a6157506001600160a01b0381168a8a611a32600182612cd4565b818110611a4157611a41612d99565b9050602002016020810190611a569190612973565b6001600160a01b0316145b611ab75760405162461bcd60e51b815260206004820152602160248201527f50617468206d75737420737461727420616e6420656e642077697468205745546044820152600960fb1b60648201526084016103d2565b5f83611ac460018c612cd4565b611ad09061c350612ce7565b611add90620249f0612cfe565b611ae79190612ce7565b90505f612710611af8896009612ce7565b611b029190612d11565b905080600a611b1284600c612ce7565b611b1c9190612d11565b611b269190612cfe565b8711611b745760405162461bcd60e51b815260206004820152601b60248201527f4d696e2070726f666974206d75737420636f76657220636f737473000000000060448201526064016103d2565b611b8060048d8d6127b8565b50611b8d60058b8b6127b8565b5060068890555f600355600280546001600160a01b0319166001600160a01b038f16179055611bc1838e6116fd848c612cfe565b611bcf8d848a8a8986612649565b60035487811015611c135760405162461bcd60e51b815260206004820152600e60248201526d50726f66697420746f6f206c6f7760901b60448201526064016103d2565b81600a611c2185600c612ce7565b611c2b9190612d11565b611c359190612cfe565b8111611c835760405162461bcd60e51b815260206004820152601a60248201527f50726f66697420646f65736e277420636f76657220636f73747300000000000060448201526064016103d2565b604080518281525f60208201527fdb2114755786ebe75b9de836a12988b7248f8c0342e505ab6d37dec5c14415ac910160405180910390a15f6001559d9c50505050505050505050505050565b5f546001600160a01b03163314611cf95760405162461bcd60e51b81526004016103d290612c39565b6001600160a01b038116611d4f5760405162461bcd60e51b815260206004820181905260248201527f4e6577206f776e65722063616e6e6f74206265207a65726f206164647265737360448201526064016103d2565b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b66038d7ea4c68000341015611dc75760405162461bcd60e51b815260206004820152601860248201527f4465706f73697420616d6f756e7420746f6f20736d616c6c000000000000000060448201526064016103d2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b158015611e20575f5ffd5b505af1158015611e32573d5f5f3e3d5ffd5b5050604080513381523460208201527f6c703791f399558807424f489ccd811c72b4ff0b74af547264fad7c646776df0945001915061123f9050565b60088181548110611e7d575f80fd5b5f918252602090912001546001600160a01b0316905081565b6040516370a0823160e01b815230600482015247905f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611efc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f209190612d30565b90509091565b60045460021115611f6f5760405162461bcd60e51b8152602060048201526013602482015272092dcecc2d8d2c840e0c2e8d040d8cadccee8d606b1b60448201526064016103d2565b600454611f7e90600190612cd4565b60055414611fce5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420666163746f72696573206c656e677468000000000000000060448201526064016103d2565b5f7f00000000000000000000000000000000000000000000000000000000000000009050806001600160a01b031660045f8154811061200f5761200f612d99565b5f918252602090912001546001600160a01b0316146120705760405162461bcd60e51b815260206004820152601960248201527f50617468206d757374207374617274207769746820574554480000000000000060448201526064016103d2565b600480546001600160a01b038316919061208c90600190612cd4565b8154811061209c5761209c612d99565b5f918252602090912001546001600160a01b0316146120fd5760405162461bcd60e51b815260206004820152601760248201527f50617468206d75737420656e642077697468205745544800000000000000000060448201526064016103d2565b60065481905f5b60045461211390600190612cd4565b8110156123af57825f6004612129846001612cfe565b8154811061213957612139612d99565b5f918252602082200154600580546001600160a01b039092169350908590811061216557612165612d99565b5f9182526020909120015460405163e6a4390560e01b81526001600160a01b03858116600483015284811660248301529091169063e6a4390590604401602060405180830381865afa1580156121bd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121e19190612dd6565b90506001600160a01b03811661222a5760405162461bcd60e51b815260206004820152600e60248201526d14185a5c881b9bdd08199bdd5b9960921b60448201526064016103d2565b5f8190505f816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561226b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228f9190612dd6565b90506001600160a01b03858116908216146122ab86858a6123b5565b5f5f82156122bd57505f9050886122c3565b508890505f5b604080515f8152602081019182905263022c0d9f60e01b9091526001600160a01b0386169063022c0d9f906123019085908590309060248101612e1f565b5f604051808303815f87803b158015612318575f5ffd5b505af115801561232a573d5f5f3e3d5ffd5b50506040516370a0823160e01b8152306004820152989c508c986001600160a01b038a1692506370a082319150602401602060405180830381865afa158015612375573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123999190612d30565b9950506001909701965061210495505050505050565b50505050565b6001600160a01b0383165f908152600760205260409020805460ff1680156123e457506123e28484610915565b155b801561240857506001600160a01b0383165f90815260028201602052604090205415155b156124c15760405163095ea7b360e01b81526001600160a01b0384811660048301525f602483015285169063095ea7b3906044016020604051808303815f875af1158015612458573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061247c9190612d7e565b50604080516001600160a01b038087168252851660208201527f97a94ee714dc2c5c1889f6fe8e8909a95e0307c4b272c7df374bf76582099f87910160405180910390a15b60405163095ea7b360e01b81526001600160a01b0384811660048301526024820184905285169063095ea7b3906044016020604051808303815f875af115801561250d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125319190612d7e565b50426001808301919091556001600160a01b0384165f908152600283016020526040902083905582016125a357826001600160a01b0316846001600160a01b03167f0b97eba306a66ba90ad1c6ecf3380f3ea4acc9fd7272afde9e779d952adeffca60405160405180910390a36125f8565b6001600160a01b038084169085167fe765e698480be1108f079c9aabccc59d2fe1dde146b746d0f7066bd3218803c1846125df61012c42612cfe565b6040805192835260208301919091520160405180910390a35b604080516001600160a01b038087168252851660208201529081018390527fc532e6b60637d86dd3fe55f7548ed169de9c79cfdef610593bea3569f079bc659060600160405180910390a150505050565b6040805160018082528183019092525f916020808301908036833701905050905085815f8151811061267d5761267d612d99565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905085815f815181106126cc576126cc612d99565b60209081029190910101526040805160018082528183019092525f918160200160208202803683370190505090505f815f8151811061270d5761270d612d99565b602090810291909101810191909152604080519182018890528101869052606081018590525f9060800160408051601f198184030181529082905263ab9c4b5d60e01b825291506001600160a01b038b169063ab9c4b5d9061277f903090889088908890849089905f90600401612e85565b5f604051808303815f87803b158015612796575f5ffd5b505af11580156127a8573d5f5f3e3d5ffd5b5050505050505050505050505050565b828054828255905f5260205f20908101928215612809579160200282015b828111156128095781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906127d6565b50612815929150612819565b5090565b5b80821115612815575f815560010161281a565b5f5f83601f84011261283d575f5ffd5b50813567ffffffffffffffff811115612854575f5ffd5b6020830191508360208260051b850101111561286e575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f60c0898b03121561288c575f5ffd5b883567ffffffffffffffff8111156128a2575f5ffd5b6128ae8b828c0161282d565b909950975050602089013567ffffffffffffffff8111156128cd575f5ffd5b6128d98b828c0161282d565b999c989b5099604081013598606082013598506080820135975060a09091013595509350505050565b6001600160a01b0381168114612916575f5ffd5b50565b5f5f6040838503121561292a575f5ffd5b823561293581612902565b9150602083013561294581612902565b809150509250929050565b5f5f60408385031215612961575f5ffd5b82359150602083013561294581612902565b5f60208284031215612983575f5ffd5b813561298e81612902565b9392505050565b5f5f5f606084860312156129a7575f5ffd5b83356129b281612902565b92506020840135915060408401356129c981612902565b809150509250925092565b8015158114612916575f5ffd5b5f5f604083850312156129f2575f5ffd5b82356129fd81612902565b91506020830135612945816129d4565b5f5f83601f840112612a1d575f5ffd5b50813567ffffffffffffffff811115612a34575f5ffd5b60208301915083602082850101111561286e575f5ffd5b5f5f5f5f5f5f5f5f5f60a08a8c031215612a63575f5ffd5b893567ffffffffffffffff811115612a79575f5ffd5b612a858c828d0161282d565b909a5098505060208a013567ffffffffffffffff811115612aa4575f5ffd5b612ab08c828d0161282d565b90985096505060408a013567ffffffffffffffff811115612acf575f5ffd5b612adb8c828d0161282d565b90965094505060608a0135612aef81612902565b925060808a013567ffffffffffffffff811115612b0a575f5ffd5b612b168c828d01612a0d565b915080935050809150509295985092959850929598565b5f8151808452602084019350602083015f5b82811015612b665781516001600160a01b0316865260209586019590910190600101612b3f565b5093949350505050565b602081525f61298e6020830184612b2d565b5f5f5f5f5f5f5f5f5f60e08a8c031215612b9a575f5ffd5b8935612ba581612902565b985060208a013567ffffffffffffffff811115612bc0575f5ffd5b612bcc8c828d0161282d565b90995097505060408a013567ffffffffffffffff811115612beb575f5ffd5b612bf78c828d0161282d565b9a9d999c50979a9799986060890135986080810135985060a0810135975060c0013595509350505050565b5f60208284031215612c32575f5ffd5b5035919050565b6020808252600a908201526927b7363c9037bbb732b960b11b604082015260600190565b60208082526012908201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561096857610968612cc0565b808202811582820484141761096857610968612cc0565b8082018082111561096857610968612cc0565b5f82612d2b57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612d40575f5ffd5b5051919050565b6020808252601c908201527f546f6b656e20616464726573732063616e6e6f74206265207a65726f00000000604082015260600190565b5f60208284031215612d8e575f5ffd5b815161298e816129d4565b634e487b7160e01b5f52603260045260245ffd5b5f5f5f60608486031215612dbf575f5ffd5b505081359360208301359350604090920135919050565b5f60208284031215612de6575f5ffd5b815161298e81612902565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b84815283602082015260018060a01b0383166040820152608060608201525f612e4b6080830184612df1565b9695505050505050565b5f8151808452602084019350602083015f5b82811015612b66578151865260209586019590910190600101612e67565b6001600160a01b038816815260e0602082018190525f90612ea890830189612b2d565b8281036040840152612eba8189612e55565b90508281036060840152612ece8188612e55565b6001600160a01b038716608085015283810360a08501529050612ef18186612df1565b91505061ffff831660c08301529897505050505050505056fea26469706673582212207e5f351ec549b4e61e172434c6bae0c133eae3735170cce2c6826226dc3c57f164736f6c634300081d0033000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

Deployed Bytecode

0x608060405260043610610108575f3560e01c80638456cb5911610092578063dcbf019111610062578063dcbf01911461031a578063f2fde38b14610339578063f6326fb314610358578063fc977ad414610360578063ffd2a7d31461037f575f5ffd5b80638456cb59146102a85780638da5cb5b146102bc578063920f5c84146102da578063d0e71ca8146102f9575f5ffd5b80633aecd0e3116100d85780633aecd0e3146102185780633ccdbb28146102375780633f4ba83a146102565780633fa828261461026a5780635c975abb14610289575f5ffd5b8063040141e51461014b5780630508fb421461019b57806332e72613146101c857806336118b52146101f7575f5ffd5b3661014757604080513381523460208201527f6c703791f399558807424f489ccd811c72b4ff0b74af547264fad7c646776df0910160405180910390a1005b5f5ffd5b348015610156575f5ffd5b5061017e7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101a6575f5ffd5b506101ba6101b5366004612875565b6103a8565b604051908152602001610192565b3480156101d3575f5ffd5b506101e76101e2366004612919565b610915565b6040519015158152602001610192565b348015610202575f5ffd5b50610216610211366004612950565b61096e565b005b348015610223575f5ffd5b506101ba610232366004612973565b610d57565b348015610242575f5ffd5b50610216610251366004612995565b610de4565b348015610261575f5ffd5b5061021661118d565b348015610275575f5ffd5b506102166102843660046129e1565b611249565b348015610294575f5ffd5b505f546101e790600160a01b900460ff1681565b3480156102b3575f5ffd5b50610216611388565b3480156102c7575f5ffd5b505f5461017e906001600160a01b031681565b3480156102e5575f5ffd5b506101e76102f4366004612a4b565b61141c565b348015610304575f5ffd5b5061030d61184b565b6040516101929190612b70565b348015610325575f5ffd5b506101ba610334366004612b82565b6118ab565b348015610344575f5ffd5b50610216610353366004612973565b611cd0565b610216611d70565b34801561036b575f5ffd5b5061017e61037a366004612c22565b611e6e565b34801561038a575f5ffd5b50610393611e96565b60408051928352602083019190915201610192565b5f80546001600160a01b031633146103db5760405162461bcd60e51b81526004016103d290612c39565b60405180910390fd5b5f54600160a01b900460ff16156104045760405162461bcd60e51b81526004016103d290612c5d565b600154156104245760405162461bcd60e51b81526004016103d290612c89565b600180554283116104775760405162461bcd60e51b815260206004820152601e60248201527f446561646c696e65206d75737420626520696e2074686520667574757265000060448201526064016103d2565b5f82116104d25760405162461bcd60e51b815260206004820152602360248201527f476173207072696365206d7573742062652067726561746572207468616e207a60448201526265726f60e81b60648201526084016103d2565b66038d7ea4c680008510156105225760405162461bcd60e51b8152602060048201526016602482015275125b9c1d5d08185b5bdd5b9d081d1bdbc81cdb585b1b60521b60448201526064016103d2565b620186a061c3505f8161053660018d612cd4565b6105409190612ce7565b61054a9084612cfe565b90505f6105578683612ce7565b9050600a61056682600c612ce7565b6105709190612d11565b88116105d35760405162461bcd60e51b815260206004820152602c60248201527f4d696e2070726f666974206d757374206265206174206c65617374203132302560448201526b081bd98819d85cc818dbdcdd60a21b60648201526084016103d2565b6040516370a0823160e01b81523060048201527f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610639573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061065d9190612d30565b90508a8110156106ab5760405162461bcd60e51b8152602060048201526019602482015278496e73756666696369656e7420574554482062616c616e636560381b60448201526064016103d2565b60646106b882605a612ce7565b6106c29190612d11565b8b111561072b5760405162461bcd60e51b815260206004820152603160248201527f496e70757420616d6f756e7420746f6f206c617267652c206d757374206265206044820152703c3d20393025206f662062616c616e636560781b60648201526084016103d2565b8e8e6004919061073c9291906127b8565b5061074960058e8e6127b8565b5060068b9055610757611f26565b6040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa15801561079b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107bf9190612d30565b90508181116108035760405162461bcd60e51b815260206004820152601060248201526f139bc815d15512081c9958d95a5d995960821b60448201526064016103d2565b8181038b8110156108475760405162461bcd60e51b815260206004820152600e60248201526d50726f66697420746f6f206c6f7760901b60448201526064016103d2565b600a61085486600c612ce7565b61085e9190612d11565b81116108c45760405162461bcd60e51b815260206004820152602f60248201527f41637475616c2070726f666974206d757374206265206174206c65617374203160448201526e0c8c09481bd98819d85cc818dbdcdd608a1b60648201526084016103d2565b604080518281525f60208201527ffe4159880baf7d87ae542dd02a3a01f65900500376ba133eb8ac6b832771083d910160405180910390a19750505050505050505f60015598975050505050505050565b6001600160a01b0382165f908152600760205260408120600181015461093e9061012c90612cfe565b4211801561096457506001600160a01b0383165f90815260028201602052604090205415155b9150505b92915050565b5f546001600160a01b031633146109975760405162461bcd60e51b81526004016103d290612c39565b5f54600160a01b900460ff16156109c05760405162461bcd60e51b81526004016103d290612c5d565b600154156109e05760405162461bcd60e51b81526004016103d290612c89565b600180556001600160a01b038116610a3a5760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f7420776974686472617720746f207a65726f20616464726573730060448201526064016103d2565b5f8211610a895760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f60448201526064016103d2565b6040516370a0823160e01b81523060048201527f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610aef573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b139190612d30565b905083811015610b615760405162461bcd60e51b8152602060048201526019602482015278496e73756666696369656e7420574554482062616c616e636560381b60448201526064016103d2565b66038d7ea4c6800047811115610bb95760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74204554482072657365727665000000000000000060448201526064016103d2565b604051632e1a7d4d60e01b8152600481018690526001600160a01b03841690632e1a7d4d906024015f604051808303815f87803b158015610bf8575f5ffd5b505af1158015610c0a573d5f5f3e3d5ffd5b505050508085610c1a9190612cfe565b471015610c735760405162461bcd60e51b815260206004820152602160248201527f496e73756666696369656e742045544820616674657220636f6e76657273696f6044820152603760f91b60648201526084016103d2565b5f846001600160a01b0316866040515f6040518083038185875af1925050503d805f8114610cbc576040519150601f19603f3d011682016040523d82523d5f602084013e610cc1565b606091505b5050905080610d085760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016103d2565b846001600160a01b03167f94b2de810873337ed265c5f8cf98c9cffefa06b8607f9a2f1fbaebdfbcfbef1c87604051610d4391815260200190565b60405180910390a250505f60015550505050565b5f6001600160a01b038216610d7e5760405162461bcd60e51b81526004016103d290612d47565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015610dc0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109689190612d30565b5f546001600160a01b03163314610e0d5760405162461bcd60e51b81526004016103d290612c39565b5f54600160a01b900460ff1615610e365760405162461bcd60e51b81526004016103d290612c5d565b60015415610e565760405162461bcd60e51b81526004016103d290612c89565b600180556001600160a01b038316610e805760405162461bcd60e51b81526004016103d290612d47565b6001600160a01b038116610ed65760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f7420776974686472617720746f207a65726f20616464726573730060448201526064016103d2565b5f8211610f255760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f60448201526064016103d2565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015610f69573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f8d9190612d30565b905082811015610fdf5760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420746f6b656e2062616c616e636500000000000060448201526064016103d2565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316846001600160a01b03160361107b5766038d7ea4c6800061102a8185612cfe565b8210156110795760405162461bcd60e51b815260206004820152601a60248201527f4d757374206d61696e7461696e2057455448207265736572766500000000000060448201526064016103d2565b505b60405163a9059cbb60e01b81526001600160a01b038381166004830152602482018590525f919086169063a9059cbb906044016020604051808303815f875af11580156110ca573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110ee9190612d7e565b9050806111355760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b60448201526064016103d2565b826001600160a01b0316856001600160a01b03167f8210728e7c071f615b840ee026032693858fbcd5e5359e67e438c890f59e56208660405161117a91815260200190565b60405180910390a350505f600155505050565b5f546001600160a01b031633146111b65760405162461bcd60e51b81526004016103d290612c39565b5f54600160a01b900460ff166112075760405162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9858dd081a5cc81b9bdd081c185d5cd95960521b60448201526064016103d2565b5f805460ff60a01b191690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b5f546001600160a01b031633146112725760405162461bcd60e51b81526004016103d290612c39565b5f54600160a01b900460ff161561129b5760405162461bcd60e51b81526004016103d290612c5d565b6001600160a01b0382166112c15760405162461bcd60e51b81526004016103d290612d47565b6001600160a01b0382165f9081526007602052604090208180156112e75750805460ff16155b1561133757600880546001810182555f919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0385161790555b805460ff191682151590811782556040519081526001600160a01b038416907fb28a079064159c4e1e2850ca5d73cec973a12214431e1a26df9760cefdb1c7949060200160405180910390a2505050565b5f546001600160a01b031633146113b15760405162461bcd60e51b81526004016103d290612c39565b5f54600160a01b900460ff16156113da5760405162461bcd60e51b81526004016103d290612c5d565b5f805460ff60a01b1916600160a01b1790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589060200161123f565b6002545f906001600160a01b03163314801561144057506001600160a01b03841630145b80156114a357507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168a8a5f81811061148357611483612d99565b90506020020160208101906114989190612973565b6001600160a01b0316145b6114ef5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420666c617368206c6f616e20706172616d657465727300000060448201526064016103d2565b5f806114fd84860186612dad565b509150915061150a611f26565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25f8989828161153c5761153c612d99565b905060200201358c8c5f81811061155557611555612d99565b905060200201356115669190612cfe565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038416906370a0823190602401602060405180830381865afa1580156115ad573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115d19190612d30565b9050818110156116325760405162461bcd60e51b815260206004820152602660248201527f496e73756666696369656e742066756e647320746f20726570617920666c617360448201526534103637b0b760d11b60648201526084016103d2565b604051636eb1769f60e11b815230600482015233602482015282906001600160a01b0385169063dd62ed3e90604401602060405180830381865afa15801561167c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116a09190612d30565b1015611704576001600160a01b0383165f90815260076020908152604080832033845260028101909252909120545f191480156116df5750805460ff16155b611702578054611702908590339060ff166116fb575f196123b5565b855b6123b5565b505b5f61170f8383612cd4565b9050858110156117615760405162461bcd60e51b815260206004820152601a60248201527f50726f66697420746f6f206c6f7720696e2063616c6c6261636b00000000000060448201526064016103d2565b6004545f90869061177490600190612cd4565b6117809061c350612ce7565b61178d90620249f0612cfe565b6117979190612ce7565b90508c8c5f8181106117ab576117ab612d99565b90506020020135600a82600c6117c19190612ce7565b6117cb9190612d11565b6117d59190612cfe565b82116118325760405162461bcd60e51b815260206004820152602660248201527f50726f66697420646f65736e277420636f76657220636f73747320696e2063616044820152656c6c6261636b60d01b60648201526084016103d2565b506003555060019e9d5050505050505050505050505050565b606060088054806020026020016040519081016040528092919081815260200182805480156118a157602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611883575b5050505050905090565b5f80546001600160a01b031633146118d55760405162461bcd60e51b81526004016103d290612c39565b5f54600160a01b900460ff16156118fe5760405162461bcd60e51b81526004016103d290612c5d565b6001541561191e5760405162461bcd60e51b81526004016103d290612c89565b600180556001600160a01b038a161580159061193957504283115b801561194457505f82115b8015611957575066038d7ea4c680008510155b8015611964575060028810155b80156119795750611976600189612cd4565b86145b6119ba5760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420706172616d657465727360701b60448201526064016103d2565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0381168a8a5f816119f5576119f5612d99565b9050602002016020810190611a0a9190612973565b6001600160a01b0316148015611a6157506001600160a01b0381168a8a611a32600182612cd4565b818110611a4157611a41612d99565b9050602002016020810190611a569190612973565b6001600160a01b0316145b611ab75760405162461bcd60e51b815260206004820152602160248201527f50617468206d75737420737461727420616e6420656e642077697468205745546044820152600960fb1b60648201526084016103d2565b5f83611ac460018c612cd4565b611ad09061c350612ce7565b611add90620249f0612cfe565b611ae79190612ce7565b90505f612710611af8896009612ce7565b611b029190612d11565b905080600a611b1284600c612ce7565b611b1c9190612d11565b611b269190612cfe565b8711611b745760405162461bcd60e51b815260206004820152601b60248201527f4d696e2070726f666974206d75737420636f76657220636f737473000000000060448201526064016103d2565b611b8060048d8d6127b8565b50611b8d60058b8b6127b8565b5060068890555f600355600280546001600160a01b0319166001600160a01b038f16179055611bc1838e6116fd848c612cfe565b611bcf8d848a8a8986612649565b60035487811015611c135760405162461bcd60e51b815260206004820152600e60248201526d50726f66697420746f6f206c6f7760901b60448201526064016103d2565b81600a611c2185600c612ce7565b611c2b9190612d11565b611c359190612cfe565b8111611c835760405162461bcd60e51b815260206004820152601a60248201527f50726f66697420646f65736e277420636f76657220636f73747300000000000060448201526064016103d2565b604080518281525f60208201527fdb2114755786ebe75b9de836a12988b7248f8c0342e505ab6d37dec5c14415ac910160405180910390a15f6001559d9c50505050505050505050505050565b5f546001600160a01b03163314611cf95760405162461bcd60e51b81526004016103d290612c39565b6001600160a01b038116611d4f5760405162461bcd60e51b815260206004820181905260248201527f4e6577206f776e65722063616e6e6f74206265207a65726f206164647265737360448201526064016103d2565b5f80546001600160a01b0319166001600160a01b0392909216919091179055565b66038d7ea4c68000341015611dc75760405162461bcd60e51b815260206004820152601860248201527f4465706f73697420616d6f756e7420746f6f20736d616c6c000000000000000060448201526064016103d2565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b158015611e20575f5ffd5b505af1158015611e32573d5f5f3e3d5ffd5b5050604080513381523460208201527f6c703791f399558807424f489ccd811c72b4ff0b74af547264fad7c646776df0945001915061123f9050565b60088181548110611e7d575f80fd5b5f918252602090912001546001600160a01b0316905081565b6040516370a0823160e01b815230600482015247905f907f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316906370a0823190602401602060405180830381865afa158015611efc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f209190612d30565b90509091565b60045460021115611f6f5760405162461bcd60e51b8152602060048201526013602482015272092dcecc2d8d2c840e0c2e8d040d8cadccee8d606b1b60448201526064016103d2565b600454611f7e90600190612cd4565b60055414611fce5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420666163746f72696573206c656e677468000000000000000060448201526064016103d2565b5f7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc29050806001600160a01b031660045f8154811061200f5761200f612d99565b5f918252602090912001546001600160a01b0316146120705760405162461bcd60e51b815260206004820152601960248201527f50617468206d757374207374617274207769746820574554480000000000000060448201526064016103d2565b600480546001600160a01b038316919061208c90600190612cd4565b8154811061209c5761209c612d99565b5f918252602090912001546001600160a01b0316146120fd5760405162461bcd60e51b815260206004820152601760248201527f50617468206d75737420656e642077697468205745544800000000000000000060448201526064016103d2565b60065481905f5b60045461211390600190612cd4565b8110156123af57825f6004612129846001612cfe565b8154811061213957612139612d99565b5f918252602082200154600580546001600160a01b039092169350908590811061216557612165612d99565b5f9182526020909120015460405163e6a4390560e01b81526001600160a01b03858116600483015284811660248301529091169063e6a4390590604401602060405180830381865afa1580156121bd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121e19190612dd6565b90506001600160a01b03811661222a5760405162461bcd60e51b815260206004820152600e60248201526d14185a5c881b9bdd08199bdd5b9960921b60448201526064016103d2565b5f8190505f816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561226b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061228f9190612dd6565b90506001600160a01b03858116908216146122ab86858a6123b5565b5f5f82156122bd57505f9050886122c3565b508890505f5b604080515f8152602081019182905263022c0d9f60e01b9091526001600160a01b0386169063022c0d9f906123019085908590309060248101612e1f565b5f604051808303815f87803b158015612318575f5ffd5b505af115801561232a573d5f5f3e3d5ffd5b50506040516370a0823160e01b8152306004820152989c508c986001600160a01b038a1692506370a082319150602401602060405180830381865afa158015612375573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123999190612d30565b9950506001909701965061210495505050505050565b50505050565b6001600160a01b0383165f908152600760205260409020805460ff1680156123e457506123e28484610915565b155b801561240857506001600160a01b0383165f90815260028201602052604090205415155b156124c15760405163095ea7b360e01b81526001600160a01b0384811660048301525f602483015285169063095ea7b3906044016020604051808303815f875af1158015612458573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061247c9190612d7e565b50604080516001600160a01b038087168252851660208201527f97a94ee714dc2c5c1889f6fe8e8909a95e0307c4b272c7df374bf76582099f87910160405180910390a15b60405163095ea7b360e01b81526001600160a01b0384811660048301526024820184905285169063095ea7b3906044016020604051808303815f875af115801561250d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125319190612d7e565b50426001808301919091556001600160a01b0384165f908152600283016020526040902083905582016125a357826001600160a01b0316846001600160a01b03167f0b97eba306a66ba90ad1c6ecf3380f3ea4acc9fd7272afde9e779d952adeffca60405160405180910390a36125f8565b6001600160a01b038084169085167fe765e698480be1108f079c9aabccc59d2fe1dde146b746d0f7066bd3218803c1846125df61012c42612cfe565b6040805192835260208301919091520160405180910390a35b604080516001600160a01b038087168252851660208201529081018390527fc532e6b60637d86dd3fe55f7548ed169de9c79cfdef610593bea3569f079bc659060600160405180910390a150505050565b6040805160018082528183019092525f916020808301908036833701905050905085815f8151811061267d5761267d612d99565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905085815f815181106126cc576126cc612d99565b60209081029190910101526040805160018082528183019092525f918160200160208202803683370190505090505f815f8151811061270d5761270d612d99565b602090810291909101810191909152604080519182018890528101869052606081018590525f9060800160408051601f198184030181529082905263ab9c4b5d60e01b825291506001600160a01b038b169063ab9c4b5d9061277f903090889088908890849089905f90600401612e85565b5f604051808303815f87803b158015612796575f5ffd5b505af11580156127a8573d5f5f3e3d5ffd5b5050505050505050505050505050565b828054828255905f5260205f20908101928215612809579160200282015b828111156128095781546001600160a01b0319166001600160a01b038435161782556020909201916001909101906127d6565b50612815929150612819565b5090565b5b80821115612815575f815560010161281a565b5f5f83601f84011261283d575f5ffd5b50813567ffffffffffffffff811115612854575f5ffd5b6020830191508360208260051b850101111561286e575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f60c0898b03121561288c575f5ffd5b883567ffffffffffffffff8111156128a2575f5ffd5b6128ae8b828c0161282d565b909950975050602089013567ffffffffffffffff8111156128cd575f5ffd5b6128d98b828c0161282d565b999c989b5099604081013598606082013598506080820135975060a09091013595509350505050565b6001600160a01b0381168114612916575f5ffd5b50565b5f5f6040838503121561292a575f5ffd5b823561293581612902565b9150602083013561294581612902565b809150509250929050565b5f5f60408385031215612961575f5ffd5b82359150602083013561294581612902565b5f60208284031215612983575f5ffd5b813561298e81612902565b9392505050565b5f5f5f606084860312156129a7575f5ffd5b83356129b281612902565b92506020840135915060408401356129c981612902565b809150509250925092565b8015158114612916575f5ffd5b5f5f604083850312156129f2575f5ffd5b82356129fd81612902565b91506020830135612945816129d4565b5f5f83601f840112612a1d575f5ffd5b50813567ffffffffffffffff811115612a34575f5ffd5b60208301915083602082850101111561286e575f5ffd5b5f5f5f5f5f5f5f5f5f60a08a8c031215612a63575f5ffd5b893567ffffffffffffffff811115612a79575f5ffd5b612a858c828d0161282d565b909a5098505060208a013567ffffffffffffffff811115612aa4575f5ffd5b612ab08c828d0161282d565b90985096505060408a013567ffffffffffffffff811115612acf575f5ffd5b612adb8c828d0161282d565b90965094505060608a0135612aef81612902565b925060808a013567ffffffffffffffff811115612b0a575f5ffd5b612b168c828d01612a0d565b915080935050809150509295985092959850929598565b5f8151808452602084019350602083015f5b82811015612b665781516001600160a01b0316865260209586019590910190600101612b3f565b5093949350505050565b602081525f61298e6020830184612b2d565b5f5f5f5f5f5f5f5f5f60e08a8c031215612b9a575f5ffd5b8935612ba581612902565b985060208a013567ffffffffffffffff811115612bc0575f5ffd5b612bcc8c828d0161282d565b90995097505060408a013567ffffffffffffffff811115612beb575f5ffd5b612bf78c828d0161282d565b9a9d999c50979a9799986060890135986080810135985060a0810135975060c0013595509350505050565b5f60208284031215612c32575f5ffd5b5035919050565b6020808252600a908201526927b7363c9037bbb732b960b11b604082015260600190565b60208082526012908201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561096857610968612cc0565b808202811582820484141761096857610968612cc0565b8082018082111561096857610968612cc0565b5f82612d2b57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612d40575f5ffd5b5051919050565b6020808252601c908201527f546f6b656e20616464726573732063616e6e6f74206265207a65726f00000000604082015260600190565b5f60208284031215612d8e575f5ffd5b815161298e816129d4565b634e487b7160e01b5f52603260045260245ffd5b5f5f5f60608486031215612dbf575f5ffd5b505081359360208301359350604090920135919050565b5f60208284031215612de6575f5ffd5b815161298e81612902565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b84815283602082015260018060a01b0383166040820152608060608201525f612e4b6080830184612df1565b9695505050505050565b5f8151808452602084019350602083015f5b82811015612b66578151865260209586019590910190600101612e67565b6001600160a01b038816815260e0602082018190525f90612ea890830189612b2d565b8281036040840152612eba8189612e55565b90508281036060840152612ece8188612e55565b6001600160a01b038716608085015283810360a08501529050612ef18186612df1565b91505061ffff831660c08301529897505050505050505056fea26469706673582212207e5f351ec549b4e61e172434c6bae0c133eae3735170cce2c6826226dc3c57f164736f6c634300081d0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

-----Decoded View---------------
Arg [0] : _wethAddress (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2


Deployed Bytecode Sourcemap

1713:19674:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4981:35;;;4994:10;188:51:1;;5006:9:0;270:2:1;255:18;;248:34;4981:35:0;;161:18:1;4981:35:0;;;;;;;1713:19674;;;;;1759:37;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;457:32:1;;;439:51;;427:2;412:18;1759:37:0;;;;;;;;10884:2660;;;;;;;;;;-1:-1:-1;10884:2660:0;;;;;:::i;:::-;;:::i;:::-;;;2269:25:1;;;2257:2;2242:18;10884:2660:0;2123:177:1;8180:263:0;;;;;;;;;;-1:-1:-1;8180:263:0;;;;;:::i;:::-;;:::i;:::-;;;2999:14:1;;2992:22;2974:41;;2962:2;2947:18;8180:263:0;2834:187:1;5470:1063:0;;;;;;;;;;-1:-1:-1;5470:1063:0;;;;;:::i;:::-;;:::i;:::-;;10616:207;;;;;;;;;;-1:-1:-1;10616:207:0;;;;;:::i;:::-;;:::i;6577:992::-;;;;;;;;;;-1:-1:-1;6577:992:0;;;;;:::i;:::-;;:::i;7781:118::-;;;;;;;;;;;;;:::i;9585:534::-;;;;;;;;;;-1:-1:-1;9585:534:0;;;;;:::i;:::-;;:::i;2166:18::-;;;;;;;;;;-1:-1:-1;2166:18:0;;;;-1:-1:-1;;;2166:18:0;;;;;;7616:116;;;;;;;;;;;;;:::i;2092:20::-;;;;;;;;;;-1:-1:-1;2092:20:0;;;;-1:-1:-1;;;;;2092:20:0;;;19141:2243;;;;;;;;;;-1:-1:-1;19141:2243:0;;;;;:::i;:::-;;:::i;10182:120::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;16741:2312::-;;;;;;;;;;-1:-1:-1;16741:2312:0;;;;;:::i;:::-;;:::i;7946:177::-;;;;;;;;;;-1:-1:-1;7946:177:0;;;;;:::i;:::-;;:::i;5084:345::-;;;:::i;2993:36::-;;;;;;;;;;-1:-1:-1;2993:36:0;;;;;:::i;:::-;;:::i;10352:218::-;;;;;;;;;;;;;:::i;:::-;;;;9083:25:1;;;9139:2;9124:18;;9117:34;;;;9056:18;10352:218:0;8909:248:1;10884:2660:0;11176:7;4122:5;;-1:-1:-1;;;;;4122:5:0;4108:10;:19;4100:42;;;;-1:-1:-1;;;4100:42:0;;;;;;;:::i;:::-;;;;;;;;;4267:6:::1;::::0;-1:-1:-1;;;4267:6:0;::::1;;;4266:7;4258:38;;;;-1:-1:-1::0;;;4258:38:0::1;;;;;;;:::i;:::-;4572:7:::2;::::0;:12;4564:56:::2;;;;-1:-1:-1::0;;;4564:56:0::2;;;;;;;:::i;:::-;4641:1;4631:11:::0;;11255:15:::3;11244:26:::0;::::3;11236:69;;;::::0;-1:-1:-1;;;11236:69:0;;10410:2:1;11236:69:0::3;::::0;::::3;10392:21:1::0;10449:2;10429:18;;;10422:30;10488:32;10468:18;;;10461:60;10538:18;;11236:69:0::3;10208:354:1::0;11236:69:0::3;11377:1;11366:8;:12;11358:60;;;::::0;-1:-1:-1;;;11358:60:0;;10769:2:1;11358:60:0::3;::::0;::::3;10751:21:1::0;10808:2;10788:18;;;10781:30;10847:34;10827:18;;;10820:62;-1:-1:-1;;;10898:18:1;;;10891:33;10941:19;;11358:60:0::3;10567:399:1::0;11358:60:0::3;11510:4;11495:11;:19;;11487:54;;;::::0;-1:-1:-1;;;11487:54:0;;11173:2:1;11487:54:0::3;::::0;::::3;11155:21:1::0;11212:2;11192:18;;;11185:30;-1:-1:-1;;;11231:18:1;;;11224:52;11293:18;;11487:54:0::3;10971:346:1::0;11487:54:0::3;11607:6;11664:5;11585:19;11664:5:::0;11757:15:::3;11771:1;11757:4:::0;:15:::3;:::i;:::-;11756:30;;;;:::i;:::-;11742:44;::::0;:11;:44:::3;:::i;:::-;11715:71:::0;-1:-1:-1;11797:15:0::3;11815:27;11834:8:::0;11715:71;11815:27:::3;:::i;:::-;11797:45:::0;-1:-1:-1;11948:2:0::3;11933:12;11797:45:::0;11943:2:::3;11933:12;:::i;:::-;:17;;;;:::i;:::-;11915:15;:35;11907:92;;;::::0;-1:-1:-1;;;11907:92:0;;12314:2:1;11907:92:0::3;::::0;::::3;12296:21:1::0;12353:2;12333:18;;;12326:30;12392:34;12372:18;;;12365:62;-1:-1:-1;;;12443:18:1;;;12436:42;12495:19;;11907:92:0::3;12112:408:1::0;11907:92:0::3;12157:37;::::0;-1:-1:-1;;;12157:37:0;;12188:4:::3;12157:37;::::0;::::3;439:51:1::0;12070:12:0::3;::::0;12055::::3;::::0;-1:-1:-1;;;;;12157:22:0;::::3;::::0;::::3;::::0;412:18:1;;12157:37:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12132:62;;12276:11;12258:14;:29;;12250:67;;;::::0;-1:-1:-1;;;12250:67:0;;12916:2:1;12250:67:0::3;::::0;::::3;12898:21:1::0;12955:2;12935:18;;;12928:30;-1:-1:-1;;;12974:18:1;;;12967:55;13039:18;;12250:67:0::3;12714:349:1::0;12250:67:0::3;12450:3;12428:19;:14:::0;12445:2:::3;12428:19;:::i;:::-;:25;;;;:::i;:::-;12413:11;:40;;12405:102;;;::::0;-1:-1:-1;;;12405:102:0;;13270:2:1;12405:102:0::3;::::0;::::3;13252:21:1::0;13309:2;13289:18;;;13282:30;13348:34;13328:18;;;13321:62;-1:-1:-1;;;13399:18:1;;;13392:47;13456:19;;12405:102:0::3;13068:413:1::0;12405:102:0::3;12582:4;;12570:9;:16;;;;;;;:::i;:::-;-1:-1:-1::0;12597:26:0::3;:14;12614:9:::0;;12597:26:::3;:::i;:::-;-1:-1:-1::0;12634:16:0::3;:30:::0;;;12740:28:::3;:26;:28::i;:::-;12839:37;::::0;-1:-1:-1;;;12839:37:0;;12870:4:::3;12839:37;::::0;::::3;439:51:1::0;12816:20:0::3;::::0;-1:-1:-1;;;;;12839:22:0;::::3;::::0;::::3;::::0;412:18:1;;12839:37:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12816:60;;12963:14;12948:12;:29;12940:58;;;::::0;-1:-1:-1;;;12940:58:0;;13688:2:1;12940:58:0::3;::::0;::::3;13670:21:1::0;13727:2;13707:18;;;13700:30;-1:-1:-1;;;13746:18:1;;;13739:46;13802:18;;12940:58:0::3;13486:340:1::0;12940:58:0::3;13138:29:::0;;::::3;13254:25:::0;;::::3;;13246:52;;;::::0;-1:-1:-1;;;13246:52:0;;14033:2:1;13246:52:0::3;::::0;::::3;14015:21:1::0;14072:2;14052:18;;;14045:30;-1:-1:-1;;;14091:18:1;;;14084:44;14145:18;;13246:52:0::3;13831:338:1::0;13246:52:0::3;13410:2;13395:12;:7:::0;13405:2:::3;13395:12;:::i;:::-;:17;;;;:::i;:::-;13386:6;:26;13378:86;;;::::0;-1:-1:-1;;;13378:86:0;;14376:2:1;13378:86:0::3;::::0;::::3;14358:21:1::0;14415:2;14395:18;;;14388:30;14454:34;14434:18;;;14427:62;-1:-1:-1;;;14505:18:1;;;14498:45;14560:19;;13378:86:0::3;14174:411:1::0;13378:86:0::3;13482:28;::::0;;9083:25:1;;;13508:1:0::3;9139:2:1::0;9124:18;;9117:34;13482:28:0::3;::::0;9056:18:1;13482:28:0::3;;;;;;;13530:6:::0;-1:-1:-1;;;;;;;;4675:1:0::2;4665:7;:11:::0;10884:2660;;-1:-1:-1;;;;;;;;10884:2660:0:o;8180:263::-;-1:-1:-1;;;;;8310:21:0;;8260:4;8310:21;;;:14;:21;;;;;8367:17;;;;:37;;1908:9;;8367:37;:::i;:::-;8349:15;:55;:86;;;;-1:-1:-1;;;;;;8408:23:0;;8434:1;8408:23;;;:14;;;:23;;;;;;:27;;8349:86;8342:93;;;8180:263;;;;;:::o;5470:1063::-;4122:5;;-1:-1:-1;;;;;4122:5:0;4108:10;:19;4100:42;;;;-1:-1:-1;;;4100:42:0;;;;;;;:::i;:::-;4267:6:::1;::::0;-1:-1:-1;;;4267:6:0;::::1;;;4266:7;4258:38;;;;-1:-1:-1::0;;;4258:38:0::1;;;;;;;:::i;:::-;4572:7:::2;::::0;:12;4564:56:::2;;;;-1:-1:-1::0;;;4564:56:0::2;;;;;;;:::i;:::-;4641:1;4631:11:::0;;-1:-1:-1;;;;;5584:16:0;::::3;5576:60;;;::::0;-1:-1:-1;;;5576:60:0;;15053:2:1;5576:60:0::3;::::0;::::3;15035:21:1::0;15092:2;15072:18;;;15065:30;15131:33;15111:18;;;15104:61;15182:18;;5576:60:0::3;14851:355:1::0;5576:60:0::3;5664:1;5655:6;:10;5647:55;;;::::0;-1:-1:-1;;;5647:55:0;;15413:2:1;5647:55:0::3;::::0;::::3;15395:21:1::0;;;15432:18;;;15425:30;15491:34;15471:18;;;15464:62;15543:18;;5647:55:0::3;15211:356:1::0;5647:55:0::3;5816:37;::::0;-1:-1:-1;;;5816:37:0;;5847:4:::3;5816:37;::::0;::::3;439:51:1::0;5771:12:0::3;::::0;5756::::3;::::0;-1:-1:-1;;;;;5816:22:0;::::3;::::0;::::3;::::0;412:18:1;;5816:37:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5794:59;;5887:6;5872:11;:21;;5864:59;;;::::0;-1:-1:-1;;;5864:59:0;;12916:2:1;5864:59:0::3;::::0;::::3;12898:21:1::0;12955:2;12935:18;;;12928:30;-1:-1:-1;;;12974:18:1;;;12967:55;13039:18;;5864:59:0::3;12714:349:1::0;5864:59:0::3;5995:4;6039:21;:35:::0;-1:-1:-1;6039:35:0::3;6031:72;;;::::0;-1:-1:-1;;;6031:72:0;;15774:2:1;6031:72:0::3;::::0;::::3;15756:21:1::0;15813:2;15793:18;;;15786:30;15852:26;15832:18;;;15825:54;15896:18;;6031:72:0::3;15572:348:1::0;6031:72:0::3;6148:28;::::0;-1:-1:-1;;;6148:28:0;;::::3;::::0;::::3;2269:25:1::0;;;-1:-1:-1;;;;;6148:20:0;::::3;::::0;::::3;::::0;2242:18:1;;6148:28:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6289:10;6280:6;:19;;;;:::i;:::-;6255:21;:44;;6247:90;;;::::0;-1:-1:-1;;;6247:90:0;;16127:2:1;6247:90:0::3;::::0;::::3;16109:21:1::0;16166:2;16146:18;;;16139:30;16205:34;16185:18;;;16178:62;-1:-1:-1;;;16256:18:1;;;16249:31;16297:19;;6247:90:0::3;15925:397:1::0;6247:90:0::3;6389:12;6407:2;-1:-1:-1::0;;;;;6407:7:0::3;6422:6;6407:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6388:45;;;6452:7;6444:39;;;::::0;-1:-1:-1;;;6444:39:0;;16739:2:1;6444:39:0::3;::::0;::::3;16721:21:1::0;16778:2;16758:18;;;16751:30;-1:-1:-1;;;16797:18:1;;;16790:49;16856:18;;6444:39:0::3;16537:343:1::0;6444:39:0::3;6514:2;-1:-1:-1::0;;;;;6501:24:0::3;;6518:6;6501:24;;;;2269:25:1::0;;2257:2;2242:18;;2123:177;6501:24:0::3;;;;;;;;-1:-1:-1::0;;4675:1:0::2;4665:7;:11:::0;-1:-1:-1;;;;5470:1063:0:o;10616:207::-;10679:7;-1:-1:-1;;;;;10707:19:0;;10699:60;;;;-1:-1:-1;;;10699:60:0;;;;;;;:::i;:::-;10777:38;;-1:-1:-1;;;10777:38:0;;10809:4;10777:38;;;439:51:1;-1:-1:-1;;;;;10777:23:0;;;;;412:18:1;;10777:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;6577:992::-;4122:5;;-1:-1:-1;;;;;4122:5:0;4108:10;:19;4100:42;;;;-1:-1:-1;;;4100:42:0;;;;;;;:::i;:::-;4267:6:::1;::::0;-1:-1:-1;;;4267:6:0;::::1;;;4266:7;4258:38;;;;-1:-1:-1::0;;;4258:38:0::1;;;;;;;:::i;:::-;4572:7:::2;::::0;:12;4564:56:::2;;;;-1:-1:-1::0;;;4564:56:0::2;;;;;;;:::i;:::-;4641:1;4631:11:::0;;-1:-1:-1;;;;;6708:19:0;::::3;6700:60;;;;-1:-1:-1::0;;;6700:60:0::3;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6779:16:0;::::3;6771:60;;;::::0;-1:-1:-1;;;6771:60:0;;15053:2:1;6771:60:0::3;::::0;::::3;15035:21:1::0;15092:2;15072:18;;;15065:30;15131:33;15111:18;;;15104:61;15182:18;;6771:60:0::3;14851:355:1::0;6771:60:0::3;6859:1;6850:6;:10;6842:55;;;::::0;-1:-1:-1;;;6842:55:0;;15413:2:1;6842:55:0::3;::::0;::::3;15395:21:1::0;;;15432:18;;;15425:30;15491:34;15471:18;;;15464:62;15543:18;;6842:55:0::3;15211:356:1::0;6842:55:0::3;6976:38;::::0;-1:-1:-1;;;6976:38:0;;7008:4:::3;6976:38;::::0;::::3;439:51:1::0;6953:20:0::3;::::0;-1:-1:-1;;;;;6976:23:0;::::3;::::0;::::3;::::0;412:18:1;;6976:38:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6953:61;;7049:6;7033:12;:22;;7025:61;;;::::0;-1:-1:-1;;;7025:61:0;;17444:2:1;7025:61:0::3;::::0;::::3;17426:21:1::0;17483:2;17463:18;;;17456:30;17522:28;17502:18;;;17495:56;17568:18;;7025:61:0::3;17242:350:1::0;7025:61:0::3;7177:12;-1:-1:-1::0;;;;;7168:21:0::3;:5;-1:-1:-1::0;;;;;7168:21:0::3;::::0;7164:192:::3;;7228:4;7293:20;7228:4:::0;7293:6;:20:::3;:::i;:::-;7277:12;:36;;7269:75;;;::::0;-1:-1:-1;;;7269:75:0;;17799:2:1;7269:75:0::3;::::0;::::3;17781:21:1::0;17838:2;17818:18;;;17811:30;17877:28;17857:18;;;17850:56;17923:18;;7269:75:0::3;17597:350:1::0;7269:75:0::3;7191:165;7164:192;7424:34;::::0;-1:-1:-1;;;7424:34:0;;-1:-1:-1;;;;;206:32:1;;;7424:34:0::3;::::0;::::3;188:51:1::0;255:18;;;248:34;;;7409:12:0::3;::::0;7424:22;;::::3;::::0;::::3;::::0;161:18:1;;7424:34:0::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7409:49;;7477:7;7469:41;;;::::0;-1:-1:-1;;;7469:41:0;;18404:2:1;7469:41:0::3;::::0;::::3;18386:21:1::0;18443:2;18423:18;;;18416:30;-1:-1:-1;;;18462:18:1;;;18455:51;18523:18;;7469:41:0::3;18202:345:1::0;7469:41:0::3;7550:2;-1:-1:-1::0;;;;;7528:33:0::3;7543:5;-1:-1:-1::0;;;;;7528:33:0::3;;7554:6;7528:33;;;;2269:25:1::0;;2257:2;2242:18;;2123:177;7528:33:0::3;;;;;;;;-1:-1:-1::0;;4675:1:0::2;4665:7;:11:::0;-1:-1:-1;;;6577:992:0:o;7781:118::-;4122:5;;-1:-1:-1;;;;;4122:5:0;4108:10;:19;4100:42;;;;-1:-1:-1;;;4100:42:0;;;;;;;:::i;:::-;4413:6:::1;::::0;-1:-1:-1;;;4413:6:0;::::1;;;4405:41;;;::::0;-1:-1:-1;;;4405:41:0;;18754:2:1;4405:41:0::1;::::0;::::1;18736:21:1::0;18793:2;18773:18;;;18766:30;-1:-1:-1;;;18812:18:1;;;18805:52;18874:18;;4405:41:0::1;18552:346:1::0;4405:41:0::1;7850:5:::2;7841:14:::0;;-1:-1:-1;;;;7841:14:0::2;::::0;;7871:20:::2;::::0;7880:10:::2;439:51:1::0;;7871:20:0::2;::::0;427:2:1;412:18;7871:20:0::2;;;;;;;;7781:118::o:0;9585:534::-;4122:5;;-1:-1:-1;;;;;4122:5:0;4108:10;:19;4100:42;;;;-1:-1:-1;;;4100:42:0;;;;;;;:::i;:::-;4267:6:::1;::::0;-1:-1:-1;;;4267:6:0;::::1;;;4266:7;4258:38;;;;-1:-1:-1::0;;;4258:38:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9699:19:0;::::2;9691:60;;;;-1:-1:-1::0;;;9691:60:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;9797:21:0;::::2;9764:30;9797:21:::0;;;:14:::2;:21;::::0;;;;9912:13;:36;::::2;;;-1:-1:-1::0;9930:18:0;;::::2;;9929:19;9912:36;9908:100;;;9965:19;:31:::0;;::::2;::::0;::::2;::::0;;-1:-1:-1;9965:31:0;;;;;::::2;::::0;;-1:-1:-1;;;;;;9965:31:0::2;-1:-1:-1::0;;;;;9965:31:0;::::2;;::::0;;9908:100:::2;10020:34:::0;;-1:-1:-1;;10020:34:0::2;::::0;::::2;;::::0;;::::2;::::0;;10070:41:::2;::::0;2974::1;;;-1:-1:-1;;;;;10070:41:0;::::2;::::0;::::2;::::0;2962:2:1;2947:18;10070:41:0::2;;;;;;;9680:439;9585:534:::0;;:::o;7616:116::-;4122:5;;-1:-1:-1;;;;;4122:5:0;4108:10;:19;4100:42;;;;-1:-1:-1;;;4100:42:0;;;;;;;:::i;:::-;4267:6:::1;::::0;-1:-1:-1;;;4267:6:0;::::1;;;4266:7;4258:38;;;;-1:-1:-1::0;;;4258:38:0::1;;;;;;;:::i;:::-;7677:6:::2;:13:::0;;-1:-1:-1;;;;7677:13:0::2;-1:-1:-1::0;;;7677:13:0::2;::::0;;7706:18:::2;::::0;7713:10:::2;439:51:1::0;;7706:18:0::2;::::0;427:2:1;412:18;7706::0::2;293:203:1::0;19141:2243:0;19471:16;;19363:4;;-1:-1:-1;;;;;19471:16:0;19457:10;:30;:73;;;;-1:-1:-1;;;;;;19504:26:0;;19525:4;19504:26;19457:73;:115;;;;;19560:12;-1:-1:-1;;;;;19547:25:0;:6;;19554:1;19547:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19547:25:0;;19457:115;19435:194;;;;-1:-1:-1;;;19435:194:0;;19237:2:1;19435:194:0;;;19219:21:1;19276:2;19256:18;;;19249:30;19315:31;19295:18;;;19288:59;19364:18;;19435:194:0;19035:353:1;19435:194:0;19730:23;;19777:47;;;;19788:6;19777:47;:::i;:::-;19729:95;;;;;19900:28;:26;:28::i;:::-;20016:12;20001;20078:8;;20001:12;20078:11;;;;;:::i;:::-;;;;;;;20065:7;;20073:1;20065:10;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;20182:37;;-1:-1:-1;;;20182:37:0;;20213:4;20182:37;;;439:51:1;20039:50:0;;-1:-1:-1;20159:20:0;;-1:-1:-1;;;;;20182:22:0;;;;;412:18:1;;20182:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20159:60;;20254:15;20238:12;:31;;20230:82;;;;-1:-1:-1;;;20230:82:0;;20066:2:1;20230:82:0;;;20048:21:1;20105:2;20085:18;;;20078:30;20144:34;20124:18;;;20117:62;-1:-1:-1;;;20195:18:1;;;20188:36;20241:19;;20230:82:0;19864:402:1;20230:82:0;20386:49;;-1:-1:-1;;;20386:49:0;;20417:4;20386:49;;;20445:51:1;20424:10:0;20512:18:1;;;20505:60;20438:15:0;;-1:-1:-1;;;;;20386:22:0;;;;;20418:18:1;;20386:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;20382:374;;;-1:-1:-1;;;;;20503:20:0;;20470:30;20503:20;;;:14;:20;;;;;;;;20559:10;20544:26;;:14;;;:26;;;;;;;-1:-1:-1;;20544:49:0;:72;;;;-1:-1:-1;20598:18:0;;;;20597:19;20544:72;20538:207;;20670:18;;20638:91;;20652:4;;20658:10;;20670:18;;:58;;-1:-1:-1;;20638:13:0;:91::i;20670:58::-;20691:15;20670:58;20638:13;:91::i;:::-;20455:301;20382:374;20797:14;20814:30;20829:15;20814:12;:30;:::i;:::-;20797:47;;20920:15;20910:6;:25;;20902:64;;;;-1:-1:-1;;;20902:64:0;;20778:2:1;20902:64:0;;;20760:21:1;20817:2;20797:18;;;20790:30;20856:28;20836:18;;;20829:56;20902:18;;:64:0;20576:350:1;20902:64:0;21126:9;:16;21097:15;;21159:8;;21126:20;;21145:1;;21126:20;:::i;:::-;21125:30;;21150:5;21125:30;:::i;:::-;21116:39;;:6;:39;:::i;:::-;21115:52;;;;:::i;:::-;21097:70;;21215:8;;21224:1;21215:11;;;;;;;:::i;:::-;;;;;;;21210:2;21195:7;21205:2;21195:12;;;;:::i;:::-;:17;;;;:::i;:::-;:31;;;;:::i;:::-;21186:6;:40;21178:91;;;;-1:-1:-1;;;21178:91:0;;21133:2:1;21178:91:0;;;21115:21:1;21172:2;21152:18;;;21145:30;21211:34;21191:18;;;21184:62;-1:-1:-1;;;21262:18:1;;;21255:36;21308:19;;21178:91:0;20931:402:1;21178:91:0;-1:-1:-1;21327:16:0;:25;-1:-1:-1;21372:4:0;;19141:2243;-1:-1:-1;;;;;;;;;;;;;;19141:2243:0:o;10182:120::-;10239:16;10275:19;10268:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10268:26:0;;;;;;;;;;;;;;;;;;;;;;;10182:120;:::o;16741:2312::-;17058:7;4122:5;;-1:-1:-1;;;;;4122:5:0;4108:10;:19;4100:42;;;;-1:-1:-1;;;4100:42:0;;;;;;;:::i;:::-;4267:6:::1;::::0;-1:-1:-1;;;4267:6:0;::::1;;;4266:7;4258:38;;;;-1:-1:-1::0;;;4258:38:0::1;;;;;;;:::i;:::-;4572:7:::2;::::0;:12;4564:56:::2;;;;-1:-1:-1::0;;;4564:56:0::2;;;;;;;:::i;:::-;4641:1;4631:11:::0;;-1:-1:-1;;;;;17155:25:0;::::3;::::0;;::::3;::::0;:68:::3;;;17208:15;17197:8;:26;17155:68;:97;;;;;17251:1;17240:8;:12;17155:97;:132;;;;;17283:4;17269:10;:18;;17155:132;:165;;;;-1:-1:-1::0;17319:1:0::3;17304:16:::0;::::3;;17155:165;:217;;;;-1:-1:-1::0;17357:15:0::3;17371:1;17357:4:::0;:15:::3;:::i;:::-;17337:35:::0;::::3;17155:217;17133:285;;;::::0;-1:-1:-1;;;17133:285:0;;21540:2:1;17133:285:0::3;::::0;::::3;21522:21:1::0;21579:2;21559:18;;;21552:30;-1:-1:-1;;;21598:18:1;;;21591:48;21656:18;;17133:285:0::3;21338:342:1::0;17133:285:0::3;17489:12;-1:-1:-1::0;;;;;17577:15:0;::::3;:4:::0;;17474:12:::3;17577:7:::0;::::3;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17577:15:0::3;;:48;;;;-1:-1:-1::0;;;;;;17596:29:0;::::3;:4:::0;;17601:15:::3;17615:1;17596:4:::0;17601:15:::3;:::i;:::-;17596:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17596:29:0::3;;17577:48;17569:94;;;::::0;-1:-1:-1;;;17569:94:0;;21887:2:1;17569:94:0::3;::::0;::::3;21869:21:1::0;21926:2;21906:18;;;21899:30;21965:34;21945:18;;;21938:62;-1:-1:-1;;;22016:18:1;;;22009:31;22057:19;;17569:94:0::3;21685:397:1::0;17569:94:0::3;17738:15;17795:8:::0;17767:15:::3;17781:1;17767:4:::0;:15:::3;:::i;:::-;17766:25;::::0;17786:5:::3;17766:25;:::i;:::-;17757:34;::::0;:6:::3;:34;:::i;:::-;17756:47;;;;:::i;:::-;17738:65:::0;-1:-1:-1;17814:20:0::3;17854:5;17837:14;:10:::0;17850:1:::3;17837:14;:::i;:::-;:22;;;;:::i;:::-;17814:45:::0;-1:-1:-1;17814:45:0;17974:2:::3;17959:12;:7:::0;17969:2:::3;17959:12;:::i;:::-;:17;;;;:::i;:::-;:32;;;;:::i;:::-;17941:15;:50;17933:90;;;::::0;-1:-1:-1;;;17933:90:0;;22289:2:1;17933:90:0::3;::::0;::::3;22271:21:1::0;22328:2;22308:18;;;22301:30;22367:29;22347:18;;;22340:57;22414:18;;17933:90:0::3;22087:351:1::0;17933:90:0::3;18086:16;:9;18098:4:::0;;18086:16:::3;:::i;:::-;-1:-1:-1::0;18113:26:0::3;:14;18130:9:::0;;18113:26:::3;:::i;:::-;-1:-1:-1::0;18150:16:0::3;:29:::0;;;18247:1:::3;18228:16;:20:::0;18336:16:::3;:30:::0;;-1:-1:-1;;;;;;18336:30:0::3;-1:-1:-1::0;;;;;18336:30:0;::::3;;::::0;;18473:59:::3;18487:4:::0;18336:30;18506:25:::3;18519:12:::0;18150:29;18506:25:::3;:::i;18473:59::-;18621:89;18639:11;18652:4;18658:10;18670:15;18687:8;18697:12;18621:17;:89::i;:::-;18796:16;::::0;18831:25;;::::3;;18823:52;;;::::0;-1:-1:-1;;;18823:52:0;;14033:2:1;18823:52:0::3;::::0;::::3;14015:21:1::0;14072:2;14052:18;;;14045:30;-1:-1:-1;;;14091:18:1;;;14084:44;14145:18;;18823:52:0::3;13831:338:1::0;18823:52:0::3;18923:12:::0;18918:2:::3;18903:12;:7:::0;18913:2:::3;18903:12;:::i;:::-;:17;;;;:::i;:::-;:32;;;;:::i;:::-;18894:6;:41;18886:80;;;::::0;-1:-1:-1;;;18886:80:0;;22645:2:1;18886:80:0::3;::::0;::::3;22627:21:1::0;22684:2;22664:18;;;22657:30;22723:28;22703:18;;;22696:56;22769:18;;18886:80:0::3;22443:350:1::0;18886:80:0::3;18984:37;::::0;;9083:25:1;;;19019:1:0::3;9139:2:1::0;9124:18;;9117:34;18984:37:0::3;::::0;9056:18:1;18984:37:0::3;;;;;;;4675:1:::2;4665:7;:11:::0;19039:6;16741:2312;-1:-1:-1;;;;;;;;;;;;;16741:2312:0:o;7946:177::-;4122:5;;-1:-1:-1;;;;;4122:5:0;4108:10;:19;4100:42;;;;-1:-1:-1;;;4100:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8029:22:0;::::1;8021:67;;;::::0;-1:-1:-1;;;8021:67:0;;23000:2:1;8021:67:0::1;::::0;::::1;22982:21:1::0;;;23019:18;;;23012:30;23078:34;23058:18;;;23051:62;23130:18;;8021:67:0::1;22798:356:1::0;8021:67:0::1;8099:5;:16:::0;;-1:-1:-1;;;;;;8099:16:0::1;-1:-1:-1::0;;;;;8099:16:0;;;::::1;::::0;;;::::1;::::0;;7946:177::o;5084:345::-;5212:4;5199:9;:17;;5191:54;;;;-1:-1:-1;;;5191:54:0;;23361:2:1;5191:54:0;;;23343:21:1;23400:2;23380:18;;;23373:30;23439:26;23419:18;;;23412:54;23483:18;;5191:54:0;23159:348:1;5191:54:0;5296:12;-1:-1:-1;;;;;5290:27:0;;5325:9;5290:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5386:35:0;;;5399:10;188:51:1;;5411:9:0;270:2:1;255:18;;248:34;5386:35:0;;-1:-1:-1;161:18:1;;-1:-1:-1;5386:35:0;;-1:-1:-1;14:274:1;2993:36:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2993:36:0;;-1:-1:-1;2993:36:0;:::o;10352:218::-;10517:45;;-1:-1:-1;;;10517:45:0;;10556:4;10517:45;;;439:51:1;10471:21:0;;10406:18;;10524:12;-1:-1:-1;;;;;10517:30:0;;;;412:18:1;;10517:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10503:59;;10352:218;;:::o;13636:2001::-;13702:9;:16;13722:1;-1:-1:-1;13702:21:0;13694:53;;;;-1:-1:-1;;;13694:53:0;;23714:2:1;13694:53:0;;;23696:21:1;23753:2;23733:18;;;23726:30;-1:-1:-1;;;23772:18:1;;;23765:49;23831:18;;13694:53:0;23512:343:1;13694:53:0;13791:9;:16;:20;;13810:1;;13791:20;:::i;:::-;13766:14;:21;:45;13758:82;;;;-1:-1:-1;;;13758:82:0;;24062:2:1;13758:82:0;;;24044:21:1;24101:2;24081:18;;;24074:30;24140:26;24120:18;;;24113:54;24184:18;;13758:82:0;23860:348:1;13758:82:0;13896:12;13911;13896:27;;14015:4;-1:-1:-1;;;;;13999:20:0;:9;14009:1;13999:12;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;13999:12:0;:20;13991:58;;;;-1:-1:-1;;;13991:58:0;;24415:2:1;13991:58:0;;;24397:21:1;24454:2;24434:18;;;24427:30;24493:27;24473:18;;;24466:55;24538:18;;13991:58:0;24213:349:1;13991:58:0;14068:9;14078:16;;-1:-1:-1;;;;;14068:39:0;;;:9;14078:20;;14097:1;;14078:20;:::i;:::-;14068:31;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;14068:31:0;:39;14060:75;;;;-1:-1:-1;;;14060:75:0;;24769:2:1;14060:75:0;;;24751:21:1;24808:2;24788:18;;;24781:30;24847:25;24827:18;;;24820:53;24890:18;;14060:75:0;24567:347:1;14060:75:0;14247:16;;14208:4;;14185:20;14319:1311;14343:9;:16;:20;;14362:1;;14343:20;:::i;:::-;14339:1;:24;14319:1311;;;14403:12;14385:15;14449:9;14459:5;:1;14463;14459:5;:::i;:::-;14449:16;;;;;;;;:::i;:::-;;;;;;;;;;14560:14;:17;;-1:-1:-1;;;;;14449:16:0;;;;-1:-1:-1;14560:14:0;14575:1;;14560:17;;;;;;:::i;:::-;;;;;;;;;;;14542:63;;-1:-1:-1;;;14542:63:0;;-1:-1:-1;;;;;20463:32:1;;;14542:63:0;;;20445:51:1;20532:32;;;20512:18;;;20505:60;14560:17:0;;;;14542:44;;20418:18:1;;14542:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14520:85;-1:-1:-1;;;;;;14628:25:0;;14620:52;;;;-1:-1:-1;;;14620:52:0;;25377:2:1;14620:52:0;;;25359:21:1;25416:2;25396:18;;;25389:30;-1:-1:-1;;;25435:18:1;;;25428:44;25489:18;;14620:52:0;25175:338:1;14620:52:0;14689:19;14726:11;14689:49;;14793:14;14810:4;-1:-1:-1;;;;;14810:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14793:30;-1:-1:-1;;;;;;14856:17:0;;;;;;;14939:50;14856:7;14962:11;14975:13;14939;:50::i;:::-;15048:18;15081;15120:8;15116:208;;;-1:-1:-1;15162:1:0;;-1:-1:-1;15195:13:0;15116:208;;;-1:-1:-1;15262:13:0;;-1:-1:-1;15307:1:0;15116:208;15422:12;;;15432:1;15422:12;;;;;;;;;-1:-1:-1;;;15373:62:0;;;-1:-1:-1;;;;;15373:9:0;;;;;:62;;15383:10;;15395;;15415:4;;15373:62;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15573:45:0;;-1:-1:-1;;;15573:45:0;;15612:4;15573:45;;;439:51:1;15534:8:0;;-1:-1:-1;15534:8:0;;-1:-1:-1;;;;;15573:30:0;;;-1:-1:-1;15573:30:0;;-1:-1:-1;412:18:1;;15573:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15557:61;-1:-1:-1;;14365:3:0;;;;;-1:-1:-1;14319:1311:0;;-1:-1:-1;;;;;;14319:1311:0;;;13683:1954;;;13636:2001::o;8498:1020::-;-1:-1:-1;;;;;8622:21:0;;8589:30;8622:21;;;:14;:21;;;;;8748:18;;;;:56;;;;;8771:33;8789:5;8796:7;8771:17;:33::i;:::-;8770:34;8748:56;:87;;;;-1:-1:-1;;;;;;8808:23:0;;8834:1;8808:23;;;:14;;;:23;;;;;;:27;;8748:87;8744:246;;;8894:33;;-1:-1:-1;;;8894:33:0;;-1:-1:-1;;;;;206:32:1;;;8894:33:0;;;188:51:1;8925:1:0;255:18:1;;;248:34;8894:21:0;;;;;161:18:1;;8894:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;8947:31:0;;;-1:-1:-1;;;;;20463:32:1;;;20445:51;;20532:32;;20527:2;20512:18;;20505:60;8947:31:0;;20418:18:1;8947:31:0;;;;;;;8744:246;9027:38;;-1:-1:-1;;;9027:38:0;;-1:-1:-1;;;;;206:32:1;;;9027:38:0;;;188:51:1;255:18;;;248:34;;;9027:21:0;;;;;161:18:1;;9027:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;9131:15:0;9111:17;;;;:35;;;;-1:-1:-1;;;;;9157:23:0;;;;;;:14;;;:23;;;;;:32;;;9241:27;;9237:219;;9317:7;-1:-1:-1;;;;;9290:35:0;9310:5;-1:-1:-1;;;;;9290:35:0;;;;;;;;;;;9237:219;;;-1:-1:-1;;;;;9363:81:0;;;;;;;9400:6;9408:35;1908:9;9408:15;:35;:::i;:::-;9363:81;;;9083:25:1;;;9139:2;9124:18;;9117:34;;;;9056:18;9363:81:0;;;;;;;9237:219;9473:37;;;-1:-1:-1;;;;;26913:32:1;;;26895:51;;26982:32;;26977:2;26962:18;;26955:60;27031:18;;;27024:34;;;9473:37:0;;26883:2:1;26868:18;9473:37:0;;;;;;;8578:940;8498:1020;;;:::o;15723:917::-;16019:16;;;16033:1;16019:16;;;;;;;;;15993:23;;16019:16;;;;;;;;;;;-1:-1:-1;16019:16:0;15993:42;;16058:4;16046:6;16053:1;16046:9;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16046:16:0;;;;:9;;;;;;;;;;;:16;16102;;;16116:1;16102:16;;;;;;;;;16075:24;;16102:16;;;;;;;;;;;;-1:-1:-1;16102:16:0;16075:43;;16142:10;16129:7;16137:1;16129:10;;;;;;;;:::i;:::-;;;;;;;;;;:23;16190:16;;;16204:1;16190:16;;;;;;;;;16165:22;;16190:16;;;;;;;;;;;;-1:-1:-1;16190:16:0;16165:41;;16228:1;16217:5;16223:1;16217:8;;;;;;;;:::i;:::-;;;;;;;;;;;:12;;;;16318:51;;;;;;27271:25:1;;;27312:18;;27305:34;;;27355:18;;;27348:34;;;16296:19:0;;27244:18:1;;16318:51:0;;;-1:-1:-1;;16318:51:0;;;;;;;;;;-1:-1:-1;;;16413:219:0;;16318:51;-1:-1:-1;;;;;;16413:35:0;;;;;:219;;16471:4;;16491:6;;16512:7;;16534:5;;16471:4;;16318:51;;16603:1;;16413:219;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15940:700;;;;15723:917;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;501:367:1;564:8;574:6;628:3;621:4;613:6;609:17;605:27;595:55;;646:1;643;636:12;595:55;-1:-1:-1;669:20:1;;712:18;701:30;;698:50;;;744:1;741;734:12;698:50;781:4;773:6;769:17;757:29;;841:3;834:4;824:6;821:1;817:14;809:6;805:27;801:38;798:47;795:67;;;858:1;855;848:12;795:67;501:367;;;;;:::o;873:1245::-;1031:6;1039;1047;1055;1063;1071;1079;1087;1140:3;1128:9;1119:7;1115:23;1111:33;1108:53;;;1157:1;1154;1147:12;1108:53;1197:9;1184:23;1230:18;1222:6;1219:30;1216:50;;;1262:1;1259;1252:12;1216:50;1301:70;1363:7;1354:6;1343:9;1339:22;1301:70;:::i;:::-;1390:8;;-1:-1:-1;1275:96:1;-1:-1:-1;;1478:2:1;1463:18;;1450:32;1507:18;1494:32;;1491:52;;;1539:1;1536;1529:12;1491:52;1578:72;1642:7;1631:8;1620:9;1616:24;1578:72;:::i;:::-;873:1245;;;;-1:-1:-1;1669:8:1;1773:2;1758:18;;1745:32;;1874:2;1859:18;;1846:32;;-1:-1:-1;1977:3:1;1962:19;;1949:33;;-1:-1:-1;2081:3:1;2066:19;;;2053:33;;-1:-1:-1;873:1245:1;-1:-1:-1;;;;873:1245:1:o;2305:131::-;-1:-1:-1;;;;;2380:31:1;;2370:42;;2360:70;;2426:1;2423;2416:12;2360:70;2305:131;:::o;2441:388::-;2509:6;2517;2570:2;2558:9;2549:7;2545:23;2541:32;2538:52;;;2586:1;2583;2576:12;2538:52;2625:9;2612:23;2644:31;2669:5;2644:31;:::i;:::-;2694:5;-1:-1:-1;2751:2:1;2736:18;;2723:32;2764:33;2723:32;2764:33;:::i;:::-;2816:7;2806:17;;;2441:388;;;;;:::o;3026:367::-;3094:6;3102;3155:2;3143:9;3134:7;3130:23;3126:32;3123:52;;;3171:1;3168;3161:12;3123:52;3216:23;;;-1:-1:-1;3315:2:1;3300:18;;3287:32;3328:33;3287:32;3328:33;:::i;3398:247::-;3457:6;3510:2;3498:9;3489:7;3485:23;3481:32;3478:52;;;3526:1;3523;3516:12;3478:52;3565:9;3552:23;3584:31;3609:5;3584:31;:::i;:::-;3634:5;3398:247;-1:-1:-1;;;3398:247:1:o;3650:508::-;3727:6;3735;3743;3796:2;3784:9;3775:7;3771:23;3767:32;3764:52;;;3812:1;3809;3802:12;3764:52;3851:9;3838:23;3870:31;3895:5;3870:31;:::i;:::-;3920:5;-1:-1:-1;3998:2:1;3983:18;;3970:32;;-1:-1:-1;4080:2:1;4065:18;;4052:32;4093:33;4052:32;4093:33;:::i;:::-;4145:7;4135:17;;;3650:508;;;;;:::o;4163:118::-;4249:5;4242:13;4235:21;4228:5;4225:32;4215:60;;4271:1;4268;4261:12;4286:382;4351:6;4359;4412:2;4400:9;4391:7;4387:23;4383:32;4380:52;;;4428:1;4425;4418:12;4380:52;4467:9;4454:23;4486:31;4511:5;4486:31;:::i;:::-;4536:5;-1:-1:-1;4593:2:1;4578:18;;4565:32;4606:30;4565:32;4606:30;:::i;4673:347::-;4724:8;4734:6;4788:3;4781:4;4773:6;4769:17;4765:27;4755:55;;4806:1;4803;4796:12;4755:55;-1:-1:-1;4829:20:1;;4872:18;4861:30;;4858:50;;;4904:1;4901;4894:12;4858:50;4941:4;4933:6;4929:17;4917:29;;4993:3;4986:4;4977:6;4969;4965:19;4961:30;4958:39;4955:59;;;5010:1;5007;5000:12;5025:1539;5212:6;5220;5228;5236;5244;5252;5260;5268;5276;5329:3;5317:9;5308:7;5304:23;5300:33;5297:53;;;5346:1;5343;5336:12;5297:53;5386:9;5373:23;5419:18;5411:6;5408:30;5405:50;;;5451:1;5448;5441:12;5405:50;5490:70;5552:7;5543:6;5532:9;5528:22;5490:70;:::i;:::-;5579:8;;-1:-1:-1;5464:96:1;-1:-1:-1;;5667:2:1;5652:18;;5639:32;5696:18;5683:32;;5680:52;;;5728:1;5725;5718:12;5680:52;5767:72;5831:7;5820:8;5809:9;5805:24;5767:72;:::i;:::-;5858:8;;-1:-1:-1;5741:98:1;-1:-1:-1;;5946:2:1;5931:18;;5918:32;5975:18;5962:32;;5959:52;;;6007:1;6004;5997:12;5959:52;6046:72;6110:7;6099:8;6088:9;6084:24;6046:72;:::i;:::-;6137:8;;-1:-1:-1;6020:98:1;-1:-1:-1;;6222:2:1;6207:18;;6194:32;6235:31;6194:32;6235:31;:::i;:::-;6285:5;-1:-1:-1;6343:3:1;6328:19;;6315:33;6373:18;6360:32;;6357:52;;;6405:1;6402;6395:12;6357:52;6444:60;6496:7;6485:8;6474:9;6470:24;6444:60;:::i;:::-;6418:86;;6523:8;6513:18;;;6550:8;6540:18;;;5025:1539;;;;;;;;;;;:::o;6569:446::-;6622:3;6660:5;6654:12;6687:6;6682:3;6675:19;6719:4;6714:3;6710:14;6703:21;;6758:4;6751:5;6747:16;6781:1;6791:199;6805:6;6802:1;6799:13;6791:199;;;6870:13;;-1:-1:-1;;;;;6866:39:1;6854:52;;6935:4;6926:14;;;;6963:17;;;;6902:1;6820:9;6791:199;;;-1:-1:-1;7006:3:1;;6569:446;-1:-1:-1;;;;6569:446:1:o;7020:261::-;7199:2;7188:9;7181:21;7162:4;7219:56;7271:2;7260:9;7256:18;7248:6;7219:56;:::i;7286:1387::-;7453:6;7461;7469;7477;7485;7493;7501;7509;7517;7570:3;7558:9;7549:7;7545:23;7541:33;7538:53;;;7587:1;7584;7577:12;7538:53;7626:9;7613:23;7645:31;7670:5;7645:31;:::i;:::-;7695:5;-1:-1:-1;7751:2:1;7736:18;;7723:32;7778:18;7767:30;;7764:50;;;7810:1;7807;7800:12;7764:50;7849:70;7911:7;7902:6;7891:9;7887:22;7849:70;:::i;:::-;7938:8;;-1:-1:-1;7823:96:1;-1:-1:-1;;8026:2:1;8011:18;;7998:32;8055:18;8042:32;;8039:52;;;8087:1;8084;8077:12;8039:52;8126:72;8190:7;8179:8;8168:9;8164:24;8126:72;:::i;:::-;7286:1387;;;;-1:-1:-1;7286:1387:1;;8217:8;;8100:98;8325:2;8310:18;;8297:32;;8428:3;8413:19;;8400:33;;-1:-1:-1;8532:3:1;8517:19;;8504:33;;-1:-1:-1;8636:3:1;8621:19;8608:33;;-1:-1:-1;7286:1387:1;-1:-1:-1;;;;7286:1387:1:o;8678:226::-;8737:6;8790:2;8778:9;8769:7;8765:23;8761:32;8758:52;;;8806:1;8803;8796:12;8758:52;-1:-1:-1;8851:23:1;;8678:226;-1:-1:-1;8678:226:1:o;9162:334::-;9364:2;9346:21;;;9403:2;9383:18;;;9376:30;-1:-1:-1;;;9437:2:1;9422:18;;9415:40;9487:2;9472:18;;9162:334::o;9501:342::-;9703:2;9685:21;;;9742:2;9722:18;;;9715:30;-1:-1:-1;;;9776:2:1;9761:18;;9754:48;9834:2;9819:18;;9501:342::o;9848:355::-;10050:2;10032:21;;;10089:2;10069:18;;;10062:30;10128:33;10123:2;10108:18;;10101:61;10194:2;10179:18;;9848:355::o;11322:127::-;11383:10;11378:3;11374:20;11371:1;11364:31;11414:4;11411:1;11404:15;11438:4;11435:1;11428:15;11454:128;11521:9;;;11542:11;;;11539:37;;;11556:18;;:::i;11587:168::-;11660:9;;;11691;;11708:15;;;11702:22;;11688:37;11678:71;;11729:18;;:::i;11760:125::-;11825:9;;;11846:10;;;11843:36;;;11859:18;;:::i;11890:217::-;11930:1;11956;11946:132;;12000:10;11995:3;11991:20;11988:1;11981:31;12035:4;12032:1;12025:15;12063:4;12060:1;12053:15;11946:132;-1:-1:-1;12092:9:1;;11890:217::o;12525:184::-;12595:6;12648:2;12636:9;12627:7;12623:23;12619:32;12616:52;;;12664:1;12661;12654:12;12616:52;-1:-1:-1;12687:16:1;;12525:184;-1:-1:-1;12525:184:1:o;16885:352::-;17087:2;17069:21;;;17126:2;17106:18;;;17099:30;17165;17160:2;17145:18;;17138:58;17228:2;17213:18;;16885:352::o;17952:245::-;18019:6;18072:2;18060:9;18051:7;18047:23;18043:32;18040:52;;;18088:1;18085;18078:12;18040:52;18120:9;18114:16;18139:28;18161:5;18139:28;:::i;18903:127::-;18964:10;18959:3;18955:20;18952:1;18945:31;18995:4;18992:1;18985:15;19019:4;19016:1;19009:15;19393:466;19470:6;19478;19486;19539:2;19527:9;19518:7;19514:23;19510:32;19507:52;;;19555:1;19552;19545:12;19507:52;-1:-1:-1;;19600:23:1;;;19720:2;19705:18;;19692:32;;-1:-1:-1;19823:2:1;19808:18;;;19795:32;;19393:466;-1:-1:-1;19393:466:1:o;24919:251::-;24989:6;25042:2;25030:9;25021:7;25017:23;25013:32;25010:52;;;25058:1;25055;25048:12;25010:52;25090:9;25084:16;25109:31;25134:5;25109:31;:::i;25650:288::-;25691:3;25729:5;25723:12;25756:6;25751:3;25744:19;25812:6;25805:4;25798:5;25794:16;25787:4;25782:3;25778:14;25772:47;25864:1;25857:4;25848:6;25843:3;25839:16;25835:27;25828:38;25927:4;25920:2;25916:7;25911:2;25903:6;25899:15;25895:29;25890:3;25886:39;25882:50;25875:57;;;25650:288;;;;:::o;25943:458::-;26174:6;26163:9;26156:25;26217:6;26212:2;26201:9;26197:18;26190:34;26289:1;26285;26280:3;26276:11;26272:19;26264:6;26260:32;26255:2;26244:9;26240:18;26233:60;26329:3;26324:2;26313:9;26309:18;26302:31;26137:4;26350:45;26390:3;26379:9;26375:19;26367:6;26350:45;:::i;:::-;26342:53;25943:458;-1:-1:-1;;;;;;25943:458:1:o;27393:420::-;27446:3;27484:5;27478:12;27511:6;27506:3;27499:19;27543:4;27538:3;27534:14;27527:21;;27582:4;27575:5;27571:16;27605:1;27615:173;27629:6;27626:1;27623:13;27615:173;;;27690:13;;27678:26;;27733:4;27724:14;;;;27761:17;;;;27651:1;27644:9;27615:173;;27818:1119;-1:-1:-1;;;;;28290:32:1;;28272:51;;28359:3;28354:2;28339:18;;28332:31;;;-1:-1:-1;;28386:57:1;;28423:19;;28415:6;28386:57;:::i;:::-;28491:9;28483:6;28479:22;28474:2;28463:9;28459:18;28452:50;28525:44;28562:6;28554;28525:44;:::i;:::-;28511:58;;28617:9;28609:6;28605:22;28600:2;28589:9;28585:18;28578:50;28651:44;28688:6;28680;28651:44;:::i;:::-;-1:-1:-1;;;;;28732:32:1;;28726:3;28711:19;;28704:61;28802:22;;;28752:3;28781:19;;28774:51;28637:58;-1:-1:-1;28842:32:1;28637:58;28859:6;28842:32;:::i;:::-;28834:40;;;28923:6;28915;28911:19;28905:3;28894:9;28890:19;28883:48;27818:1119;;;;;;;;;;:::o

Swarm Source

ipfs://7e5f351ec549b4e61e172434c6bae0c133eae3735170cce2c6826226dc3c57f1

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.